Qualcuno può spiegare esattamente cos'è IOWait?


194

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

So che è il tempo impiegato dalla CPU in attesa del completamento di un'operazione di I / O, ma che tipo di operazioni di I / O precisamente? Ciò di cui non sono nemmeno sicuro, è perché è così importante? La CPU non può fare qualcos'altro mentre l'operazione IO viene completata e poi 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 i tempi di attesa di IO?


E anche, cosa è alto iowait?
Muhamed Huseinbašić,

Risposte:


99

So che è il tempo impiegato dalla CPU in attesa del completamento di un'operazione di I / O, ma che tipo di operazioni di I / O precisamente? Ciò di cui non sono nemmeno sicuro, è perché è così importante? La CPU non può fare qualcos'altro mentre l'operazione IO viene completata e poi 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 utilizzi un IO asincrono, non progredirà fino al completamento di qualsiasi operazione di IO.

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 assistenza dei dischi
  • iotop (se il kernel lo supporta), per monitorare la suddivisione delle richieste IO per processo
  • strace, per esaminare le operazioni effettive emesse da un processo

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

  • 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

6
Non dimenticare "assicurati che il tuo archivio back-end sia abbastanza veloce da tenere il passo con il tuo carico I / O."
jgoldschrafe,

1
@Dave Cheney, E quando il mio processo è inattivo è perché è in attesa di IO. Quindi qual è la differenza tra IOWait e inattivo?
ctrl-alt-delor,

4
Quando si è in IOwait, il processo è in "modalità di continuità", il che significa che non può essere ucciso, per evitare i rischi di corruzione dei dati sui dischi. un normale processo inattivo non fa davvero nulla, quindi ci sono meno rischi per ucciderlo.
mveroone,

1
Al massimo praticamente significa che il tuo IO è troppo lento. "Rendi il server più veloce" è diverso se la tua CPU è limitata o la tua CPU sta morendo di fame perché qualcuno ha deciso che il disco del notebook lento è sufficiente per eseguire un server di database e il carico di I / O fa sì che la CPU usi solo il 2% di ciò che può, aspettando come pazzo che l'IO finisca.
TomTom,

OMG Non posso credere che le prime 3 risposte qui siano così sbagliate . La risposta di seguito da haridsv è corretta. Nessuna CPU sta "aspettando" il completamento di io. Sì, alcuni io possono bloccare - spesso c'è una buona ragione per questo, e in alcune circostanze tutto io può essere bloccato. Ma puoi anche vedere lo iowait che si verifica per operazioni completamente asincrone.
symcbean,

47

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

Definizione e proprietà di IOWait

IOWait (di solito etichettato %wain alto) è una sottocategoria di inattivi (di %idlesolito è espressa come inattiva tranne le 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 non sia strozzata su IO. Considera due applicazioni in esecuzione su un sistema. Se il programma 1 è pesantemente strozzato e il programma 2 è un utente pesante della CPU, la %user + %systemCPU potrebbe essere ancora qualcosa come ~ 100% e, di conseguenza, iowait mostrerebbe 0. Ma questo è solo perché il programma 2 è intenso e sembra che non parli di nulla programma 1 perché tutto questo è dal punto di vista della CPU.

Strumenti per rilevare IOWait

Vedi i post di Dave Cheney e Serse

Ma topverrà mostrato anche un semplice %wa.

Ridurre IOWait

Inoltre, dato che stiamo quasi entrando nel 2013, oltre a quanto affermato da altri, l'opzione di dispositivi di archiviazione IO semplicemente fantastici è conveniente, vale a dire SSD. Gli SSD sono fantastici !!!


35

iowait

iowaitè il tempo che il processore / trasformatori sono in attesa (cioè è in uno stato inattivo e non fa nulla ), durante la quale infatti era eccezionale disco richieste di I / O.

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, a seguito di un'ispezione, noti che la maggior parte di ciò è 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 la macchina non ha semplicemente 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 legate a I / O)). Ciò dovrebbe anche essere evidente dal fatto che qualsiasi cosa tu faccia sul sistema è ancora molto reattiva.

utensili

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

7
Si noti che in senso stretto, tale definizione di tempo di attesa I / O è valida solo su sistemi a singolo processore. Deve essere in qualche modo perfezionato per i sistemi multi-processore: veithen.blogspot.be/2013/11/iowait-linux.html
Andreas Veithen

In che misura iowaitinfluisce Load Average? Ad esempio, 100 thread in attesa di rete, LA sarà 100?
Ivan Balashov,

32

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' è addormentato 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 vi sia un problema di I / O perché ce n'è ovviamente uno se gli I / O fisici impiegano un secondo per il completamento.

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


1

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 cpcomando con un ddcomando. Puoi vedere che ddfa molte più letture per la scrittura, mentre cpnon lo fa, principalmente a causa delle dimensioni del buffer ddutilizzate per impostazione predefinita (se ricordo bene).


0

Che tipo di operazioni di I / O dipenderà 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 di I / O, acquista più memoria e più veloce, ottieni dischi più veloci, deframmenta i dischi che hai.

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


Okay, quindi spero che sia il tempo speso in un'operazione IO bloccante ?
Peter Krumins,

Quindi, per esempio, se faccio un select () o poll () e si blocca, allora il tempo di attesa fino a quando un descrittore diventa disponibile costituirà il tempo di iowait?
Peter Krumins,

Penso che appartenga a SO in quanto sembra una domanda di programmazione.
Jeremy francese,

Peteris - sì, è un buon modo di pensarci.
user2278,

0

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

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

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

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.