#libcgroup — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #libcgroup, aggregated by home.social.
-
Если надо ограничить аппетит какой-то программы в плане #CPU или же по памяти, то в случае #linux для этого прекрасно подходит #cgroups. Вот только в системах на #systemd нет смысла:- руками создавать в /sys/fs/cgroup/
- пользоваться #libcgroup (cgreate/cgset/cgexec).
У некоторых дистрибутивов последнее это вообще deprecated — у RHEL и у SLES.
Легко и просто
Вся операция умещается в запуск через:systemd-run --scope -p CPUQuota=15% /usr/bin/binaryname
Или же чуть более продвинуто:systemd-run -u username -p CPUQuota=50% -p MemoryMax=100M /usr/bin/binaryname
А если руками?
Это когда:# mkdir /sys/fs/cgroup/lalala
# echo "50000 100000" > /sys/fs/cgroup/lalala/cpu.max
# echo "100M" > /sys/fs/cgroup/lalala/memory.max
# echo $$ >> /sys/fs/cgroup/lalala/cgroup.procs
# /usr/bin/binaryname
# rmdir /sys/fs/cgroup/lalala
При этом ещё и помнить, что если два ядра на #ЦПУ, то возможно и «200000 100000», а потомуecho "50000 100000"будет давать 25%, а не 50% как на компе с одним ядром.
А используя #libcgroup ?
Это когда:# cgexec -g cpu,memory:tatata /usr/bin/binaryname
# cgdelete -g cpu,memory:/tatata
Или же долго-нудно, почти в ручном режиме:
Далее, два варианта действий, как и при «ручном»:# cgcreate -g cpu,memory:/tatata
# cgset -r cpu.max="50000 100000" tatata
# cgset -r memory.max="100M" tatata- текущий shell перевести в tatata и выполнить из под него binaryname:
# echo $$ >> /sys/fs/cgroup/lalala/cgroup.procs
# /usr/bin/binaryname
# rmdir /sys/fs/cgroup/lalala - запустив процесс binaryname и переместить его по PID в tatata:
# BIN_PID=$(pgrep -xo hog)
# cgclassify -g cpu,memory:tatata ${BIN_PID}
# cgdelete -g cpu,memory:/tatata
На фоне всего этого использованиеsystemd-runне только соблюдает принцип одного менеджера файловой системы #cgroupfs в системе, но и ощутимо проще для пользователя.
Кстати, ограничение игр проще делать через «Frame limit» — задав максимальное количество кадров в секунду. Например, поставив 60fps или 90fps, 120fps, в зависимости от того, с какой частотой монитор работает. Перестают жрать ЦПУ высчитывая несколько тысяч fps.
#lang_ru