Qual è il miglior comando di Unix?


9

Per un rapido test di benchmarking, come si possono combinare il massimo e la ionicità con il massimo effetto, ovvero per un comando che usi il minor numero di risorse possibile (senza il minimo)?

(Penso che sia qualcosa di simile a `nice -n 19 ionice -c 2 [comando], ma non sono sicuro del" -n "di ionice (classdata param), la pagina man è criptica sulla sua rilevanza.)


3
più 1 per il titolo della domanda intelligente, ma è anche una buona domanda in generale.
Lizardx,

Risposte:


10

Il comando completo che desideri è:

chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]

Il chrtcomando 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 19implica 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 chrtcomando, anche se senza necessità nice(la priorità deve essere impostata 0nella classe di pianificazione inattiva), e si presenta così:

chrt -i 0 {command or PID}

Il nicecomando 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_RRe SCHED_FIFO, il comando per impostare le classi di pianificazione è stato chiamato chrt. L' -iopzione specifica di utilizzare la SCHED_IDLEclasse 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' -copzione 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 noopscheduler I / O non supporta affatto le priorità o le classi di schedulazione, e sono abbastanza sicuro che deadlineneanche 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_setschedulere ioprio_set(anche se vale la pena leggere entrambe se vuoi anche più background).


0

Supponendo che tu non voglia che quel comando aspetti completamente che gli altri finiscano, quindi non subire potenzialmente la fame di risorse , la linea sarebbe:

nice -n19 [command]

Poiché ionice sarà impostato proporzionalmente sui moderni kernel Linux.

A proposito, chrt -b0non ha nulla a che fare con la gentilezza, ma con quale frequenza la CPU salterà da un processo all'altro. Questa riga allunga il tempo per i programmi batch di utilizzare meglio le cache, ma per altri comandi è inutile. Come visto qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.