Динамическое планирование процессов в Ubuntu

#linux #ubuntu #linux-kernel #scheduler #scheduled-tasks

#linux #ubuntu #linux-ядро #планировщик #запланированные задачи

Вопрос:

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

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

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

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

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

Ответ №1:

В Linux версии 2.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 будет проще играть.

Комментарии:

1. спасибо sarnoid … это помогает…. итак, вы имеете в виду, что после 2.6.23 у вас есть более сложный планировщик для игры. я постараюсь придерживаться более старой версии.