Тъй като многоядрените процесори стават все по-често срещани както в сървърите, така и в лаптопите или настолните компютри и дори в мобилните устройства, все повече приложения се оптимизират за този тип система. Понякога обаче може да е полезно да свържете програма или процес с едно или повече специфични ядра. Нека да видим как да го получим ...
Инсталирайте набора от задачи
Инструментът за задачи е част от пакета "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 на CPU core ID 0, използвайте следната команда:
набор от задачи -c 0 vlc
Посветете ядро само на определена програма
Въпреки че набор от задачи позволява присвояване на програма към определено ядро, това не означава, че няма други програми или процеси, които да го използват. За да избегнете това и да посветите цяло ядро на определена програма, трябва да използвате параметъра на ядрото "isolcpus", който ви позволява да резервирате ядро по време на стартиране.
За да направите това, трябва да добавите параметъра "isolcpus =" в реда на ядрото в GRUB. Например, за да резервирате ID ядра 0 и 1, добавете "isolcpus = 0,1".
След като това бъде направено, планировчикът на Linux няма да присвоява никакви редовни процеси на запазеното ядро, освен ако не е специално назначен със набор от задачи.
Fuente: xmodulo & страници с набори от задачи.
Добър пост :).
Добър пост, но без намерение за тролинг ...
Каква е ползата от присвояването на програма на конкретно ядро ???
Имам предвид; Ако имате компютър с 12 ядра, логичното би било дадена програма да бъде изпълнена с помощта на тези 12 ядра и да не го ограничава, тъй като по този начин получаваме възможно най-висока производителност.
Това, което виждам, е полезна опцията, която ни позволява да не присвояваме никакъв процес на определено ядро, оставяйки изключителното му използване на определена програма.
Логично е това, което споменавате, като оставите на плановика да използва всички ядра, ресурсите са по-балансирани, но понякога се изисква специално ядро, като например стартиране на виртуална машина със специфична задача, производителността на тази машина се подобрява значително, когато не още процеси, изпълняващи се в назначеното ядро.
atte
JVK85321.
Точно! Благодаря, jvk! 🙂
Но когато създавате виртуалната машина, тя ви моли да изберете размера на разпределения процесор ... каква е ползата от избора на тази стойност, ако в крайна сметка операционната система пропусне това и го изпълнява на всички процесори ... За там примерът не е най-добрият ...
За да накарате Flash да работи на Windows 8.1 x64, AMD и Firefox, беше препоръчително да изберете Flash да работи само на един процесор, но не ми се получи. Също така би било удобно, ако го добавите (ако вече не е там) към диспечерите на задачите на различните DE или поне на KDE.
ах, не бях разбрал края на коментара ... Но за това всички процеси на процесора, работещ на виртуалната машина, ще трябва да бъдат забранени. Или да ги присвоите на други процесори. Интересен и много добър коментар.
Използва се за създаване на гениални суперкомпютри
Разбрано е.
Благодаря за разяснението.
Когато резервирате ядро за конкретна програма, какво се случва с нишките за изпълнение? В случай, че го направите с ядро с HT, то запазва 2 нишки за изпълнение за програмата.
Тази команда може да не изглежда много полезна за компютри с няколко ядра, но за тези от нас, които имат Dual Core, е доста практична. Например имам игра, която когато я отворя използва всички ядра на процесора и ако имам и други програми, които се нуждаят от процесора (като например някакво търсене с 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
С някои модификации името на процеса може да бъде посочено вместо PID (или че приема и двете, и че решава кога този параметър е един или друг).
няма графичен интерфейс за набор от задачи за нови потребители, би било хубаво