Вивчіть Linux, 101: Пріоритети виконання процесів

Слідкуючи за тим, що відбувається

Ян Шилдс
Оновлено 31 січня 2015 р. | Опубліковано 2 лютого 2010 р

розробник

Огляд

Цей посібник обґрунтовує основні методи Linux для управління пріоритетами процесу виконання. Навчіться:

  • Зрозумійте пріоритети процесу
  • Встановіть пріоритети процесу
  • Змінити пріоритети процесу

Цей посібник допоможе вам підготуватися до цілі 103.6 у темі 103 іспиту 101. Професійний сервер Linux (LPIC-1) 101. Вага цілі 2.

Пріоритети завдань Linux

Linux, як і більшість сучасних операційних систем, може запускати кілька процесів. Це робиться шляхом спільного використання процесора та інших ресурсів. Якщо один процес може використовувати 100 відсотків центрального процесора, тоді інші процеси можуть не реагувати. Ми познайомимо вас із тим, як Linux призначає пріоритети для завдань.

Про цю серію

Ця серія підручників допоможе вам вивчити завдання системного адміністрування Linux. Ви також можете використовувати матеріали цих посібників для підготовки до іспитів LPIC-1: Професійний сертифікаційний сервер Linux Server.

Див. “Дізнайтесь Linux, 101: Дорожня карта для LPIC-1”, щоб отримати опис та посилання на кожен підручник у цій серії. Дорожня карта триває. Цей підручник відображає цілі версії 5.0, оновлені 29 жовтня 2018 р. По мірі завершення підручники вони будуть додані до дорожньої карти.

Передумови

Щоб отримати максимум від підручників у цій серії, ви повинні мати базові знання Linux та працюючу систему Linux, на якій ви можете відпрацьовувати команди, викладені в цьому посібнику. Іноді різні версії програми форматують висновок по-різному, тому ваші результати можуть не завжди виглядати точно так, як наведені тут списки та рисунки. Результати в наведених тут прикладах були отримані на дистрибутиві Ubuntu 15.04. Цей підручник спирається на концепції, розглянуті в попередньому підручнику “Вивчіть Linux 101: Створюйте, контролюйте та вбивайте процеси”.

Знаючи свої пріоритети

Якщо ви запустите верхню команду, за замовчуванням відображатиме процеси у порядку зменшення відповідно до їх використання процесора, як показано в лістингу 1. У попередньому підручнику “Дізнайтесь Linux 101: Створення, моніторинг та вбивство процесів” ми показали Сценарій Poor Man's Clock, який кожні 30 секунд друкує час на консолі, а решту часу нічого не робить. Якби ми запустили цей процес, він, мабуть, не потрапив би до списку вихідних даних, оскільки процес витрачає більшу частину часу, не використовуючи центральний процесор.

Лістинг 1. Типовий вихід зверху на робочій станції Linux

У вашій системі може бути багато команд, які можуть використовувати багато процесора. Приклади включають інструменти для редагування фільмів та програми для перетворення між різними типами зображень або між різними кодуваннями звуку, наприклад mp3 в ogg.

Коли у вас лише один або обмежена кількість процесорів, вам потрібно вирішити, як розподілити ці обмежені ресурси центрального процесора між кількома конкуруючими процесами. Як правило, це робиться шляхом вибору одного процесу для виконання і дання йому працювати протягом короткого періоду (так званий часовий зріз) або до тих пір, поки йому не потрібно буде чекати якоїсь події, наприклад IO для завершення. Щоб забезпечити, щоб важкі процеси не зникали голодами процесорів, вибір здійснюється на основі пріоритету планування. NI у стовпці у Лістингу 1 вище, показує пріоритет планування або приємність кожного процесу. Приємність зазвичай варіюється від -20 до 19, при цьому -20 є найбільш сприятливим або найвищим пріоритетом для планування, а 19 є найменш сприятливим або найнижчим пріоритетом.

Використання ps для пошуку приємності

На додаток до верхньої команди, ви також можете відображати значення красивості за допомогою команди ps. Ви можете налаштувати результати, як ви бачили у підручнику «Вивчайте Linux 101: Створення, моніторинг та вбивання процесів», або ви можете просто використовувати опцію -l, щоб отримати довгий список. Вихідні дані ps -l ps -l показані в лістингу 2. Як і у випадку з верхнім, знайдіть значення краси в NI стовпець.

Лістинг 2. Використання ps для пошуку приємності

Приємність за замовчуванням

Можливо, ви здогадалися з Лістингу 1 або Лістингу 2, що за замовчуванням приємність, принаймні для процесів, що запускаються звичайними користувачами, дорівнює 0. Як правило, це стосується поточних систем Linux. Ви можете перевірити значення для вашої оболонки та системи, запустивши команду nice без параметрів, як показано в лістингу 3.

Лістинг 3. Перевірка стильності за замовчуванням

Розстановка пріоритетів

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

Сценарій із великим процесором

