Pregunta ¿Alguien puede explicar exactamente qué es IOWait?


Por mucho que haya leído sobre iowait, todavía es un misterio para mí.

Sé que es el tiempo que tarda la CPU en esperar a que se completen las operaciones de IO, pero ¿qué tipo de operaciones de IO son precisas? Lo que tampoco estoy seguro, ¿por qué es tan importante? ¿No puede la CPU hacer algo más mientras se completa la operación de IO y luego volver al procesamiento de datos?

Además, ¿cuáles son las herramientas adecuadas para diagnosticar qué procesos esperaron exactamente IO?

¿Y cuáles son las formas de minimizar el tiempo de espera de IO?


170
2018-05-27 09:52


origen


Y también, ¿qué es alto iowait? - Muhamed Huseinbašić


Respuestas:


Sé que es el tiempo que dedica la CPU.   a la espera de una operaciones de IO para   completa, pero que tipo de IO   operaciones precisamente? Lo que soy tambien   No estoy seguro, ¿por qué es tan importante?   ¿No puede la CPU hacer algo más?   mientras se completa la operación IO, y   entonces volver a procesar los datos?

Sí, el sistema operativo programará otros procesos para que se ejecuten mientras uno está bloqueado en IO. Sin embargo, dentro de ese proceso, a menos que esté utilizando E / S asíncrona, no progresará hasta que se complete la operación de E / S.

También cuáles son las herramientas adecuadas para   diagnosticar qué proceso (s) hizo exactamente   espera por IO.

Algunas herramientas que pueden ser útiles

  • iostat, para monitorizar los tiempos de servicio de sus discos.
  • iotop (si su kernel lo admite), para monitorear el desglose de las solicitudes de IO por proceso
  • strace, para observar las operaciones reales emitidas por un proceso.

¿Y cuáles son las formas de minimizar IO?   ¿tiempo de espera?

  • asegúrese de tener memoria física libre para que el sistema operativo pueda almacenar en caché los bloques de disco en la memoria
  • mantenga el uso del disco del sistema de archivos por debajo del 80% para evitar una fragmentación excesiva
  • afina tu sistema de archivos
  • utilizar un controlador de matriz respaldado por batería
  • Elija buenos tamaños de búfer al realizar operaciones de io

90
2018-05-27 10:28



No olvide "asegúrese de que el almacenamiento de su back-end sea lo suficientemente rápido para mantenerse al día con su carga de E / S". - jgoldschrafe
@Dave Cheney, y cuando mi proceso está inactivo es porque está esperando en IO. Entonces, ¿cuál es la diferencia entre IOWait y inactivo? - ctrl-alt-delor
Cuando estoy en IOwait, el proceso está en "inactividad ininterrumpida", lo que significa que no se puede eliminar, para evitar los riesgos de dañar los datos en los discos. un proceso normal de inactividad realmente no hace nada, por lo que hay menos riesgos de matarlo. - mveroone
En la parte superior prácticamente significa que tu IO es demasiado lento. "Hacer que el servidor sea más rápido" es diferente tanto si tiene un CPU limitado como si su CPU se está muriendo de hambre porque alguien decidió que el lento disco del notebook es suficiente para ejecutar un servidor de base de datos y la carga de E / S hace que la CPU solo use el 2% de lo que puede, esperando como Loco por que termine el IO. - TomTom
Dios mío, no puedo creer que las 3 mejores respuestas aquí sean tan incorrecto. La respuesta a continuación por haridsv es correcta. No cpu está "esperando" a que se complete el io. Sí, algunos io pueden estar bloqueando, a menudo hay una buena razón para esto y, en algunas circunstancias, todos los io pueden estar bloqueando. Pero también puede ver que ocurra iowait para operaciones completamente asíncronas. - symcbean


Vieja pregunta, recientemente golpeada, pero sintió que las respuestas existentes eran insuficientes.

IOWait definición y propiedades

