GNU/Linux >> Linux Esercitazione >  >> Linux

3 suggerimenti per il miglioramento delle prestazioni dei processi Linux con priorità e affinità

[ Nota dell'editore:esistono limitazioni note al blocco della CPU in alcuni ambienti, quindi assicurati di leggere i dettagli del tuo ambiente prima di seguire questo tutorial. ]

Le CPU eseguono tutte le applicazioni ed è meglio se capisci come funziona e come puoi ottimizzare l'utilizzo della CPU per aumentare le prestazioni delle tue applicazioni.

I sistemi moderni in genere hanno più CPU e core, che sono condivisi tra tutto il software in esecuzione dallo scheduler del kernel. Quindi normalmente non ti preoccupi di quale CPU/core viene eseguita la tua applicazione o processo, purché sia ​​in esecuzione.

Esistono diversi modi per ottenere più CPU e far funzionare meglio la tua applicazione e renderla più efficiente. Un modo è usare la sintonizzazione prioritaria usando il nice /renice comando.

[ Potrebbe interessarti anche: L'unità di elaborazione centrale (CPU):i suoi componenti e le sue funzionalità ]

Il secondo modo è associare l'applicazione a una o più CPU, chiamata "CPU pinning" o "CPU affinity". L'associazione dell'applicazione a una o più CPU specifiche rende tutti i thread o i processi secondari relativi all'applicazione in esecuzione su CPU/CPU definite. In questo modo, limitando il processo/l'applicazione a una o più CPU si ottengono più "cache warm" o "cache hits", aumentando così le prestazioni complessive. Il primo vantaggio dell'affinità della CPU è l'ottimizzazione delle prestazioni della cache. Il secondo vantaggio dell'affinità della CPU è che se più thread accedono agli stessi dati, ha senso eseguirli tutti sullo stesso processore, aiutandoci a ridurre al minimo le perdite di cache.

Metodo 1: ottimizzazione prioritaria

Modificare la priorità del processo utilizzando un nice comando. Questo è forse il modo più comune conosciuto per migliorare l'utilizzo della CPU di processo/applicazione.

Unix ha sempre fornito un nice() chiamata di sistema per regolare la priorità del processo, che imposta una bellezza valore. Positivo nice i valori determinano una priorità del processo inferiore (migliore ) e valori negativi, che possono essere impostati solo dal superutente (root), determinano una priorità più alta.

Il nice value è ancora utile oggi per regolare la priorità del processo. Il tuo compito è identificare il lavoro a bassa priorità, che può includere agenti di monitoraggio e backup pianificati, che modifichi per iniziare con un nice valore. Puoi anche eseguire analisi per verificare che l'ottimizzazione sia efficace e che la latenza dello scheduler rimanga bassa per i lavori ad alta priorità.

Come funziona?

A ogni processo viene assegnata una quantità di tempo specificata per l'esecuzione sulla CPU. Il tempo effettivo per il quale il processo è in esecuzione sulla CPU è chiamato runtime virtuale  del processo. A proposito, la CPU tende a comportarsi come un padre e ha l'abitudine di dividere equamente il tempo tra tutti i bambini (i processi).

Il tempo totale che un processo trascorre "sulla CPU" è il runtime virtuale del processo. Il sistema operativo (OS) tiene un registro di questo runtime virtuale e cerca di dare lo stesso tempo a tutti i processi nella coda di esecuzione.

Il nicerenice le utility manipolano questo runtime virtuale.

Quando alimenti valori positivi con renice /nice comandi, ad esempio - renice +10 PID stai aggiungendo manualmente più runtime virtuale al processo. Il sistema operativo ritiene che il processo abbia impiegato più tempo di runtime virtuale rispetto ad altri processi nella coda di esecuzione. Quindi nel ciclo successivo, la CPU dedica meno tempo al processo. Il processo termina in ritardo poiché ora sta impiegando meno tempo "su CPU", dopo il renice comando.

Ma quando alimenti valori negativi con renice /nice comandi, ad esempio - renice -10 PID , stai riducendo manualmente il runtime virtuale del processo. Il sistema operativo ritiene che il processo non abbia abbastanza tempo "su CPU" rispetto ad altri processi nella coda di esecuzione. Quindi, nel ciclo successivo, la CPU concede più tempo "su CPU" a quel processo rispetto ad altri processi nella coda di esecuzione. Il processo terminerà velocemente.

Metodo 2:associazione del processo

Un processo può essere legato a una o più CPU, il che può aumentarne le prestazioni migliorando il calore della cache o riscontri nella cache e località della memoria . Su Linux, questo viene eseguito utilizzando il taskset comando, che può utilizzare una maschera della CPU o intervalli per impostare l'affinità della CPU.

Utilizzando il taskset , hai associato il processo 6197 in modo che venga eseguito solo sulla CPU 1. Ciò comporterà più hit di calore/cache della cache. Anche altri processi possono essere eseguiti su CPU 1, ma il processo viene eseguito solo su CPU 1 e CPU 2. Questa configurazione non è permanente. Se il server viene riavviato o il processo viene riavviato, il PID cambierà. Quindi questa configurazione è persa.

Un modo migliore è utilizzare un file "drop-in".

Metodo 3 - Affinità CPU tramite file drop-in

Secondo Wikipedia, Affinità del processoreBlocco della CPU o "affinità cache", consente l'associazione e lo svincolo di un processo o di un thread a un'unità di elaborazione centrale (CPU) o a un intervallo di CPU, in modo che il processo o il thread venga eseguito solo sulla CPU o sulle CPU designate anziché su qualsiasi CPU .

Normalmente, è il kernel che determina le CPU eseguite da un processo. Ogni volta che lo scheduler riprogramma un processo, può passare a una qualsiasi delle CPU disponibili. Sebbene ciò vada bene per la maggior parte dei carichi di lavoro, a volte è opportuno limitare le CPU che un processo può eseguire. Ad esempio, limitare un processo ad alta intensità di memoria a una o due CPU aumenta le possibilità di un hit della cache, aumentando così le prestazioni complessive.

Come funziona?

Nella foto qui, hai tre applicazioni:X, Y e Z. Il comportamento predefinito dello scheduler consiste nell'utilizzare tutte le CPU disponibili per eseguire i thread delle applicazioni X, Y e Z. Utilizzando le impostazioni predefinite, puoi vedere che" Otterrò un buon numero di cache mancate poiché l'applicazione è distribuita su tutte le CPU. Il che porta a un minor numero di accessi alla cache e a più cache miss.

Quando le applicazioni sono bloccate a CPU specifiche, sono obbligate a essere eseguite su CPU specifiche, utilizzando così la cache della CPU in modo più efficace, più codice sulla stessa CPU. In questo modo si ottengono più cache warm/cache hits e quindi un'applicazione con prestazioni migliori.

Per scoprire come utilizzare il blocco della CPU/l'affinità della CPU per associare un processo a determinati processori, aggiungi il sshd processo alla CPU 0.

Controlla lo stato corrente di sshd servizio. Stai controllando a quale CPU si collega.

Secondo il taskset pagine man del comando, valore f significa "qualsiasi CPU". Quindi non ci sono pinning o binding della CPU configurati per sshd servizio.

Associa il sshd servizio alla CPU 0:creazione di un drop-in file che utilizzerai per controllare il comportamento di sshd servizio. Il file drop-in controlla molte cose relative a un processo, ma al momento ti stai limitando al blocco/affinità della CPU.

Puoi vedere come il taskset il comando mostra la CPU come "1", che secondo il taskset man page è la prima CPU disponibile.

Puoi confermare ulteriormente il file drop-in controllando lo stato di sshd servizio.

Concludi

Puoi utilizzare sia nice renice per modificare la priorità di un processo. Sia il nicerenice i comandi possono manipolare il "runtime virtuale" del processo. Quindi, in base ai valori, il processo dedica più o meno tempo alla CPU.

È possibile associare/agganciare un processo a una o più CPU. Ciò aumenta le possibilità di più cache warm/cache hits, ottenendo così prestazioni molto migliori. Puoi utilizzare il taskset strumento da riga di comando per questo scopo. Ma l'effetto è solo temporaneo. Se vuoi che la configurazione sia persistente, devi utilizzare un file "drop-in".

[ Corso online gratuito:panoramica tecnica di Red Hat Enterprise Linux. ]


Linux
  1. 3 consigli per la stampa con Linux

  2. Strumenti e suggerimenti open source per migliorare le prestazioni del tuo PC Linux

  3. I 5 migliori podcast per notizie e suggerimenti su Linux

  4. Live Linux CD per il burn-in con Bonnie++?

  5. Utilizzo della CPU Linux e cronologia di esecuzione dei processi

Monitoraggio degli host Linux e Windows con Sguardi

Suggerimenti per elencare i file con ls nella riga di comando di Linux

Suggerimenti per l'inizio:monitoraggio del carico della CPU su Linux

Esercitazione sui comandi del set di attività Linux per principianti (con esempi)

Risolvi i problemi e monitora le prestazioni del sistema Linux con nmon

Introduzione al monitoraggio e all'ottimizzazione delle prestazioni di Linux