Вивчаємо linux, 101 пріоритети виконання процесу

Короткий огляд

З цієї статті ви дізнаєтеся про основні прийоми управління пріоритетами виконання процесів в Linux. Ви навчитеся:

  • Розуміти, що таке пріоритети процесів.
  • Призначати пріоритети процесів.
  • Змінювати пріоритети процесів.

Про цю серії

Ця серія статей допоможе вам освоїти завдання адміністрування операційної системи Linux. Ви також можете використовувати матеріал цих статей для підготовки до іспитів першого рівня сертифікації професійного інституту Linux (LPIC-1).

попередні вимоги

Щоб отримати найбільшу користь з наших статей, необхідно володіти базовими знаннями про Linux і мати працездатний комп'ютер з Linux, на якому можна буде виконувати всі зустрічаються команди. Іноді різні версії програм виводять результати по-різному, тому вміст лістингів і малюнків може відрізнятися від того, що ви побачите на вашому комп'ютері. Всі приклади цієї статті були виконані в операційній системі Ubuntu 9.10 (Karmic Koala). В основі цієї статті лежить концепція, описана в попередній статті цієї серії "Вивчаємо Linux, 101: створення, відстеження та знищення процесів".

Отримання інформації про пріоритети процесів

Зв'язок з Яном

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

Якщо ви запустите команду top. то за замовчуванням вона відобразить процеси, відсортовані за ступенем використання ресурсів ЦП в порядку спадання, як показано в лістингу 1. У попередній статті цієї серії "Вивчаємо Linux, 101: створення, відстеження та знищення процесів" ми створили сценарій простих цифрових годин, який виводив на екран час з інтервалом в 30 секунд, а в решту часу нічого не робив. Якби у нас був запущений такий процес, то, ймовірно, він би не вплинув на висновок команди top. оскільки більшу частину часу він не використовує ресурси центрального процесора.

Лістинг 1. Типовий висновок команди top на комп'ютері під управлінням Linux

Коли кількість наявних у вашому розпорядженні процесорів обмежена, необхідно вирішити, як розподілити наявні ресурси між декількома конкуруючими процесами. Зазвичай це завдання вирішується так: вибирається якийсь один процес, який виконується на протязі короткого відрізка часу (інша його назва - квант часу. Т. Е. Кількість процесорного часу, який виділяється з додатком) або до тих пір, поки він не переходить в стан очікування якої-небудь події, наприклад, завершення операції введення / виводу. Щоб важливі процеси завжди мали необхідні їм процесорні ресурси, які можуть виявитися зайнятими іншими ресурсоємними додатками, вибір проводиться на базі розподілу машинного часу. Стовпець NI в лістингу 1 показує розподіл машинного часу (пріоритет, або т. Зв. Niceness) для кожного процесу. Як правило, значення niceness варіюється від -20 до 19; -20 означає найвищий пріоритет, а 19 - найменший пріоритет.

Як дізнатися пріоритет за допомогою ps

Крім команди top для визначення значень пріоритету (niceness) можна використовувати команду ps. Ви можете налаштувати висновок одним із способів, описаних в статті "Вивчаємо Linux, 101: створення, відстеження та знищення процесів", або просто використовувати опцію -l для виведення докладного списку. Висновок команди ps -l представлений в лістингу 2. Як і у випадку з командою top. значення пріоритету стовпець NI.

Лістинг 2. Використання ps для пошуку значень niceness

Значення пріоритету за умовчанням

З листингов 1 і 2 видно, що значенням пріоритету за замовчуванням (по крайней мере, для процесів, запущених звичайними користувачами) є 0. Ви можете подивитися значення пріоритету для командного інтерпретатора і системи, запустивши команду nice без параметрів, як показано в лістингу 3.

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

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

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

Сценарій, що завантажує процесор

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

Лістинг 4. Сценарій, що завантажує ЦП

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

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

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

Лістинг 6. Запуск сценарію count1.sh і команди top
Лістинг 7. Інтенсивне використання ресурсів ЦП

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

Використання nice для призначення пріоритетів

Тепер, коли наша система якийсь час навантажена, давайте подивимося, як можна встановити пріоритет для процесу. Давайте підведемо короткі підсумки вже пройденого матеріалу.

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

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

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

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

Обидва завдання завершилися одночасно незважаючи на різні пріоритети. Справа в тому, що сценарій використовує ресурси одного процесора, а на моєму комп'ютері встановлений двоядерний процесор AMD Athlon ™ 7750, який практично не завантажений, тому кожен з двох процесів виконувався на окремому ядрі, а необхідність в установці пріоритетів в даному випадку була відсутня.

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

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

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

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

команда renice

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

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

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

Додаткову інформацію про командах nice і renice ви можете знайти на відповідних man-сторінках.

Схожі статті