Come dare priorità ai processi Linux con Nice e Renice

All'interno dei vari compiti di gestione dei sistemi operativi Linux, è ideale conoscere in dettaglio come funzionano i processi all'interno del sistema poiché questo è essenziale per completare e sapere come, internamente, ciascun processo svolge la funzione per cui è stato sviluppato.

Oggi Solvetic analizzerà in dettaglio come dare priorità ai processi delle nostre distribuzioni Linux usando nice e renice.

Quali sono le priorità dei processi in LinuxÈ importante prima di sapere come funzionano nice e renice per capire un po' perché l'impostazione di una certa priorità di un processo Linux, la priorità di un processo, viene utilizzata per determinare la quantità di tempo in cui il processo selezionato sarà in grado di utilizzare il processore in un intervallo di tempo specifico.

In ambienti Linux i processori sono condivisi da più processi (i processi si alternano nell'utilizzo del/i processore/i disponibile/i) il che permette all'utente di percepire che tutte le applicazioni o task vengono eseguiti contemporaneamente, definendo quindi una priorità , indichiamo al sistema quali processi possono fare più uso del processore e quali processi passano in secondo piano.

Questa priorità può comportare la mancata esecuzione di alcuni processi in qualsiasi momento, poiché vengono spostati verso la fine della coda dei processi da altri processi con priorità di utilizzo più elevata.

Come funziona il Kernel Scheduler in LinuxUn altro punto da tenere a mente quando si gestiscono i sistemi Linux è conoscere il kernel, che si occupa dell'avvio. Ha un programmatore o schedulatore nel suo kernel, che è un'unità del kernel che determina il processo più adatto di tutti i processi eseguibili disponibili, che deve essere eseguito in prima istanza. Quindi alloca il tempo del processore tra i processi eseguibili sul sistema.

Un processo eseguibile è un processo che attende solo l'esecuzione del tempo della CPU. Il programmatore costituisce il kernel del multitasking in Linux, utilizzando un algoritmo di pianificazione basato su priorità per selezionare i processi eseguibili sul sistema. Quindi classifica i processi in base a quelli più fondamentali, nonché i requisiti di tempo della CPU di ciascuno di essi.

In Linux ci sono un totale di 140 priorità e due diversi intervalli di priorità implementati in Linux:

  • Il primo è il bel valore che va da -20 (valore di priorità più alta) a 19 (valore di priorità più basso) e il valore predefinito è 0.
  • La seconda è la priorità in tempo reale, che va da 1 a 99 per impostazione predefinita, quindi da 100 a 139 sono destinati allo spazio utente.

1. Verifica dei valori dei processi in Linux


In Linux possiamo controllare i valori di un processo utilizzando utility come ps, top o htop.
Se usiamo il parametro ps possiamo eseguire quanto segue:
 ps -eo pid, ppid, ni, comm
Lì la colonna non rivela il valore di ogni processo:

INGRANDIRE

In alternativa possiamo utilizzare i parametri top o htop dove possiamo vedere risultati molto più completi e automaticamente vedremo la colonna con gli stessi valori di ogni processo visualizzato:

superiore

INGRANDIRE

htop

INGRANDIRE

NotaIn caso di non avere htop possiamo installarlo eseguendo la riga sudo apt install htop

2. Differenza tra PR o PRI e NI e come calcolare i loro valori


Quando eseguiamo i parametri top e htop possiamo vedere le colonne PR, PRI o NI, significano:

NESSUNO DEI DUEÈ un valore amichevole, cioè è un concetto di spazio utente

PR / PRÈ la vera priorità del processo, questa informazione è fornita dal kernel Linux

Questi valori si basano su quanto segue.

 Numero totale di priorità = 140 Intervallo di priorità in tempo reale (PR o PRI): da 0 a 99 Intervallo di priorità dello spazio utente: da 100 a 139 Intervallo di valori NI (Nice Value) da -20 a 19: PR = 20 + NI PR = 20 + ( -20 a + 19) PR = 20 + -20 a 20 + 19 PR = 0 a 39 che è uguale a 100 a 139
Se nei risultati visualizzati vediamo il valore rt, questo indica che il processo viene eseguito con priorità di schedulazione in tempo reale.

3. Come eseguire un comando con un valore Nice su Linux


Nice ha il compito di assegnare una priorità specifica a un programma quando viene eseguito e per ereditarietà alle attività e ai processi che questo programma può attivare all'interno del sistema. Nice si applica quando abbiamo un programma o un'attività che richiede molto utilizzo della CPU, ma anche che questo processo può richiedere molto tempo per essere completato, lì sarà possibile configurare una priorità alta o favorevole utilizzando il comando nice.

La sintassi che possiamo utilizzare è la seguente:

 nice -n nice-value [argomenti di comando] nice - nice-value [argomenti di comando] nice --adjustment = nice-value [argomenti di comando]
Considera quanto segue:
  • Se non viene fornito alcun valore, nice imposterà una priorità di 10 per impostazione predefinita
  • Un comando o un programma eseguito senza valori predefiniti è impostato su una priorità pari a zero
  • Solo l'utente root può eseguire un comando o un programma con priorità maggiore o maggiore
  • Gli utenti normali possono eseguire solo un comando o un programma con priorità bassa
Per impostare una priorità, invece di avviare un programma o un comando con la priorità predefinita, sarà possibile avviarlo con una priorità specifica utilizzando il seguente comando nice:
 sudo nice -n -5 xclock &
Oppure possiamo eseguire quanto segue:
 sudo nice --adjustment = 5 xclock &

INGRANDIRE

Possiamo vedere che viene generato un nuovo ID.

4. Modificare la priorità di pianificazione di un processo in Linux


In ambiente Linux permette la programmazione dinamica in base alle priorità, quindi, se un programma è già in esecuzione, sarà possibile modificarne la priorità tramite il comando renice come segue:
 renice -n -12 -p (PID) renice -n -2 -u (Applicazione)
Quando eseguiamo questo comando saremo in grado di vedere la vecchia priorità e la nuova priorità.

INGRANDIRE

5. Come impostare Nice predefinito per i processi di un particolare utente


È possibile impostare il valore predefinito per un utente o un gruppo specifico nel file /etc/security/limits.conf. La sua funzione principale è definire i limiti delle risorse per gli utenti connessi tramite PAM.

La sintassi per definire un limite per un utente è la seguente:

 
In alternativa sarà possibile creare un file in /etc/security/limits.d/ che si occupi di sovrascrivere la configurazione nel file principale e questi file vengono letti in ordine alfabetico.

Se vogliamo ottenere l'aiuto di nice o renice possiamo eseguire quanto segue:

 uomo simpatico renice

INGRANDIRE

Quindi abbiamo a disposizione un'opzione per stabilire le priorità in base alle esigenze dei processi, ottimizzando molto di più l'uso della CPU in Linux e migliorando significativamente le attività amministrative.

wave wave wave wave wave