Как да присвоите програма на ядро ​​на процесора, използвайки набор от задачи

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

Инсталирайте набора от задачи

Инструментът за задачи е част от пакета "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 & страници с набори от задачи.


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

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

  1.   петерчеко каза той

    Добър пост :).

  2.   Луис каза той

    Добър пост, но без намерение за тролинг ...

    Каква е ползата от присвояването на програма на конкретно ядро ​​???

    Имам предвид; Ако имате компютър с 12 ядра, логичното би било дадена програма да бъде изпълнена с помощта на тези 12 ядра и да не го ограничава, тъй като по този начин получаваме възможно най-висока производителност.

    Това, което виждам, е полезна опцията, която ни позволява да не присвояваме никакъв процес на определено ядро, оставяйки изключителното му използване на определена програма.

    1.    JVK85321. каза той

      Логично е това, което споменавате, като оставите на плановика да използва всички ядра, ресурсите са по-балансирани, но понякога се изисква специално ядро, като например стартиране на виртуална машина със специфична задача, производителността на тази машина се подобрява значително, когато не още процеси, изпълняващи се в назначеното ядро.

      atte
      JVK85321.

      1.    нека използваме linux каза той

        Точно! Благодаря, jvk! 🙂

      2.    lf каза той

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

        За да накарате Flash да работи на Windows 8.1 x64, AMD и Firefox, беше препоръчително да изберете Flash да работи само на един процесор, но не ми се получи. Също така би било удобно, ако го добавите (ако вече не е там) към диспечерите на задачите на различните DE или поне на KDE.

      3.    lf каза той

        ах, не бях разбрал края на коментара ... Но за това всички процеси на процесора, работещ на виртуалната машина, ще трябва да бъдат забранени. Или да ги присвоите на други процесори. Интересен и много добър коментар.

    2.    Fernando каза той

      Използва се за създаване на гениални суперкомпютри

  3.   Луис каза той

    Разбрано е.

    Благодаря за разяснението.

  4.   Тек каза той

    Когато резервирате ядро ​​за конкретна програма, какво се случва с нишките за изпълнение? В случай, че го направите с ядро ​​с HT, то запазва 2 нишки за изпълнение за програмата.

  5.   Суичър каза той

    Тази команда може да не изглежда много полезна за компютри с няколко ядра, но за тези от нас, които имат 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 (или че приема и двете, и че решава кога този параметър е един или друг).

  6.   jorss каза той

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