Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
4.2. Планирование занятости процессоров
Планировщик распределяет нагрузку между процессорами в соответствии с существующими правилами, поддерживая их максимальную занятость. Правила определяют время выполнения потока на одном процессорном ядре.
Политики планирования подразделяются на две категории:
- Планирование в реальном времени
- SCHED_FIFO
- SCHED_RR
- Стандартное планирование
- 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 сек.