Хороший ренис и пух

Я читал о nicerenice а также ionice контролировать приоритет планирования запущенных процессов. Тем не менее, я до сих пор не понимаю, когда и как они полезны для. Например, делать что-то вроде:

nice -n 13 pico myfile.txt

2 ответа

Решение

Что касается пико, то вряд ли это когда-нибудь станет поводом для беспокойства, поэтому это не та команда, которую вы обычно любили бы /renice или ionice. Однако ваша команда выполнит пико до +13. Что означало бы, что на это будет выделено значительно меньше времени. Например, следуя вашей пико-линии. Обычно исполняемый пико выглядит так:

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 это не волнует, так как он хочет получить статистику только после следующего дня. Все счастливы.

Помимо этих инструментов, вы можете получить некоторый контроль над тем, как система расставляет приоритеты времени ЦП (возможно, в случае ввода-вывода) для задач. Они будут иметь эффект только при загрузке системы, до этого все задачи распределяются так, как им нужно.

Команда renice работает очень похожим образом, но позволяет вам изменять приоритет уже запущенных процессов. Таким образом, в приведенном выше анекдоте вы можете использовать renice для изменения приоритета команды mysql без перезапуска. Следующая команда переименует все запущенные задачи с именем "mysql" в +13 с гораздо более низким приоритетом:

renice -n 13 -p `pidof mysql`

Что касается ionice, я не могу комментировать, но думаю, что он позволяет вам делать подобные вещи с IO. Влияние на выполнение определенных задач, например, чтение / запись на диск. Может быть полезно при регулировании процесса резервного копирования при необходимости?

ionice является интерфейсом подсистемы планировщика ввода-вывода ядра Linux, он позволяет устанавливать приоритеты ввода-вывода для каждого процесса. Вариант использования этого будет что-то вроде уменьшения приоритета updatedb Команда, которая создает базу данных для locate команда таким образом, что другой IO работает без помех, так как updatedb выполняет IO только тогда, когда другие IO не работают в данный момент.

nice- запустить программу с настроенным уровнем удобства, которая в основном является планировщиком ЦП. Значения приличия варьируются от -20 (наиболее благоприятно для процесса) 19(наименее благоприятный для процесса). Значение по умолчанию 10 и только root может использовать отрицательные корректировки, чтобы иметь более благоприятные приоритеты.

renice делает то же самое, что и выше, только для уже запущенных процессов, указывая идентификаторы процессов (опция -p), идентификаторы групп процессов (опция -g) или имена пользователей или идентификаторы пользователей (опция -u).

ioniceустанавливает или регулирует удобство планировщика ввода-вывода программ и процессов для доступа к "дисковым" устройствам. Приоритет находится в одном из трех классов расписания: 1или в реальном времени (пытается отдать приоритет, что бы ни происходило), 2или оптимальное (обычное планирование, см. также ссылку на ссылку), 3или простаивает (запланировано только тогда, когда другие процессы не обращаются к дискам).

Например, вы можете запустить fstrim команда при загрузке на rc.local с таким сниппетом, чтобы ваша работа выполнялась с небольшой нагрузкой на всю систему.

(
  sleep 15s #1
  /usr/bin/fstrim -a -v &> /var/log/fstrim.log & #2
  pid=$! #3
  ionice -c 3 -p $pid #4
  renice -n +19 -p $pid #5
) &> /dev/null & #6
  1. Он ждет 15 секунд, прежде чем продолжить, чтобы избежать немедленной перегрузки системы (чтобы он мог быстрее завершить последовательность загрузки).
  2. Это начинает fstrim команда в фоновом режиме с выводом в файл журнала и
  3. он записывает свой номер PID.
  4. Он настраивает планировщик ввода-вывода процесса на класс ожидания и
  5. установите самый низкий приоритет планирования ЦП.
  6. Весь фрагмент запускается в фоновом режиме, чтобы продолжить процесс загрузки.

Рекомендации.

Другие вопросы по тегам