Я читал о nice
renice
и ionice
для управления приоритетом планирования запущенных процессов. Однако до сих пор не понимаю, когда и чем они полезны. Например, сделать что-то вроде:
nice -n 13 pico myfile.txt
Что касается pico, вряд ли он когда-либо станет поводом для беспокойства, так что это не та команда, которую вы обычно использовали бы / renice или ionice. Однако ваша команда выполнит пикосигнал до +13. Это означает, что на это будет выделено значительно меньше времени. Например, следуя вашей линии пико. Обычно выполнение pico выглядит так:
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 20118 20117 4006 0 31 0 2435548 1068 - S eb577e0 ttys000 0:00.03 -bash
501 20136 20118 4006 0 31 0 2434992 772 - S+ 85eed20 ttys000 0:00.00 pico
Где NI - хороший уровень. Если я запустил pico с вашей командой, это будет выглядеть так:
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 20118 20117 4006 0 31 0 2435548 1068 - S eb577e0 ttys000 0:00.03 -bash
501 20179 20118 4006 0 18 13 2434992 904 - SN+ 85eed20 ttys000 0:00.01 pico
Хорошо, так что это демонстрирует, что запущенная вами командная строка эффективна, но что она на самом деле делает? Хорошо, допустим, у вас есть система, которая довольно загружена, но не неприлично. Он довольно загружен круглосуточно, в полночь начинается важное техническое обслуживание. В командной строке mysql запускается сценарий для генерации ежедневной статистики. Там много обработки, поэтому она сильно бьет по ЦП, и пользователи жалуются на это. Яростно, как и они. Что вы можете сделать по этому поводу? Неважно, сколько времени занимает этот сценарий, поэтому вы добавляете к команде «nice -n 13», и при следующем запуске это не так сильно повлияет на пользователей, но займет немного больше времени. Владельцу сценария MySQL все равно, поскольку он хочет получить статистику только на следующий день. Все довольны.
Помимо историй, эти инструменты могут позволить вам в некоторой степени контролировать то, как система определяет приоритеты времени ЦП (возможно, ввода-вывода в случае ionice), выделяемого на задачи. Они будут иметь эффект только тогда, когда система загружена, до этого все задачи распределяются все время, которое им нужно.
Команда renice работает очень похожим образом, но позволяет вам изменять приоритет уже запущенных процессов. Итак, в приведенном выше анекдоте вы можете использовать renice для изменения приоритета команды mysql без ее перезапуска. Следующая команда изменит все запущенные задачи с именем mysql на +13, что имеет гораздо более низкий приоритет:
renice -n 13 -p `pidof mysql`
Что касается ionice, я не могу комментировать, но предполагаю, что он позволяет делать аналогичные вещи с вводом-выводом. Влияние на объем выполнения определенных задач, например чтение / запись на диск. Может быть полезно при необходимости регулировать процесс резервного копирования?
ionice
- это интерфейс к подсистеме планировщика ввода-вывода ядра Linux, он позволяет устанавливать приоритеты ввода-вывода для каждого процесса. Примером использования этого может быть что-то вроде уменьшения приоритета updatedb
команда, которая создает базу данных для locate
команда таким образом, чтобы другие операции ввода-вывода выполнялись без помех, поскольку updatedb может выполнять операции ввода-вывода только тогда, когда в настоящее время другие операции ввода-вывода не выполняются.