Hogyan hozzárendelhetünk egy programot egy CPU maghoz a taskset segítségével

Mivel a többmagos processzorok egyre gyakoribbá válnak a szerverekben, a laptopokban vagy az asztali PC-kben, sőt a mobil eszközökben is, egyre több alkalmazást optimalizálnak az ilyen típusú rendszerek számára. Néha azonban hasznos lehet egy programot vagy folyamatot összekapcsolni egy vagy több meghatározott kernel. Nézzük meg, hogyan lehet megszerezni ...

Telepítse a taskset

A taskset eszköz a "util-linux" csomag része. A legtöbb Linux disztribúció alapértelmezés szerint előre telepített csomaggal érkezik. Abban az esetben, ha a taskset nem érhető el, a következőképpen lehet telepíteni:

En Debian / Ubuntu és származékai:

sudo apt-get install util-linux

En Fedora és származékai:

sudo yum telepítse a util-linuxot

Tekintse meg a futó folyamat CPU-affinitását

A processzor affinitási információinak lekéréséhez használja a következő formátumot:

feladatkészlet -p PID

Például egy folyamat CPU-jának affinitásának ellenőrzése a PID 2915 azonosítóval:

Taskset -p 2915

Az eredményt adja vissza:

pid 2915 aktuális affinitás-maszkja: ff

a taskset a jelenlegi CPU-affinitást hexadecimális bitmaszk formátumban adja vissza. A példában az affinitás (hexadecimális bitmaszkban ábrázolva) megfelel az "11111111" -nek bináris formátumban, ami azt jelenti, hogy a folyamat nyolc különböző CPU-mag (0 és 7) bármelyikén futtatható.

A hexadecimális bitmaszk legalacsonyabb bitje a 0 magazonosítónak felel meg, a második legalacsonyabb bit jobbról az 1. magazonosítóra, a harmadik legalacsonyabb bit a 2. magazonosítóra stb. Tehát például a "0x11" processzor affinitás a 0 és 4 magazonosítókat jelenti.

A taskset a CPU-affinitást a processzorok listájaként jelenítheti meg bitmaszk helyett, ami sokkal könnyebben olvasható. Ennek a formátumnak a használatához futtatnia kell a "-c" opciót. Például:

Taskset -cp 2915

Az eredményt adja vissza:

pid 2915 aktuális affinitási listája: 0-7

Kényszerít egy folyamatot egy adott kernelen történő futtatásra

A taskset használatával egy futó folyamat hozzárendelhető egy adott CPU maghoz. Ehhez a következő formátumot kell használnia:

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

Például egy folyamat hozzárendeléséhez a 0 és 4 magokhoz a következőket kell futtatnia:

feladatkészlet -p 0x11 9030

Mit eredményez az eredmény:

pid 9030 jelenlegi affinitás-maszkja: ff pid 9030 új affinitás-maszkja: 11

Ezzel egyenértékűen futtathatja:

feladatkészlet -cp 0,4 9030

A "-c" opcióval megadhatja a vesszőkkel elválasztott numerikus kernel-azonosítók listáját, vagy akár tartományokat is felvehet (például 0,2,5,6-10).

Indítson egy programot egy adott kernel használatával

A taskset lehetővé teszi egy új program elindítását is számos specifikus kern felhasználásával. Ehhez a következő formátumban kell használni:

COREMASK EXECUTABLE taskset

Például a VLC program indításához a CPU core ID 0-n használja a következő parancsot:

feladatkészlet -c 0 vlc

Csak egy programnak szenteljen magot

Bár a taskset lehetővé teszi a program hozzárendelését egy adott kernelhez, ez még nem jelenti azt, hogy nincsenek más programok vagy folyamatok, amelyek felhasználják. Ennek elkerülése és egy teljes kernel dedikálása egy adott programnak az "isolcpus" kernelparamétert kell használnia, amely lehetővé teszi egy kern lefoglalását az indítás során.

Ehhez hozzá kell adnia az "isolcpus =" paramétert a GRUB rendszermagsorához. Például a 0. és 1. azonosító mag fenntartásához adja hozzá az "isolcpus = 0,1" értéket.

