El rendimiento de Linux RAID-0 no aumenta a más de 1 GB / s

8

Tengo problemas para obtener el máximo rendimiento de mi configuración. El hardware es el siguiente:

  • doble procesador Quad-Core AMD Opteron (tm) 2376
  • 16 GB de RAM DDR2 ECC
  • Controladores RAID Adaptec 52245 duales
  • 48 unidades SATA de 1 TB configuradas como 2 matrices RAID-6 (banda de 256 KB) + repuestos.

Software :

  • Núcleo normal vainilla 2.6.32.25, compilado para AMD-64, optimizado para NUMA; Debian Lenny userland.
  • benchmarks run: disktest, bonnie ++, dd, etc. Todos dan los mismos resultados. No hay discrepancia aquí.
  • planificador io utilizado: noop. Sí, no hay truco aquí.

Hasta ahora, básicamente suponía que la creación de bandas (RAID 0) en varios dispositivos físicos debería aumentar el rendimiento de manera lineal. Sin embargo, este no es el caso aquí:

  • cada matriz RAID alcanza aproximadamente 780 MB / s de escritura, sostenida, y 1 GB / s de lectura, sostenida.
  • escribir en ambas matrices RAID simultáneamente con dos procesos diferentes da 750 + 750 MB / s, y leer en ambos da 1 + 1 GB / s.
  • sin embargo, cuando separo ambas matrices juntas, usando mdadm o lvm, el rendimiento es de aproximadamente 850 MB / s de escritura y 1,4 GB / s de lectura. ¡al menos 30% menos de lo esperado!
  • ejecutar dos procesos paralelos de escritor o lector contra las matrices rayadas no mejora las cifras, de hecho, degrada el rendimiento aún más.

Entonces, ¿qué está pasando aquí? Básicamente, descarté la contención del bus o la memoria, porque cuando ejecuto dd en ambas unidades simultáneamente, la velocidad de escritura agregada en realidad alcanza 1.5 GB / sy la velocidad de lectura supera los 2 GB / s.

Entonces no es el bus PCIe. Supongo que no es la RAM. No es el sistema de archivos, porque obtengo exactamente los mismos números comparativos con el dispositivo sin formato o con XFS. Y también obtengo exactamente el mismo rendimiento al usar bandas LVM y bandas md.

Que pasa ¿Qué impide que un proceso alcance el máximo rendimiento posible? ¿Es defectuoso el trazado de líneas de Linux? ¿Qué otras pruebas puedo ejecutar?

wazoox
fuente
No entiendo por qué vas a RAID 6 + 0 aquí, ¿por qué harías eso si solo puedes usar RAID 1 + 0 normal?
Chopper3
Eso no resolverá el problema. md / lvm comparten el mismo comportamiento cuando se eliminan las matrices RAID-10 Estoy cuidando la falta general de rendimiento, no una configuración particular. Este es un sistema de prueba, no una máquina de producción.
wazoox
55
¿Tu raid 0 stripes se alinea con tu raid 6 stripes? El RAID generalmente en capas es un área muy precaria y no está bien suponer que un RAID dado actuará como si fuera un solo disco duro de la misma velocidad.
JamesRyan
1
¿Has intentado configurar las tarjetas Adaptec como JBOD y hacer RAID-10 solo en software (md)? no me sorprendería si la función RAID del controlador está en parte manejada por los controladores, negando cualquier ventaja de rendimiento una vez que intercalas dos RAID diferentes. md, por otro lado, intentará optimizar el acceso a cada unidad de forma independiente, acercándose a los tiempos teóricos (si no hay otro cuello de botella, por supuesto)
Javier
1
Eso no parece una investigación fácil. A primera vista, preferiría la posibilidad de que el stripingprograma no pueda funcionar a través de un algoritmo de subprocesos múltiples. Como está utilizando el RAID suave de mdadm, le sugiero que eche un vistazo a la fuente.
e2-e4

Respuestas:

3

¿Has intentado ejecutar latencia superior mientras haces puntos de referencia? podría ser útil para ver qué Linux syscall es el culpable (si lo hay).

Andika Triwidada
fuente
2

Por lo que puedo decir, es una tarjeta x8 PICe Gen 1: la velocidad de datos máxima absoluta que podría admitir es de 2 GBytes / seg asumiendo cero gastos generales. Los propios Adaptec solo afirman que las tarjetas pueden sostener 1.2Gbytes / seg en el mejor de los casos y usted está excediendo eso.

Equipados con RAID en chip (RoC) de doble núcleo líder en la industria, conectividad PCI Express x8 y 512 MB de caché DDR, proporcionan más de 250,000 IO por segundo y 1.2GB / s.

Supongo que, dado que es capaz de superar significativamente su rendimiento reclamado con dos conjuntos RAID 0 que actúan independientemente de la carga adicional, pequeña y todo lo que podría ser, el agregado de bandas aumenta la tensión de las CPU RAID, o posiblemente el subsistema RAM en el controlador, a cargas GByte / seg.

Helvick
fuente
1
No entiendo bien ... Como OP lo expresa, me parece que tiene 2 controladores RAID, cada uno manejando una matriz RAID6. Luego, RAID 0 son las dos matrices RAID 6 en software, es decir. usando Linux 'integrado en el kernel RAID. En este caso, cada controlador solo debe manejar la mitad de la carga, por lo que cada controlador solo necesita escribir 780MB / s y 1GB / s de lectura. Los controladores ya han demostrado que pueden hacer esto (antes de agregar el RAID de software). ¿Entonces el controlador PCI-Express bus / RAID en sí mismo no debería ser el factor limitante?
Jesper M
Punto justo: se perdió el comentario del controlador dual (y la parte lvm \ md que enfatizó eso). Su punto sobre que no es una limitación de bus \ IO está bastante probado entonces.
Helvick