CPUQuota= и CPUWeight= в systemd
CPUQuota= ограничивает долю процессорного времени: значение в процентах, где 100% — одно ядро целиком. CPUWeight= задаёт относительный приоритет при конкуренции за процессор.
Что делает
Это правильный способ ограничить процессор, в отличие от LimitCPU=: тот ограничивает суммарное потреблённое время и рано или поздно убивает долго работающую службу. Квота же просто не даёт занять больше доли — служба работает сколько угодно, только медленнее.
Значение больше 100% допустимо и означает несколько ядер: CPUQuota=200% — два ядра. Вес влияет только при конкуренции: пока процессор свободен, служба использует его без ограничений.
Где ставится. В секции [Service]. Те же параметры доступны у срезов.
Значения
| Значение | Что происходит |
|---|---|
CPUQuota=50% | половина одного ядра. |
CPUQuota=400% | четыре ядра. |
CPUWeight=100 | вес по умолчанию; больше — выше приоритет при конкуренции. |
AllowedCPUs=0-3 | привязка к конкретным ядрам через контрольные группы. |
Пример
Фоновая задача, которая не должна мешать основным службам.
[Service]
CPUQuota=50%
CPUWeight=20
IOWeight=20
Nice=10
Четыре разных механизма в одном месте: квота ограничивает потолок, веса и приоритет решают, кто уступает при конкуренции.
Типичные ошибки
Квота ограничивает потолок и замедляет службу: для задач с крайним сроком это может быть хуже, чем конкуренция.
LimitCPU= — другое: он ограничивает суммарное время и убивает службу по его исчерпании.
Вес действует только при конкуренции: на свободной машине разницы не будет.
Связанные ошибки
- signal=XCPU и signal=XFSZ в systemdПроцесс службы убит из-за превышения предела процессорного времени (XCPU) или размера файла (XFSZ) из LimitCPU и LimitFSIZE.
- status=214/SETSCHEDULER в systemdКод 214/SETSCHEDULER: не удалось применить политику планирования процессора из CPUSchedulingPolicy=. Обычно из-за прав или диапазона приоритета.
Рядом стоящие параметры
Источники
- systemd.resource-control(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)