Введение в управление планированием задач в Linux
Когда от операционной системы требуется минимальная задержка отклика (latency) и предсказуемое распределение процессорного времени, стандартных алгоритмов разделения ресурсов часто оказывается недостаточно. В таких сценариях системному администратору или DevOps-инженеру необходимо напрямую управлять политиками диспетчеризации и приоритетами реального времени (RT). Стандартная утилита chrt, входящая в набор util-linux, представляет собой мощный интерфейс для взаимодействия с механизмами ядра Linux. В этом руководстве мы разберем принципы функционирования планировщиков реального времени (FIFO и Round-Robin), подготовим систему Ubuntu, поменяем атрибуты работающего процесса и проконтролируем результат через стандартные средства мониторинга.
Проверка поддерживаемых политик ядра и доступных уровней приоритета
Прежде чем приступать к манипуляциям с диспетчером задач, обновим пакетные базы и установим пакеты util-linux и procps, в которых содержатся необходимые утилиты.

Основное назначение утилиты chrt — считывание и модификация атрибутов планирования для конкретных потоков исполнения. Запуск команды с ключом -m позволяет опросить ядро и вывести сводную таблицу всех реализованных алгоритмов вместе с граничными значениями доступных приоритетов.
⚙️ [Ключевые параметры утилиты]
-m : отображает перечень поддерживаемых ядром политик и допустимые границы приоритетов (min/max).-p : указывает целевой идентификатор процесса (PID) для чтения или изменения его параметров.-f : переключает планирование в режим реального времени FIFO (SCHED_FIFO).-r : задействует алгоритм кругового обслуживания с квантованием времени (SCHED_RR).-o : возвращает стандартную схему с динамическим разделением времени (SCHED_OTHER).-b : назначает режим пакетной обработки для фоновых вычислений (SCHED_BATCH).-i : переводит задачу в категорию фоновых процессов сверхнизкого приоритета (SCHED_IDLE).-d : активирует строгую модель планирования по дедлайнам (SCHED_DEADLINE).

Анализ текущих параметров диспетчеризации активного процесса
Чтобы наглядно исследовать поведение планировщика, запустим в фоновом режиме демонстрационный процесс sleep 600 &, который будет удерживать состояние ожидания в течение десяти минут.

Для удобства дальнейших манипуляций зафиксируем идентификатор только что созданного процесса в переменной окружения через команду TARGET_PID=$!.

Теперь обратимся к утилите chrt -p, чтобы выяснить, с какими параметрами ядро запустило наш экземпляр. В выводе отчетливо видно, что процессу по умолчанию присвоена стандартная политика SCHED_OTHER с нулевым базовым приоритетом (0).

Проверим эти же характеристики с другой стороны, применив команду ps с ключом -o. Сформируем выборку, отображающую класс планирования (CLS), относительный RT-приоритет (RTPRIO) и статический вес задачи в очереди ядра (PRI). Как и ожидалось, поле CLS содержит значение TS (Timesharing), колонка RTPRIO пустует (-), а внутренний приоритет PRI зафиксирован на базовой отметке 19.

Перевод задачи на политики реального времени (SCHED_FIFO и SCHED_RR)
Повысим статус процесса до бескомпромиссного режима реального времени, выполнив sudo chrt -f -p 50 $TARGET_PID. Эта команда устанавливает дисциплину SCHED_FIFO и задает уровень приоритета 50. Поскольку подобные изменения кардинально влияют на диспетчеризацию CPU и могут привести к голоданию непривилегированных системных служб, операция требует прав суперпользователя (sudo).

Убедимся в успешности применения настроек повторным вызовом chrt -p. Вывод подтверждает: текущей схемой диспетчеризации стала SCHED_FIFO, а шкала реального времени зафиксирована на уровне 50.

Далее опробуем циклическую модель реального времени, запустив sudo chrt -r -p 30 $TARGET_PID. Мы перевели процесс на алгоритм SCHED_RR с приоритетом 30. При такой схеме задачи с одинаковым весом получают фиксированные кванты времени (time slices) и сменяют друг друга на процессоре по принципу карусели, исключая монопольный захват вычислительного ядра одной из них.

Проведем аудит системных атрибутов через утилиту ps с детализированным форматированием полей CLS, RTPRIO и PRI. Класс обслуживания теперь отображается как RR, значение в графе RTPRIO равно 30, а расчетный приоритет в ядре (PRI) скорректирован до 70.

Инициализация фоновых задач с RT-политикой и освобождение ресурсов
Утилита chrt позволяет не только изменять параметры уже активных задач, но и сразу порождать новые процессы с необходимыми real-time атрибутами. Инициируем команду sudo chrt -r 25 sleep 300 &, благодаря чему таймер sleep на 300 секунд начнет исполнение непосредственно в классе SCHED_RR с уровнем приоритета 25.

Сверим состояние всех запущенных экземпляров при помощи конвейера ps -eo pid,cls,rtprio,comm | grep '[s]leep'. Отчет подтверждает, что оба фоновых таймера успешно функционируют под управлением механизма Round-Robin (RR), обладая ранее заданными RT-приоритетами 30 и 25.

Завершив практические эксперименты, освободим ресурсы сервера и удалим тестовые фоновые потоки командой kill -9 $TARGET_PID && pkill -f 'sleep 300'. Все созданные нами процессы будут принудительно остановлены, возвращая систему в исходное чистое состояние.

Мы подробно рассмотрели практическое использование команды chrt для тонкого конфигурирования очередей исполнения и приоритетов ядра Linux. Полученные навыки помогут обеспечить стабильную и предсказуемую работу сервисов, критичных к времени отклика, а также грамотно распределить аппаратные мощности под пиковыми нагрузками.