Як призначити програму ядру процесора за допомогою набору завдань

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

Встановіть набір завдань

Інструмент набору завдань є частиною пакету "util-linux". Більшість дистрибутивів Linux постачаються з попередньо встановленим пакетом за замовчуванням. Якщо набір завдань недоступний, його можна встановити наступним чином:

En Debian / Ubuntu та похідні:

sudo apt-get встановити util-linux

En Fedora та похідні:

sudo yum встановити util-linux

Перегляньте спорідненість процесора із запущеним процесом

Щоб отримати інформацію про спорідненість процесора для процесу, використовуйте такий формат:

набір завдань -p PID

Наприклад, щоб перевірити спорідненість центрального процесора процесу за допомогою PID 2915:

набір завдань -p 2915

Повертає результат:

поточна маска спорідненості pid 2915: ff

taskset повертає поточну спорідненість процесора у шістнадцятковому форматі бітової маски. У цьому прикладі спорідненість (представлена ​​в шістнадцятковій бітовій масці) відповідає "11111111" у двійковому форматі, що означає, що процес може виконуватися на будь-якому з восьми різних ядер ЦП (від 0 до 7).

Найнижчий біт у шістнадцятковій бітовій масці відповідає ID ядра 0, другий найнижчий біт праворуч до ID ядра 1, третій найнижчий біт ID ядра 2 тощо. Так, наприклад, спорідненість процесора "0x11" представляє ідентифікатори основних 0 та 4.

taskset може відображати спорідненість процесора як список процесорів замість бітової маски, яку набагато легше читати. Щоб використовувати цей формат, вам слід запустити набір завдань з опцією "-c". Наприклад:

набір завдань -cp 2915

Повертає результат:

Поточний список спорідненості pid 2915: 0-7

Примусово запустити процес на певному ядрі

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

taskset -p COREMASK PID taskset -cp CORE-LIST PID

Наприклад, щоб призначити процес ядрам 0 і 4, потрібно виконати:

набір завдань -p 0x11 9030

Що повертає результат:

Поточна маска спорідненості pid 9030: ff нова маска спорідненості pid 9030: 11

Еквівалентно, ви можете запустити:

набір завдань -cp 0,4 9030

За допомогою опції "-c" ви можете вказати список числових ідентифікаторів ядра, розділені комами, або навіть включити діапазони (наприклад, 0,2,5,6-10).

Запустіть програму з використанням певного ядра

taskset також дозволяє запускати нову програму, використовуючи ряд певних ядер. Для цього його слід використовувати у наступному форматі:

ВИКОНАВЧИЙ набір завдань COREMASK

Наприклад, щоб запустити програму VLC з ідентифікатором ядра процесора 0, використовуйте таку команду:

набір завдань -c 0 vlc

Присвятіть ядро ​​лише певній програмі

Незважаючи на те, що набір завдань дозволяє призначати програму певному ядру, це не означає, що немає інших програм або процесів, які б його використовували. Щоб уникнути цього та присвятити ціле ядро ​​певній програмі, ви повинні використовувати параметр ядра "isolcpus", що дозволяє зарезервувати ядро ​​під час запуску.

Для цього вам потрібно додати параметр "isolcpus =" у рядок ядра в GRUB. Наприклад, щоб зарезервувати ідентифікаційні ядра 0 та 1, додайте "isolcpus = 0,1".

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

Фуенте: xmodulo & сторінки завдань набору завдань -.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   петерчеко - сказав він

    Хороший пост :).

  2.   Луїс - сказав він

    Хороший пост, але без наміру тролінгу ...

    Яка користь від призначення програми певному ядру ???

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

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

    1.    jvk85321 - сказав він

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

      Ув
      jvk85321

      1.    давайте використовувати linux - сказав він

        Точно! Дякую, jvk! 🙂

      2.    lf - сказав він

        Але коли ви створюєте віртуальну машину, вона просить вас вибрати кількість виділеного процесора ... яка користь від вибору цього значення, якщо врешті-решт операційна система це опустить і виконає на всіх процесорах ... Бо там приклад не найкращий ...

        Щоб Flash працював у Windows 8.1 x64, AMD та Firefox, рекомендувалось вибрати, що Flash працює лише на центральному процесорі, однак у мене це не працювало. Також було б зручно, якщо ви додасте його (якщо його ще немає) до диспетчерів завдань різних DE або, принаймні, KDE.

      3.    lf - сказав він

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

    2.    Фернандо - сказав він

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

  3.   Луїс - сказав він

    Це зрозуміло.

    Дякую за роз'яснення.

  4.   Тік - сказав він

    При зарезервуванні ядра для конкретної програми, що відбувається з потоками виконання? У випадку, якщо ви робите це з ядром з HT, воно резервує 2 потоки виконання для програми.

  5.   Свічер - сказав він

    Ця команда може здатися не дуже корисною на комп’ютерах з декількома ядрами, але для тих з нас, хто має двоядерний процес, вона є цілком практичною. Наприклад, у мене є гра, яка, коли я її відкриваю, використовує всі ядра процесора, і якщо у мене також є інші програми, які потребують центрального процесора (наприклад, якийсь пошук з grep у великих файлах), тоді система гальмує. Рішення таке просте, як обмеження гри лише використанням одного з ядер.
    Я також погоджуюсь з lf, їм слід реально інтегрувати це в диспетчери завдань (ті, які я до цього пробував на Gentoo, думаю, що у них цього немає), особливо коли в Windows це щось, що існує з XP (клацніть правою кнопкою миші на процесі> Встановити спорідненість ... "), але деякий час тому я знайшов такий сценарій, який перетворює набір завдань на щось трохи інтуїтивніше (спочатку опубліковано тут і навіть показані деякі випадки, коли необхідно керувати використанням ядер):
    #!/bin/bash
    read -p 'Ingrese el ID del proceso en cuestión: ' ID
    read -p 'Ingrese la lista de procesadores separados por comas: ' P
    echo 'Su ID es '$ID' y los procesadores son '$P
    sudo taskset -p -c $P $ID
    read -p 'Listo, presione enter para finalizar' P

    З деякими модифікаціями замість ПІД може бути вказана назва процесу (або що він приймає обидва, і що він вирішує, коли цей параметр є одним чи іншим).

  6.   невірність - сказав він

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