Планирование и приоритет - раздел в таблице процессов top/htop, отражающий параметры, влияющие на порядок и условия выполнения процесса планировщиком ядра Linux. Значения формируются на основе данных /proc/[pid]/stat, /proc/[pid]/sched и системных вызовов sched_*.

PR (priority) - текущий динамический приоритет процесса, используемый планировщиком.

  • Для обычных задач (CFS) отображается как число, зависящее от nice.
  • Для задач реального времени соответствует диапазону RT-приоритетов.
  • Меньшее числовое значение означает более высокий приоритет выполнения.
  • Может изменяться ядром динамически (для CFS — на основе виртуального времени выполнения).

NI (nice value) - пользовательский коэффициент «вежливости», влияющий на относительную долю CPU.

  • Диапазон: от -20 (наивысший приоритет) до +19 (наименьший).
  • По умолчанию: 0.
  • Влияет только на процессы класса CFS.
  • Изменяется через nice или renice.
  • Не гарантирует жёсткий приоритет, а лишь смещает относительный вес процесса в планировщике.

RT priority - статический приоритет задач реального времени.

  • Диапазон: 1–99.
  • Используется для классов SCHED_FIFO и SCHED_RR.
  • Процессы с RT-приоритетом всегда выполняются раньше задач CFS.
  • Более высокое число означает более высокий приоритет.
  • Неправильная настройка может привести к starvation обычных задач.

CLS (scheduling class) - класс планирования, определяющий алгоритм распределения CPU.

Основные классы:

  • SCHED_OTHER (CFS) - стандартный класс. Использует Completely Fair Scheduler, распределяющий CPU пропорционально весам (зависимым от nice).
  • SCHED_FIFO - real-time, без квантования. Процесс выполняется, пока не освободит CPU или не будет вытеснен задачей с более высоким RT-приоритетом.
  • SCHED_RR - real-time с квантованием. Аналог FIFO, но с фиксированным тайм-слайсом.
  • SCHED_BATCH - для фоновых вычислений, минимизирует влияние на интерактивные задачи.
  • SCHED_IDLE - минимальный приоритет, используется только при полном отсутствии других задач.
  • SCHED_DEADLINE - дедлайновый планировщик на основе параметров runtime/period/deadline (не всегда отображается в top).

Эти параметры используются для управления CPU-bound нагрузкой, настройки поведения сервисов с требованиями к задержкам, изоляции фоновых задач и анализа проблем starvation или инверсии приоритетов.