Systemd не уважает CPUQuota?

Вопрос или проблема

Я пытаюсь понять, что происходит, когда устанавливаю очень ограничительную квоту на использование ЦП для системного среза (в реальной жизни я бы не устанавливал такую ограничительную величину, это просто эксперимент):

[root@localhost system]# cd /usr/lib/systemd/system/
[root@localhost system]# cat system.slice
[Unit]
Description=Системный срез
Documentation=man:systemd.special(7)
Before=slices.target

[Slice]
CPUQuota=50%
AllowedCPUs=2-11
MemoryAccounting=true
MemoryMax=80%
ManagedOOMSwap=kill
ManagedOOMMemoryPressure=kill

Тем не менее, когда я запускаю stress-ng в этом срезе, похоже, что он использует больше указанного количества ЦП:

$ systemd-run --slice system.slice stress-ng [агрессивные аргументы]

В top я вижу, что некоторые потоки stress-ng используют более 50% ЦП. Это происходит, если я устанавливаю CPUQuota на более низкие значения – stress-ng вообще не кажется ограниченным.

Как мне это отладить, или мои ожидания не соответствуют действительности?

Ответ или решение

Почему systemd не учитывает CPUQuota?

Если вы сталкиваетесь с проблемой, когда systemd не уважает ограничение CPUQuota, это может быть связано с несколькими факторами. Давайте разберем вашу ситуацию по шагам.

Настройка и Ожидания

Вы правильно настроили ваш system.slice с параметрами для управления использованием ЦП. Применение CPUQuota=50% должно ограничить общее использование процессором до 50% от доступного времени на всех разрешенных ядрах. Тем не менее, в вашем случае stress-ng показывает использование более 50%. Причины для этого могут быть следующими:

  1. Неверное Применение Ограничений: Убедитесь, что ваш процесс действительно запущен в заданном срезе. Вы можете использовать команды, такие как systemctl status <имя_сервиса> или ps -o user,pid,%cpu,comm --sort=-%cpu | grep stress-ng, чтобы проверить, к какому срезу принадлежит процесс.

  2. Перезапуск Сервиса: После изменения конфигураций среза, не забудьте перезапустить systemd или, по крайней мере, применить конфигурацию, используя команду systemctl daemon-reload.

  3. Работа с Параметрами CPUQuota: Помните, что значение CPUQuota определяется относительно общего числа доступных ядер, а не отдельного. Если у вас есть, например, 10 ядер, 50% будет означать использование 5 ядер. Если программа разрабатывается с учетом работы на нескольких ядрах, она может запрашивать большее количество ресурсов и фактически превышать ваше ограничение.

Проверка Работы CPUQuota

Для детального анализа можно использовать утилиты, такие как cgroups или systemd-cgtop, чтобы увидеть, как именно применяются ограничения в реальном времени. Воспользуйтесь следующими командами:

  • cgroups: cat /sys/fs/cgroup/cpu/system.slice/stress-ng.service/cpu.cfs_quota_us и cat /sys/fs/cgroup/cpu/system.slice/stress-ng.service/cpu.cfs_period_us. Эти значения помогут вам понять, как система трактует ваши ограничения.

  • systemd-cgtop: Команда systemd-cgtop позволяет наблюдать за использованием ресурсов в реальном времени и может дать представление о том, как процессы распределяются по установленным лимитам.

Альтернативные Подходы и Рекомендации

Если после всех проверок и исправлений ограничения по-прежнему не работают, возможно, вам стоит рассмотреть альтернативные подходы:

  • Ограничение на Уровне Процесса: Вместо настройки на уровне среза попробуйте установить ограничения непосредственно для процесса, который вы запускаете. Используйте systemd-run --property=CPUQuota=50% stress-ng <аргументы>, чтобы задать ограничения сразу при запуске.

  • Проверка Докс-ментирации и Обновлений: Убедитесь, что ваша версия systemd актуальна. Иногда подобные ошибки корректируются в более поздних релизах.

  • Сообщество и Поддержка: Обратитесь в сообщество разработчиков или на форумы, такие как Stack Overflow или GitHub, чтобы получить помощь от других пользователей, возможно, столкнувшихся с аналогичными проблемами.

Заключение

Проблема с CPUQuota в systemd может быть вызвана различными факторами, включая неправильные настройки, отсутствие перезагрузки демонов или неправильно понятые ограничения. Следуйте указанным рекомендациям, чтобы диагностировать и устранить проблему. Не забудьте также держать систему и пакеты в актуальном состоянии для избежания потенциальных ошибок конфигурации.

Оцените материал
Добавить комментарий

Капча загружается...