В Linux SCHED_FIFO и SCHED_RR

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
11
0
21 051
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

man sched_setscheduler

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

A SCHED_FIFO process runs until either it is blocked by an I/O request, it is preempted by a higher priority process, or it calls sched_yield(2).

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

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

Tim Post 01.01.2009 21:45

Я (мог бы) также вызвать sched_yield (), как только содержимое sysinfo () станет приемлемым ... т.е. система больше не будет испытывать нагрузку. Может быть, я буду придерживаться FIFO, но напишу логику для RT только тогда, когда система (или скоро будет) напряжена, а затем вернусь, когда ее спокойствие.

Tim Post 01.01.2009 21:50

хм, да, я думаю, что FIFO подходит для этой задачи.

Johannes Schaub - litb 01.01.2009 22:00
Ответ принят как подходящий

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

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

В самом деле забавно видеть, как разработчики выбирают лицензию, которую они не понимают ... на самом деле грустно, но забавно. Я собираюсь использовать FIFO, но «отступлю», когда программа может и должна уступить, и вернуться к нормальному планированию, или вернуться к RT, когда ситуация станет тяжелой. Я посмотрю, как это пойдет.

Tim Post 02.01.2009 11:58

@tinkertim: Фурор на Slashdot был невероятным. yro.slashdot.org/article.pl?no_d2=1&sid=08/01/26/0341210

Norman Ramsey 03.01.2009 02:21
Ссылка на архив
Samy Bencherif 05.02.2020 00:45

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

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

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

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

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

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

Другие вопросы по теме