Управление ядром Linux реального времени - RT-Linux tweaking

Привязка задачи к процессору
Если у вас многоядерная или многопроцессорная машина, есть смысл некоторые задачи раскидать по процессорам принудительно. Для этих целей есть программа taskset.

# taskset -p 1 5907
Получаем в ответ:
pid 5907's current affinity mask: 1
pid 5907's new affinity mask: 2
Задача, таким образом, перекинута на второй процессор.


Изменение приоритета процессов
Чтобы задача получила приоритет реального времени, следует выполнить команду:
# chrt -p 6091
В ответ должны получить:
pid 6091's current scheduling policy: SCHED_OTHER
pid 6091's current scheduling priority: 0
Это значит, что задача теперь будет выполняться неотложно, с минимально возможными задержками (важно при точной синхронизации событий - например, открывание и закрывание затвора фотокамеры при работе с импульсным лазером).


Изменение приоритета ввода-вывода
Много задач требуют не только точного интервала исполнения (открывание\закрывание затвора), но и чтобы данные перекачивались как можно быстрее. Для этого можно отдать приоритет ввода-вывода наиболее критичной задаче. Другим задачам можно, наоборот, зарезать на время приоритет обращения к дисковой подсистеме.

Возможно выставить следующие типы приоритетов: Бездействие (Idle), Наилучшая работа (Best effort) и Реальное время (Real time).


Приоритет Idle
Программа с приоритетом idle получит диступ к диску только тогда, когда никакие другие программы к диску не обращаются в течение определённого времени.

Приоритет Best effort
Этот приоритет выбирается по умолчанию для любого процесса, который не требует иного приоритета ввода-вывода. Программы наследуют установки процессорного приоритета для приоритета ввода-вывода, можно так же передавать аргумент от 0 (высокий приоритет) до 7 (низкий приоритет). Ресурсы между приложения с одинаковым приортетом best effort распределяются по принципу "каждой сестре по серьге".

Приоритет Real time
Задачам с приоритетом реального времени выделяется доступ к диску в первую очередь и вне зависимости от происходящего в системе. Поэтому приоритет реального времени следуется использовать осторожно, чтобы не перекрыть кислород другим процессам. Как и в случае приоритета best effort, предусмотрено 8 уровней приоритета, от 0 (высокий приоритет) до 7 (низкий приоритет).

Для выбора приоритета следует указывать параметр -с и значения:
-с1 --- реальное время (real time)
-с2 --- наилучшая работа (best effort)

-с3 --- бездействие (idle)
Для указания параметра приоритета используется ключ -nM, где M - число от 0 (высокий приоритет) до 7 (низкий приоритет).

Например, чтобы задать приоритет реального времени с высшим приоритетом для ввода-вывода приложения с идентификатором
# ionice -c2 -n0 -p5812

После этого приложению уже никто не помешает монопольно использовать ввод-вывод.

Источник

free-templates.ru