Ha ez megtörtént, a Linux ütemezője nem rendel rendes folyamatokat a fenntartott kernelhez, hacsak nem külön rendelték hozzá a taskset-hez.

forrás: xmodule & taskset man oldalak.


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   peterczech dijo

    Jó poszt :).

  2.   Luis dijo

    Jó poszt, de trollkodási szándék nélkül ...

    Mi haszna van egy program hozzárendeléséhez egy adott kernelhez ???

    Értem; Ha van 12 magos számítógépe, akkor az lenne a logikus, ha egy bizonyos programot a 12 mag segítségével futtatnánk, és nem korlátoznánk, mivel így a lehető legnagyobb teljesítményt érjük el.

    Hasznosnak látom azt a lehetőséget, amely lehetővé teszi számunkra, hogy ne rendeljünk hozzá folyamatokat egy bizonyos kernelhez, annak kizárólagos használatát pedig egy adott programra hagyva.

    1.    jvk85321 dijo

      Van értelme, amit megemlít, ha hagyja, hogy a tervező az összes magot felhasználja, az erőforrások jobban kiegyensúlyozottak legyenek, de néha dedikált magra van szükség, például egy virtuális gép futtatásához egy adott feladattal, ennek a gépnek a teljesítménye jelentősen javul nincs több folyamat a hozzárendelt kernelben.

      atte
      jvk85321

      1.    használjuk a linuxot dijo

        Pontos! Köszi, jvk! 🙂

      2.    lf dijo

        De amikor létrehozza a virtuális gépet, arra kéri, hogy válassza ki a kiosztott CPU mennyiségét ... mi értelme választani ezt az értéket, ha végül az operációs rendszer ezt kihagyja és végrehajtja az összes CPU-n ... A példa ott nem a legjobb ...

        Ahhoz, hogy a Flash működjön a Windows 8.1 x64, AMD és Firefox rendszeren, ajánlott azt választani, hogy a Flash csak egy CPU-n futjon, azonban nekem nem működött. Kényelmes lenne, ha hozzáadná (ha még nincs meg) a különböző DE vagy legalább a KDE feladatkezelőihez.

      3.    lf dijo

        ah, nem értettem a megjegyzés végét ... Ehhez azonban be kell tiltani a virtuális gépet futtató CPU összes folyamatát. Vagy rendelje hozzá más CPU-khoz. Érdekes és nagyon jó megjegyzés.

    2.    Fernando dijo

      Zseniális szuperszámítógépek létrehozására használják

  3.   Luis dijo

    Megértett.

    Köszönet a tisztázásért.

  4.   Teck dijo

    Ha egy rendszermagot lefoglal egy adott programhoz, mi történik a végrehajtási szálakkal? Abban az esetben, ha azt egy HT-vel rendelkező kernellel végzi, 2 végrehajtási szálat tart fenn a program számára.

  5.   váltó dijo

    Lehet, hogy ez a parancs nem tűnik hasznosnak a többmagos számítógépeken, de nekünk, akiknek kettős magunk van, egészen praktikus. Például van egy játékom, aminek megnyitásakor az összes processzormagot felhasználja, és ha más programjaim is vannak, amelyekre szükség van a CPU-ra (például némi keresés nagy fájlokban a grep segítségével), akkor a rendszer lelassul. A megoldás olyan egyszerű, mint korlátozni a játékot, hogy csak az egyik magot használja.
    Egyetértek az lf-vel is, ezt valóban be kellene integrálniuk a feladatkezelőkbe (azokat, amelyeket eddig kipróbáltam a Gentoo-n, azt hiszem, egyiknek sincs), különösen, ha a Windows-ban valami létezik az XP óta (jobb klikk egy process> "Set affinity ..."), de valamikor ezelőtt megtaláltam a következő szkriptet, amely a taskset-et valamivel intuitívebbé változtatja (eredetileg megjelent itt sőt vannak olyan esetek, amikor szükséges a magok kezelésének kezelése):
    #!/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

    Bizonyos módosításokkal a folyamat neve megadható a PID helyett (vagy hogy mindkettőt elfogadja, és hogy eldönti, hogy ez a paraméter melyik vagy másik).

  6.   jorss dijo

    az új felhasználók számára nincs grafikus felület a taskset számára, jó lenne