Политика SCHED_RR для управления расписанием (POSIX или Linux) - PullRequest
0 голосов
/ 20 декабря 2018

Моя конечная цель - провести несколько испытаний многопоточных программ в системах POSIX ( не только Linux);и я надеюсь разнообразить перемежения, вмешиваясь в графики.


ОБНОВЛЕНИЕ: пример для объяснения моей цели

Например, предположим, что программа в конечном итоге запустит два потока, T1, T2.Предположим, что на функциональном уровне (или других уровнях, таких как уровень команд, уровень базового блока) они имеют следующие трассы:

T1: A1 -> B1 -> C1
T2: A2 -> B2 -> C2

Во время фактического выполнения на одном компьютере может быть только несколько чередований.например, в крайнем случае, независимо от того, сколько раз программа выполняется, существует только одно чередование A1 -> B1 -> A2 -> B2 -> C2 -> C1 на одном компьютере;но возможно, что другое чередование A1 -> A2 -> B1 -> B2 -> C2 -> C1 происходит на другом компьютере, в то время как это чередование приводит к ошибке.Поэтому я надеюсь диверсифицировать перемежение путем добавления некоторого планирования, управляющего вызовами функций POSIX (у нас есть автоматический способ динамического изменения политики и приоритета планирования), чтобы после запуска нескольких версий этих программ, скорректированных по расписанию, это по крайней мере обеспечит больше чередований (но меня не волнует точное чередование).Например, с одной корректировкой он может выполнить трассировку A1 -> A2 -> B1 -> B2 -> C2 -> C1 с большей вероятностью;с другой настройкой, он может выполнить трассу A1 -> B1 -> A2 -> B2 -> C2 -> C1 или A1 -> B1 -> C1 -> A2 -> B2 -> C2 или другие трассы с большей вероятностью.В этом смысле мы увеличиваем охват тестированием.


В настоящее время я думаю о том, чтобы наладить некоторый код для адаптации с различными политиками и приоритетами планирования.И я наткнулся на SCHED_OTHER и SCHED_RR.

По умолчанию программы запускаются с SCHED_OTHER.Однако кажется, что стандарт POSIX не детализировал требования (см. здесь , хотя я не уверен, является ли это последним стандартом).Специально, это даже не говорит, является ли это круговым.И, читая Справочную страницу Linux Sched и Документация Red Hat , он говорит, что статический приоритет фиксирован 0, а динамический приоритет равен

на основе значения nice и увеличивается каждый раз, когда квант готов к запуску потока, но ему запрещен запуск по планировщику

Toмне, кажется, это говорит настройка хорошее значение все еще не может управлять приоритетом, как то, что SCHED_RR делает .
Эта другая важная проблема заключается в том, что установка хорошего значения для потока может быть невозможным для других систем POSIX, отличных от Linux

Согласно POSIX.1, хорошим значением является атрибут для процесса ;то есть потоки в процессе должны иметь хорошее значение.Однако в Linux хорошим значением является атрибут для каждого потока: разные потоки в одном и том же процессе могут иметь разные хорошие значения.

Поэтому я думаю, возможно ли использовать SCHED_RR(SCHED_FIFO не в моих соображениях, поскольку он не основан на квантах времени, поэтому сильно изменит расписание), чтобы имитировать поведение SCHED_OTHER, так как большинство программ, которые я хотел бы использовать в инструменте, используют политику SCHED_OTHER по умолчанию.Я выдвинул несколько наивных идей:

  1. Поскольку непривилегированные SCHED_OTHER программы имеют хорошее значение от 0 до 19, я могу обеспечить приоритетность для инструментальных программ SCHED_RR в этом диапазоне;если это все еще сильно изменило поведение, я могу еще больше сузить этот диапазон, например, 0 ~ 5.
  2. Я сделаю так, чтобы все потоков, которые я хотел бы исследовать, имелито же самое SCHED_RR.
  3. Я могу сделать time slice/quantum равным или похожим на значение, используемое SCHED_OTHER (например, в Linux, изменив значения внутри /proc/sys/kernel/sched_rr_timeslice_ms, см. в этом Q & A ) (Опять же, я не знаю, установить квант времени для SCHED_OTHER).

Могу ли я знать:

  1. Является ли эта идеяразумно для POSIX?
  2. Или, если это не является общим для POSIX, могу ли я узнать, корректно ли это только для Linux?
  3. Или если использование SCHED_RR все еще сильно меняет поведение по умолчанию SCHED_OTHER в Linux, каковы возможные способы сделать больше мероприятий по многопоточному планированию в Linux?

Другие соответствующие ссылки:

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