Cum se atribuie un program unui nucleu CPU folosind tasket

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.


11 comentarii, lasă-le pe ale tale

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   peterceh el a spus

    Post bun :).

  2.   Luis el a spus

    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.

    1.    jvk85321 el a spus

      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

      1.    să folosim Linux el a spus

        Corect! Mulțumesc, jvk! 🙂

      2.    lf el a spus

        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.

      3.    lf el a spus

        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.

    2.    Fernando el a spus

      Folosit pentru a crea supercalculatoare geniale

  3.   Luis el a spus

    Este inteles.

    Multumesc pentru clarificare.

  4.   Teak el a spus

    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.

  5.   comutator el a spus

    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).

  6.   jorss el a spus

    nu există o interfață grafică pentru setul de sarcini pentru noii utilizatori, ar fi frumos