Какая команда Unix лучше всего может быть?

9

Для быстрого сравнительного теста, как можно сочетать nice и ionice с максимальным эффектом, то есть, чтобы команда использовала как можно меньше ресурсов (без полного холостого хода)?

(Я думаю, что это что-то вроде `nice -n 19 ionice -c 2 [команда], но не уверен насчет" -n "ionice (параметр classdata), страница руководства загадочна в отношении ее актуальности.)

mahemoff
источник
3
плюс 1 за умный заголовок вопроса, но в целом это тоже хороший вопрос.
Lizardx

Ответы:

10

Полная команда, которую вы хотите:

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системных вызовов (хотя оба они заслуживают чтения, если вы просто хотите иметь больше информации).

Остин Хеммелгарн
источник
0

Предполагая, что вы не хотите, чтобы эта команда полностью ожидала завершения других, поэтому, чтобы потенциально не страдать от нехватки ресурсов , строка будет выглядеть так:

nice -n19 [command]

As ionice будет установлен пропорционально на современные ядра Linux.

Кстати chrt -b0, не имеет ничего общего с любезностью, но с тем, как часто процессор будет переходить от одного процесса к другому. Эта строка увеличивает время, необходимое пакетным программам для более эффективного использования кэшей, но для других команд это бесполезно. Как видно здесь .

Альберто Сальвия Новелла
источник