Il comando completo che desideri è:
chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
Il chrt
comando all'inizio commuterà le cose sulla classe di pianificazione batch, che equivale ad aggiungere 0,5 al valore gradevole. L'opzione -n per ionice è una priorità semplice per le opzioni realtime ( -c 1
) e best-effort ( -c 2
), con valori più bassi che hanno la priorità più alta proprio come i bei valori (ma nell'intervallo 0-7). Tuttavia, il comando ionice non è strettamente necessario, poiché la classe e la priorità di pianificazione I / O derivano per impostazione predefinita dai parametri di pianificazione della CPU e nice -n 19
implica ionice -c 2 -n 7
.
Tuttavia, è possibile ottenere l'utilizzo minimo assoluto delle risorse impostando le classi di programmazione CPU e I / O su inattive. In entrambi i casi, gli scheduler "inattivi" non sono in realtà programmatori inattivi e sarai comunque in grado di utilizzare le risorse, è solo che tutto avrà priorità più alta.
Per la classe di pianificazione della CPU, questo utilizza anche il chrt
comando, anche se senza necessità nice
(la priorità deve essere impostata 0
nella classe di pianificazione inattiva), e si presenta così:
chrt -i 0 {command or PID}
Il nice
comando su Linux rispecchia la versione SVR4, il che significa che non può cambiare la classe di pianificazione, solo un buon valore (che si comporta anche diversamente su Linux rispetto al classico UNIX, ma è un po 'OT). Dato che le classi di pianificazione alternative originali erano POSIX.1E in tempo reale SCHED_RR
e SCHED_FIFO
, il comando per impostare le classi di pianificazione è stato chiamato chrt
. L' -i
opzione specifica di utilizzare la SCHED_IDLE
classe di pianificazione
Per la classe di pianificazione I / O, si utilizza ionice
. Il comando esatto è simile al seguente:
ionice -c 3 {command or PID}
L' -c
opzione specifica quale classe di pianificazione utilizzare e 3 è il numero per la classe inattiva. Si noti che a seconda del programmatore di I / O a blocchi utilizzato, ciò potrebbe non avere alcun impatto su nulla. In particolare, lo noop
scheduler I / O non supporta affatto le priorità o le classi di schedulazione, e sono abbastanza sicuro che deadline
neanche gli scheduler (sia quello legacy che quello blk-mq).
Se vuoi farlo in modo programmatico, sia per il tuo programma, sia per aggiustare le cose per altri processi, controlla le pagine man per le chiamate di sistema sched_setscheduler
e ioprio_set
(anche se vale la pena leggere entrambe se vuoi anche più background).