Ми створимо невеликий скрипт, який просто використовує центральний процесор і мало що робить. Сценарій бере два входи, підрахунок і мітку. Він друкує мітку та поточну дату та час, потім обертається, зменшуючи кількість, доки не досягне 0, і нарешті друкує мітку та дату знову. Цей сценарій, показаний у лістингу 4, не перевіряє помилок і не дуже надійний, але він ілюструє нашу думку.

Лістинг 4. Сценарій із великим процесором

Якщо ви запускаєте це у власній системі, ви можете побачити результат, подібний до лістингу 5. Залежно від швидкості вашої системи, можливо, вам доведеться збільшити значення підрахунку, щоб навіть побачити різницю в часі. Цей сценарій використовує багато процесора, як ми побачимо через мить. Якщо ваша оболонка за замовчуванням не Bash, і якщо скрипт не працює для вас, використовуйте другу форму виклику, показану нижче. Якщо ви не використовуєте власну робочу станцію, переконайтеся, що добре використовувати багато процесора, перш ніж запускати сценарій.

Лістинг 5. Запуск count1.sh

Все йде нормально. Тепер давайте створимо список команд для запуску сценарію у фоновому режимі та запуску верхньої команди, щоб побачити, скільки центрального процесора використовує скрипт. (Див. Попередній підручник “Вивчення Linux 101: Командний рядок Linux” для оновлення списків команд.) Список команд показаний у лістингу 6, а вихідні дані - у лістингу 7.

Лістинг 6. Запуск count1.sh і зверху
Лістинг 7. Використання великої кількості процесора

Непогано. Ми використовуємо 100 відсотків одного з центральних процесорів у цій системі з простим сценарієм. Якщо ви хочете наголосити на декількох процесорах, ви можете додати додатковий виклик count1.sh до списку команд. Якби у нас була така тривала робота, як це, ми могли б виявити, що це заважає нашій здатності (або здатності інших користувачів) виконувати інші роботи в нашій системі.

Використовуючи приємне для встановлення пріоритетів

Тепер, коли ми можемо деякий час зайняти центральний процесор, ми побачимо, як встановити пріоритет для процесу. Підсумовуючи те, що ми дізналися до цього часу:

  • У системах Linux і UNIX® використовується система пріоритетів із 40 пріоритетами, від -20 (найвищий пріоритет) до 19 (найнижчий пріоритет).
  • Процеси, розпочаті звичайними користувачами, зазвичай мають пріоритет 0.
  • Команда ps може відображати пріоритет (наприклад, nice, або NI, рівень), використовуючи опцію -l.
  • Приємна команда відображає наш пріоритет за замовчуванням.

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

Щоб продемонструвати використання nice для встановлення пріоритетів, давайте почнемо дві копії сценарію count1.sh одночасно в різних підшелутках, але дамо одній максимальну приємність 19. Через секунду ми будемо використовувати ps -l ps -l для відображення стану процесу, включаючи приємність. Нарешті, ми додамо довільний 30-секундний режим сну, щоб переконатися, що послідовність команд закінчується після закінчення двох підшелушок. Таким чином, ми не отримаємо нового запиту, поки ми все ще чекаємо вихідних даних. Результат наведено в лістингу 8.

Лістинг 8. Використання nice для встановлення пріоритетів для пари процесів

Ви здивовані тим, що дві роботи закінчили одночасно? Що сталося з нашим пріоритетом? Пам'ятайте, що сценарій зайнятий один наших процесорів. Ця конкретна система працює на процесорі Intel (R) Core (TM) i7, який дуже слабо завантажений, тому кожне ядро ​​виконувало один процес, і не було потреби розставляти їм пріоритети.

Тож спробуймо розпочати чотири процеси на чотирьох різних рівнях приємності (0, 6, 12 та 18) і подивимось, що станеться. Ми збільшимо параметр підрахунку зайнятих для кожного, щоб вони працювали трохи довше. Перш ніж заглянути в лістинг 9, подумайте, чого ви можете очікувати, враховуючи те, що ви вже бачили.

Лістинг 9. Використання nice для встановлення пріоритетів для чотирьох процесів

Маючи чотири різні пріоритети, ми бачимо ефект від різних значень приємності, оскільки кожна робота закінчується в порядку пріоритету. Спробуйте поекспериментувати з різними приємними значеннями, щоб продемонструвати різні можливості для себе.

Заключна примітка щодо запуску процесів з nice; як і з командою nohup, ви не можете використовувати список команд або конвеєр як аргумент nice .

Зміна пріоритетів

ренісе

Якщо ви випадково запускаєте процес і розумієте, що він повинен працювати з іншим пріоритетом, є спосіб змінити його після його запуску, використовуючи команду renice. Ви вказуєте абсолютний пріоритет (а не коригування) для процесу або процесів, що підлягають зміні, як показано в лістингу 10.

Лістинг 10. Використання renice для зміни пріоритетів

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

Ви можете знайти більше інформації про nice та renice на головних сторінках.

На цьому закінчується ваше вступ до пріоритетів виконання процесу.