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?
striping
programa 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.