Hvordan tilordne et program til en CPU-kjerne ved hjelp av oppgavesett

Etter hvert som flerkjerneprosessorer blir mer og mer vanlige på servere, bærbare datamaskiner eller stasjonære PC-er og til og med mobile enheter, blir flere og flere applikasjoner optimalisert for denne typen system. Imidlertid kan det noen ganger være nyttig å koble et program eller en prosess til en eller flere spesifikke kjerner. La oss se hvordan du får det ...

Installer oppgavesett

Oppgavesettet er en del av "util-linux" -pakken. De fleste Linux-distribusjoner kommer med pakken forhåndsinstallert som standard. Hvis oppgavesett ikke er tilgjengelig, er det mulig å installere det på følgende måte:

En Debian / Ubuntu og derivater:

sudo apt-get install util-linux

En Fedora og derivater:

sudo yum installer util-linux

Se CPU-tilhørigheten til en prosess som kjører

For å hente CPU-tilknytningsinformasjon for en prosess, bruk følgende format:

oppgavesett -p PID

For eksempel for å sjekke tilhørigheten til CPU for en prosess med PID 2915:

oppgavesett -p 2915

Returnerer resultatet:

pid 2915s nåværende affinitetsmaske: ff

oppgavesett returnerer gjeldende CPU-affinitet i et heksadesimalt bitmaskeformat. I eksemplet tilsvarer affiniteten (representert i en heksadesimal bitmaske) "11111111" i binært format, noe som betyr at prosessen kan kjøres på hvilken som helst av åtte forskjellige CPU-kjerner (0 til 7).

Den laveste biten i en heksadesimal bitmaske tilsvarer kjerne-ID 0, den nest laveste biten fra høyre til kjerne-ID 1, den tredje laveste biten til kjerne-ID 2, og så videre. Så for eksempel representerer en CPU-affinitet "0x11" kjerne-ID-ene 0 og 4.

oppgavesett kan vise CPU-tilhørighet som en liste over prosessorer i stedet for en bitmaske, noe som er mye lettere å lese. For å bruke dette formatet, må du kjøre oppgavesett med alternativet "-c". For eksempel:

oppgavesett -cp 2915

Returnerer resultatet:

pid 2915s nåværende affinitetsliste: 0-7

Tving en prosess til å kjøre på en bestemt kjerne

Ved å bruke oppgavesett kan du tilordne en prosess som kjører til en bestemt CPU-kjerne. For å gjøre dette må du bruke følgende format:

oppgavesett -p COREMASK PID oppgavesett -cp KJERNELISTE PID

Hvis du for eksempel vil tildele en prosess til kjerner 0 og 4, vil du kjøre:

oppgavesett -p 0x11 9030

Hva resultatet gir:

pid 9030s nåværende affinitetsmaske: ff pid 9030s nye affinitetsmaske: 11

Tilsvarende kan du løpe:

oppgavesett -cp 0,4 9030

Med alternativet "-c" kan du spesifisere en liste over numeriske kjerne-IDer, atskilt med kommaer, eller du kan til og med inkludere områder (for eksempel 0,2,5,6-10).

Start et program ved hjelp av en bestemt kjerne

oppgavesett tillater også å starte et nytt program ved hjelp av et antall spesifikke kjerner. For å gjøre dette må den brukes i følgende format:

COREMASK EXECUTABLE oppgaver

For eksempel, for å starte VLC-programmet på CPU-kjernen ID 0, bruker du følgende kommando:

oppgavesett -c 0 vlc

Dediker en kjerne bare til et bestemt program

Selv om oppgavesettet tillater å tilordne et program til en bestemt kjerne, betyr ikke det at det ikke er andre programmer eller prosesser som bruker det. For å unngå dette og vie en hel kjerne til et bestemt program, må du bruke kjerneparameteren "isolcpus", som lar deg reservere en kjerne under oppstart.

For å gjøre dette må du legge til parameteren "isolcpus =" i kjernelinjen i GRUB. Hvis du for eksempel vil reservere ID-kjerner 0 og 1, legger du til "isolcpus = 0,1".

