Ho esaminato la iowait
proprietà mostrata nell'output dell'utilità principale come mostrato di seguito.
top - 07:30:58 up 3:37, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
iowait
è generalmente definito come segue:
"È il tempo durante il quale la CPU è inattiva e c'è un certo IO in sospeso."
Comprendo che un processo viene eseguito su una singola CPU. Dopo che è stato pianificato o perché ha esaurito la sua fascia oraria o dopo che è stato bloccato, può eventualmente essere riprogrammato su qualsiasi CPU.
In caso di richiesta IO, una CPU che mette un processo in modalità di sospensione ininterrotta è responsabile del monitoraggio del iowait
tempo. Le altre CPU segnalerebbero contemporaneamente il tempo di inattività in quanto sono inattive. Questo assunto è corretto?
Inoltre, supponendo che vi sia una lunga richiesta di IO (il che significa che il processo ha avuto diverse opportunità di essere programmato ma non è stato pianificato perché l'IO non era completo), come fa una CPU a sapere che c'è "IO in sospeso"? Da dove viene recuperato quel tipo di informazioni? In che modo una CPU può semplicemente scoprire che un certo processo è stato messo in pausa un po 'di tempo per il completamento di un IO poiché una delle CPU avrebbe potuto mettere in pausa quel processo. Come viene confermato questo stato di "IO in sospeso"?