Kako dodijeliti program CPU jezgri pomoću skupa zadataka

Kako višejezgreni procesori postaju sve češći i na serverima i na prijenosnim ili stolnim računarima, pa čak i na mobilnim uređajima, sve je više aplikacija optimizirano za ovu vrstu sistema. Međutim, ponekad može biti korisno povezati program ili proces s jednim ili više određenih jezgri. Pogledajmo kako to dobiti ...

Instalirajte skup zadataka

Alat za postavljanje zadataka dio je paketa "util-linux". Većina Linux distribucija dolazi sa paketom koji je unaprijed instaliran po defaultu. U slučaju da skup zadataka nije dostupan, moguće ga je instalirati na sljedeći način:

En Debian / Ubuntu i derivati:

sudo apt-get instalirati util-linux

En fedora i derivati:

sudo yum instaliraj util-linux

Pogledajte afinitet CPU-a pokrenutog procesa

Da biste dohvatili informacije o afinitetu procesora za postupak, koristite sljedeći format:

set zadataka -p PID

Na primjer, za provjeru afiniteta CPU procesa s PID 2915:

set zadataka -p 2915

Vraća rezultat:

trenutna maska ​​afiniteta pid 2915: ff

taskset vraća trenutni afinitet CPU-a u heksadecimalnom formatu bitmaske. U primjeru, afinitet (predstavljen u heksadecimalnoj bitnoj maski) odgovara "11111111" u binarnom formatu, što znači da se proces može izvoditi na bilo kojoj od osam različitih CPU jezgri (0 do 7).

Najniži bit u heksadecimalnoj bitnoj masci odgovara jezgru ID 0, drugi najniži bit s desne strane do ID jezgre 1, treći najniži bit do ID jezgre 2 itd. Tako, na primjer, CPU afinitet "0x11" predstavlja ID-ove jezgra 0 i 4.

taskset može prikazati afinitet CPU-a kao popis procesora umjesto kao bitne maske, što je puno lakše čitati. Da biste koristili ovaj format, morate pokrenuti skup zadataka s opcijom "-c". Na primjer:

set zadataka -cp 2915

Vraća rezultat:

trenutna lista afiniteta pid 2915: 0-7

Prisilite proces da se izvodi na određenom jezgru

Koristeći set zadataka, izvršeni proces se može dodijeliti određenoj jezgri procesora. Da biste to učinili, morate koristiti sljedeći format:

taskset -p COREMASK PID set zadataka -cp CORE-LIST PID

Na primjer, da biste dodijelili proces jezgrama 0 i 4, trebali biste pokrenuti:

set zadataka -p 0x11 9030

Šta rezultat vraća:

trenutna maska ​​afiniteta za pid 9030: ff nova maska ​​za afinitet za pid 9030: 11

Jednako tako, možete pokrenuti:

skup zadataka -cp 0,4 9030

Pomoću opcije "-c" možete odrediti popis numeričkih ID-ova jezgre, odvojene zarezima, ili čak možete uključiti opsege (na primjer, 0,2,5,6-10).

Pokrenite program koristeći određeno jezgro

taskset također omogućava pokretanje novog programa koristeći brojne određene jezgre. Da biste to učinili, mora se koristiti u sljedećem formatu:

IZVRŠIVI ZADATAK KOREMASKE

Na primjer, da biste pokrenuli VLC program na CPU core ID 0, upotrijebite sljedeću naredbu:

skup zadataka -c 0 vlc

Namjestite kernel samo određenom programu

Iako set zadataka omogućuje dodjeljivanje programa određenom jezgru, to ne znači da ne postoje drugi programi ili procesi koji ga koriste. Da biste to izbjegli i posvetili čitav kernel određenom programu, morate koristiti parametar jezgre "isolcpus", koji vam omogućava da rezervirate kernel tijekom pokretanja.

Da biste to učinili, morate dodati parametar "isolcpus =" u liniju jezgre u GRUB-u. Na primjer, da rezervirate ID jezgre 0 i 1, dodajte "isolcpus = 0,1".

