Come assegnare un programma a un core della CPU utilizzando taskset

Poiché i processori multi-core diventano sempre più comuni sia nei server che nei laptop o PC desktop, e anche nei dispositivi mobili, sempre più applicazioni sono ottimizzate per questo tipo di sistema. Tuttavia, a volte può essere utile collegare un programma o un processo a uno o più kernel specifici. Vediamo come ottenerlo ...

Installa il set di attività

Lo strumento taskset fa parte del pacchetto "util-linux". La maggior parte delle distribuzioni Linux viene fornita con il pacchetto preinstallato per impostazione predefinita. Nel caso in cui taskset non sia disponibile, è possibile installarlo come segue:

En Debian / Ubuntu e derivati:

sudo apt-get install util-linux

En Fedora e derivati:

sudo yum installa util-linux

Visualizza l'affinità CPU di un processo in esecuzione

Per recuperare le informazioni sull'affinità della CPU per un processo, utilizzare il seguente formato:

tasket -p PID

Ad esempio, per verificare l'affinità della CPU di un processo con PID 2915:

tasket -p 2915

Restituisce il risultato:

L'attuale maschera di affinità di pid 2915: ff

tasket restituisce l'affinità CPU corrente in un formato maschera di bit esadecimale. Nell'esempio, l'affinità (rappresentata in una maschera di bit esadecimale) corrisponde a "11111111" in formato binario, il che significa che il processo può essere eseguito su uno qualsiasi degli otto diversi core della CPU (da 0 a 7).

Il bit più basso in una maschera di bit esadecimale corrisponde all'ID core 0, il secondo bit più basso da destra all'ID core 1, il terzo bit più basso all'ID core 2 e così via. Quindi, ad esempio, un'affinità CPU "0x11" rappresenta i core ID 0 e 4.

tasket può visualizzare l'affinità della CPU come un elenco di processori invece di una maschera di bit, che è molto più facile da leggere. Per utilizzare questo formato, è necessario eseguire taskset con l'opzione "-c". Per esempio:

tasket -cp 2915

Restituisce il risultato:

Elenco di affinità corrente di pid 2915: 0-7

Forza l'esecuzione di un processo su un kernel specifico

Utilizzando taskset, un processo in esecuzione può essere assegnato a uno specifico core della CPU. Per fare ciò, è necessario utilizzare il seguente formato:

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

Ad esempio, per assegnare un processo ai core 0 e 4, dovresti eseguire:

tasket -p 0x11 9030

Cosa restituisce il risultato:

Maschera di affinità corrente di pid 9030: ff Nuova maschera di affinità di pid 9030: 11

In modo equivalente, puoi eseguire:

tasket -cp 0,4 9030

Con l'opzione "-c", puoi specificare un elenco di ID kernel numerici, separati da virgole, o puoi anche includere intervalli (ad esempio, 0,2,5,6-10).

Avvia un programma utilizzando un kernel specifico

tasket consente anche di avviare un nuovo programma utilizzando un numero di kernel specifici. Per fare ciò, deve essere utilizzato nel seguente formato:

Set di attività COREMASK ESEGUIBILE

Ad esempio, per avviare il programma VLC su ID core CPU 0, utilizzare il seguente comando:

tasket -c 0 vlc

Dedicare un kernel solo a un particolare programma

Sebbene taskset consenta di assegnare un programma a un particolare kernel, ciò non significa che non ci siano altri programmi o processi che lo utilizzano. Per evitare ciò e dedicare un intero kernel a un particolare programma, è necessario utilizzare il parametro del kernel "isolcpus", che consente di riservare un kernel durante l'avvio.

Per fare questo, devi aggiungere il parametro "isolcpus =" nella riga del kernel in GRUB. Ad esempio, per riservare i core ID 0 e 1, aggiungi "isolcpus = 0,1".

Una volta fatto, lo scheduler di Linux non assegnerà alcun processo regolare al kernel riservato, a meno che non sia specificamente assegnato con taskset.

fonte: xmodule & pagine man di taskset.


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   pietroceco suddetto

    Buon post :).

  2.   Luis suddetto

    Buon post ma senza lo spirito del trolling ...

    A che serve assegnare un programma a un kernel specifico ???

    Intendo; Se si dispone di un computer con 12 core, la cosa logica sarebbe che un determinato programma venga eseguito utilizzando quei 12 core e non limitandolo, poiché in questo modo si ottengono le massime prestazioni possibili.

    Quello che vedo è utile è l'opzione che ci permette di non assegnare alcun processo a un certo kernel, lasciando il suo uso esclusivo a un determinato programma.

    1.    jvk85321 suddetto

      Ha senso quello che dici, consentendo al pianificatore di utilizzare tutti i core, le risorse sono meglio bilanciate, ma a volte è richiesto un core di dedizione esclusivo, come eseguire una macchina virtuale con un'attività specifica, le prestazioni di quella macchina migliorano sostanzialmente quando niente più processi in esecuzione nel kernel assegnato.

      Atte
      jvk85321

      1.    usiamo linux suddetto

        Esatto! Grazie, jvk! 🙂

      2.    lf suddetto

        Ma quando crei la macchina virtuale, ti chiede di scegliere la quantità di CPU assegnata ... a che serve scegliere questo valore se alla fine il sistema operativo lo omette e lo esegue su tutte le CPU ... Perché lì l'esempio non è dei migliori ...

        Per far funzionare Flash su Windows 8.1 x64, AMD e Firefox, è stato consigliato di scegliere che Flash gira solo su una CPU, tuttavia non ha funzionato per me. Sarebbe anche conveniente se lo aggiungessero (se non è già presente) ai task manager dei diversi DE, o almeno di KDE.

      3.    lf suddetto

        ah, non avevo capito la fine del commento ... Ma per questo, tutti i processi sulla CPU che esegue la macchina virtuale dovrebbero essere banditi. Oppure assegnali ad altre CPU. Commento interessante e molto buono.

    2.    Fernando suddetto

      Utilizzato per creare supercomputer geniali

  3.   Luis suddetto

    E 'inteso.

    Grazie per il chiarimento.

  4.   Teck suddetto

    Quando si riserva un kernel per un programma specifico, cosa succede con i thread di esecuzione? Nel caso in cui lo si faccia con un kernel con HT, si riserva 2 thread di esecuzione per il programma.

  5.   swicher suddetto

    Questo comando potrebbe non sembrare molto utile su computer con diversi core, ma per quelli di noi che hanno un Dual Core è abbastanza pratico. Ad esempio, ho un gioco che quando lo apro utilizza tutti i core del processore e se ho anche altri programmi che necessitano della CPU (come alcune ricerche con grep in file di grandi dimensioni) allora il sistema rallenta. La soluzione è semplice come limitare il gioco a utilizzare solo uno dei core.
    Sono anche d'accordo con lf, dovrebbero davvero integrarlo nei task manager (quelli che ho provato finora su Gentoo, penso che nessuno ce l'abbia), specialmente quando su Windows è qualcosa che esiste da XP (fai clic con il tasto destro su un processo> "Imposta affinità ...") ma qualche tempo fa ho trovato il seguente script che trasforma il set di attività in qualcosa di un po 'più intuitivo (pubblicato originariamente qui e anche alcuni casi in cui è necessario gestire l'utilizzo dei core):
    #!/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

    Con alcune modifiche, al posto del PID potrebbe essere indicato il nome del processo (o che accetta entrambi e che decide quando quel parametro è una cosa o l'altra).

  6.   Jorss suddetto

    non esiste un'interfaccia grafica per il set di attività per i nuovi utenti lo vorrebbe