Når dette er gjort, tilordner ikke Linux-planleggeren noen vanlige prosesser til den reserverte kjernen, med mindre det er spesifikt tilordnet oppgavesettet.

Fuente: xmodule & oppgavesett mansider.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   peterczech sa

    Bra innlegg :).

  2.   Luis sa

    Bra innlegg, men uten ånd av trolling ...

    Hva nytter det å tilordne et program til en bestemt kjerne ???

    Jeg mener; Hvis du har en datamaskin med 12 kjerner, vil det logiske være at et bestemt program kjøres ved hjelp av de 12 kjernene og ikke begrenser det, siden vi oppnår høyest mulig ytelse.

    Det jeg ser er nyttig, er alternativet som lar oss ikke tilordne noen prosess til en bestemt kjerne, og overlate den eksklusive bruken til et bestemt program.

    1.    jvk85321 sa

      Det er fornuftig det du nevner, ved å la planleggeren bruke alle kjernene, er ressursene bedre balansert, men noen ganger er det nødvendig med en dedikert kjerne, for eksempel å kjøre en virtuell maskin med en bestemt oppgave, og maskinens ytelse forbedres vesentlig når ingen flere prosesser som kjører i den tildelte kjernen.

      atte
      jvk85321

      1.    la oss bruke linux sa

        Nøyaktig! Takk, jvk! 🙂

      2.    lf sa

        Men når du lager den virtuelle maskinen, ber den deg om å velge hvor mye CPU som er tildelt ... hva nytter det å velge denne verdien hvis operativsystemet til slutt utelater dette og utfører det på alle CPUer ... For det eksemplet er ikke det beste ...

        For å få Flash til å fungere på Windows 8.1 x64, AMD og Firefox, ble det anbefalt å velge at Flash bare kjører på en CPU, men det fungerte ikke for meg. Det ville også være praktisk hvis du legger til det (hvis det ikke allerede er der) til oppgavebehandlingene til de forskjellige DE, eller i det minste KDE-ene.

      3.    lf sa

        ah, jeg hadde ikke forstått slutten av kommentaren ... Men for det, måtte alle prosesser på prosessoren som kjører den virtuelle maskinen, forbys. Eller tilordne dem til andre CPUer. Interessant og veldig god kommentar.

    2.    Fernando sa

      Brukes til å lage geniale superdatamaskiner

  3.   Luis sa

    Det er forstått.

    Takk for oppklaringen.

  4.   Teak sa

    Når du reserverer en kjerne for et bestemt program, hva skjer med kjøringstrådene? Hvis du gjør det med en kjerne med HT, reserverer den to kjøringstråder for programmet.

  5.   bytter sa

    Denne kommandoen virker kanskje ikke veldig nyttig på datamaskiner med flere kjerner, men for de av oss som har en Dual Core er det ganske praktisk. For eksempel har jeg et spill som når jeg åpner bruker det alle prosessorkjernene, og hvis jeg også har andre programmer som trenger CPU (som noe søk med grep i store filer), blir systemet tregere. Løsningen er så enkel som å begrense spillet til å bare bruke en av kjernene.
    Jeg er også enig med lf, de burde virkelig integrere dette i oppgaveledere (de jeg har prøvd så langt på Gentoo, jeg tror ingen har det), spesielt når det i Windows er noe som eksisterer siden XP (høyreklikk på en prosess> "Set affinity ...") men for en tid tilbake fant jeg følgende skript som gjør tasket til noe litt mer intuitivt (opprinnelig publisert her og til og med noen tilfeller vises der det er nødvendig å administrere bruken av kjernene):
    #!/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 noen modifikasjoner kan navnet på prosessen angis i stedet for PID (eller at den godtar begge deler og at den bestemmer når parameteren er en eller annen ting).

  6.   jorss sa

    Det er ikke noe grafisk grensesnitt for oppgavesett for nye brukere. Det ville være fint