2016-03-19 10 views
0

Чтобы ограничить количество доступных ядер для пользователя, я решил использовать cgroup. Итак, создав группу, мне нужно установить номер для cpu.shares. Предположим, что в системе 32 ядра, и я хочу ограничить пользователя только 4 ядрами. Каково правильное значение для этого параметра?ограничение количества процессоров для пользователя

Насколько я понимаю, я должен использовать 400, поскольку общее время процессора составляет 3200. Правильно ли я?

+0

У вас был вопрос: http://serverfault.com/questions/603861/limit-user-to-n-cpu-cores – SMohan

+0

Я смотрел http://unix.stackexchange.com/ Вопросы/5106 Какая разница между nice и cgroup? – mahmood

ответ

1

Прежде всего, вы должны узнать, что 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 в .

+0

Это не ограничивало количество процессоров. См. Мою новую тему на http://unix.stackexchange.com/questions/270938 – mahmood

Смежные вопросы