Ricerca nel sito web

Come impostare la priorità del processo Linux utilizzando i comandi nice e renice


In questo articolo, spiegheremo brevemente il programmatore del kernel (noto anche come programmatore del processo) e la priorità del processo, che sono argomenti che vanno oltre lo scopo di questa guida. Poi ci immergeremo un po' nella gestione dei processi Linux: vedremo come eseguire un programma o un comando con priorità modificata e anche cambiare la priorità di esecuzione dei processi Linux.

Leggi anche: Come monitorare i processi Linux e impostare limiti di processo in base al singolo utente

Comprendere lo scheduler del kernel Linux

Uno scheduler del kernel è un'unità del kernel che determina il processo più adatto da eseguire successivamente tra tutti i processi eseguibili; alloca il tempo del processore tra i processi eseguibili su un sistema. Un processo eseguibile è un processo che attende solo il tempo della CPU, è pronto per essere eseguito.

Lo scheduler costituisce il nucleo del multitasking in Linux, utilizzando un algoritmo di pianificazione basato sulle priorità per scegliere tra i processi eseguibili nel sistema. Classifica i processi in base ai più meritevoli e alla necessità di tempo della CPU.

Comprendere la priorità del processo e il valore piacevole

Il kernel memorizza una grande quantità di informazioni sui processi, inclusa la priorità del processo che è semplicemente la priorità di pianificazione associata a un processo. I processi con priorità più alta verranno eseguiti prima di quelli con priorità più bassa, mentre i processi con la stessa priorità verranno schedulati uno dopo l'altro, ripetutamente.

Ci sono un totale di 140 priorità e due distinti intervalli di priorità implementati in Linux. Il primo è un valore gradevole (niceness) che varia da -20 (valore di priorità più alta) a 19 (valore di priorità più bassa) e il il valore predefinito è 0, questo è ciò che scopriremo in questa guida. L'altra è la priorità in tempo reale, che varia da 1 a 99 per impostazione predefinita, quindi da 100 a 139 sono pensati per lo spazio utente.

Una caratteristica importante di Linux è la pianificazione dinamica basata sulle priorità, che consente di modificare (aumentare o diminuire) il valore gradevole dei processi a seconda delle proprie esigenze, come vedremo più avanti.

Come verificare il buon valore dei processi Linux

Per vedere i valori piacevoli dei processi, possiamo utilizzare utilità come ps, top o htop.

Per visualizzare il valore nice dei processi con il comando ps nel formato definito dall'utente (qui NI la colonna mostra la nicezza dei processi).

ps -eo pid,ppid,ni,comm

In alternativa, è possibile utilizzare le utilità top o htop per visualizzare i valori nice dei processi Linux come mostrato.

top
htop

Differenza tra PR o PRI e NI

Dagli output top e htop sopra, noterai che c'è una colonna chiamata PR e PRI in modo ricettivo che mostra la priorità di un processo.

Ciò significa quindi che:

  • NI – è il valore nice, che è un concetto di spazio utente, mentre
  • PR o PRI – è la priorità effettiva del processo, come vista dal kernel Linux.
Come calcolare i valori PR o PRI
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Intervallo di valori Nice (NI): da -20 a 19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

Ma se vedi un rt anziché un numero come mostrato nello screenshot qui sotto, significa sostanzialmente che il processo è in esecuzione con priorità di pianificazione in tempo reale.

Come eseguire un comando con un dato valore gradevole in Linux

Qui vedremo come dare priorità all'utilizzo della CPU di un programma o comando. Se hai un programma o un'attività che richiede molto tempo per la CPU, ma capisci anche che potrebbe richiedere molto tempo per essere completato, puoi impostargli una priorità alta o favorevole utilizzando il comando nice.

La sintassi è la seguente:

nice -n niceness-value [command args] 
OR
nice -niceness-value [command args] 	#it’s confusing for negative values
OR
nice --adjustment=niceness-value [command args]

Importante:

  • Se non viene fornito alcun valore, nice imposta di default una priorità pari a 10.
  • Un comando o un programma eseguito senza modifiche predefinite ha una priorità pari a zero.
  • Solo root può eseguire un comando o un programma con priorità maggiore o alta.
  • Gli utenti normali possono eseguire solo un comando o un programma con priorità bassa.

Ad esempio, invece di avviare un programma o un comando con la priorità predefinita, puoi avviarlo con una priorità specifica utilizzando il seguente comando nice.

sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

Puoi anche utilizzare il terzo metodo che crea un po' di confusione soprattutto per i valori di gentilezza negativi.

sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

Modificare la priorità di pianificazione di un processo in Linux

Come accennato in precedenza, Linux consente la pianificazione dinamica basata sulle priorità. Pertanto, se un programma è già in esecuzione, è possibile modificarne la priorità con il comando renice in questa forma:

renice -n  -12  -p 1055
renice -n -2  -u apache

Dall'output top di esempio riportato di seguito, la qualità del teamspe+ con PID 1055 è ora -12 e per tutti i processi di proprietà dell'utente apache sono -2.

Sempre utilizzando questo output, puoi vedere la formula PR=20 + NI,

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

Qualsiasi modifica apportata con il comando renice ai valori nice dei processi di un utente è applicabile solo fino al successivo riavvio. Per impostare valori predefiniti permanenti, leggere la sezione successiva.

Come impostare il valore Nice predefinito dei processi di un utente specifico

Puoi impostare il valore nice predefinito di un particolare utente o gruppo nel file /etc/security/limits.conf. La sua funzione principale è definire i limiti delle risorse per gli utenti che hanno effettuato l'accesso tramite PAM.

La sintassi per definire un limite per un utente è la seguente (e i possibili valori delle varie colonne sono spiegati nel file):

#<domain>   <type>  <item>  <value>

Ora usa la sintassi seguente dove hard significa applicare i collegamenti hard e soft significa applicare i limiti soft.

<username>  <hard|soft>  priority  <nice value>

In alternativa, crea un file in /etc/security/limits.d/ che sovrascriva le impostazioni nel file principale sopra e questi file verranno letti in ordine alfabetico.

Inizia creando il file /etc/security/limits.d/tecmint-priority.conf per l'utente tecmint:

vi /etc/security/limits.d/tecmint-priority.conf

Quindi aggiungi questa configurazione al suo interno:

tecmint  hard  priority  10

Salva e chiudi il file. D'ora in poi, qualsiasi processo di proprietà di tecmint avrà un bel valore di 10 e un PR di 30.

Per ulteriori informazioni, leggere le pagine man di nice e renice:

man nice
man renice 

Potrebbe interessarti anche leggere i seguenti articoli sulla gestione dei processi Linux.

  1. Come trovare e uccidere i processi in esecuzione in Linux
  2. Una guida ai comandi Kill, Pkill e Killall per terminare un processo in Linux
  3. Come monitorare l'utilizzo del sistema, le interruzioni e la risoluzione dei problemi dei server Linux
  4. CPUTool: limita e controlla l'utilizzo della CPU di qualsiasi processo in Linux

In questo articolo, abbiamo spiegato brevemente lo scheduler del kernel, la priorità dei processi, abbiamo visto come eseguire un programma o comando con priorità modificata e anche come modificare la priorità dei processi Linux attivi. Puoi condividere qualsiasi pensiero su questo argomento tramite il modulo di feedback qui sotto.