2013-10-04 3 views
5

Я читал о планировщике ядра Linux и CFS в ядре. Я столкнулся с vruntime (виртуальная среда выполнения), которая является основной концепцией планировщика CFS. Я прочитал от «« Развитие ядра Linux », а также из других блогов в Интернете, но не смог понять основные вычисления за vruntime. Делает vruntime принадлежит к определенному процессу или относится к группе процессов с такими же хорошими значениями. Что такое весовой коэффициент и как он рассчитан? Я прошел через все эти понятия, но не мог понять. Также в чем разница между vruntime и * min_vruntime *?Что такое понятие vruntime в CFS

ответ

9

vruntime is per-thread; это член, вложенный в task_struct.

По существу, vruntime является мерой «времени выполнения» потока - количества времени, затраченного на процессор. Весь смысл КВПБ должен быть справедливым для всех; следовательно, альго-тип сводится к простой вещи: (среди задач в заданном runqueue) задача с наименьшим временем выполнения - это задача, которую большинство заслуживает запуска, поэтому выберите ее как «next». (Фактическая реализация выполняется с использованием rbtree для эффективности).

Принимая во внимание различные факторы - как приоритет, приятное значение, группы и т. Д. - вычисление vruntime не так прямолинейно, как простое приращение. Я бы предложил прочитать соответствующий раздел в "Professional Linux Kernel Architecture", Mauerer, Wrox Press - это объясняется очень подробно.

ПЛ см. Ниже краткую попытку обобщить некоторые из этих данных.

Другой ресурс: Documentation/scheduler/sched-design-CFS.txt

Краткое резюме - расчет vruntime: (по книге)

  • Большая часть работы выполняется в ядре/sched_fair.c: __ update_curr ()

  • Вызов таймера

  • обновление физическое и виртуальное время «текущее» только провел на процессоре

  • Для задач, которые выполняются с приоритетом по умолчанию, то есть, хорошее значение 0, физическое и виртуальное время, проведенное идентично

  • Не поэтому для задач с другими приоритетными (хорошими) уровнями; таким образом, вычисление vruntime зависит от приоритета тока с использованием весового коэффициента нагрузки

    delta_exec = (без знака long) (теперь - curr-> exec_start); // ... delta_exec_weighted = calc_delta_fair (delta_exec, curr); curr-> vruntime + = delta_exec_weighted;

Пренебрегая некоторые округления и переполнения проверки, какие calc_delta_fair делает это вычислить значение, заданное по следующей формуле:

delta_exec_weighed = delta_exec * (NICE_0_LOAD/curr->load.weight) 

Дело в том, что более важные задачи (с более низким красивым значением) будет иметь больший вес ; Таким образом, в соответствии с приведенными выше уравнениями, счетчик времени, учтенный для них, будет меньше (таким образом, они будут помещены влево слева на rbtree!).

+0

Какова цель min_vruntime? – iammurtaza

+0

@iammurtaza: min vruntime (я беру перестраиваемое/proc/sys/kernel/sched_min_granularity_ns), как правило, (по крайней мере, на Ubuntu в последнее время) ~ 2,25 мс. Если этого не было, две задачи могут «пинг-понг» каждые несколько микросекунд включать и выключать процессор. Минимальная гарантия на пребывание на процессоре необходима для смягчения этого поведения. – kaiwan

1

vruntime - это виртуальная среда выполнения процесса, которая помогает отслеживать, сколько времени прошло процесс. Vruntime является членом структуры sched_entity, определенной в include/linux/sched.h

min_vruntime представляет собой минимальное время запуска cfs runqueue. Он представляет собой минимум всего времени выполнения процессов, запланированных на этом cfs runqueue. Min_vruntime является членом структуры cfs_rq, определенной в include/linux/sched.h

Цель min_vruntime - выбрать следующий процесс в runfe cfs для запуска. Чтобы быть справедливым во всех процессах, планировщик CFS выбирает процесс с минимальным временем выполнения для выполнения в первую очередь.

Ссылка включать/Linux/sched.h является http://lxr.free-electrons.com/source/include/linux/sched.h

Смежные вопросы