
La suite di comandi nice e renice permette di controllare l’accesso alle risorse della cpu da parte dei processi attivi sul sistema. I valori di niceness vanno da un valore di -20 fino ad un valore di 19. Contrariamente a quello che si potrebbe pensare per logica, associando un valore positivo ad una priorità più alta, nello scheduling dei processi un valore di 19 corrisponde invece ad una priorità più bassa, mentre un valore di -20 corrisponde ad una priorità alta, al valore massimo.
Il comando nice viene utilizzato per il primo avvio di un processo. E’ possibile ad esempio avviare il demone Apache con un valore di niceness a scelta :
# nice -n -10 httpd
A titolo di esempio un processo avviato con un valore di niceness pari a -10 avrà una priorità di accesso superiore nei confronti della cpu rispetto ad un processo avviato con un valore di niceness pari a 0. Uno dei vantaggi offerti dal controllo di questi valori è che ogni processo figlio derivato da un unico processo padre erediterà il valore di niceness impostato per quest’ultimo. A titolo di esempio è possibile variare “in corsa” il valore di niceness per Apache, apportando la modifica al solo processo padre. L’impostazione verrà propagata a tutti i child di cui verrà effettuato il fork nei momenti successivi alla modifica.
Dopo aver lanciato un processo con nice è possibile modificare il valore di niceness con il comando renice indicando il pid del processo ed il nuovo valore che si desidera impostare :
# renice -15 -p 7268
Un utente comune può aumentare il valore di niceness per i processi di cui è proprietario. Ciò significa che è in grado di impostare una priorità più bassa per i processi che detiene, liberando risorse dal sistema. Solo l’utente root invece può diminuire il valore di niceness per tutti i processi attivi sul sistema. Ciò significa che solo l’utente root è in grado di impostare una priorità più alta per i processi attivi sul sistema.
Abbiamo visto che nice e renice sono relativi all’utilizzo della potenza di calcolo fornita dalla cpu del sistema. All’interno della famiglia dei comandi niceness esiste anche il comando ionice che controlla la priorità di accesso dei processi attivi sul sistema nei confronti dello storage.
Ionice permette di controllare come e quando un processo avrà diritto ad eseguire operazioni di scrittura o lettura su disco. Ionice consente di avviare un processo scegliendo tra tre modalità, real time, best effort e idle. Un processo avviato con un ionice in modalità idle, ovvero in classe 3, avrà accesso allo storage solo se nessun altro processo tenterà accessi IO al disco.
# ionice -c3 mysqldump --opt mydb
A cosa serve
Controllare lo scheduling dei processi permette di evitare che un’applicazione diventi causa di disturbo per gli altri processi attivi sul sistema. Operando a livello cpu con nice e renice ed a livello storage con ionice è possibile controllare l’utilizzo delle risorse di sistema ad esempio durante le operazioni di copia e compressione dei dati o durante le operazioni di compilazione da sorgente soprattutto su ambienti server condivisi dove risulta molto importante calibrare e limitare l’utilizzo delle risorse da parte dei vari utenti.
Curiosità
Il comando nice appare per la prima volta sulle versioni Unix di AT&T Version 6, mentre il comando renice vede la luce su BSD 4.0. Ionice è supportato invece dal kernel Linux a partire dalla versione 2.6.13.

