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.
Bra innlegg :).
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.
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
Nøyaktig! Takk, jvk! 🙂
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.
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.
Brukes til å lage geniale superdatamaskiner
Det er forstått.
Takk for oppklaringen.
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.
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).
Det er ikke noe grafisk grensesnitt for oppgavesett for nye brukere. Det ville være fint