Как приятно работать?


20

sched_setscheduler говорит:

Все планирование является вытесняющим: если процесс с более высоким статическим приоритетом становится готовым к выполнению, текущий запущенный процесс будет вытеснен и возвращен в список ожидания для его уровня статического приоритета.

в то время как setpriority говорит

Это приводит к тому, что очень низкие приятные значения (+19) действительно обеспечивают малую загрузку ЦП для процесса при любой другой нагрузке с более высоким приоритетом, а высокие высокие приятные значения (-20) доставляют большую часть ЦП приложениям, которым это требуется.

Итак, как изменение значения nice повлияет на выполнение программ? Это похоже на RT-планирование (где программа с более высоким значением nice будет прерывать программу с более низким значением nice)?


Вся информация в Интернете о том, как использовать niceи как изменить приоритет процесса. Никакая ссылка не объясняет, как именно работает процесс с другим приоритетом. Я даже не мог найти исходный код.

Ответы:


24

Доля процессорного времени, которую получает конкретный процесс, определяется относительной разницей в точности между ним и другими работающими процессами.

Планировщик Linux Fairly Scheduler (CFS) рассчитывает вес в зависимости от точности. Вес примерно равен 1024 / (1.25 ^ nice_value). При уменьшении приятного значения вес увеличивается в геометрической прогрессии. Временной интервал, выделенный для процесса, пропорционален весу процесса, деленному на общий вес всех запущенных процессов. Реализация КВПБ в kernel/sched/fair.c.

CFS имеет целевую задержку для продолжительности планирования. Меньшие целевые задержки дают лучшую интерактивность, но по мере того как целевые задержки уменьшаются, накладные расходы на переключение увеличиваются, таким образом уменьшая общую пропускную способность.

Например, при заданной задержке в 20 миллисекунд и двух запущенных процессах с одинаковой точностью, оба процесса будут работать по 10 миллисекунд каждый, прежде чем будут вытеснены в пользу другого процесса. Если существует 10 одинаковых процессов, каждый выполняется в течение 2 миллисекунд каждый.

Теперь рассмотрим два процесса: один с правильностью 0 (по умолчанию), а другой с правильностью 5. Пропорциональная разница между соответствующими весами составляет примерно 1/3, что означает, что процесс с более высоким приоритетом получает временной интервал приблизительно 15 миллисекунд. в то время как процесс с более низким приоритетом получает временной интервал 5 миллисекунд.

Наконец, рассмотрим два процесса со значениями 5 и 10 соответственно. Хотя абсолютная корректность в этом случае больше, относительные различия между значениями корректности такие же, как и в предыдущем примере, что дает идентичное деление по временным интервалам.


Просто то, что я искал. Благодарность! Позже я нашел эту статью, которая объясняет все в деталях, но не то, что вы только что написали.
BЈовић

Есть кое-что, чего я не понимаю ... какова роль vruntime?
Серфер на осень

@Surferonthefall vruntime - это внутренний механизм CFS, который отслеживает большое количество процессорного времени. Этот вопрос о хорошем значении, видимом для пространства пользователя. Если у вас есть вопрос о внутренностях CFS и вы не можете найти ответ где-либо еще , задайте новый вопрос
Томас Найман,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.