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.
linux
kernel
performance
io
tshepang
fuente
fuente
Respuestas:
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.
fuente
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.
fuente