IOWait (normalmente etiquetado %wa en la parte superior) es una subcategoría de inactivo (%idle generalmente se expresa como inactivo, excepto en 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 el inactivo causado por la espera de io.

Precisamente, iowait es el tiempo empleado en recibir y manejar interrupciones de hardware como porcentaje de las tics del procesador. Las interrupciones de software generalmente se etiquetan por separado como %si.

Importancia y potencial error

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 sea no cuello de botella en IO. Considere dos aplicaciones que se ejecutan en un sistema. Si el programa 1 tiene muchos cuellos de botella y el programa 2 es un usuario pesado de CPU, el %user + %system El CPU aún puede ser algo como ~ 100% y, en consecuencia, iowait mostraría 0. Pero eso es solo porque el programa 2 es intensivo y parece que no dice nada sobre el 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 un simple. top se mostrará en %wa.

Reduciendo IOWait

Además, como ya casi estamos entrando en 2013, además de lo que otros han dicho, la opción de dispositivos de almacenamiento de E / S simplemente increíbles es asequible, es decir, SSD. SSDs son impresionantes !!!


44
2017-12-25 12:45





iowait

iowait es el tiempo que los procesadores / procesadores están esperando (es decir, están en una estado inactivo y lo hace nada), durante el cual hay de hecho estaba Solicitudes de E / S de disco pendientes.

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 alto promedio de carga en su sistema, y ​​en el aviso de inspección que la mayor parte de esto se debe en realidad 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 enlazados 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 cualquier cosa que haga en el sistema sigue siendo muy receptiva.

herramientas

  • sar (desde el sysstat paquete, disponible en la mayoría de las máquinas * nix)
  • iostat
  • sarface (un front-end para sar)

34
2018-05-27 10:32



Tenga en cuenta que, estrictamente hablando, esa definición de tiempo de espera de E / S solo es válida en sistemas con un solo procesador. Necesita ser algo refinado para sistemas multiprocesador: veithen.blogspot.be/2013/11/iowait-linux.html - Andreas Veithen
Hasta que punto iowait afecta Load Average? Digamos, 100 hilos esperando la red, ¿será LA 100? - Ivan Balashov


Encontré la explicación y los ejemplos de este enlace muy útiles: ¿Qué es exactamente "iowait"?. Por cierto, por completo, 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 este otro post.

Citaré algunas secciones importantes (en caso de que el enlace se caiga), algunas de ellas serían repeticiones de lo que otros ya han dicho, pero para mí al menos estas fueron más claras:

Para resumirlo en una oración, 'iowait' es el porcentaje de tiempo   la CPU está inactiva Y hay al menos una E / S en curso.

Cada CPU puede estar en uno de cuatro estados: usuario, sistema, inactivo, iowait.

Me preguntaba qué pasará cuando el sistema tenga otros procesos listos para ejecutarse mientras un proceso está esperando la E / S. Lo de abajo lo explica:

Si la CPU está inactiva, el kernel determina si hay al menos   una E / S actualmente en curso a un disco local o remotamente   disco montado (NFS) que se había iniciado desde esa CPU. Sí hay   es decir, entonces el contador 'iowait' se incrementa en uno. Si no hay   La E / S en curso que se inició desde esa CPU, el contador 'inactivo'   Se incrementa en uno.

Y aquí hay un ejemplo:

Digamos que hay dos programas que se ejecutan en una CPU. Uno es un 'dd'   Programa de lectura desde el disco. El otro es un programa que no hace E / S.   pero está gastando el 100% de su tiempo haciendo trabajo computacional. Ahora asume   que hay un problema con el subsistema de E / S y que las E / S físicas   están tomando más de un segundo para completar. Cada vez que el programa 'dd' es   dormido mientras espera a que se complete su E / S, el otro programa es   capaz de ejecutarse en esa CPU. Cuando se produce la interrupción del reloj, habrá   siempre debe ser un programa que se ejecute en modo usuario o modo sistema.   Por lo tanto, los valores de% inactivo y% iowait serán 0. Aunque iowait   es 0 ahora, eso no significa que NO hay un problema de E / S porque hay   Obviamente, si las I / O físicas están tomando más de un segundo   completar.

El texto completo vale la pena leerlo. Aquí hay un espejo de esta página, en caso de que se caiga.


27
2018-05-27 12:34





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 kernel y proceso de llamadas.

Un ejemplo que usé cuando aprendí DTrace fue comparar un cp comando a un dd mando. Puedes ver eso dd Hace muchas más lecturas para la escritura, mientras que cp No lo hace, principalmente debido al tamaño del búfer dd Usos por defecto (si estoy recordando correctamente).


1
2018-05-27 10:01





El tipo de operaciones de IO 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 hace un montón de acceso al disco, tendrá que esperar.

Para minimizar el tiempo de IO, comprar más memoria y más rápido, obtener discos más rápidos, desfragmentar los discos que tiene.

Si es una aplicación interna que es el cuello de botella, ver si se puede optimizar para leer en bloques más grandes o para hacer IO de forma asíncrona.


0
2018-01-01 15:50



De acuerdo, iowait es el tiempo que pasamos en una bloqueando Operación de IO? - Peter Krumins
Entonces, por ejemplo, si hago un select () o poll () y se bloquea, entonces el tiempo de espera hasta que un descriptor esté disponible, ¿constituirá el tiempo de iowait? - Peter Krumins
Creo que eso pertenecería a SO, ya que parece una pregunta de programación. - Jeremy French
Peteris: sí, es una buena manera de pensarlo. - user2278


utilizando ps aux puede imprimir proceso STAT
si stat es D o Ds, el proceso está en modo de suspensión ininterrumpida (generalmente IO)
cuando un proceso ingresa al modo de suspensión ininterrumpida, se agrega nr_iowait de runqueue, y si nr_iowait> 0, el tiempo de inactividad de la CPU se cuenta para iowait

vmstat también muestra cuántos bloques de proceso
r: El número de procesos que esperan el tiempo de ejecución.
b: El número de procesos en el sueño ininterrumpible.

http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/


0