Come si può impostare automaticamente la priorità di I / O del disco?


8

Se utilizzo un'applicazione ad alta intensità di I / O (come Virtualbox, la verifica dei dati di Steam o anche dd) il mio sistema non risponde quasi. Nonostante tutto sia stato avviato con priorità normale, rendono il desktop molto lento e ritardano molto l'avvio di altre applicazioni.

So di poter usare qualcosa come ionicecambiare la priorità in idle per esempio, ma nel caso di Virtualbox che genera molti processi diventa difficile.

Posso dare qualche tipo di suggerimento al sistema, quindi all'avvio di alcune applicazioni specifiche vengono avviate con la minima priorità di I / O?


hai provato la mia soluzione? Fa il lavoro?
sm4rk0,

Risposte:


7

Nota: questa soluzione funziona solo con lo scheduler cfq, come spiegato qui . È necessario verificare quale viene utilizzato emettendo

cat /sys/block/sda/queue/scheduler

e cambiarlo se necessario.

Se ho capito bene, si desidera ioniceapplicare alcune impostazioni ogni volta che si avvia un comando. Puoi farlo in questo modo:

echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/

Il primo comando crea un file VirtualBoxcon il testo a virgoletta singola come contenuto. Questo dovrebbe avere il percorso completo per il programma, perché se uno solo lo specifica VirtualBoxpuò interpretarlo come il file che abbiamo appena creato e creare un "loop".

Il secondo comando lo rende eseguibile e il terzo sposta questo nuovo file in una cartella che si trova di fronte alla cartella bin "di sistema" /usr/bin, in modo che il nostro nuovo file venga eseguito anziché l'originale. La parte "$ @" contiene tutti gli argomenti con cui è stato invocato il comando, quindi vengono inoltrati al comando VirtualBox reale.

Secondo la risposta ("sì") a questa domanda da superutente I processi dei bambini ereditano le priorità di ionice dai genitori? Come si controlla la priorità di I / O di un processo in esecuzione? , dovrebbe essere sufficiente per ioniceil processo padre, in questo modo:

ionice -c 3 VirtualBox

Dalla ionice pagina man sono disponibili i seguenti valori della classe di pianificazione I / O:

  • 0 per nessuno
  • 1 per tempo reale
  • 2 per il massimo sforzo
  • 3 per inattivo (utilizzato nell'esempio sopra)

È possibile utilizzare un numero o un nome di classe.

Inoltre, l' -n levelopzione è applicabile per le classi in tempo reale e migliori, con 0-7 come dati validi (livelli di priorità).


1
Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Lucio,

@Lucio, grazie per un suggerimento, ma la ioniceparte essenziale "dovrebbe essere abbastanza per il processo genitore"?
sm4rk0,

1
Si hai ragione. Ma, se puoi , prenditi un po 'di tempo e poi aggiungi ulteriori informazioni dalla tua esperienza personale su questa procedura, creando una risposta migliore :)
Lucio

@Lucio, spero sia abbastanza buono ora. Grazie per aver insistito (:
sm4rk0,

1
Cordiali saluti: ionicepuò lavorare cfqsolo con lo scheduler! Per maggiori dettagli: unix.stackexchange.com/questions/136226/…
andras.tim

-1

Puoi usare il comando 'renice' per dare la priorità ai processi:

renice -<priority> <application's pid>

Potrebbe anche essere che il tuo disco si stia girando troppo, quindi quando vuoi avviare un'applicazione come Virtualbox deve girare prima di poter iniziare a lavorare (questo può richiedere del tempo).


Grazie per il suggerimento, ma stavo cercando un modo per farlo automaticamente e a livello di sistema. Ad esempio: quando si avvia Virtualbox, eseguirlo con la priorità di I / O minima possibile ...
Salem,

normale piacevole e renice non danno priorità all'IO separatamente.
Jay _silly_evarlast_ Wren,

E questo è carino, non ionico. L'uno è per CPU l'altro per IO.
Dagelf,
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.