Прежде всего, вы должны узнать, что cpu.shares
не установлен hard ограничение количества ядер. Это общий параметр, который используется для учета потребляемых ресурсов ЦП в планировщике CFS.
I.e. если в системе два приложения, потраченные на 1 секунду времени процессора, CFS установит vruntime
на 10 /cpu.shares
, так что им обоим нужно больше времени процессора, у них есть равные шансы получить его.
Теперь, если вы настраиваете cpu.shares
меньших значения (т.е. 128
) для первого применения, она получит vruntime
= 10 /128 = 7,8 * 10 , а вторые один (с нерегулируемой стоимостью акций) будет получать vruntime
= 10 /1024 = 0,9 * 10 . Процесс с меньшим vruntime
будет выбран для выполнения на CPU первым, так что второе приложение может выполнить еще 7 секунд, если CPU не будет отдано первому приложению.
Обратите внимание, что эти приоритеты работают только в присутствии второго жадно-процессорного приложения. Если работают только приложения «ограниченного» пользователя, планировщик CFS помещает их в CPU, поэтому они могут занимать все 32 ядра.
Наконец, отвечая на первый вопрос, ваша задача чисто математическая:
x 4
-------- = ----
1024 + x 32
Вы должны установить cpu.shares
в .
У вас был вопрос: http://serverfault.com/questions/603861/limit-user-to-n-cpu-cores – SMohan
Я смотрел http://unix.stackexchange.com/ Вопросы/5106 Какая разница между nice и cgroup? – mahmood