Страница 1 из 1

chrt - запуск в реальном времени

Добавлено: 24 дек 2014, 16:14
Olej
Как известно, все запускаемые процессы в Linux запускаются со стандартной политикой диспетчирования (SCHED_OTHER) ... у которых всех приоритет = 0, и только параметр nice, в какой-то мере (весьма слабой) влияет на приоритетность выполнения.
Т.е. в точной терминологии, многозадачная система Linux не является ОС с приоритетным планированием.

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

Код: Выделить всё

$ sudo chrt -r 50 bash 
# ps 
  PID TTY          TIME CMD 
 3068 pts/2    00:00:00 sudo 
 3074 pts/2    00:00:00 bash 
 3100 pts/2    00:00:00 ps 
# chrt -p 3074 
pid 3074's current scheduling policy: SCHED_RR 
pid 3074's current scheduling priority: 50 
# chrt -r -p 5 3074 
# chrt -p 3074 
pid 3074's current scheduling policy: SCHED_RR 
pid 3074's current scheduling priority: 5 
Командой chrt можно не только запускать процесс, но и изменять параметры диспетчирования для уже выполняющегося процесса:

Код: Выделить всё

$ sudo chrt -f 20 bash 
# ps 
  PID TTY          TIME CMD 
 3288 pts/2    00:00:00 sudo 
 3294 pts/2    00:00:00 bash 
 3320 pts/2    00:00:00 ps 
# chrt -p 3294 
pid 3294's current scheduling policy: SCHED_FIFO 
pid 3294's current scheduling priority: 20 
# chrt -r -p -r 10 3294 
# chrt -p 3294 
pid 3294's current scheduling policy: SCHED_RR 
pid 3294's current scheduling priority: 10 
# chrt -r -p -o 0 3294 
# chrt -p 3294 
pid 3294's current scheduling policy: SCHED_OTHER 
pid 3294's current scheduling priority: 0 
# exit 
Естественно, что все эти трюки можно проделывать только с правами root (слишком серьёзные последствия).

Команда имеет и дополнительные опции, например, показывает максимальные границы приоритетов для разных дисциплин планирования:

Код: Выделить всё

$ chrt --max 
SCHED_OTHER min/max priority    : 0/0 
SCHED_FIFO min/max priority     : 1/99 
SCHED_RR min/max priority       : 1/99 
SCHED_BATCH min/max priority    : 0/0 
SCHED_IDLE min/max priority     : 0/0