Устройство Linux / Объяснение

CPU cgroup v2: квота cpu.max и признаки throttling

Прочитайте квоту и период cpu.max, рассчитайте эквивалент CPU и проверьте изменение cpu.stat, не выдавая ограничение за гарантию процессорного времени.

Средний8 минОбщие принципы LinuxLinux · понятия и интерфейсыBash · pipeline semantics

Много ядер не означает большой бюджет контейнера

У машины несколько CPU, но отдельная нагрузка не получает ожидаемого ускорения. Один из вопросов — ограничен ли её бюджет времени. Число видимых процессоров само по себе этого не показывает.

Сначала подтвердите каталог группы приложения, затем сопоставьте конфигурацию и динамику счётчиков. Так вы отделите наличие ограничения от доказательства того, что оно действительно срабатывало в интересующий период.

Квота на период и накопленная статистика

В cpu.max два значения: квота и период в микросекундах. Их отношение задаёт эквивалент бюджета CPU; max означает отсутствие квоты на этом уровне. Это ограничение времени, а не закрепление за конкретным ядром и не гарантия получения времени.

В cpu.stat есть usage_usec; при доступном CPU-контроллере также читают nr_periods, nr_throttled и throttled_usec. Они накопленные. Смысл квоты относится к поддерживаемым классам планирования; этот разбор рассматривает обычную fair-class нагрузку.

Снимите конфигурацию и два показания

Подставьте каталог проверенной cgroup v2 вместо демонстрационного пути. Если cpu.max отсутствует или не читается, сначала уточните окружение, а не дописывайте файл.

Локальная Linux-система
cpu_group="/sys/fs/cgroup/example.slice/worker.scope"
cat "$cpu_group/cpu.max"
cat "$cpu_group/cpu.stat"
sleep 2
cat "$cpu_group/cpu.stat"

Рассчитайте бюджет и проверьте применение

Для самостоятельно заданной пары 75000 100000 отношение равно 0.75 CPU. Это не означает закрепление за тремя четвертями конкретного ядра. Несколько потоков могут расходовать общий бюджет; само количество потоков не увеличивает квоту.

Если nr_throttled не вырос между снимками, одно лишь конечное ненулевое число не доказывает торможение в эти две секунды. Если вырос, сопоставьте интервал с временем ответа приложения. Не делите throttled_usec на произвольный общий uptime и не называйте результат процентом потерь одного запроса.

Проверьте своё рассуждение

Задача: cpu.max содержит 200000 100000. Доказывает ли это, что программа всегда получит два CPU полностью?

Нет. Отношение задаёт потолок бюджета при этой конфигурации, а не резервирование. Конкуренция, ограничения родителей, доступные CPU и возможности распараллеливания программы влияют на фактическое выполнение.

Проверяйте общий контекст планирования

Квота, affinity и cpuset решают разные задачи. Из одного cpu.max нельзя вывести полный список доступных процессоров. В контейнере часть родительских ограничений может быть скрыта, а для realtime и иных классов нужен отдельный разбор; вывод этой страницы не следует переносить на них автоматически.

Технические источники

Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.

  • Документация ядра Linux — Control Group v2
  • Linux man-pages — cgroups(7)

Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.

Нужны cgroup v2, доступные cpu.max/cpu.stat и обычная fair-class нагрузка. Пример не изменяет квоту, affinity и планировщик; путь группы выбирается заранее.

От материала к практике

Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.

Поиск по Linux

Поиск локальный. ↑ ↓ — перейти к результату, Enter — открыть.

Навигация