sviluppo-web-qa.it

Qualcuno può spiegare esattamente cos'è IOWait?

Per quanto ho letto di iowait, è ancora un mistero per me.

So che è il tempo impiegato dalla CPU in attesa di un IO da completare, ma che tipo di IO precisamente? Cosa non sono sicuro, è il motivo per cui è così importante? La CPU non può semplicemente fare qualcos'altro mentre l'operazione IO viene completata e quindi tornare all'elaborazione dei dati?

Inoltre, quali sono gli strumenti giusti per diagnosticare quali processi hanno atteso esattamente IO.

E quali sono i modi per ridurre al minimo IO tempo di attesa?

207
Peter Krumins

So che è il tempo impiegato dalla CPU in attesa di un IO da completare, ma che tipo di IO precisamente? Cosa non sono sicuro, è il motivo per cui è così importante? La CPU non può semplicemente fare qualcos'altro mentre l'operazione IO viene completata e quindi tornare all'elaborazione dei dati?

Sì, il sistema operativo pianificherà l'esecuzione di altri processi mentre uno è bloccato su IO. Tuttavia, all'interno di tale processo, a meno che non stia utilizzando IO asincrono, non procederà fino a quando qualunque operazione IO è stata completata.

Inoltre, quali sono gli strumenti giusti per diagnosticare quali processi hanno atteso esattamente IO.

Alcuni strumenti che potresti trovare utili

  • iostat, per monitorare i tempi di manutenzione dei tuoi dischi
  • iotop (se il tuo kernel lo supporta), per monitorare la suddivisione di IO richieste per processo
  • strace, per esaminare le operazioni effettive emesse da un processo

E quali sono i modi per ridurre al minimo IO tempo di attesa?

  • assicurarsi di disporre di memoria fisica libera in modo che il sistema operativo possa memorizzare nella cache i blocchi del disco
  • mantenere l'utilizzo del disco del filesystem al di sotto dell'80% per evitare un'eccessiva frammentazione
  • ottimizza il tuo filesystem
  • utilizzare un controller di array alimentato a batteria
  • scegliere buone dimensioni del buffer quando si eseguono operazioni io
103
Dave Cheney

Vecchia domanda, recentemente respinta, ma sentiva che le risposte esistenti erano insufficienti.

Definizione e proprietà di IOWait

IOWait (di solito etichettato %wa in alto) è una sottocategoria di inattivo (%idle viene di solito espresso come inattivo, ad eccezione delle sottocategorie definite), il che significa che la CPU non sta facendo nulla. Pertanto, finché esiste un altro processo che la CPU potrebbe elaborare, lo farà. Inoltre, inattività, utente, sistema, iowait, ecc. Sono una misura rispetto alla CPU. In altre parole, puoi pensare a iowait come al minimo causato dall'attesa di io.

Precisamente, iowait è il tempo impiegato a ricevere e gestire gli interrupt di processo come percentuale di tick del processore. Gli interrupt software di solito vengono etichettati separatamente come %si.

Importanza e potenziale malinteso

IOWait è importante perché spesso è una metrica chiave sapere se hai un collo di bottiglia in IO. Ma l'assenza di iowait non significa necessariamente che l'applicazione sia non strozzata su IO. Considera due applicazioni in esecuzione su un sistema. Se il programma 1 presenta un grosso collo di bottiglia e il programma 2 è un utente pesante della CPU, il %user + %system della CPU potrebbe essere ancora qualcosa come ~ 100% e di conseguenza, iowait mostrerebbe 0. Ma questo è solo perché il programma 2 è intenso e sembra non dire nulla sul programma 1 perché tutto ciò è dal punto di vista della CPU.

Strumenti per rilevare IOWait

Vedi i post di Dave Cheney e Serse

Ma anche un semplice top verrà mostrato in %wa.

Ridurre IOWait

Inoltre, dato che stiamo quasi entrando nel 2013, oltre a ciò che altri hanno detto, l'opzione di semplicemente fantastico IO sono convenienti, vale a dire SSD. Gli SSD sono fantastici !!!

48
Grumpy

iowait

iowait è il tempo in cui il processore/processori sono in attesa (ovvero è in uno stato di inattività e fa niente ), durante il quale in effetti c'erano richieste di I/O su disco in sospeso.

Questo di solito significa che i dispositivi a blocchi (cioè i dischi fisici, non la memoria) sono troppo lenti o semplicemente saturi.

