Полная команда, которую вы хотите:
chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
Команда chrt
в начале переключит вещи в класс пакетного планирования, что эквивалентно добавлению 0.5 к значению nice. Опция -n для ionice является простым приоритетом для опций realtime ( -c 1
) и best-Усилия ( -c 2
), причем более низкие значения имеют более высокий приоритет, как и хорошие значения (но в диапазоне 0-7). Однако команда ionice не является строго необходимой, поскольку класс и приоритет планирования ввода-вывода по умолчанию определяются из параметров планирования ЦП и nice -n 19
подразумевают ionice -c 2 -n 7
.
Однако вы можете получить абсолютное минимальное использование ресурсов, установив классы планирования ЦП и В / В в состояние ожидания. В обоих случаях «незанятые» планировщики на самом деле не являются незанятыми, и вы все равно сможете использовать ресурсы, просто все будет иметь более высокий приоритет.
Для класса планирования ЦП это также использует chrt
команду, хотя и без необходимости nice
(приоритет должен быть установлен 0
в классе планирования ожидания), и выглядит следующим образом:
chrt -i 0 {command or PID}
Команда nice
в Linux отражает версию SVR4, что означает, что она не может изменить класс планирования, только хорошее значение (которое также ведет себя иначе в Linux, чем в классической UNIX, но это немного OT). Поскольку исходные альтернативные классы планирования были в реальном времени POSIX.1E SCHED_RR
и SCHED_FIFO
, в итоге, была вызвана команда для установки классов планирования chrt
. В -i
параметр указывает , использовать SCHED_IDLE
класс планирования
Для класса планирования ввода / вывода вы используете ionice
. Точная команда выглядит так:
ionice -c 3 {command or PID}
В -c
опции определяет , что планирование класс использования, а 3 это число для праздного класса. Обратите внимание, что в зависимости от того, какой блок ввода-вывода используется планировщик, это может на самом деле не влиять ни на что. В частности, noop
планировщик ввода-вывода вообще не поддерживает приоритеты или классы планирования, и я почти уверен, что deadline
планировщики (как устаревшие, так и blk-mq) тоже не поддерживают.
Если вы хотите сделать это программно, либо для своей собственной программы, либо для настройки других процессов, посмотрите справочные страницы для системных вызовов sched_setscheduler
и ioprio_set
системных вызовов (хотя оба они заслуживают чтения, если вы просто хотите иметь больше информации).