В настоящее время я использую cgroups (через /sbin/cgrulesengd
) в CentOS 6, чтобы ограничить использование ЦП для процессов с именами процессов zip
, unzip
и gpg
.
Я добиваюсь этого через это в /etc/cgconfig.conf
определить некоторые контрольные группы ...
group limitcpu {
cpu {
cpu.shares=256;
}
}
group limitio {
blkio {
blkio.throttle.read_bps_device = "9:1 5292880";
blkio.throttle.write_bps_device = "9:1 5292880";
}
}
... и это в /etc/cgrules.conf
чтобы затем поместить процессы в эти группы:
*:zip cpu,blkio limitio/,limitcpu/
*:unzip cpu,blkio limitio/,limitcpu/
*:gpg cpu,blkio limitio/,limitcpu/
Теперь я хочу воспроизвести ту же настройку на CentOS 7. В документации CentOS 7 говорится, что этот способ работы устарел (https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/chap-using_libcgroup_tools). В CentOS 7 кажется, что вам следует использовать средства из systemd (https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/chap-using_control_groups).
Моя проблема в том, что документация (и другие ресурсы в Google) не объясняют, как достичь моей цели. В основном они концентрируются на ограничении systemd Сервисы или процессы, запуск которых вы контролируете.
Однако в моих настройках пользователи запускают упомянутые двоичные файлы различными способами (некоторые косвенно через другие инструменты, которые они используют), и я специально хочу ограничить запуск двоичных файлов таким образом (т.е. вежливо просить пользователей изменить команды, которые они запускают, это не решение).
Как это может быть сделано?
Я думаю, для этого вам нужно написать сервис, который будет следить за новыми zip
/unzip
/gpg
процессов и перемещает их в выделенный фрагмент (или область действия), как только они появляются (запишите их PID, например, в. /sys/fs/cgroup/limitZUG.slice/cgroup.procs
, предполагая cgroups v2). Кажется, в основном это то, что cgrulesengd
действительно в вашей текущей настройке (хотя я с ней не знаком), за исключением того, что cgroup, в которую она перемещает процессы, будет настроена systemd как модуль среза (или модуль области видимости, динамически создаваемый службой).
(Я также думал о переопределении zip
/unzip
/gpg
в обертки вокруг systemd-run -p CPUShares=256 … /usr/bin/…
через скрипты в /usr/local/bin/
, но это означает, что вам нужно дать непривилегированным пользователям возможность создавать новые системные службы с systemd-run
, потому что управление ресурсами, похоже, недоступно в пользовательских единицах: я думаю, что у менеджера пользователей нет разрешения на его настройку.)
Реализация systemd (по крайней мере, в мире Ubuntu) еще не созрела. (Другими словами, игнорируйте устаревшую вещь и продолжайте делать то, что вы делали в CentOS 6)