Red de conocimiento informático - Conocimiento informático - Cómo duplicar el rendimiento del disco io del servidor CentOS

Cómo duplicar el rendimiento del disco io del servidor CentOS

Cómo duplicar el rendimiento io del disco del servidor CentOS

En este artículo, exploraremos cómo reducir la fragmentación de archivos en Linux. La atención se centra principalmente en los casos de uso en los que el disco está permanentemente lleno (como los servidores proxy http. También hay un consejo para los servidores de imágenes de Internet que pueden aumentar el rendimiento de io varias veces); Si solicita un sistema de archivos especial para su servidor, puede resolver completamente el problema de fragmentación de archivos y maximizar el rendimiento de E/S del disco. Para nuestro servidor proxy, esto equivale a un aumento de 3 a 5 veces en el rendimiento de IO.

Optimizaciones utilizando sistemas de archivos existentes El kernel de Linux y los sistemas de archivos individuales utilizan una variedad de optimizaciones para mejorar las velocidades de acceso al disco. Sin embargo, estas optimizaciones deben incorporarse al diseño de nuestro servidor para aprovecharlas al máximo.

La caché del sistema de archivos El kernel de Linux proporciona la mayor parte de la memoria libre al sistema de archivos virtual como una caché de archivos, es decir, la caché de páginas. Si usa el comando gratuito para ver la memoria, la parte que se muestra como caché es el caché del archivo.

Si puede encontrar las características estadísticas de los archivos a los que se accede en el escenario de uso actual y escribir un algoritmo de eliminación dirigido, puede mejorar significativamente la tasa de aciertos del caché de archivos. Para un proxy de reenvío http, un buen algoritmo de eliminación puede usar 1 GB de memoria para lograr el efecto de caché de un algoritmo lru que usa 100 GB de memoria. Si no va a escribir un nuevo algoritmo de eliminación, generalmente no necesita crear otro programa de caché de archivos en la capa de aplicación para el almacenamiento en caché.

Asignación mínima

El efecto secundario de la asignación mínima es que se desperdiciará algo de espacio en disco (asignado pero no utilizado)

Si hay una gran cantidad de archivos pequeños en el escenario de uso actual. Cambiar la preasignación a un valor mayor desperdiciará mucho espacio en disco, por lo que el valor debe establecerse de acuerdo con el escenario de uso actual. Parece que es necesario modificar directamente el código fuente para que surta efecto. No recuerdo cuándo se cambió en 2009. Los estudiantes interesados ​​pueden buscarlo en Google.

Programación de acceso IO

Cómo optimizar: la programación de acceso IO puede mejorar significativamente el rendimiento de IO, siempre que la capa de aplicación inicie suficiente acceso IO para que Linux lo programe. ¿Cómo iniciar múltiples accesos io desde la capa de aplicación al kernel al mismo tiempo? La opción 1 es utilizar aio_read para iniciar múltiples solicitudes de lectura y escritura de archivos de forma asincrónica.

Consejo: cuando configura el identificador del archivo en sin bloqueo, el proceso aún permanecerá en suspensión y esperará a que se realice la E/S del disco, y el no bloqueo no tiene ningún efecto en la lectura y escritura de archivos. En circunstancias normales, leer el archivo solo generará aproximadamente 10 milisegundos de tiempo de suspensión, por lo que no será obvio cuando el disco io sea muy grande, leer el archivo puede hacer que el proceso se suspenda durante más de 10 segundos; do_generic_file_read llamará a lock_page_killable para que duerma, pero no determinará el indicador de no bloqueo del identificador.

El kernel de Linux de lectura anticipada puede predecir nuestras "solicitudes de lectura futuras" y leer los datos por adelantado. La lectura anticipada reduce la cantidad de lecturas de io y reduce la latencia de las solicitudes de lectura.

Cuando un archivo se expande y es necesario asignar espacio en disco, se puede almacenar en la memoria y luego asignarlo todo a la vez después de agregar varias solicitudes de espacio en disco, en lugar de asignarlo inmediatamente.

La asignación retrasada tendrá algunos efectos secundarios: 1 Si la aplicación fuerza una actualización a través de una interfaz como fsync después de cada escritura de datos, la asignación retrasada no funcionará 2 La asignación retrasada puede introducir intermitentemente una gran latencia de E/S del disco (porque es necesario escribir una mayor cantidad de datos en el disco a la vez)

Cómo realizar la optimización de objetivos:

"Hacer que los archivos en cada directorio se almacenen continuamente" es una característica muy valiosa . Supongamos que hay 10 imágenes en una página web, aunque estas 10 imágenes existen en 10 archivos, los usuarios en realidad acceden a estas 10 imágenes casi al mismo tiempo. Si estas 10 imágenes se pueden almacenar en un espacio de disco contiguo, el rendimiento de io se puede mejorar 10 veces (se pueden leer 10 archivos en una sola búsqueda).

El enfoque tradicional es unir las imágenes, fusionar estas 10 imágenes en una imagen grande y luego la interfaz corta la imagen grande en 10 imágenes pequeñas. Con e4defrag, puede colocar archivos a los que se debe acceder continuamente en la misma carpeta y luego usar e4defrag para desfragmentar el disco periódicamente.

Implemente su propio sistema de archivos Escribimos un sistema de archivos dedicado para el servidor proxy que mejora el rendimiento del disco io entre 3 y 5 veces. En la mayoría de los servidores, no es necesario admitir la función "modificar archivo". Una vez creado un archivo, no se puede modificar, sólo leerlo y eliminarlo. Con esto en mente, podemos eliminar toda la fragmentación de archivos y aumentar la eficiencia del disco IO hasta su límite teórico.

Un archivo de más de 16 MB le indica al sistema de archivos que asigne 16 MB de espacio en disco cuando el servidor crea el archivo. Cada vez que se amplía el archivo, se asignan 16 MB de espacio o se finaliza el archivo. No se permite asignar espacio distinto de 16 MB sin que se finalice el archivo. Al leer o escribir un archivo, lea o escriba 16 MB a la vez o hasta el final del archivo.

En nuestro sistema de archivos, los archivos pequeños están completamente libres de fragmentos y solo requieren una búsqueda por archivo para un rendimiento teóricamente óptimo. Los archivos grandes leen y escriben 16 MB por posición de encabezado, lo que no es un rendimiento del 100%, pero es bastante bueno. Existe una fórmula para medir la eficiencia de la E/S del disco: utilización del disco = tiempo de transmisión / (tiempo de búsqueda promedio + tiempo de transmisión). Para el disco que usamos en ese momento (1T 7200 rpm sata), ya se pueden alcanzar 16 MB de lectura y escritura continua. Más del 98% de utilización del disco.