В этом уроке мы поговорим о том, как вы расставляете приоритеты для процессов, которые они запускают в системе Linux.
В моей предыдущей статье я объяснил следующие концепции и прошу вас прочитать эти руководства:
Вступление
Теперь вспомните, что Linux — это многозадачная операционная система.
Следовательно, процессорное время вращается между каждым из процессов, которые в настоящее время выполняются в системе, создавая иллюзию того, что все эти процессы выполняются одновременно.
Теперь, поскольку Linux является многозадачной операционной системой, вы можете указать уровень приоритета для каждого процесса, запущенного в системе.
И это определяет, сколько процессорного времени будет занимать конкретный процесс по сравнению с другими процессами, запущенными в системе.
Теперь по умолчанию Linux действительно не уделяет много внимания приоритетам.
Фактически он пытается уравнять количество процессорного времени, отведенного всем процессам, запущенным в системе, с очень ограниченным числом исключений.
Михаил Казиник в передаче «Детский недетский вопрос». Музыка была у Бога. Музыка была Богом.
Однако бывают случаи, когда вам нужно изменить приоритет, назначенный конкретному процессу.
Теперь, в зависимости от того, как развернута система, вы можете захотеть, чтобы один конкретный процесс имел более высокий приоритет, чем другие процессы, запущенные в системе.
Возможно, система используется для веб-сервера, и в этом случае вы хотите, чтобы процесс веб-сервера имел более высокий приоритет, чем другие процессы, запущенные в системе.
Что ж, вы можете сделать это с помощью нескольких утилит Linux.
Как изменить приоритет процесса в Linux
Итак, в этом уроке мы поговорим о том, как расставить приоритеты с помощью nice команда и как вы можете установить приоритет процесса, который уже запущен с renice команда.
Начнем с того, что посмотрим, как можно использовать nice утилита.
Установите приоритеты с помощью красивой команды
В nice Утилиту можно использовать для запуска нового процесса в системе Linux с индивидуальным уровнем приоритета.
Теперь вспомните как top и ps утилиты можно использовать для отображения информации о процессах, запущенных в системе Linux.
И два значения, которые будут отображаться ps а также top являются PR ценность, которая является приоритетом, и хорошая ценность, которая является NI .
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 30738 helpdesk 20 0 2955736 105168 29692 S 8.3 13.0 2:56.70 gnome-shell 31252 helpdesk 20 0 534516 21444 13576 S 1.3 2.6 0:11.46 gnome-terminal- 1 root 20 0 262096 5536 3184 S 0.0 0.7 0:11.67 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
Понимание ценности PR (приоритета)
Вот ключевая вещь, о которой вам нужно помнить, и на самом деле это то, что сбивает с толку многих новых системных администраторов Linux.
Што за программа?
Чем выше номер приоритета, тем ниже приоритет процесса. Это как-то нелогично.
В этом примере у нас есть большинство этих процессов, работающих со значением приоритета 20, но есть также процессы, которые имеют значение приоритета 0.
Как видите, kworker / 0: 0H-kblockd команда имеет приоритет 0.
Потому что kworker / 0: 0H-kblockd использует меньшее число, это на самом деле процесс с более высоким приоритетом, чем все другие процессы со значением приоритета 20.
Просто помните, что в столбце приоритета чем меньше число, тем выше приоритет процесса.
Понимание ценности NI (Nice)
Помимо приоритета, который вам необходимо знать о Приятной ценности, она отображается в NI столбец.
В NI value — это приятная ценность процесса, она в основном определяет, насколько хорош процесс.
Чем лучше процесс, тем меньше процессорного времени он потребует, чем менее приятен процесс, тем больше процессорного времени он потребует.
Важная вещь, которую следует помнить о значении nice, — это тот факт, что оно учитывается при вычислениях ядра, которые будут определять общий приоритет процесса.
Теперь значение nice для любого процесса Linux может находиться в диапазоне от -20 до +19.
Теперь обратите внимание на вывод top команда здесь, что большинство этих процессов имеют точно такое же значение Nice.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 30738 helpdesk 20 0 2955736 105168 29692 S 8.3 13.0 2:56.70 gnome-shell 31252 helpdesk 20 0 534516 21444 13576 S 1.3 2.6 0:11.46 gnome-terminal- 1 root 20 0 262096 5536 3184 S 0.0 0.7 0:11.67 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
По умолчанию они имеют значение 0, что в основном дает им одинаковый приоритет в системе.
Обратите внимание, однако, что есть несколько исключений, таких как kworker/0:0H-kblockd Процесс, он имеет значение Nice -20.
В результате он имеет более низкий приоритет, чем другие процессы, запущенные в системе, что означает, что он имеет более высокий уровень приоритета в системе.
Важно помнить, что чем ниже значение Nice, тем ниже будет значение приоритета и, следовательно, выше общий приоритет процесса в системе.
Как использовать красивую команду
Вот еще одна ключевая вещь, которую вам нужно понять, это тот факт, что вы не можете напрямую управлять приоритетом процесса, но вы можете манипулировать им косвенно, настраивая значение Nice процесса.
Самый простой способ сделать это — установить для процесса значение Nice, когда вы первоначально загружаете этот процесс в командной строке и делаете это с помощью nice команда.
Здесь показан синтаксис, вы вводите nice -n за которым следует хороший уровень, который вы хотите назначить процессу, за которым следует имя фактической команды, которую вы хотите запустить.
Синтаксис: nice -n nice_level command
Например, предположим, что я хотел запустить gedit программу из командной строки.
gedit это графический текстовый редактор, который можно использовать в системах Linux.
Но я хочу запустить gedit с повышенным приоритетом в системе, потому что я серьезно отношусь к редактированию текста.
Теперь по умолчанию, если я просто бегу gedit из приглашения оболочки он получит приоритет 80 в системе, потому что ему будет присвоено хорошее значение 0.
# ps -elf F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 1 I root 8 2 0 60 -20 — 0 — May11 ? 00:00:00 [mm_percpu_wq] 1 S root 9 2 0 80 0 — 0 — May11 ? 00:00:03 [ksoftirqd/0] 1 I root 484 2 0 60 -20 — 0 — May11 ? 00:00:00 [ttm_swap] 0 S helpdesk 40156 30633 1 80 0 — 140623 x64_sy 22:56 ? 00:00:00 /usr/bin/gedit —gapplication-service 0 R root 40187 32751 0 80 0 — 14455 — 22:56 pts/0 00:00:00 ps -elf 4 S root 32746 31257 0 80 0 — 33371 — 14:52 pts/0 00:00:00 su 4 S root 32751 32746 0 80 0 — 6730 — 14:52 pts/0 00:00:00 bash
Это значение Nice 0 используется ядром для вычисления общего приоритета этого процесса и с использованием его различных вычислений, которое оказывается равным 80.
Теперь, поскольку, как я уже сказал, я очень серьезно отношусь к своим текстовым редакторам, я мог бы настроить уровень приоритета этого процесса на более высокий уровень, уменьшив его значение Nice, чтобы добиться максимальной производительности при редактировании текста.
Например, здесь я ввел nice -n -15 за которым следует gedit команда.
# nice -n -15 gedit
Помните, что по умолчанию значение nice равно 0, теперь я уменьшаю его до -15.
Это приведет к уменьшению номера приоритета, назначенного процессу, созданному командой, что также увеличит его общий приоритет в системе, и вы можете увидеть это прямо здесь.
# ps -elf F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 1 I root 8 2 0 60 -20 — 0 — May11 ? 00:00:00 [mm_percpu_wq] 1 S root 9 2 0 80 0 — 0 — May11 ? 00:00:03 [ksoftirqd/0] 1 I root 484 2 0 60 -20 — 0 — May11 ? 00:00:00 [ttm_swap] 0 S helpdesk 40156 30633 1 65 -15 — 140623 x64_sy 22:56 ? 00:00:00 /usr/bin/gedit —gapplication-service 0 R root 40187 32751 0 80 0 — 14455 — 22:56 pts/0 00:00:00 ps -elf 4 S root 32746 31257 0 80 0 — 33371 — 14:52 pts/0 00:00:00 su 4 S root 32751 32746 0 80 0 — 6730 — 14:52 pts/0 00:00:00 bash
После выполнения команды мое значение Nice уменьшилось до -15, а мой номер приоритета уменьшился до 65 с 80, что увеличивает общий приоритет этого процесса в системе.
Теперь с учетом сказанного имейте в виду, что Linux на самом деле не решается позволить вам уменьшить значение параметра Nice для процессов, запущенных в системе.
Поскольку Linux — это настоящая многопользовательская операционная система, несколько пользователей одной системы могут настраивать значения Nice для своих собственных процессов.
А теперь, когда человеческая природа является естественной, что все будут делать?
Все будут хорошо думать, что мои процессы важнее всех остальных, поэтому каждый пользователь в системе будет пытаться снизить ценность своих процессов в Nice, чтобы повысить свой уровень приоритета в системе.
И мы закончим большим перетягиванием каната.
Поэтому, чтобы этого не происходило, Linux не позволит вам изменить значение процесса Nice ниже 0, если вы не вошли в систему как root.
Это означает, что если вы не являетесь пользователем root, вам не будет разрешено использовать отрицательное число с nice команда.
Установите приоритеты с помощью команды renice
Сейчас nice Команда отлично подходит для изменения значения Nice, когда вы изначально запускаете команду, которая запрашивает оболочку для запуска процесса.
Но что вы делаете с процессом, который вы хотите изменить, уже запущен, и вы действительно не хотите или не можете его перезапустить.
Возможно, на нем запущено какое-то критически важное приложение, и если вы отключите его и перезапустите с новым значением Nice, вся компания будет преследовать вас с вилами.
Что ж, в этой ситуации вы не можете использовать nice вместо этого вы можете использовать renice команда.
Вместо того, чтобы убить процесс и перезапустить его с помощью nice чтобы сбросить его Хорошее значение.
Вы можете использовать renice , чтобы настроить значение Nice для уже запущенного процесса, и здесь показан синтаксис.
Как использовать команду renice
Команда nice, или вежливые процессы
Когда на компьютере достаточно процессорного времени на исполнение всех процессов, нет необходимости в выставлении приоритетов. Но когда необходимо параллельно запустить несколько процессов, каждый из которых использует всё доступное процессорное время, может очень пригодиться утилита nice.
Команда nice запускает программу с изменённым приоритетом для планироващика задач. Слово «nice» в английском языке обозначает, в частности, «вежливый». По этимологии этой команды процесс с большим значением nice — более вежлив к другим процессам, позволяя им использовать больше процессорного времени, поскольку он сам имеет меньший приоритет (и, следовательно, большее «значение вежливости» — niceness value).
Наибольший приоритет (и наименьшее значение nice) — −20. 19, либо 20 — наименьший приоритет, но это, с другой стороны, самые вежливые процессы.
Чтобы посмотреть идентификатор и значение nice нужного процесса в системе, можно воспользоваться командой ps axl.
Пример использования команды nice — запуск ресурсоёмкой задачи в фоновом режиме, так, чтобы она выполнялась, но освобождала часть процессорного времени для других процессов, как только оно становятся им нужно. Таким образом можно, скажем, запустить кодирование OGG/MP3 с большим значением nice, чтобы оно происходило в фоновом режиме, используя не всё процессорное время, а то, что не используется другими процессами (с меньшим значением nice — то есть с большим приоритетом).
Чтобы запустить команду с определённым приоритетом, слева нужно добавить «nice -n значение_nice», либо «nice —adjustment значение_nice» (adjustment — настройка, регулировка).
То есть: nice -n значение_nice команда.
Если нужно изменить приоритет уже запущенного процесса, можно воспользоваться командой renice.
renice -n значение_nice id_процесса
Команда renice выводит старый и новый приоритет процесса.
Теперь, зная эти команды, можно управлять процессами так, чтобы определённые задачи выполнялись быстрее в случае, когда сразу много процессов используют всё доступное процессорное время.
Источник: habr.com
Как установить приоритеты процесса с помощью nice и renice в Linux
 
