Ho difficoltà a ottenere il massimo rendimento dalla mia configurazione. L'hardware è il seguente:
- doppio processore Quad-Core AMD Opteron (tm) 2376
- RAM ECC DDR2 da 16 GB
- doppi controller RAID 52245 Adaptec
- 48 unità SATA da 1 TB configurate come 2 array RAID-6 (striscia da 256 KB) + ricambi.
Software :
- Kernel Plain 2.6.32.25 vanilla, compilato per AMD-64, ottimizzato per NUMA; Userland di Debian Lenny.
- i benchmark funzionano: disktest, bonnie ++, dd, ecc. Tutti danno gli stessi risultati. Nessuna discrepanza qui.
- io scheduler utilizzato: noop. Sì, nessun trucco qui.
Fino ad ora ho sostanzialmente ipotizzato che lo striping (RAID 0) di diversi dispositivi fisici dovrebbe aumentare le prestazioni in modo approssimativamente lineare. Tuttavia, questo non è il caso qui:
- ogni array RAID raggiunge circa 780 MB / s in scrittura, sostenuto e 1 GB / s in lettura, sostenuto.
- la scrittura su entrambi gli array RAID contemporaneamente con due diversi processi produce 750 + 750 MB / s e la lettura da entrambi fornisce 1 + 1 GB / s.
- tuttavia, quando eseguo il striping di entrambi gli array insieme, utilizzando mdadm o lvm, le prestazioni sono di circa 850 MB / s in scrittura e 1,4 GB / s in lettura. almeno il 30% in meno del previsto!
- l'esecuzione di due processi di scrittura o lettura paralleli contro le matrici a strisce non migliora le cifre, anzi riduce ulteriormente le prestazioni.
Quindi cosa sta succedendo qui? Fondamentalmente ho escluso la contesa tra bus o memoria, perché quando eseguo dd su entrambe le unità contemporaneamente, la velocità di scrittura aggregata raggiunge effettivamente 1,5 GB / se la velocità di lettura supera i 2 GB / s.
Quindi non è il bus PCIe. Suppongo che non sia la RAM. Non è il filesystem, perché ottengo esattamente gli stessi numeri di benchmarking rispetto al dispositivo raw o usando XFS. E ottengo esattamente le stesse prestazioni usando sia lo striping LVM che lo striping md.
Cosa c'è che non va? Cosa impedisce a un processo di raggiungere il massimo throughput possibile? Lo striping di Linux è difettoso? Quali altri test posso eseguire?
striping
programma non sia in grado di eseguire tramite un algoritmo multi-threading. Dal momento che stai utilizzando il soft RAID di mdadm
, ti suggerirei di dare un'occhiata alla fonte.