Kai kelių branduolių procesoriai tampa vis labiau paplitę serveriuose, nešiojamuosiuose kompiuteriuose ar staliniuose kompiuteriuose ir net mobiliuosiuose įrenginiuose, vis daugiau programų yra optimizuotos šio tipo sistemoms. Tačiau kartais gali būti naudinga susieti programą ar procesą su vienu ar keliais konkrečiais branduoliais. Pažiūrėkime, kaip tai gauti ...
Įdiekite taskset
„Taskset“ įrankis yra „util-linux“ paketo dalis. Daugumoje „Linux“ paskirstymų paketas iš anksto įdiegtas pagal numatytuosius nustatymus. Jei nėra „tasket“, jį galima įdiegti taip:
En „Debian“ / „Ubuntu“ ir dariniai:
sudo apt-get install util-linux
En Minkšta fetrinė skrybėlė ir dariniai:
sudo yum įdiekite util-linux
Peržiūrėkite vykdomo proceso procesoriaus bendrumą
Norėdami gauti procesoriaus bendrų procesų informaciją, naudokite šį formatą:
užduočių rinkinys -p PID
Pavyzdžiui, norėdami patikrinti proceso su PID 2915 procesoriaus giminingumą:
Taskset -p 2915
Pateikia rezultatą:
PID 2915 dabartinė giminingumo kaukė: ff
taskset grąžina dabartinį procesoriaus afinitetą šešioliktainės bitų kaukės formatu. Pavyzdyje afinitetas (pavaizduotas šešioliktainių bitų kauke) atitinka „11111111“ dvejetainiu formatu, o tai reiškia, kad procesas gali vykti bet kuriame iš aštuonių skirtingų procesoriaus branduolių (nuo 0 iki 7).
Mažiausias bitas šešioliktainėje bitų kaukėje atitinka šerdies ID 0, antras žemiausias bitas iš dešinės į šerdies ID 1, trečias mažiausias bitas iki šerdies ID 2 ir kt. Pavyzdžiui, procesoriaus afinitetas „0x11“ reiškia pagrindinius 0 ir 4 ID.
Taskset gali rodyti procesoriaus giminingumą kaip procesorių sąrašą, o ne bitmaską, kurį daug lengviau perskaityti. Norėdami naudoti šį formatą, turite paleisti užduotį naudodami parinktį „-c“. Pavyzdžiui:
Taskset -cp 2915
Pateikia rezultatą:
dabartinis „pid 2915“ giminingumo sąrašas: 0–7
Priverskite procesą vykdyti konkrečiame branduolyje
Naudojant „taskets“, vykdomas procesas gali būti priskirtas konkrečiam procesoriaus branduoliui. Norėdami tai padaryti, turite naudoti šį formatą:
taskset -p COREMASK PID taskset -cp CORE-LIST PID
Pvz., Norėdami priskirti procesą 0 ir 4 šerdims, vykdykite:
užduočių rinkinys -p 0x11 9030
Ką grąžina rezultatas:
„Pid 9030“ dabartinė giminingumo kaukė: „ff pid 9030“ naujoji giminingumo kaukė: 11
Lygiaverčiai galite paleisti:
uždaviniai -cp 0,4 9030
Naudodami parinktį „-c“ galite nurodyti skaitinių branduolių ID sąrašą, atskirtą kableliais, arba galite įtraukti diapazonus (pvz., 0,2,5,6–10).
Paleiskite programą naudodami konkretų branduolį
Taskset taip pat leidžia paleisti naują programą, naudojant daugybę konkrečių branduolių. Norėdami tai padaryti, jis turi būti naudojamas tokiu formatu:
Vykdomoji koremaskos užduotis
Pvz., Norėdami paleisti VLC programą CPU core ID 0 naudokite šią komandą:
uždaviniai -c 0 vlc
Skirkite branduolį tik tam tikrai programai
Nors taskset leidžia priskirti programą tam tikram branduoliui, tai nereiškia, kad nėra kitų programų ar procesų, kurie ja naudojasi. Norėdami to išvengti ir paskirti visą branduolį konkrečiai programai, turite naudoti branduolio parametrą „isolcpus“, kuris leidžia rezervuoti branduolį paleidimo metu.
Norėdami tai padaryti, GRUB branduolio eilutėje turite pridėti parametrą "isolcpus =". Pavyzdžiui, norėdami rezervuoti 0 ir 1 ID šerdis, pridėkite „isolcpus = 0,1“.
Kai tai bus padaryta, „Linux“ tvarkaraštis nepriskirs jokių reguliarių procesų rezervuotam branduoliui, nebent specialiai priskirtas užduotims.
Fuente: xmodulis & taskset žmogaus puslapiai.
Geras įrašas :).
Geras įrašas, bet neketinant trollinti ...
Kuo naudinga priskirti programą konkrečiam branduoliui ???
Turiu omeny; Jei turite kompiuterį su 12 branduolių, logiška būtų tai, kad tam tikra programa būtų vykdoma naudojant tuos 12 branduolių, ir to neapribotų, nes tokiu būdu gauname kuo didesnį našumą.
Mano nuomone, yra naudinga parinktis, leidžianti nepriskirti jokio proceso tam tikram branduoliui, paliekant jo naudojimą tik tam tikrai programai.
Tikslinga tai, ką jūs minite, leidžiant planuotojui naudoti visas šerdis, ištekliai yra geriau subalansuoti, tačiau kartais reikia tam skirto branduolio, pavyzdžiui, paleisti virtualią mašiną su konkrečia užduotimi, tos mašinos našumas žymiai pagerėja, kai nebėra procesų, veikiančių priskirtame branduolyje.
Atte
jvk85321
Tiksliai! Ačiū, jvk! 🙂
Bet kai kuriate virtualią mašiną, ji paprašo pasirinkti priskirtą procesoriaus kiekį ... kokia naudinga pasirinkti šią vertę, jei galų gale operacinė sistema to praleidžia ir vykdo ją visuose procesoriuose ... Nes čia pavyzdys nėra geriausias ...
Kad „Flash“ veiktų „Windows 8.1 x64“, „AMD“ ir „Firefox“, buvo rekomenduojama pasirinkti, kad „Flash“ veiktų tik su vienu procesoriumi, tačiau man tai neveikė. Taip pat būtų patogu, jei jį pridėtumėte (jei jo dar nėra) prie skirtingų DE ar bent jau KDE užduočių valdytojų.
ak, aš nesupratau komentaro pabaigos ... Bet tam teks uždrausti visus procesorius, veikiančius virtualioje mašinoje. Arba priskirkite juos kitiems procesoriams. Įdomus ir labai geras komentaras.
Naudojamas genialiems superkompiuteriams kurti
Tai suprantama.
Ačiū už paaiškinimą.
Kas vyksta su vykdymo gijomis rezervuojant branduolį konkrečiai programai? Tuo atveju, jei tai darote su branduoliu su „HT“, programa pasilieka 2 vykdymo gijas.
Ši komanda gali pasirodyti nelabai naudinga kompiuteriuose su keliais branduoliais, tačiau mums, turintiems dvigubą branduolį, ji yra gana praktiška. Pvz., Turiu žaidimą, kurį atidarius naudojamas visas procesoriaus šerdis ir jei turiu kitų programų, kurioms reikalingas procesorius (pvz., Kai kurios paieškos su grep dideliuose failuose), tada sistema sulėtėja. Sprendimas yra toks paprastas, kaip apriboti žaidimą, kad būtų naudojamas tik vienas iš branduolių.
Aš taip pat sutinku su lf, jie tikrai turėtų tai integruoti į užduočių tvarkykles (tas, kurias iki šiol bandžiau „Gentoo“, manau, kad nė vienas jos neturi), ypač kai „Windows“ sistemoje tai egzistuoja nuo XP (dešiniuoju pelės mygtuku spustelėkite procesas> „Nustatyti bendrumą ...“), bet prieš kurį laiką radau šį scenarijų, kuris paverčia užduotį šiek tiek intuityvesniu (iš pradžių paskelbtas čia ir netgi yra atvejų, kai reikia valdyti šerdžių naudojimą):
#!/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
Atlikus tam tikrus pakeitimus, vietoje PID galima nurodyti proceso pavadinimą (arba kad jis priima abu ir kad jis nusprendžia, kada tas parametras yra vienas ar kitas).
nėra grafinės sąsajos, skirtos naujiems vartotojams, būtų malonu