Sådan tildeles et program til en CPU-kerne ved hjælp af tasket

I det omfang multi-core processorer bliver mere og mere almindelige i servere, bærbare eller stationære pc'er, og endda i mobile enheder, er der flere og flere applikationer optimeret til denne type systemer. Nogle gange kan det dog være nyttigt at binde et program eller en proces til en eller flere specifikke kerner. Lad os se, hvordan du opnår det...

Installer opgavesæt

Opgavesætværktøjet er en del af util-linux-pakken. De fleste Linux-distributioner leveres med pakken forudinstalleret som standard. Hvis opgavesættet ikke er tilgængeligt, er det muligt at installere det som følger:

En Debian / Ubuntu og derivater:

sudo apt-get install util-linux

En Fedora og derivater:

sudo yum installer util-linux

Se CPU-affiniteten for en kørende proces

For at hente CPU-tilhørsforhold til en proces, skal du bruge følgende format:

opgavesæt -p PID

For eksempel for at kontrollere CPU-affiniteten af ​​en proces med PID 2915:

opgavesæt -p 2915

Returnerer resultatet:

pid 2915's nuværende affinitetsmaske: ff

taskset returnerer den aktuelle CPU-affinitet i et hexadecimalt bitmaskeformat. I eksemplet svarer affiniteten (repræsenteret i en hexadecimal bitmaske) til "11111111" i binært format, hvilket betyder, at processen kan køre på en hvilken som helst af otte forskellige CPU-kerner (0 til 7).

Den laveste bit i en hexadecimal bitmaske svarer til kerne ID 0, den næstlaveste bit fra højre til kerne ID 1, den tredjelaveste bit til kerne ID 2 osv. Så for eksempel repræsenterer en CPU-affinitet "0x11" kerne-id'erne 0 og 4.

taskset kan vise CPU-affinitet som en liste over processorer i stedet for en bitmaske, hvilket er meget nemmere at læse. For at bruge dette format skal du køre opgavesæt med "-c"-indstillingen. For eksempel:

opgavesæt -cp 2915

Returnerer resultatet:

pid 2915s nuværende affinitetsliste: 0-7

Tving en proces til at køre på en bestemt kerne

Ved hjælp af taskset kan en kørende proces tildeles en specifik CPU-kerne. For at gøre dette skal du bruge følgende format:

opgavesæt -p COREMASK PID opgavesæt -cp CORE-LIST PID

For for eksempel at tildele en proces til kernerne 0 og 4, skal du køre:

opgavesæt -p 0x11 9030

Hvilket giver resultatet:

pid 9030's nuværende affinitetsmaske: ff pid 9030's nye affinitetsmaske: 11

Tilsvarende kan man udføre:

opgavesæt -cp 0,4 9030

Med "-c"-indstillingen kan du angive en liste over numeriske kerne-id'er, adskilt af kommaer, eller endda inkludere områder (f.eks. 0,2,5,6-10).

Start et program ved hjælp af en bestemt kerne

taskset giver dig også mulighed for at starte et nyt program ved hjælp af en række specifikke kerner. For at gøre dette skal det bruges med følgende format:

opgavesæt COREMASK EXECUTABLE

For eksempel, for at starte VLC-programmet på CPU-kerne-ID 0, skal du bruge følgende kommando:

opgavesæt -c 0 vlc

Dediker en kerne udelukkende til et bestemt program

Selvom opgavesæt giver dig mulighed for at tildele et program til en bestemt kerne, betyder det ikke, at andre programmer eller processer ikke gør brug af det. For at undgå dette og dedikere en hel kerne til et bestemt program, skal du bruge isolcpus-kerneparameteren, som giver dig mulighed for at reservere en kerne ved opstart.

For at gøre dette skal du tilføje parameteren "isolcpus = " i kernelinjen i GRUB. For at reservere kerne-id'er 0 og 1 skal du f.eks. tilføje "isolcpus = 0,1".

