Процес "приємність" порівняно з "пріоритетом"


104

Під час запуску topя бачу такий (скорочений) приклад виводу:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4586 ipc-adm+  20   0 1303900 605152  92844 S  30,6 29,3   3:52.88 firefox
 3985 ipc-adm+  20   0  258588 124508  63072 S  12,2  6,0   0:40.04 compiz
 3092 root      20   0  172392  56164  25980 S   6,1  2,7   0:30.13 Xorg

Мене цікавлять два значення: PR(Пріоритетність) та NI(Приємність).

Якщо я зрозумів, що я вже правильно з’ясував, обидва визначають, скільки часу отримає процесор на відміну від інших процесів. Але в чому тоді різниця між цими значеннями?

Чи можете ви також описати, як маніпулювати тими значеннями процесу та за яких обставин це може бути корисним?

Відповіді:


103

Добре значення - це простір користувача, а PR - пріоритет, який є фактичним пріоритетом процесу, який використовує ядро ​​Linux. У системі Linux пріоритети - від 0 до 139, в яких від 0 до 99 в режимі реального часу і 100 до 139 для користувачів. Діапазон приємних значень - від -20 до +19, де -20 найвищий, 0 за замовчуванням і +19 найнижчий. співвідношення між приємною цінністю та пріоритетом:

PR = 20 + NI

значить, значення PR = 20 + (-20 to +19)0 до 39, що відображає 100 до 139.

Відповідно до верхнього посібника:

PR - Пріоритет Пріоритет планування завдання. Якщо ви бачите "rt" у цьому полі, це означає, що завдання виконується під пріоритетом планування в режимі реального часу.

NI - це приємне значення завдання.

NI - Приємне значення Приємне значення завдання. Від'ємне хороше значення означає більш високий пріоритет, тоді як позитивне хороше значення означає нижчий пріоритет. Зелене поле в цьому полі просто означає, що пріоритет не буде коригуватися при визначенні можливості відправки завдання.

Редагувати: за замовчуванням, коли програма запускається в Linux, вона запускається з пріоритетом "0". Однак ви можете змінити пріоритетність своїх програм будь-яким із наведених нижче способів.

  1. Ви можете запустити програму з необхідним пріоритетом, використовуючи

    nice -n nice_value program_name
    
  2. ви також можете змінити пріоритет уже запущеного процесу, використовуючи

    renice -n nice_value -p process_id
    

1
Ви говорите, вони майже те саме, що є зворотним (обидва представляють пріоритет), АЛЕ nicenessможна використовувати для надання негативного пріоритету, щоб завдання з nicenessвиходом із шляху вищих пріоритетних завдань? (т. е. це дозвол niceта надання інших ресурсів доступу? Або це мене просто збентежило?
Марк Кірбі

1
Приклад того, що я маю на увазі, дві задачі, обидві мають pr20, так рівно, завдання одна має ni0, а два завдання - ni20, тож це означатиме, що два завдання відмовляться від ресурсів для першого завдання, оскільки цеnicer
Марк Кірбі

1
Як я знаю, пріоритет обчислюється як PR = 20 + NI. тому завдання один пріоритет = 20 +0. максимальне значення приємної волі +19
pl_rock

3
PR = 20 + максимальне значення NI може бути 39. насправді в системі Linux є 139 пріоритетів, у яких від 0 до 99 - пріоритет у режимі реального часу, а для користувача - від 100 до 139. значить, значення NI -20 до +19 відображає пріоритет від 100 до 139. що ви можете налаштувати. але все ж ядро ​​не впевнене, чи зміниш значення NI, то воно змінить пріоритет, значення NI - це справедлива пропозиція до ядра. ядро якийсь час ігнорує його
pl_rock

1
Тож PR і NI насправді є рівнозначними, оскільки вони просто відрізняються? Чому ми маємо обидва значення тоді? І ви можете додати, що для налаштування приємності процесу <0 потрібні права root.
Байт-командир

26

Що таке пріоритет і чому я повинен дбати?

Коли ми говоримо про процеси, пріоритет - це управління процесорним часом. Процесор або процесор - це як людина, що жонглює декількома завданнями одночасно. Іноді у нас може бути достатньо місця для прийняття кількох проектів. Іноді ми можемо зосередитись лише на одній речі. В іншому випадку з’являється щось важливе, і ми хочемо присвятити всю свою енергію для вирішення цієї проблеми, одночасно ставлячи на задній пальник менш важливі завдання.

У Linux ми можемо встановити вказівки для центрального процесора, який слід виконувати, коли він розглядає всі завдання, які він повинен виконати. Ці вказівки називають приємністю або приємною цінністю. Шкала приємності Linux коливається від -20 до 19. Чим менше число, тим більше пріоритету отримує завдання. Якщо значення приємності велике, наприклад, 19, завдання буде встановлено на найнижчий пріоритет, і ЦП буде обробляти його, коли він отримує шанс. Значення nice за замовчуванням дорівнює нулю.

Використовуючи цю шкалу, ми можемо розподілити ресурси CPU більш доцільно. Програми з нижчим пріоритетом, які не є важливими, можна встановити на більш високе значення, тоді як програми з високим пріоритетом, як демони та сервіси, можна встановити, щоб отримати більше уваги процесора. Ви навіть можете надати конкретному користувачеві нижчу приємну цінність для всіх його процесів, щоб ви обмежили їхню здатність сповільнити основні сервіси комп'ютера.

Джерело

Встановіть пріоритет для нових процесів за допомогою nice, напр

nice -n 10 firefox

для існуючих процесів

renice 10 -p $(pgrep firefox)

Для того, щоб встановити пріоритет , <0що потрібно sudo, наприклад:

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

але не для пріоритету >=0


Приклад

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          19   0

% renice 10 -p 2769     # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox           9  10

% sudo renice -19 -p 2769                    
 2769 (process ID) old priority 10, new priority -19

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          38 -19

Інший приклад

Щоб відновити всі запущені процеси для конкретного користувача

renice 20 -u user_name

У вашому прикладі, the renice 10також працювали б без цього sudo, правда? І чи можете ви додати приклад, щоб зробити всі процеси певного користувача більш приємними? Це було б насправді дуже корисно, якщо хтось інший одночасно входить у систему та має деякі непотрібні, але ресурси, що споживають ресурси (наприклад, призупинена флеш-гра в Firefox, маленькі брати роблять такі речі ...: - /)
Байт Командир

@ByteCommander done =)
AB