Jednom kada se to učini, Linux planer neće dodijeliti nikakve redovne procese rezerviranom jezgru, osim ako nije posebno dodijeljeno skupu zadataka.

Izvor: xmodule & stranice zadataka skupa zadataka.


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   peterczech rekao je

    Dobar post :).

  2.   luis rekao je

    Dobar post, ali bez duha trolanja ...

    Kakva je korist od dodjeljivanja programa određenom jezgru ???

    Mislim; Ako imate računar sa 12 jezgara, logično bi bilo da se određeni program izvrši pomoću tih 12 jezgri, a ne da ga ograničava jer na taj način postižemo najveće moguće performanse.

    Ono što smatram korisnom je opcija koja nam omogućava da ne dodijelimo nijedan proces određenom jezgru, prepuštajući njegovu isključivu upotrebu određenom programu.

    1.    jvk85321 rekao je

      Ima smisla ovo što spominjete, dopuštajući planeru da koristi sve jezgre, resursi su bolje uravnoteženi, ali ponekad je potrebna ekskluzivna posvećena jezgra, kao što je pokretanje virtualne mašine sa određenim zadatkom, performanse te mašine se znatno poboljšavaju kada nema više procesa koji se izvode u dodijeljenom jezgru.

      atte
      jvk85321

      1.    iskoristimo linux rekao je

        Tačno! Hvala, jvk! 🙂

      2.    lf rekao je

        Ali kada kreirate virtualnu mašinu, on će vas tražiti da odaberete količinu dodijeljenog CPU-a ... kakva je korist od odabira ove vrijednosti ako na kraju operativni sistem to propusti i izvrši na svim CPU-ima ... Jer primjer nije najbolji ...

        Da bi Flash funkcionirao na Windowsima 8.1 x64, AMD i Firefoxu, preporučeno je odabrati da Flash radi samo na CPU-u, ali meni to nije uspjelo. Bilo bi zgodno i ako ga dodaju (ako već nije tamo) upraviteljima zadataka različitih DE-a ili barem KDE-a.

      3.    lf rekao je

        ah, nisam razumio kraj komentara ... Ali za to bi svi procesi na CPU-u koji radi na virtualnoj mašini morali biti zabranjeni. Ili ih dodijelite drugim procesorima. Zanimljiv i vrlo dobar komentar.

    2.    fernando rekao je

      Koristi se za stvaranje genijalnih superračunara

  3.   luis rekao je

    Razume se.

    Hvala na pojašnjenju.

  4.   Teck rekao je

    Kada rezervirate kernel za određeni program, što se događa s nitima izvršenja? U slučaju da to radite sa kernelom s HT-om, on rezervira 2 niti izvođenja za program.

  5.   switcher rekao je

    Ova naredba možda se ne čini korisnom na računarima s nekoliko jezgri, ali za one koji imamo Dual Core ona je prilično praktična. Na primjer, imam igru ​​koja kada je otvorim koristi sve procesorske jezgre, a ako imam i druge programe kojima je potrebna CPU (poput neke pretrage s grepom u velikim datotekama), tada se sistem usporava. Rješenje je jednostavno poput ograničavanja igre na upotrebu samo jedne jezgre.
    Također se slažem s lf, oni bi to stvarno trebali integrirati u upravitelje zadataka (one koje sam do sada isprobao na Gentoo-u, mislim da ih nema), pogotovo kada je na Windowsu nešto što postoji od XP-a (desni klik na proces> "Postavi afinitet ..."), ali prije nekog vremena pronašao sam sljedeću skriptu koja skup zadataka pretvara u nešto intuitivnije (izvorno objavljeno ovdje pa su prikazani čak i neki slučajevi u kojima je potrebno upravljati upotrebom jezgri):
    #!/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

    Uz neke izmjene, umjesto PID-a može se naznačiti naziv procesa (ili da prihvaća oboje i da odlučuje kada je taj parametar jedno ili drugo).

  6.   jorss rekao je

    ne postoji grafičko sučelje za set zadataka za nove korisnike koji bi to željeli