Узнаём класс, установленный по умолчанию, а так же список используемых (именно используемых, а не доступных) классов:
$ priocntl -d TIME SHARING PROCESSES: PID[/LWP] TSUPRILIM TSUPRI 558743 0 0 $ dispadmin -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) SDC (System Duty-Cycle Class) FX (Fixed Priority)
Как видим, по умолчанию используется TS.
Информацию о том, как именно сконфигурированы классы, можно получить так:
# priocntl -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) Configured TS User Priority Range: -60 through 60 SDC (System Duty-Cycle Class) FX (Fixed priority) Configured FX User Priority Range: 0 through 60 FSS (Fair Share) Configured FSS User Priority Range: -60 through 60
Меняем дефолтное на FSS:
# dispadmin -d FSS # dispadmin -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) SDC (System Duty-Cycle Class) FX (Fixed Priority) FSS (Fair Share)
А теперь нужно перенести все процессы в класс FSS:
# priocntl -s -c FSS -i pid 1; priocntl -s -c FSS -i all
После переноса, нужно сконфиругировать global-зону, выделив ей определённые доли cpu-shares:
# zonecfg -z global set cpu-shares=100 # zonecfg -z global info cpu-shares [cpu-shares: 100]
Но это означает лишь то, что наши значения применяться только при следующей перезагрузке сервера. А если нам нужно налету? Меняем:
# prctl -n zone.cpu-shares -t privileged -i zone global zone: 0: global NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT zone.cpu-shares usage 1 privileged 1 - none # prctl -n zone.cpu-shares -t privileged -v 100 -r -i zone global # prctl -n zone.cpu-shares -t privileged -i zone global zone: 0: global NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT zone.cpu-shares usage 100 privileged 100 - none
Точно так же можно менять и для не-global зон.