Як через деякий час відновити старі значення приємності цього користувача? Повернення до 0? Це не враховує, що деякі процеси, можливо, раніше мали інше значення приємності. Чи є якась проста можливість це зробити?
Байт-командир

@ByteCommander Ні, це не просто. Або ви користуєтесь, 0або ... є проблема;)
AB

2
Після реніке -19 результат з таким psє: PRI: 38, NI: -19однак, саме з чим topце так PR:1, NI -19?
пробудження

14

Коротка відповідь

PR - пріоритетний рівень. Чим нижчий PR, тим вищим буде пріоритет процесу.

PR розраховується так:

  • для нормальних процесів: PR = 20 + NI (NI хороший і коливається від -20 до 19)
  • для процесів у режимі реального часу: PR = - 1 - real_time_priority (реальний час_примірності становить від 1 до 99)

Довга відповідь

Існує 2 типи процесів, звичайний і в реальному часі Для нормальних (і тільки для тих) приємний застосовується наступним чином:

Приємно

Шкала «приємності» становить від -20 до 19, тоді як -20 є найвищим пріоритетом, а 19 - найнижчим. Рівень пріоритету розраховується так:

PR = 20 + NI

Де NI - хороший рівень, а PR - пріоритетний рівень. Як ми бачимо, -20 насправді відображається до 0, тоді як 19 карт - 39.

За замовчуванням програмне значення nice дорівнює 0, але користувач root може запускати програми із заданим значенням nice за допомогою наступної команди:

nice -n <nice_value> ./myProgram 

Реальний час

Ми могли б піти ще далі. Приємний пріоритет фактично використовується для програм користувача. Тоді як загальний пріоритет UNIX / LINUX має діапазон 140 значень, приємне значення дозволяє процесу відображати в останній частині діапазону (від 100 до 139). Це рівняння залишає значення від 0 до 99 недоступними, що відповідатиме негативному рівню PR (від -100 до -1). Щоб мати доступ до цих значень, процес слід зазначити як "реальний час".

У середовищі LINUX існує 5 політик планування, які можна відобразити за допомогою наступної команди:

chrt -m 

Який буде показаний наступний список:

1. SCHED_OTHER   the standard round-robin time-sharing policy
2. SCHED_BATCH   for "batch" style execution of processes
3. SCHED_IDLE    for running very low priority background jobs.
4. SCHED_FIFO    a first-in, first-out policy
5. SCHED_RR      a round-robin policy

Процеси планування можна розділити на 2 групи, звичайну політику планування (від 1 до 3) та політику планування в режимі реального часу (4 і 5). Процеси в режимі реального часу завжди матимуть пріоритет перед звичайними процесами. Процес у режимі реального часу може бути викликаний за допомогою наступної команди (Приклад - як оголосити політику SCHED_RR):

chrt --rr <priority between 1-99> ./myProgram

Для отримання значення PR для процесу в режимі реального часу застосовується таке рівняння:

PR = -1 - rt_prior

Там, де rt_prior відповідає пріоритету між 1 і 99. З цієї причини процес, який матиме більш високий пріоритет перед іншими процесами, буде називатися номером 99.

Важливо зазначити, що для процесів у режимі реального часу приємне значення не використовується.

Щоб побачити поточне "приємність" та значення PR процесу, можна виконати наступну команду:

top

Який показує такий вихід:

введіть тут опис зображення

На малюнку відображаються значення PR та NI. Добре відзначити процес зі значенням PR -51, що відповідає значенню в реальному часі. Також є деякі процеси, значення PR яких зазначено як "rt". Це значення фактично відповідає значенню PR -100.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.