¿Cómo maneja Linux IO de disco concurrente?

12

Cuando un servidor Linux atiende muchas solicitudes simultáneas para leer muchos archivos diferentes, lo hace:

  1. Busque el Archivo_1, lea el archivo completo, luego busque el Archivo_2, lea el archivo completo, luego busque el Archivo_3, etc.

  2. Busque File_1, lea parte de él (¿hasta el valor de lectura anterior?), Luego busque File_2, lea parte de él, luego vuelva a File_1 donde lo dejó, lea más, luego busque File_3, etc. etc.

Si es el segundo caso, entonces el servidor está haciendo muchas más búsquedas de las necesarias, lo que ralentizaría las cosas significativamente. En ese caso, ¿hay algún ajuste que pueda hacer?

Continuación
fuente

Respuestas:

14

En el disco de E / S hay una cosa llamada elevador. El subsistema del disco intenta evitar golpear la cabeza del disco por todos los platos. Reordenará las solicitudes de E / S (cuando no esté prohibido, por ejemplo, por una barrera) para que la cabeza se mueva desde el interior del disco hacia el exterior y viceversa, realizando las E / S solicitadas en el camino.

Lo segundo es la fusión de solicitudes de E / S. Si hay muchas solicitudes dentro de un período de tiempo corto, que acceden a diferentes partes del archivo, el subsistema de E / S intentará obtener todos los datos de una vez, en lugar de emitir varias solicitudes desarticuladas.

En cuanto a sintonización. Si usted es el escritor de la aplicación, hay mucho que puede hacer. Puede emitir E / S grandes y secuenciales, siempre que pueda y usar fsync () et.al. cuando necesita asegurarse de que los datos estén en los platos.

Si usted es un administrador de sistemas, y sabe absolutamente, que las solicitudes de datos de 2 aplicaciones saltan, e intentan leer los archivos de forma secuencial (por ejemplo, tiene 2 DVDs transcodificados en paralelo), entonces sí, aumentar la lectura debería ayudar. De lo contrario, tendrá que echar un vistazo a sus patrones y tamaños de E / S, considere su nivel de RAID (si corresponde) y otros factores, antes de realizar cualquier ajuste. Mire cuáles son sus cuellos de botella reales, antes de comenzar a ajustar, puede ser difícil adivinar qué es lo que realmente limita su sistema.

Paweł Brodacki
fuente
5

En Linux puedes definir tu propio algoritmo de programación, tienes diferentes posibilidades, tuve que hacer un trabajo en la escuela y este artículo de Red Hat me ayudó mucho. Aunque es específicamente para Red Hat, puede encontrar estos programadores en prácticamente cualquier distribución de Linux.

Lucas Kauffman
fuente