Практическое использование Linux real приоритеты планирования времени (SCHED_FIFO и SCHED_RR)?

Я экспериментирую с SCHED_FIFOи наблюдаю неожиданное поведение. Сервер, который я использую, имеет 12 ядер с отключенной гиперпоточностью. Все настраиваемые прерывания настроены на выполнение на ЦП 0.

Моя программа при запуске создает поток для задач с более низким приоритетом, используя библиотеку pthreads без изменения политики планирования с привязкой к ЦП, установленной на ядро ​​0.Затем родительский поток устанавливает привязку ЦП к ядру 3 и собственную политику планирования на SCHED_FIFO, используя sched_setscheduler()с нулевым pid и приоритетом 1, а затем запускает неблокирующий цикл.

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

  1. Что я упускаю?
  2. Будет ли планировщик по-прежнему пытаться запускать другие процессы на ядре, работающем в режиме реального времени? Если да, то есть ли способ предотвратить это?
  3. Будет ли установка политики планирования с помощью sched_setscheduler()в родительском элементе изменять поведение дочернего элемента, который был создан ранее?

Заранее спасибо.

6
задан user 22 December 2014 в 14:48
поделиться