¿Por qué la alta E / S de disco reduce la capacidad de respuesta / rendimiento del sistema?


19

Nunca entendí por qué la alta E / S de disco desaceleró tanto el sistema. Es extraño para mí porque esperaría que la desaceleración afecte solo aquellos procesos que dependen de los datos del disco duro / óptico, pero la desaceleración afecta incluso las cosas cargadas en la RAM. Me estoy refiriendo a iowait .

¿Por qué el procesador espera, en lugar de hacer otro trabajo? ¿Alguien puede explicar esta limitación y por qué no se ha resuelto en el kernel de Linux? ¿Hay algún kernel que no tenga este problema?

[ nota ] Ha habido algún progreso en esta área de rendimiento. Por un lado, los núcleos posteriores (2.6.37 en mi caso) son mucho más receptivos.


¿No explicó xeno exactamente cómo se resolvió esto en el kernel de Linux la última vez que preguntó?
Michael Mrozek

2
Dadas las modificaciones, creo que la intención es que la pregunta anterior sea sobre el progreso realizado para solucionar el problema, mientras que esta pregunta es por qué existe el problema.
Steven D

@mic Steven tiene razón. Tuvimos una larga discusión sobre lo que quise decir con la pregunta anterior. La respuesta de xeno fue tan buena que edité la pregunta para que se ajustara, y volví a hacer la pregunta original aquí.
tshepang

Entiendo, pero su pregunta parece contradecir la otra; aquí dice "¿Alguien puede explicar esta limitación y por qué no se ha resuelto en el kernel de Linux? ¿Hay algún kernel que no tenga este problema?", pero la respuesta de xeno comienza con "Creo que en su mayor parte ha sido resuelto."
Michael Mrozek

@mic No realmente. El núcleo todavía hace iowait , lo que significa que todavía espera. Veo la respuesta de xeno a medida que se ha mejorado más la capacidad de respuesta del sistema . Y estoy de acuerdo, como he señalado en la pregunta.
tshepang

Respuestas:


9

Los sistemas operativos utilizan la memoria virtual para que se pueda usar más memoria de la que hay RAM física disponible. Cuando el núcleo decide que tiene un mejor uso para una página de memoria física, su contenido puede "paginarse" para el almacenamiento en el disco. Cuando se accede a dicha página de memoria virtual mientras está paginada, genera una falla de página y se mueve de regreso del disco a la RAM.

Las fallas de página son un desastre para el rendimiento porque la latencia del disco se mide en milisegundos, mientras que la latencia de RAM se mide en nanosegundos. (1 milisegundo = un millón de nanosegundos!)

La memoria no solo es utilizada por los procesos del usuario, sino también por el núcleo para cosas como el almacenamiento en caché del sistema de archivos. Durante la actividad del sistema de archivos, el núcleo almacenará en caché los datos utilizados recientemente. Se supone que existe una buena posibilidad de que los mismos datos se usen nuevamente en breve, por lo que el almacenamiento en caché debería mejorar el rendimiento de E / S.

La memoria física que se usa para la memoria caché del sistema de archivos no se puede usar para los procesos, por lo que durante la actividad del sistema de archivos se paginará más memoria de proceso y las fallas de página aumentarán. Además, hay menos ancho de banda de E / S de disco disponible para mover páginas de memoria desde y hacia el disco. Como resultado, los procesos pueden detenerse.


Sé que esto es tan antiguo como la suciedad, pero, dependiendo de cómo esté entrando, grandes cantidades de E / S podrían generar muchas interrupciones y el contexto resultante cambia el tiempo de CPU.
Bratchley

5

Según tengo entendido, IOwait significa que un proceso, no el procesador, está esperando que IO esté disponible. Los procesadores han ganado mucha más velocidad que los discos duros, lo que significa que más código terminará más rápido y luego será necesario leer el disco. Cuando es necesario leer varios más de los que la unidad puede hacer lo suficientemente rápido, terminas esperando el procesador. La forma en que se decide quién lee / escribe en el disco está determinada por el planificador de bloques, en la mayoría de los casos ahora CFQ. Si está utilizando CFQ, y necesita un proceso para utilizar menos del tiempo total de E / S para aumentar la capacidad de respuesta del sistema, puede utilizarlo ionice -c3 <processid>. Esto le dice al sistema que solo dé IO a este proceso solo cuando nada más lo necesita.

Esto sigue siendo interesante y explica mejor el problema de iowait.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.