Оскільки багатоядерні процесори дедалі частіше зустрічаються на серверах, ноутбуках або настільних ПК і навіть мобільних пристроях, все більше і більше додатків оптимізуються для цього типу систем. Однак іноді може бути корисно пов’язати програму чи процес з одним або кількома конкретними ядрами. Давайте подивимося, як його отримати ...
Встановіть набір завдань
Інструмент набору завдань є частиною пакету "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 & сторінки завдань набору завдань -.
Хороший пост :).
Хороший пост, але без наміру тролінгу ...
Яка користь від призначення програми певному ядру ???
Я маю на увазі; Якщо у вас є комп’ютер з 12 ядрами, логічним буде те, що певна програма буде виконана за допомогою цих 12 ядер, а не обмежувати її, оскільки таким чином ми отримуємо максимально високу продуктивність.
На мою думку, корисною є опція, яка дозволяє нам не призначати будь-який процес певному ядру, залишаючи його ексклюзивне використання певній програмі.
Це має сенс, що ви згадуєте, дозволяючи планувальнику використовувати всі ядра, ресурси краще збалансовані, але іноді потрібно ексклюзивне ядро цілеспрямованості, наприклад, запуск віртуальної машини з певним завданням, продуктивність цієї машини значно покращується, коли більше немає процесів, що працюють у призначеному ядрі.
Ув
jvk85321
Точно! Дякую, jvk! 🙂
Але коли ви створюєте віртуальну машину, вона просить вас вибрати кількість виділеного процесора ... яка користь від вибору цього значення, якщо врешті-решт операційна система це опустить і виконає на всіх процесорах ... Бо там приклад не найкращий ...
Щоб Flash працював у Windows 8.1 x64, AMD та Firefox, рекомендувалось вибрати, що Flash працює лише на центральному процесорі, однак у мене це не працювало. Також було б зручно, якщо ви додасте його (якщо його ще немає) до диспетчерів завдань різних DE або, принаймні, KDE.
ах, я не зрозумів кінця коментаря ... Але для цього всі процеси на центральному процесорі, на якому працює віртуальна машина, повинні бути заборонені. Або призначити їх іншим процесорам. Цікавий і дуже хороший коментар.
Використовується для створення геніальних суперкомп’ютерів
Це зрозуміло.
Дякую за роз'яснення.
При зарезервуванні ядра для конкретної програми, що відбувається з потоками виконання? У випадку, якщо ви робите це з ядром з HT, воно резервує 2 потоки виконання для програми.
Ця команда може здатися не дуже корисною на комп’ютерах з декількома ядрами, але для тих з нас, хто має двоядерний процес, вона є цілком практичною. Наприклад, у мене є гра, яка, коли я її відкриваю, використовує всі ядра процесора, і якщо у мене також є інші програми, які потребують центрального процесора (наприклад, якийсь пошук з 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
З деякими модифікаціями замість ПІД може бути вказана назва процесу (або що він приймає обидва, і що він вирішує, коли цей параметр є одним чи іншим).
немає графічного інтерфейсу для набору завдань для нових користувачів, було б непогано