Команды nice и renice позволяют точно настроить то, как ядро обрабатывает ваши процессы, регулируя их приоритеты. Прочтите это руководство, чтобы узнать, как использовать их в Linux и Unix-подобных операционных системах, таких как macOS.
Все дело в процессе
Внутри вашего Linux или Unix-подобного компьютера будет выполняться множество процессов еще до того, как вы запустите приложение, которое хотите использовать. Большинство этих процессов являются жизненно важными элементами самого Linux или вспомогательными процессами для графической среды рабочего стола. За кулисами происходит много всего. Конечно, есть ограниченное количество системных ресурсов и процессорного времени. Ядро Linux является контроллером всех этих процессов.
Именно ядро должно решить, какие процессы привлекают внимание и ресурсы прямо сейчас, а какие должны ждать. Ядро постоянно манипулирует процессами и приоритетами, чтобы гарантировать, что компьютер работает как можно более плавно и что все процессы получают свою соответствующую долю. Некоторые процессы получают льготы. Они настолько важны для общей работы компьютера, что их потребности должны быть важнее, например, вашего браузера.
Хорошая ценность
Одним из критериев, используемых для определения того, как ядро обрабатывает процесс, является значение nice. Каждый процесс имеет свою ценность. Значение nice представляет собой целое число в диапазоне от -19 до 20. Все стандартные процессы запускаются с нулевым значением nice.
Как использовать команды Linux cat и tac
Уловка здесь в том, что чем выше значение nice, тем лучше ваш процесс для других процессов. Другими словами, высокое значение nice сообщает ядру, что этот процесс готов ждать. Отрицательное число противоположно хорошему. Чем больше отрицательное значение nice, тем более эгоистичным является процесс. Он пытается получить как можно больше процессорного времени, не обращая внимания на другие процессы.
