He estado buscando en la iowait
propiedad que se muestra en la salida de la utilidad superior como se muestra a continuación.
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 se define de la siguiente manera:
"Es el tiempo durante el cual la CPU está inactiva y hay algunas E / S pendientes".
Tengo entendido que un proceso se ejecuta en una sola CPU. Después de que se desprograma ya sea porque ha agotado su intervalo de tiempo o después de que se bloquea, eventualmente se puede programar nuevamente en cualquier CPU nuevamente.
En caso de solicitud de E / S, una CPU que pone un proceso en suspensión ininterrumpida es responsable de rastrear el iowait
tiempo. Las otras CPU estarían informando al mismo tiempo que el tiempo inactivo de su lado, ya que realmente están inactivas. ¿Es correcta esta suposición?
Además, suponiendo que haya una solicitud de E / S larga (lo que significa que el proceso tuvo varias oportunidades de ser programado pero no fue programado porque el E / S no estaba completo), ¿cómo sabe una CPU que hay "E / S pendiente"? ¿De dónde se obtiene ese tipo de información? ¿Cómo puede una CPU simplemente descubrir que algún proceso se suspendió en algún momento para que se complete un IO ya que cualquiera de las CPU podría haber suspendido ese proceso? ¿Cómo se confirma este estado de "IO pendiente"?