Perché la CPU ha trascorso del tempo su IO (wa)?


18

So che wa(in top) misura il tempo della CPU in attesa di I / O. Molti articoli lo dicono.

Ma sono confuso che, sulla base di 2 punti di conoscenza:

  1. se un processo utilizza una chiamata di sistema per leggere il disco, il processo è bloccato.
  2. Se un processo è bloccato, non può essere pianificato in esecuzione sulla CPU.

Giusto?

Sembra che non ci sia tempo per la CPU in attesa su I / O ... Cosa succede?

Se mi consigliate alcuni libri o articoli per me per ulteriori letture, tanto meglio.


Sono entrato e ho scritto una risposta adeguata. Mi dispiace non ero lì quando avevi bisogno di me ;-)
Alec Teal

Risposte:


22

Lo stato di inattività della CPU è diviso in due diversi stati "secondari": iowaite idle.

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, la CPU è nello stato iowait. Se non è in corso alcun I / O avviato da quella CPU, la CPU è nello idlestato.

Quindi, iowaitè la percentuale di tempo in cui la CPU è inattiva E c'è almeno un I / O in corso avviato da quella CPU.

Il iowaitcontatore afferma che il sistema è in grado di gestire più lavoro di calcolo. Solo perché una CPU è nello iowaitstato non significa che non può eseguire altri thread o processi su quella CPU.

Quindi, iowaitè semplicemente una forma di tempo di inattività.


Questo è in realtà falso. Anche NFS: la CPU non ne ha nemmeno un concetto. Fondamentalmente è il tempo che la CPU ha trascorso incapace di fare qualcos'altro perché ha a che fare con alcune cose IO di basso livello - nel senso di accedere a qualcosa collegato ad esso NON elabora l'I / O che di solito legge file e quant'altro. Ad esempio sul Raspberry Pi non esiste un controller DMA, quindi la CPU non può andare "hey Motherboard leggimi così tanti byte che iniziano qui dalla scheda e li mettono in ram iniziando qui" deve farlo manualmente->
Alec Teal

quindi passa MOLTO tempo ad aspettare COSTANTEmente io come dentro per completare la lettura di una carta. Sembra che una cache miss possa essere misurata da questo "io wait" (che ovviamente non viene conteggiato), IO wait è definito come segue: il tempo che il kernel ha trascorso all'interno di una routine di I / O di dispositivi di basso livello - ad es. RPi, deve letteralmente eseguire la procedura di lettura dalla scheda e la CPU (essendo un chump senza DMA) deve attendere i dati sul bus IO. Con un controller DMA, parla al controller e dice "dimmi quando hai finito" - lasciandolo fare altre cose mentre il controller DMA fa il dispositivo IO
Alec Teal

Usa dstat per vedere IOwaiting BTW, anche iowait e il tempo speso a fare roba del kernel non possono davvero essere misurati per processo. Come dire che ci sono due processi di "scrittura" su "file", il primo si completa rapidamente, l'FS ha scelto di scrivere nella cache per qualsiasi motivo, il secondo fa svuotare la cache, non è corretto contare il tempo molto più lungo per tornare dalla scrittura al processo che ha causato la scrittura. Lo stesso vale per l'attesa I / O, motivo per cui non vengono misurate per processo.
Alec Teal,

4
@AlecTeal: No, è corretto e i tuoi commenti sono falsi. iowait conta il tempo bloccato sull'I / O, non effettuando la manutenzione dell'I / O. Se non vuoi confermarlo leggendo l'origine del kernel, prova un esperimento: monta un filesystem di rete, inizia a leggere un file, quindi spegni il firewall dal computer remoto. il tempo di attesa sarà comunque elevato anche se il processore è completamente inattivo.
David,

1
Ho fatto un test su questa risposta. dd if=/dev/sda of=/dev/nullfare un massimo wa. Quindi eseguire un codice while-true, waè invece di us. Grazie caos
HUA Di

-2

Non sono sicuro al 100% di capire la domanda, ma ci sono alcune idee.

C'è un'altra domanda qui che ha posto questa domanda e ha alcune buone risposte: qualcuno può spiegare esattamente cos'è IOWait?

C'è un buon post qui: http://veithen.github.io/2013/11/18/iowait-linux.html


7
Mike, è preferibile che le risposte includano il contenuto, non solo i collegamenti al contenuto. Fornendo contenuti qui, ti assicuri che la tua risposta abbia ancora valore quando questi link scompaiono.
EEAA

1
@EEAA quindi la risposta deve essere modificata, non triplicata in modo negativo? Oppure può essere spostato in un commento. Contiene ancora informazioni utili. Downvotes significa che l'informazione è inutile, anche rendendola quasi invisibile? Non sto dicendo che hai votato male, mi chiedo solo l'approccio che la gente ha qui.
Roland Pihlakas,

3
@RolandPihlakas È una questione di motivazione. Downvote + comment in questa situazione danno motivazione all'utente a fissare la propria risposta. Sarò felice di rimuovere il mio dv dopo che la risposta è stata risolta. La modifica di questi è controproducente, in quanto consente comportamenti scorretti. Nel corso degli anni abbiamo avuto diversi utenti che hanno sempre e solo pubblicato risposte solo link, nonostante ci sia stato chiesto di non farlo. Se gli utenti non riescono a preoccuparsi di impegnarsi un po 'nelle loro risposte, non li aiuterò risolvendo il loro lavoro.
EEAA

@EAEA Grazie per la risposta elaborata. Il tuo approccio è comprensibile e attraverso i tuoi commenti Offri una spinta motivazionale anche all'autore della risposta. Al contrario, temo che i downvotes silenziosi per lo più non forniscano alcuna motivazione pratica poiché sono oscuri. Ma ero un po 'impreciso - mi chiedevo principalmente perché la risposta fosse stata così sottovalutata da diventare grigia? Il tuo commento con l'uno o due voti negativi dovrebbe essere sufficiente?
Roland Pihlakas,

2
@RolandPihlakas La gente pensava che la risposta non fosse utile, quindi ha effettuato il downgrade. Hanno declassato perché è martedì. Hanno declassato perché sta nevicando a Minneapolis oggi (davvero, e non dovrebbe essere così in tarda primavera). Chissà.
EEAA
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.