Kako dodijeliti program jezgri procesora pomoću skupa zadataka

Kako višejezgreni procesori postaju sve češći na poslužiteljima, prijenosnim ili stolnim računalima, pa čak i mobilnim uređajima, sve je više aplikacija optimizirano za ovu vrstu sustava. Međutim, ponekad može biti korisno povezati program ili postupak 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 s paketom unaprijed instaliranim prema zadanim postavkama. 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 CPU-a za postupak, upotrijebite 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 postupak može izvoditi na bilo kojoj od osam različitih procesorskih jezgri (0 do 7).

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

taskset može prikazati afinitet CPU-a kao popis procesora umjesto 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:

trenutni popis afiniteta pid 2915: 0-7

Prisilite postupak da se izvodi na određenoj jezgri

Koristeći set zadataka, izvršeni proces može se 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

Što rezultat vraća:

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

Jednako tako, možete pokrenuti:

set 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 raspone (na primjer, 0,2,5,6-10).

Pokrenite program pomoću određene jezgre

taskset također omogućuje pokretanje novog programa pomoću određenog broja jezgri. Da biste to učinili, mora se koristiti u sljedećem formatu:

IZVRŠIVI set zadataka COREMASK-a

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

set 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 cijelu jezgru određenom programu, morate upotrijebiti parametar jezgre "isolcpus", koji vam omogućuje da rezervirate kernel tijekom pokretanja.

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

Jednom kad se to učini, Linux planer neće dodijeliti redovite procese rezerviranom kernelu, osim ako to nije posebno dodijeljeno skupu zadataka.

izvor: xmodule & stranice zadataka skupa zadataka.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   peterčeški dijo

    Dobar post :).

  2.   Luis dijo

    Dobar post, ali bez duha trolanja ...

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

    Mislim; Ako imate računalo s 12 jezgri, 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ćuje da ne dodijelimo nijedan proces određenom jezgru, prepuštajući njegovu isključivu upotrebu određenom programu.

    1.    jvk85321 dijo

      Ima smisla ovo što spominjete, dopuštajući planeru da koristi sve jezgre, resursi se bolje uravnotežuju, ali ponekad je potrebna namjenska jezgra, kao što je pokretanje virtualnog stroja s određenim zadatkom, izvedba tog stroja se znatno poboljšava kada nema više procesa koji se izvode u dodijeljenom jezgru.

      atte
      jvk85321

      1.    poslužimo se linuxom dijo

        Točno! Hvala, jvk! 🙂

      2.    lf dijo

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

        Da bi Flash funkcionirao na sustavima Windows 8.1 x64, AMD i Firefox, preporučeno je odabrati da Flash radi samo na CPU-u, no meni to nije uspjelo. Bilo bi također zgodno ako ga dodate (ako ga već nema) upraviteljima zadataka različitih DE-a ili barem KDE-a.

      3.    lf dijo

        ah, nisam razumio kraj komentara ... Ali za to bi svi procesi na CPU-u koji radi na virtualnom stroju morali biti zabranjeni. Ili ih dodijelite drugim procesorima. Zanimljiv i jako dobar komentar.

    2.    Fernando dijo

      Koristi se za stvaranje genijalnih superračunala

  3.   Luis dijo

    Shvaćeno je.

    Hvala na pojašnjenju.

  4.   Teck dijo

    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.   prekidač dijo

    Ova se naredba možda ne čini vrlo korisnom na računalima s nekoliko jezgri, ali za one koji imamo Dual Core ona je vrlo 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 sustav usporava. Rješenje je jednostavno poput ograničavanja igre na upotrebu samo jedne jezgre.
    Također se slažem s lf-om, oni bi to stvarno trebali integrirati u upravitelje zadataka (one koje sam do sada isprobao na Gentoou, mislim da ih niti jedan 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 malo intuitivnije (izvorno objavljeno ovdje pa su čak prikazani 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 postupka (ili da prihvaća oboje i da odlučuje kada je taj parametar jedno ili drugo).

  6.   jordani dijo

    ne postoji grafičko sučelje za set zadataka za nove korisnike, bilo bi lijepo