Eu estive olhando para a iowait
propriedade mostrada na saída do utilitário superior, como mostrado abaixo.
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
é geralmente definido da seguinte forma:
"É o tempo durante o qual a CPU está ociosa e há algumas informações pendentes".
Entendo que um processo é executado em uma única CPU. Depois que ele é desmarcado, porque ele esgotou seu horário ou depois de ser bloqueado, ele pode ser agendado novamente em qualquer CPU novamente.
No caso de solicitação de E / S, uma CPU que coloca um processo em suspensão ininterrupta é responsável por rastrear o iowait
tempo. As outras CPUs relatariam o mesmo tempo que o tempo ocioso no final, pois realmente estão ociosos. Essa suposição está correta?
Além disso, supondo que haja uma solicitação de IO longa (o que significa que o processo teve várias oportunidades de agendamento, mas não foi agendado porque a IO não estava completa), como uma CPU sabe que há "IO pendente"? De onde esse tipo de informação é obtido? Como uma CPU pode simplesmente descobrir que algum processo foi adiado por algum tempo para que um IO seja concluído, pois qualquer uma das CPUs poderia ter adiado esse processo. Como é confirmado esse status de "IO pendente"?