La mayoría de los sistemas Linux que administro tienen controladores RAID de hardware de características (principalmente HP Smart Array ). Todos están ejecutando RHEL o CentOS.
Estoy buscando ajustables del mundo real para ayudar a optimizar el rendimiento de las configuraciones que incorporan controladores RAID de hardware con discos SAS (Smart Array, Perc, LSI, etc.) y caché con respaldo de batería o flash. Suponga RAID 1 + 0 y múltiples ejes (4+ discos).
Paso una cantidad considerable de tiempo ajustando la configuración de red de Linux para aplicaciones de comercio financiero y de baja latencia. Pero muchas de esas opciones están bien documentadas (cambiar las memorias intermedias de envío / recepción, modificar la configuración de la ventana TCP, etc.). ¿Qué están haciendo los ingenieros en el lado del almacenamiento?
Históricamente, he realizado cambios en el elevador de programación de E / S , y recientemente he optado por deadline
y los noop
programadores para mejorar el rendimiento dentro de mis aplicaciones. A medida que las versiones de RHEL han progresado, también he notado que los valores predeterminados compilados para los dispositivos de bloque SCSI y CCISS también han cambiado. Esto ha tenido un impacto en la configuración recomendada del subsistema de almacenamiento a lo largo del tiempo. Sin embargo, ha pasado un tiempo desde que vi recomendaciones claras. Y sé que los valores predeterminados del sistema operativo no son óptimos. Por ejemplo, parece que el búfer de lectura anticipada predeterminado de 128 kb es extremadamente pequeño para una implementación en hardware de clase de servidor.
Los siguientes artículos exploran el impacto en el rendimiento de cambiar la memoria caché de lectura anticipada y los valores nr_requests en las colas de bloque.
http://zackreed.me/articles/54-hp-smart-array-p410-controller-tuning
http://www.overclock.net/t/515068/tuning-a-hp-smart-array-p400-with -linux-why-tuning-really-matters
http://yoshinorimatsunobu.blogspot.com/2009/04/linux-io-scheduler-queue-size-and.html
Por ejemplo, estos son cambios sugeridos para un controlador HP Smart Array RAID:
echo "noop" > /sys/block/cciss\!c0d0/queue/scheduler
blockdev --setra 65536 /dev/cciss/c0d0
echo 512 > /sys/block/cciss\!c0d0/queue/nr_requests
echo 2048 > /sys/block/cciss\!c0d0/queue/read_ahead_kb
¿Qué más se puede ajustar de manera confiable para mejorar el rendimiento del almacenamiento?
Estoy buscando específicamente las opciones sysctl y sysfs en escenarios de producción.
Más que nada, todo depende de su carga de trabajo.
read_ahead_kb
puede ayudarlo si es realmente útil leer una gran cantidad de datos de algún archivo con anticipación, como cuando transmite video. A veces puede lastimarte mucho. Sí, los 128 KB predeterminados pueden sonar pequeños, pero con suficiente concurrencia, ¡comienzan a sonar como grandes! Por otro lado, con un servidor como un servidor de codificación de video que solo convierte los videos de un formato a otro, sería una buena idea sintonizar.nr_requests
, cuando se sintoniza demasiado, puede inundar fácilmente su controlador RAID, lo que nuevamente perjudica el rendimiento.En el mundo real, necesitas mirar las latencias . Si está conectado a SAN, echar un vistazo a
iostat
,sar
o lo que le gusta usar, y ver si los tiempos de solicitud de E / S de servicios están por las nubes. Por supuesto, esto también ayuda con los discos locales: si las latencias son muy grandes, considere reducir la configuración de su elevador de E / S bajando max_requests y otras configuraciones.fuente
Para su información
read_ahead_kb
yblockdev --setra
son solo diferentes maneras de establecer la misma configuración utilizando diferentes unidades (kB vs sectores):Entonces el
en tu ejemplo no tiene efecto.
fuente