Når dette er gjort, vil Linux-planlæggeren ikke tildele nogen almindelige processer til den reserverede kerne, medmindre den specifikt er tildelt opgavesæt.

kilde: xmodul & opgavesæt man-sider.


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   Petercheco sagde han

    Godt indlæg :).

  2.   Luis sagde han

    Godt indlæg, men ingen lyst til at trolde...

    Hvad er brugen af ​​at tildele et program til en bestemt kerne???

    Jeg mener; Hvis du har en computer med 12 kerner, ville det logiske være, at et bestemt program køres med disse 12 kerner og ikke begrænser det, da vi på den måde opnår den bedst mulige ydeevne.

    Det, jeg ser nyttigt, er muligheden, der tillader os ikke at tildele nogen proces til en bestemt kerne, og overlade dens eksklusive brug til et bestemt program.

    1.    jvk85321 sagde han

      Det, du nævner, giver mening, at lade planlæggeren bruge alle kernerne balancerer ressourcerne bedre, men nogle gange kræves der en eksklusiv dedikationskerne, som at køre en virtuel maskine med en specifik opgave, maskinens ydeevne forbedres væsentligt, da der ikke er flere processer, der kører på den tildelte kerne.

      atte
      jvk85321

      1.    lad os bruge linux sagde han

        Eksakt! Tak, jvk! 🙂

      2.    lf sagde han

        Men når du opretter den virtuelle maskine, beder den dig om at vælge antallet af tildelte CPU'er... hvad nytter det at vælge denne værdi, hvis operativsystemet i sidste ende udelader denne og udfører den på alle CPU'er... Dvs. hvorfor eksemplet ikke er det bedste...

        For at køre Flash på Windows 8.1 x64, AMD og Firefox blev det anbefalet at vælge Flash til kun at køre på en CPU, men det virkede ikke for mig. Det ville også være praktisk, hvis de tilføjer det (hvis det ikke er der) til opgavestyringerne for de forskellige DE'er, eller i det mindste til KDE's.

      3.    lf sagde han

        Åh, jeg havde ikke forstået slutningen af ​​kommentaren... Men for det skulle alle processer på CPU'en, der kører den virtuelle maskine, forbydes. Eller tildel dem til andre CPU'er. Interessant og meget god kommentar.

    2.    Fernando sagde han

      Det bruges til at skabe geniale supercomputere

  3.   Luis sagde han

    Det forstås.

    Tak for afklaringen.

  4.   Teck sagde han

    Når man reserverer en kerne til et specifikt program, hvad sker der så med udførelsestrådene I tilfælde af at det gøres med en kerne med HT, reserverer det 2 udførelsestråde til programmet?

  5.   skifter sagde han

    Denne kommando virker måske ikke særlig nyttig på computere med flere kerner, men for dem af os, der har en Dual Core, er den ret praktisk. Så for eksempel har jeg et spil, der når jeg åbner det bruger alle kernerne i processoren, og hvis jeg også har andre programmer, der har brug for CPU'en (som noget grep-søgning på store filer), så bremser systemet. Løsningen er så simpel som at begrænse spillet til kun at bruge en af ​​kernerne.
    Jeg er også enig med, at de virkelig burde integrere dette i task managers (af dem, jeg har prøvet indtil videre på Gentoo, tror jeg ikke nogen har det), især når det på Windows er noget, der har eksisteret siden XP (højre klik på en proces > "Indstil affinitet..."), men jeg fandt følgende script for et stykke tid tilbage, der gør opgavesættet en smule mere intuitivt (det blev oprindeligt postet her og viser endda nogle tilfælde, hvor det er nødvendigt at styre brugen af ​​kernerne):
    #!/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 nogle ændringer kunne det angives navnet på processen i stedet for PID'en (eller accepter begge dele og beslut, hvornår den parameter er det ene eller det andet).

  6.   jorss sagde han

    der er ingen grafisk grænseflade til opgavesæt for nye brugere, det ville være rart