Hur man tilldelar ett program till en CPU-kärna med hjälp av arbetsuppsättningen

I takt med att processorer med flera kärnor blir allt vanligare på servrar, bärbara datorer eller stationära datorer och till och med mobila enheter optimeras fler och fler applikationer för denna typ av system. Ibland kan det dock vara användbart att länka ett program eller en process till en eller flera specifika kärnor. Låt oss se hur man får det ...

Installera arbetsuppsättningen

Uppgiftsverktyget är en del av paketet "util-linux". De flesta Linux-distributioner levereras med paketet förinstallerat som standard. Om arbetsuppsättningen inte är tillgänglig är det möjligt att installera det enligt följande:

En Debian / Ubuntu och derivat:

sudo apt-get installera util-linux

En fedora och derivat:

sudo yum installera util-linux

Visa CPU-affiniteten för en pågående process

För att hämta CPU-affinitetsinformation för en process, använd följande format:

arbetsuppsättning -p PID

Till exempel för att kontrollera affiniteten hos CPU: n för en process med PID 2915:

arbetsuppsättning -p 2915

Returnerar resultatet:

pid 2915s nuvarande affinitetsmask: ff

arbetsuppsättning returnerar den aktuella CPU-affiniteten i ett hexadecimalt bitmaskformat. I exemplet motsvarar affiniteten (representerad i en hexadecimal bitmask) "11111111" i binärt format, vilket innebär att processen kan köras på vilken som helst av åtta olika CPU-kärnor (0 till 7).

Den lägsta biten i en hexadecimal bitmask motsvarar kärna ID 0, den näst lägsta biten från höger till kärna ID 1, den tredje lägsta biten till kärna ID 2, och så vidare. Så, till exempel, representerar en CPU-affinitet "0x11" kärna-ID: n 0 och 4.

arbetsuppsättning kan visa CPU-affinitet som en lista över processorer istället för en bitmask, vilket är mycket lättare att läsa. För att kunna använda detta format måste du köra arbetsuppsättning med alternativet "-c". Till exempel:

arbetsuppsättning -cp 2915

Returnerar resultatet:

pid 2915: s nuvarande affinitetslista: 0-7

Tvinga en process att köras på en specifik kärna

Med hjälp av arbetsuppsättning kan en pågående process tilldelas en specifik CPU-kärna. För att göra detta måste du använda följande format:

arbetsuppsättning -p COREMASK PID uppgiftsuppsättning -cp KÄRN-LISTA PID

Till exempel, för att tilldela en process till kärnor 0 och 4, skulle du köra:

arbetsuppsättning -p 0x11 9030

Vad resultatet returnerar:

pid 9030: s nuvarande affinitetsmask: ff pid 9030: s nya affinitetsmask: 11

På motsvarande sätt kan du köra:

arbetsuppsättning -cp 0,4 9030

Med alternativet "-c" kan du ange en lista med numeriska kärn-ID, separerade med kommatecken, eller så kan du till och med inkludera intervall (till exempel 0,2,5,6-10).

Starta ett program med en specifik kärna

Taskset gör det också möjligt att starta ett nytt program med ett antal specifika kärnor. För att göra detta måste den användas i följande format:

EXECUTABLE COREMASK-uppsättning

För att till exempel starta VLC-programmet på CPU-kärna ID 0, använd följande kommando:

arbetsuppsättning -c 0 vlc

Dedikera en kärna endast till ett visst program

Även om uppsättningen tillåter tilldelning av ett program till en viss kärna betyder det inte att det inte finns några andra program eller processer som använder det. För att undvika detta och ägna en hel kärna åt ett visst program måste du använda kärnparametern "isolcpus", som låter dig reservera en kärna under start.

För att göra detta måste du lägga till parametern "isolcpus =" i kärnraden i GRUB. Till exempel, för att reservera ID-kärnor 0 och 1, lägg till "isolcpus = 0,1".

När detta är klart kommer Linux-schemaläggaren inte att tilldela några vanliga processer till den reserverade kärnan, såvida det inte specifikt tilldelats uppgiftsuppsättningen.

Fuente: xmodulo & arbetsuppsättning man-sidor.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Petercheco sade

    Bra inlägg :).

  2.   Luis sade

    Bra inlägg men utan avsikt att trolling ...

    Vad är nyttan av att tilldela ett program till en viss kärna ???

    Jag menar; Om du har en dator med 12 kärnor, är det logiska att ett visst program körs med dessa 12 kärnor och inte begränsar det eftersom vi på så sätt får högsta möjliga prestanda.

    Vad jag ser är användbart är alternativet som gör att vi inte kan tilldela någon process till en viss kärna, vilket gör att den exklusiva används för ett visst program.

    1.    jvk85321 sade

      Det är vettigt vad du nämner, genom att låta planeraren använda alla kärnor, är resurserna bättre balanserade, men ibland krävs en exklusiv dediceringskärna, som att köra en virtuell maskin med en specifik uppgift, maskinens prestanda förbättras väsentligt inga fler processer som körs i den tilldelade kärnan.

      atte
      jvk85321

      1.    låt oss använda Linux sade

        Exakt! Tack, jvk! 🙂

      2.    lf sade

        Men när du skapar den virtuella maskinen ber den dig att välja hur mycket CPU som tilldelats ... vad är nyttan av att välja detta värde om operativsystemet i slutändan utelämnar detta och kör det på alla processorer ... För det är exemplet inte det bästa ...

        För att få Flash att fungera på Windows 8.1 x64, AMD och Firefox, rekommenderades det att välja att Flash bara ska köras på en CPU, men det fungerade inte för mig. Det skulle också vara bekvämt om du lägger till det (om det inte redan finns) till uppgiftshanterarna för olika DE, eller åtminstone KDE.

      3.    lf sade

        ah, jag hade inte förstått slutet på kommentaren ... Men för det måste alla processer på processorn som kör den virtuella maskinen förbjudas. Eller tilldela dem till andra processorer. Intressant och mycket bra kommentar.

    2.    Fernando sade

      Används för att skapa geniala superdatorer

  3.   Luis sade

    Det är förstått.

    Tack för klargörandet.

  4.   Teck sade

    Vad händer med exekveringstrådarna när du reserverar en kärna för ett specifikt program? Om du gör det med en kärna med HT reserverar den två exekveringstrådar för programmet.

  5.   växlare sade

    Det här kommandot kanske inte verkar särskilt användbart på datorer med flera kärnor, men för de av oss som har en Dual Core är det ganska praktiskt. Till exempel har jag ett spel som när jag öppnar använder det alla processorkärnor och om jag också har andra program som behöver CPU (till exempel viss sökning med grep i stora filer) så saktar systemet ner. Lösningen är så enkel som att begränsa spelet till att bara använda en av kärnorna.
    Jag håller också med lf, de borde verkligen integrera detta i uppgiftshanterare (de jag hittills har provat på Gentoo, jag tror att ingen har det), speciellt när det på Windows är något som finns sedan XP (högerklicka på process> "Ställ in affinitet ...") men för en tid sedan hittade jag följande skript som förvandlar arbetsuppsättningen till något lite mer intuitivt (ursprungligen publicerat här och det finns till och med några fall där det är nödvändigt att hantera användningen av kärnorna):
    #!/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

    Med vissa modifieringar kan namnet på processen anges i stället för PID (eller att den accepterar båda och att den bestämmer när parametern är den ena eller den andra).

  6.   jorss sade

    det finns inget grafiskt gränssnitt för arbetsuppsättning för nya användare det skulle vara trevligt