Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.2. Планирование занятости процессоров

Планировщик распределяет нагрузку между процессорами в соответствии с существующими правилами, поддерживая их максимальную занятость. Правила определяют время выполнения потока на одном процессорном ядре.
Политики планирования подразделяются на две категории:
  1. Планирование в реальном времени
    • SCHED_FIFO
    • SCHED_RR
  2. Стандартное планирование
    • SCHED_OTHER
    • SCHED_BATCH
    • SCHED_IDLE

4.2.1. Планирование в реальном времени

Планирование выполнения потоков реального времени выполняется в первую очередь.
Эти правила применяются к критическим процессам, которые должны завершены как можно быстрее.
SCHED_FIFO
Это правило присваивает потокам фиксированный приоритет от 1 до 99. Планировщик проверяет список потоков SCHED_FIFO и запускает поток с наивысшим приоритетом. Поток будет выполняться до тех пор, пока не завершит работу или не будет вытеснен другим потоком с более высоким приоритетом.
Даже потоки с наименьшим приоритетом будут выполняться до потоков других типов. При наличии единственного потока, работающего в реальном времени, значение SCHED_FIFO будет игнорироваться.
SCHED_RR
Это циклический вариант правила SCHED_FIFO. Потокам также присваивается приоритет от 1 до 99, и потоки с одинаковым приоритетом будут последовательно выполняться в рамках выделенного интервала. Пользователь не может изменить интервал, но может его узнать при помощи sched_rr_get_interval(2). Обычно это правило применяется при наличии потоков с одинаковым приоритетом.
Подробную информацию о планировании выполнения потоков можно найти в описании стандарта IEEE 1003.1 POSIX по адресу http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_08.html.
Изначально рекомендуется выбирать низкий приоритет и увеличивать его только в том случае, если была обнаружена заметная задержка при выполнении. Потокам реального времени не выделяются фрагменты времени; потоки SCHED_FIFO будут выполняться до тех пор, пока они не завершат работу или не будут вытеснены другими потоками с более высоким приоритетом. Не рекомендуется присваивать значение 99, так как высокий приоритет обычно имеют процессы миграции и мониторинга. Если они будут вытеснены другими процессами, это может привести к блокированию в однопроцессорных системах.
В ядре Linux правило SCHED_FIFO также предусматривает механизм ограничения, который предотвращает монопольное использование процессорных ресурсов. Его конфигурацию можно изменить с помощью:
/proc/sys/kernel/sched_rt_period_us
Интервал времени в микросекундах, характеризующий 100% полосы пропускания. По умолчанию равен 1000000 мкс (1 сек.).
/proc/sys/kernel/sched_rt_runtime_us
Интервал выполнения потоков реального времени (в микросекундах). По умолчанию равен 950000 мкс, что эквивалентно 0.95 сек.