Pe măsură ce procesoarele multi-core devin din ce în ce mai frecvente în servere, laptopuri sau PC-uri desktop și chiar dispozitive mobile, tot mai multe aplicații sunt optimizate pentru acest tip de sistem. Cu toate acestea, uneori poate fi util să legați un program sau proces la unul sau mai multe nuclee specifice. Să vedem cum să-l obținem ...
Instalați setul de activități
Instrumentul pentru seturi de sarcini face parte din pachetul „util-linux”. Majoritatea distribuțiilor Linux vin cu pachetul preinstalat în mod implicit. În cazul în care setul de sarcini nu este disponibil, este posibil să îl instalați după cum urmează:
En Debian / Ubuntu și derivate:
sudo apt-get install util-linux
En Fedora și derivate:
sudo yum instala util-linux
Vizualizați afinitatea procesorului unui proces care rulează
Pentru a prelua informații de afinitate CPU pentru un proces, utilizați următorul format:
taskset -p PID
De exemplu, pentru a verifica afinitatea procesorului unui proces cu PID 2915:
tasket -p 2915
Returnează rezultatul:
masca de afinitate actuală a pid 2915: ff
taskset returnează afinitatea curentă a procesorului într-un format de mască de biți hexazecimală. În exemplu, afinitatea (reprezentată într-o mască de biți hexazecimală) corespunde „11111111” în format binar, ceea ce înseamnă că procesul poate rula pe oricare dintre cele opt nuclee CPU diferite (0 până la 7).
Cel mai mic bit dintr-o mască de biți hexazecimală corespunde nucleului ID 0, al doilea bit cel mai mic de la dreapta la nucleul ID 1, al treilea bit cel mai mic la nucleul ID 2 etc. Deci, de exemplu, o afinitate a procesorului "0x11" reprezintă ID-urile de bază 0 și 4.
setul de activități poate afișa afinitatea procesorului ca o listă de procesoare în loc de o mască de biți, care este mult mai ușor de citit. Pentru a utiliza acest format, trebuie să rulați setul de sarcini cu opțiunea „-c”. De exemplu:
set de activități -cp 2915
Returnează rezultatul:
Lista actuală de afinitate a pid 2915: 0-7
Forțați un proces să ruleze pe un anumit nucleu
Utilizând setul de sarcini, un proces în execuție poate fi atribuit unui anumit nucleu CPU. Pentru a face acest lucru, trebuie să utilizați următorul format:
taskset -p COREMASK PID taskset -cp CORE-LIST PID
De exemplu, pentru a atribui un proces nucleelor 0 și 4, ați rula:
set de activități -p 0x11 9030
Ce returnează rezultatul:
masca de afinitate actuală a pid 9030: ff Masca de afinitate nouă a pid 9030: 11
În mod echivalent, puteți rula:
set de activități -cp 0,4 9030
Cu opțiunea „-c”, puteți specifica o listă de ID-uri de nucleu numerice, separate prin virgule, sau puteți include chiar intervale (de exemplu, 0,2,5,6-10).
Lansați un program folosind un anumit nucleu
Tasket-ul permite, de asemenea, lansarea unui nou program folosind un număr de nuclee specifice. Pentru a face acest lucru, acesta trebuie utilizat în următorul format:
Set de sarcini EXECUTABLE COREMASK
De exemplu, pentru a porni programul VLC pe ID-ul nucleului CPU 0, utilizați următoarea comandă:
set de activități -c 0 vlc
Dedicați un nucleu doar unui anumit program
Deși setul de sarcini permite atribuirea unui program unui anumit nucleu, asta nu înseamnă că nu există alte programe sau procese care să îl folosească. Pentru a evita acest lucru și pentru a dedica un întreg kernel unui anumit program, trebuie să utilizați parametrul kernel "isolcpus", care vă permite să rezervați un kernel în timpul pornirii.
Pentru a face acest lucru, trebuie să adăugați parametrul "isolcpus =" în linia kernel din GRUB. De exemplu, pentru a rezerva ID-urile 0 și 1, adăugați „isolcpus = 0,1”.
Odată ce acest lucru este făcut, programatorul Linux nu va atribui niciun proces regulat nucleului rezervat, cu excepția cazului în care este atribuit în mod specific cu setul de activități.
Fuente: xmodule & pagini man set de sarcini.
Post bun :).
Post bun, dar fără intenția de a trola ...
La ce folosește atribuirea unui program unui anumit nucleu ???
Vreau să spun; Dacă aveți un computer cu 12 nuclee, lucru logic ar fi ca un anumit program să fie executat folosind acele 12 nuclee și să nu-l limitați, deoarece astfel obținem cele mai mari performanțe posibile.
Ceea ce văd este util este opțiunea care ne permite să nu atribuim niciun proces unui anumit nucleu, lăsând utilizarea sa exclusivă unui anumit program.
Are sens ceea ce menționați, lăsând planificatorul să utilizeze toate nucleele, resursele sunt mai bine echilibrate, dar uneori este necesar un nucleu dedicat, cum ar fi rularea unei mașini virtuale cu o sarcină specifică, performanța mașinii respective se îmbunătățește substanțial nu mai există procese care rulează în nucleul atribuit.
Atte
jvk85321
Corect! Mulțumesc, jvk! 🙂
Dar când creați mașina virtuală, vă cere să alegeți cantitatea de CPU alocată ... la ce folosește alegerea acestei valori dacă în cele din urmă sistemul de operare omite acest lucru și îl execută pe toate procesoarele ... Exemplul nu este cel mai bun acolo ...
Pentru ca Flash să funcționeze pe Windows 8.1 x64, AMD și Firefox, s-a recomandat să alegi ca Flash să ruleze doar pe un singur CPU, totuși nu a funcționat pentru mine. De asemenea, ar fi convenabil dacă îl adăugați (dacă nu există deja) la managerii de sarcini ai diferitelor DE, sau cel puțin pe cel KDE.
ah, nu am înțeles sfârșitul comentariului ... Dar pentru aceasta, toate procesele de pe CPU care rulează mașina virtuală ar trebui să fie interzise. Sau alocați-le altor procesoare. Comentariu interesant și foarte bun.
Folosit pentru a crea supercalculatoare geniale
Este inteles.
Multumesc pentru clarificare.
Când rezervați un kernel pentru un anumit program, ce se întâmplă cu firele de execuție? În cazul în care îl faceți cu un kernel cu HT, acesta rezervă 2 fire de execuție pentru program.
Este posibil ca această comandă să nu pară foarte utilă pe computerele cu mai multe nuclee, dar pentru aceia dintre noi care dețin un Dual Core este destul de practic. De exemplu, am un joc care atunci când îl deschid folosește toate nucleele procesorului și dacă am și alte programe care au nevoie de CPU (cum ar fi unele căutări cu grep în fișiere mari), atunci sistemul încetinește. Soluția este la fel de simplă ca limitarea jocului la utilizarea unui singur nucleu.
De asemenea, sunt de acord cu lf, ei ar trebui să integreze cu adevărat acest lucru în managerii de sarcini (cei pe care i-am încercat până acum pe Gentoo, cred că niciunul nu îl are), mai ales când în Windows este ceva care există de la XP (faceți clic dreapta pe un proces> „Set afinitate ...”) dar acum ceva timp am găsit următorul script care transformă setul de sarcini în ceva puțin mai intuitiv (publicat inițial aici și există chiar și câteva cazuri în care este necesar să se gestioneze utilizarea nucleelor):
#!/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
Cu unele modificări, numele procesului ar putea fi indicat în locul PID (sau că acceptă ambele și că decide când parametrul respectiv este unul sau altul).
nu există o interfață grafică pentru setul de sarcini pentru noii utilizatori, ar fi frumos