Как я могу динамически распределять ресурсы процессора процессам в Linux? - PullRequest
1 голос
/ 07 марта 2012

В Linux (наша система - CentOS5), возможно ли выделять ресурсы процессора процессам? Например, у меня есть одно приложение tomcat, я хочу, чтобы у всех процессов и потоков, вызванных tomcat, было p% от общего числа циклов ЦП, независимо от того, сколько других приложений запущено. И я хочу настроить p% динамически (например, в этот временной интервал tomcat имеет 40% циклов ЦП, а в следующий временной интервал - 70% циклов ЦП).

Если вышесказанное возможно, возможно ли это сделать консервативно? Я имею в виду, что хотя tomcat имеет 40% циклов ЦП, но если его текущая рабочая нагрузка потребляет только 10%, другие приложения могут использовать оставшиеся 30% циклов ЦП.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 08 марта 2012

Если вы можете использовать RHEL6 / CentOS6 (или обновить ядро), вы можете использовать cgroup, чтобы делать то, что вы хотите. http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt

https://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html

2 голосов
/ 07 марта 2012

Вы знакомы с инструментами, хорошими и хорошими уровнями?

Вместо того, чтобы пытаться диктовать точные проценты, вы можете захотеть проверить уровни милости и как их установить в CentOS.Ваши приложения будут работать, как ожидается, с процессами с более высоким приоритетом, способными требовать больше ресурсов, в то время как процессы с более низким приоритетом не будут страдать от нехватки ресурсов, даже если процесс с более высоким приоритетом простаивает.

1 голос
/ 08 марта 2012

Если вы действительно хотели это сделать (и предложение Эснидера расставить приоритеты с использованием хороших уровней почти наверняка будет лучшим решением для всего, чего вы на самом деле пытаетесь достичь) вы будете рады сделать это с гранулярностью 1 / число процессоров (например, в 8-ядерных системах, укажите коэффициент использования, кратный 12,5% общего ресурса процессора), тогда вы можете использовать sched_setaffinity установить маску привязки к процессору для процесса, которым вы хотите управлять (вы можете сделать это из другого процесса). (На самом деле, я думаю, вам нужно идентифицировать все потоки этого процесса и вызывать его для каждого из них).

В качестве альтернативы, cpusets может представлять интерес, но я не знаю, что нужно для их включения или насколько они динамичны.

...