Я розглядав iowait
властивість, відображену у найвищому викладі утиліти, як показано нижче.
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
загалом визначається наступним чином:
"Це час, протягом якого процесор не працює, і очікується деякий вихід IO."
Наскільки я розумію, що процес запускається в одному процесорі. Після того як він буде відкладений або через те, що він використав свій часовий проміжок, або після його блокування, він може з часом бути запланованим знову на будь-якому одному процесорі.
У випадку запиту вводу-виводу, за відстеження iowait
часу відповідає центральний процесор, який переводить процес у режим безперебійного сну . Інші процесори звітували б у той самий час, що й у режимі очікування, коли вони справді простоюють. Чи правильне це припущення?
Крім того, якщо припустити, що існує тривалий запит на введення вводу (тобто процес мав декілька можливостей для планування, але його не планували, оскільки IO не був завершений), як CPU знає, що існує "очікуваний IO"? Звідки береться така інформація? Як CPU може просто з'ясувати, що деякий процес був увімкнути деякий час, щоб IO завершився, оскільки будь-який із процесорів міг перевести цей процес у режим сну. Як підтверджується такий статус "очікуваного вводу-виводу"?