В Linux SCHED_FIFO и SCHED_RR - PullRequest
       35

В Linux SCHED_FIFO и SCHED_RR

11 голосов
/ 01 января 2009

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

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

Моя программа выделяет под 3k (и использует mlockall ()), она записывает около 600 байт в xenbus, а затем спит, но я не могу сказать, сколько времени (в мс) потребуется для фактической записи данных. поскольку написанное зависит от файла конфигурации.

Заранее спасибо за любые предложения / объяснения.

Ответы [ 4 ]

10 голосов
/ 01 января 2009

Печально известная программа pchdtvr, которая захватывает сигналы цифрового телевидения, использует SCHED_FIFO, чтобы убедиться, что телевизионные пакеты записываются на диск, несмотря ни на что. Он может записывать 4 шоу одновременно, играя в Doom на старом компьютере.

Программа печально известна тем, что была выпущена под лицензией GPL, и автор попытался отозвать лицензию GPL задним числом . Этот акт спровоцировал небольшой огненный шторм. Во всяком случае, вы можете найти последнюю версию для изучения на http://frequal.com/pmn/pchdtvr.html.

7 голосов
/ 23 февраля 2011

SCHED_FIFO не может быть прервано (контекст переключен на другой процесс), если в очереди выполнения не появится другой процесс с более высоким приоритетом.

SCHED_RR может быть вытеснен квантом времени (задержка, отводимая процессу для выполнения).

Они оба являются приоритетами в режиме реального времени планировщиков на основе Linux.

2 голосов
/ 04 января 2009

Если все ваши другие задачи используют стандартный планировщик, это не имеет значения; SCHED_FIFO и SCHED_RR влияют только на планирование этих задач друг с другом.

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

Если у вас есть несколько задач с разными приоритетами, будет запущена только более высокая, если все они готовы к запуску (и имеется только одно ядро ​​процессора)

2 голосов
/ 01 января 2009

Я не эксперт по схемам планирования, но взгляну на

man sched_setscheduler

подробно описывает разницу между различными алгоритмами планирования и предоставляет ссылки на другие функции планирования. SCHED_FIFO на самом деле звучит довольно опасно, но описывается как наиболее агрессивное планирование:

Процесс SCHED_FIFO выполняется до тех пор, пока он не будет заблокирован запросом ввода-вывода, не прерван процессом с более высоким приоритетом или не вызовет sched_yield (2).

Остерегайтесь не блокировать вашу систему. Я бы лично провел несколько эмпирических тестов, чтобы выяснить, какой приоритет подходит лучше всего и как они себя ведут.

...