Por mucho que haya leído sobre iowait, todavía es un misterio para mí.
Sé que es el tiempo que pasa la CPU esperando que se completen las operaciones de E / S, pero ¿qué tipo de operaciones de E / S exactamente? Lo que tampoco estoy seguro es por qué es tan importante. ¿No puede la CPU hacer otra cosa mientras se completa la operación de E / S y luego volver a procesar los datos?
Además, ¿cuáles son las herramientas adecuadas para diagnosticar qué proceso (s) esperaron exactamente IO?
¿Y cuáles son las formas de minimizar el tiempo de espera IO?
Respuestas:
Sí, el sistema operativo programará otros procesos para ejecutarse mientras uno está bloqueado en IO. Sin embargo, dentro de ese proceso, a menos que use IO asincrónico, no progresará hasta que se complete la operación de IO.
Algunas herramientas que te pueden resultar útiles
iostat
, para controlar los tiempos de servicio de sus discosiotop
(si su núcleo lo admite), para supervisar el desglose de las solicitudes de E / S por procesostrace
, para ver las operaciones reales emitidas por un procesofuente
Antigua pregunta, recientemente rechazada, pero consideró que las respuestas existentes eran insuficientes.
IOWait definición y propiedades
IOWait (generalmente etiquetado
%wa
en la parte superior) es una subcategoría de inactivo (%idle
generalmente se expresa como inactivo excepto las subcategorías definidas), lo que significa que la CPU no está haciendo nada. Por lo tanto, siempre que haya otro proceso que la CPU pueda estar procesando, lo hará. Además, inactivo, usuario, sistema, iowait, etc. son una medida con respecto a la CPU. En otras palabras, puede pensar en iowait como la inactividad causada por esperar a io.Precisamente, iowait es el tiempo dedicado a recibir y manejar interrupciones de hardware como un porcentaje de tics de procesador. Las interrupciones de software generalmente se etiquetan por separado como
%si
.Importancia y potencial malentendido
IOWait es importante porque a menudo es una métrica clave para saber si tiene un cuello de botella en IO. Pero la ausencia de iowait no significa necesariamente que su aplicación no tenga cuellos de botella en IO. Considere dos aplicaciones que se ejecutan en un sistema. Si el programa 1 tiene un cuello de botella muy io y el programa 2 es un gran usuario de CPU, la
%user + %system
CPU todavía puede ser algo así como ~ 100% y, en consecuencia, iowait mostrará 0. Pero eso es solo porque el programa 2 es intensivo y relativamente parece no decir nada sobre programa 1 porque todo esto es desde el punto de vista de la CPU.Herramientas para detectar IOWait
Ver publicaciones de Dave Cheney y Xerxes
Pero también
top
se mostrará un simple%wa
.Reducción de IOWait
Además, como ya casi estamos entrando en 2013, además de lo que otros dijeron, la opción de dispositivos de almacenamiento de E / S simplemente increíbles es asequible, es decir, SSD. ¡Los SSD son increíbles!
fuente
iowait
iowait
es el tiempo que el procesador / procesadores están esperando (es decir, está en un estado inactivo y no hace nada ), durante el cual, de hecho, hubo solicitudes pendientes de E / S de disco.Esto generalmente significa que los dispositivos de bloque (es decir, discos físicos, no memoria) son demasiado lentos o simplemente están saturados.
Por lo tanto, debe tener en cuenta que si ve un promedio de carga alto en su sistema, y en el aviso de inspección de que la mayor parte de esto se debe realmente a la espera de E / S, no significa necesariamente que su sistema esté en problemas, y esto ocurre cuando su la máquina simplemente no tiene nada que hacer, aparte de los procesos vinculados a E / S (es decir, procesos que hacen más E / S que cualquier otra cosa (llamadas de sistema no vinculadas a E / S)). Eso también debería ser evidente por el hecho de que todo lo que haces en el sistema sigue siendo muy receptivo.
herramientas
sar
(delsysstat
paquete, disponible en la mayoría de las máquinas * nix)iostat
sarface
(un front-end parasar
)fuente
iowait
afectaLoad Average
? Digamos, 100 hilos esperando la red, ¿será LA 100?La explicación y los ejemplos de este enlace me parecieron muy útiles: ¿Qué es exactamente "iowait"? . Por cierto, en aras de la integridad, la E / S aquí se refiere a E / S de disco, pero también podría incluir E / S en un disco montado en red (como nfs), como se explica en esta otra publicación .
Citaré algunas secciones importantes (en caso de que el enlace se bloquee), algunas de ellas serían repeticiones de lo que otros ya han dicho, pero para mí al menos estas fueron más claras:
Me preguntaba qué sucede cuando el sistema tiene otros procesos listos para ejecutarse mientras un proceso está esperando E / S. Lo siguiente lo explica:
Y aquí hay un ejemplo:
Vale la pena leer el texto completo. Aquí hay un espejo de esta página , en caso de que se caiga.
fuente
Para Solaris, uso DTrace para ver qué están haciendo los procesos si necesito ver qué operaciones de E / S se están ejecutando. Para Linux, hay un programa similar llamado systemtap que proporciona un nivel similar de exposición al núcleo y a las llamadas de proceso.
Un ejemplo que usé cuando aprendí DTrace fue comparar un
cp
comando con undd
comando. Puede ver quedd
hace muchas más lecturas para la escritura, mientrascp
que no lo hace, principalmente debido aldd
uso del tamaño del búfer de forma predeterminada (si no recuerdo mal).fuente
El tipo de operaciones de E / S dependerá de sus aplicaciones y configuración.
Es importante ya que en algunos casos la CPU no puede obtener los datos o las instrucciones que necesita para continuar. En algunos casos puede continuar, pero dependerá de qué aplicaciones se estén ejecutando en cuanto a lo que puede hacer. Si tiene una aplicación de un solo subproceso que tiene mucho acceso al disco, deberá esperar.
Para minimizar el tiempo de E / S, compre más memoria y más rápido, obtenga discos más rápidos, defragmente los discos que tenga.
Si se trata de una aplicación interna, que es el cuello de botella, vea si puede optimizarse para leer en bloques más grandes o para hacer IO de forma asincrónica.
fuente
el uso de ps aux puede imprimir el proceso STAT
si stat es D o Ds, el proceso está en suspensión ininterrumpible (generalmente IO)
cuando un proceso ingresa en suspensión ininterrumpible, se agrega nr_iowait de runqueue y si nr_iowait> 0, se cuenta el tiempo de inactividad de la CPU a esperar
vmstat también muestra cuántos bloques de procesos
r: El número de procesos que esperan el tiempo de ejecución.
b: El número de procesos en suspensión ininterrumpida.
http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/
fuente