Le prestazioni di Linux RAID-0 non aumentano oltre 1 GB / s


8

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?


Non capisco perché stai andando a RAID 6 + 0 qui, perché dovresti farlo quando puoi semplicemente usare RAID 1 + 0 normale?
Chopper3

Questo non risolverà il problema. md / lvm condividono lo stesso comportamento durante lo striping di array RAID-10. Mi occupo della generale mancanza di prestazioni, non di una configurazione particolare. Questo è un sistema di test, non una macchina di produzione.
Wazoox,

5
il tuo raid 0 strisce si allinea con il tuo raid 6 strisce? Il RAID generalmente a strati è un'area molto precaria e non è giusto supporre che un dato RAID si comporti come se fosse un singolo hard disk della stessa velocità.
JamesRyan,

1
hai provato a configurare le schede Adaptec come JBOD e a fare RAID-10 solo nel software (md)? non mi sorprenderebbe se la funzionalità RAID del controller fosse in parte gestita dai driver, annullando qualsiasi vantaggio prestazionale una volta interleave due RAID diversi. md, d'altra parte, cercherà di ottimizzare l'accesso a ciascuna unità in modo indipendente, avvicinando i tempi teorici (se non ci sono altri colli di bottiglia, ovviamente)
Javier

1
Non sembra un'indagine facile. A prima vista, favorirei la possibilità che il stripingprogramma 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.
e2-e4,

Risposte:


3

Hai provato a eseguire latencytop mentre esegui benchmark? potrebbe essere utile vedere quale syscall di Linux è il colpevole (se presente).


2

Questa è una scheda x8 PICe Gen 1 per quanto posso dire - la velocità di dati massima assoluta che potrebbe supportare è di 2 GByte / sec assumendo zero overhead. Gli stessi Adaptec affermano solo che le carte possono supportare al massimo 1,2 Gbyte / sec e che lo stai superando.

Dotati di RAID su chip dual-core (RoC) leader del settore, connettività PCI Express x8 e 512 MB di cache DDR, forniscono oltre 250.000 IO al secondo e 1,2 GB / s.

La mia ipotesi è che dal momento che sei in grado di superare significativamente le prestazioni dichiarate con due set RAID 0 che agiscono in modo indipendente il carico aggiuntivo, piccolo e tutto ciò che potrebbe essere, lo striping aggiunge a ciò un sovraccarico della CPU RAID, o forse del sottosistema RAM su il controller, con carichi GByte / sec.


1
Non capisco bene ... Come OP lo esprime, mi sembra che abbia 2 controller RAID, ognuno dei quali gestisce un array RAID6. Quindi ha RAID 0 i due array RAID 6 nel software, vale a dire. usando il kernel RAID integrato di Linux. In questo caso, ogni controller dovrebbe gestire solo metà del carico, quindi ogni controller deve solo fare 780 MB / s in scrittura e 1 GB / s in lettura. I controller hanno già dimostrato di poterlo fare (prima dell'aggiunta del software RAID). Quindi il controller bus / RAID PCI-Express stesso non dovrebbe essere il fattore limitante?
Jesper M,

Punto giusto: mancava il commento sul doppio controller (e la parte lvm \ md che lo sottolineava). Il suo punto sul fatto che non si tratta di una limitazione bus \ IO è praticamente provato allora.
Helvick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.