#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 у вас есть более сложный планировщик для игры. я постараюсь придерживаться более старой версии.