Влияет ли sched_setscheduler () / sched_getscheduler () только на политику планирования указанного процесса и его дочерних процессов? - PullRequest
0 голосов
/ 12 апреля 2019

Я не совсем понимаю, как sched_setscheduler() работает в Linux.

Насколько я понимаю, Linux использует CFS (SCHED_NORMAL) для планирования процессов ядра. Когда пользовательское пространство запускает программу (процесс), вызывается вызов clone() для создания соответствующего объекта планирования в пространстве ядра.

Итак, предположим, что есть пользовательский процесс A и процесс B. Процесс A вызывает sched_setscheduler(pid_A, SCHED_RR) и порождает дочерние процессы A1, A2. Процесс B вызывает sched_setscheduler(pid_B, SCHED_NORMAL) и порождает дочерние процессы B1, B2.

Как Linux будет планировать обработку A и B в этом случае, поскольку они используют разные политики планирования? Использует ли Linux свою внутреннюю политику планирования по умолчанию для выбора между A и B, но оставляют A, A2, A1 конкурировать друг с другом, используя SCHED_RR, а B, B1, B2 с SCHED_NORMAL?

1 Ответ

1 голос
/ 12 апреля 2019

Ядро Linux имеет серию «классов планирования», которые представляют собой модули, которые определяют, какой поток должен запускаться, когда ядро ​​бездействует.

Поскольку SCHED_RR является классом планирования в реальном времени, он получитрешить, что планировать на простое ядро, до того, как SCHED_NORMAL сделает.Это означает, что в некотором смысле A и его дети имеют строгий приоритет над B и его детьми.

Однако я считаю, что Linux резервирует что-то вроде 5% ЦП для классов планирования не в реальном времени, поэтому B и его дочерние элементы не должны испытывать недостаток ЦП.

...