Dovresti quindi notare che se vedi una media di carico elevato sul tuo sistema e, in occasione dell'ispezione, noti che la maggior parte di questo è in realtà dovuta all'attesa dell'I/O, ciò non significa necessariamente che il tuo sistema sia in difficoltà - e questo si verifica quando il tuo semplicemente la macchina non ha nulla da fare, se non i processi associati a I/O (ovvero i processi che eseguono più I/O di qualsiasi altra cosa (chiamate di sistema non associate a I/O)). Ciò dovrebbe anche essere evidente dal fatto che qualsiasi cosa tu faccia sul sistema è ancora molto reattiva.

utensili

  • sar (dal pacchetto sysstat, disponibile sulla maggior parte delle macchine * nix)
  • iostat
  • sarface (un front-end a sar)
36
Xerxes

Ho trovato molto utili la spiegazione e gli esempi di questo link: Che cosa è esattamente "iowait"? . A proposito, per completezza, l'I/O qui si riferisce all'I/O del disco, ma potrebbe anche includere l'I/O su un disco montato in rete (come nfs), come spiegato in questo altro post =.

Citerò alcune sezioni importanti (nel caso in cui il link si interrompa), alcune di queste sarebbero ripetizioni di ciò che altri hanno già detto, ma per me almeno queste erano più chiare:

Per riassumere in una frase, "iowait" è la percentuale di tempo in cui la CPU è inattiva E c'è almeno un I/O in corso.

Ogni CPU può trovarsi in uno dei quattro stati: utente, sys, inattivo, iowait.

Mi chiedevo cosa succede quando il sistema ha altri processi pronti per essere eseguiti mentre un processo è in attesa di I/O. Di seguito lo spiega:

Se la CPU è inattiva, il kernel determina quindi se è attualmente in corso almeno un I/O su un disco locale o su un disco montato in remoto (NFS) che era stato avviato da quella CPU. Se esiste, il contatore 'iowait' viene incrementato di uno. Se non è in corso alcun I/O avviato da quella CPU, il contatore "inattivo" viene incrementato di uno.

Ed ecco un esempio:

Diciamo che ci sono due programmi in esecuzione su una CPU. Uno è un programma 'dd' che legge dal disco. L'altro è un programma che non ha I/O ma che trascorre il 100% del suo tempo a svolgere attività di calcolo. Ora supponiamo che ci sia un problema con il sottosistema I/O e che gli I/O fisici stiano impiegando più di un secondo per essere completati. Ogni volta che il programma 'dd' è inattivo mentre attende il completamento degli I/O, l'altro programma è in grado di funzionare su quella CPU. Quando si verifica l'interruzione dell'orologio, ci sarà sempre un programma in esecuzione in modalità utente o modalità di sistema. Pertanto, i valori% inattivo e% iowait saranno 0. Anche se iowait è 0 ora, ciò non significa che NON ci sia un problema di I/O perché ce n'è ovviamente uno se gli I/O fisici richiedono un secondo per il completamento.

Vale la pena leggere il testo completo. Ecco un mirror di questa pagina , nel caso in cui si abbassi.

34
haridsv

Per Solaris, utilizzo DTrace per vedere cosa stanno facendo i processi se devo vedere quali operazioni I/O sono in esecuzione. Per Linux, esiste un programma simile chiamato systemtap che fornisce un livello simile di esposizione al kernel e alle chiamate di processo.

Un esempio che ho usato durante l'apprendimento di DTrace è stato quello di confrontare un comando cp con un comando dd. Puoi vedere che dd esegue molte più letture per la scrittura, mentre cp non lo fa, principalmente a causa della dimensione del buffer dd utilizza per impostazione predefinita (se ricordo correttamente).

1
Milner

Che tipo di IO dipenderanno dalle tue applicazioni e impostazioni.

È importante poiché in alcuni casi la CPU non è in grado di ottenere i dati o le istruzioni per continuare. In alcuni casi può continuare, ma dipenderà da quali app sono in esecuzione e da cosa può fare. Se hai una singola applicazione con thread che fa un sacco di accesso al disco, dovrai aspettare.

Per ridurre al minimo il tempo IO, acquista più memoria e più veloce, ottieni dischi più veloci, deframmenta i dischi che hai.

Se si tratta di un'applicazione interna che è il collo di bottiglia, vedere se può essere ottimizzato per leggere in blocchi più grandi o fare IO in modo asincrono.

0
Jeremy French

usando ps aux puoi stampare il processo STAT
se stat è D o Ds, il processo è in modalità di sospensione Ininterrotta (di solito IO)
quando un processo entra in Uninterruptible sleep, viene aggiunto nr_iowait di runqueue e se nr_iowait> 0, il tempo di inattività di cpu viene conteggiato in iowait

vmstat mostra anche quanti blocchi di processo
r: il numero di processi in attesa del tempo di esecuzione.
b: il numero di processi nel sonno ininterrotto.

http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/

0
Singo