Динамическое планирование процессов в Ubuntu - PullRequest
2 голосов
/ 07 ноября 2011

Я хотел изменить код ядра Linux, который динамически меняет приоритет процесса.

У меня Ubuntu 10.10 и я скачал linux 2.6.37. Я обнаружил, что в версии 2.6.37 нет концепции динамического изменения приоритета процесса. [В CentOS есть функция recalc_task_prio (), которая динамически изменяет приоритет процесса].

Я хотел бы знать, знает ли кто-нибудь о какой-либо другой версии ядра Ubuntu, которая поддерживает функциональные возможности динамического изменения приоритета процесса (на основе наказания за приоритет процесса, если задача связана с процессором и потребляет много процессора)?

Я в основном ссылаюсь на эту ссылку - http://www.ibm.com/developerworks/linux/library/l-scheduler/

Заранее спасибо,

1 Ответ

3 голосов
/ 07 ноября 2011

В Linux v2.6.23 был интегрирован новый планировщик CFS , который меньше полагается на HZ и больше на наносекунды времени выполнения.

Все процессы хранятся в красно-черном дереве , что удешевляет O (1) , чтобы найти самую левую (и, следовательно, самую достойную) задачу для выполнения. Периодически (task_tick()) система проверяет, может ли другой процесс быть «более заслуживающим внимания», и опережает выполнение задачи. (Конечно, задачи могут выдавать (yield_task()) самостоятельно, а вновь запускаемые задачи могут вытеснять запущенную задачу (check_preempt_curr()). Время, затраченное на выполнение процесса, учитывается и снова вставляется в дерево. O (log (N)) , чтобы найти новое место размещения в дереве RB.

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

Для получения более подробной информации обязательно прочитайте документацию Documentation/scheduler/ и файлы реализации kernel/sched*.

Если бы это был мой домашний проект, чтобы поиграть с планировщиками (как это было принято в старину), я бы серьезно отнесся к добавлению нового класса планирования в реальном времени, например SCHED_FIFO или SCHED_RR (в зависимости от того, какой ближе к планированию планировщика, о котором идет речь, и таким образом возиться с приоритетами задач. Это может быть немного круто для вводного курса по ОС, чтобы сделать это - с более старым ядром Linux или более старым BSD можно было бы легче играть.

...