Die Leistung von Linux RAID-0 wird nicht über 1 GB / s erhöht

8

Ich habe Probleme, den maximalen Durchsatz aus meinem Setup herauszuholen. Die Hardware ist wie folgt:

  • Dual Quad-Core AMD Opteron (tm) Prozessor 2376
  • 16 GB DDR2 ECC RAM
  • zwei Adaptec 52245 RAID-Controller
  • 48 1-TB-SATA-Laufwerke, die als 2 RAID-6-Arrays (256-KB-Streifen) + Ersatzteile eingerichtet sind.

Software:

  • Plain Vanilla 2.6.32.25 Kernel, kompiliert für AMD-64, optimiert für NUMA; Debian Lenny Userland.
  • Benchmarks laufen: disktest, bonnie ++, dd usw. Alle liefern die gleichen Ergebnisse. Keine Diskrepanz hier.
  • io Scheduler verwendet: noop. Ja, kein Trick hier.

Bisher ging ich grundsätzlich davon aus, dass das Striping (RAID 0) mehrerer physischer Geräte die Leistung ungefähr linear steigern sollte. Dies ist hier jedoch nicht der Fall:

  • Jedes RAID-Array erreicht eine Schreibdauer von ca. 780 MB / s und eine Dauer von 1 GB / s.
  • Das gleichzeitige Schreiben auf beide RAID-Arrays mit zwei verschiedenen Prozessen ergibt 750 + 750 MB / s, und das Lesen von beiden ergibt 1 + 1 GB / s.
  • jedoch , wenn ich beide Arrays zusammen Streifen, unter Verwendung von entweder mdadm oder LVM, ist die Leistung etwa 850 MB / s Schreiben und 1,4 GB / s Lesen. mindestens 30% weniger als erwartet!
  • Das Ausführen von zwei parallelen Schreib- oder Leseprozessen für die gestreiften Arrays verbessert die Zahlen nicht, verschlechtert die Leistung sogar noch weiter.

Was passiert hier? Grundsätzlich habe ich Bus- oder Speicherkonflikte ausgeschlossen, da bei gleichzeitiger Ausführung von dd auf beiden Laufwerken die Gesamtschreibgeschwindigkeit tatsächlich 1,5 GB / s erreicht und die Lesegeschwindigkeit 2 GB / s übersteigt.

Es ist also nicht der PCIe-Bus. Ich nehme an, es ist nicht der RAM. Es ist nicht das Dateisystem, da ich genau die gleichen Zahlen erhalte, die mit dem Rohgerät verglichen werden oder XFS verwenden. Und ich bekomme auch genau die gleiche Leistung, wenn ich entweder LVM-Striping oder MD-Striping verwende.

Was ist falsch? Was hindert einen Prozess daran, den maximal möglichen Durchsatz zu erreichen? Ist das Linux-Striping defekt? Welche anderen Tests könnte ich durchführen?

Wazoox
quelle
Ich verstehe nicht, warum Sie hier RAID 6 + 0 verwenden. Warum sollten Sie das tun, wenn Sie nur reguläres RAID 1 + 0 verwenden können?
Chopper3
Das wird das Problem nicht lösen. md / lvm haben das gleiche Verhalten beim Striping von RAID-10-Arrays. Ich kümmere mich um den allgemeinen Leistungsmangel, nicht um ein bestimmtes Setup. Dies ist ein Testsystem, keine Produktionsmaschine.
Wazoox
5
Stimmen Ihre Raid 0-Streifen mit Ihren Raid 6-Streifen überein? Im Allgemeinen ist geschichtetes RAID ein sehr prekärer Bereich, und es ist nicht in Ordnung anzunehmen, dass ein bestimmtes RAID so funktioniert, als wäre es eine einzelne Festplatte mit derselben Geschwindigkeit.
James Ryan
1
Haben Sie versucht, die Adaptec-Karten als JBOD zu konfigurieren und RAID-10 nur in Software (md) auszuführen? Es würde mich nicht überraschen, wenn die RAID-Funktion des Controllers teilweise von den Treibern verwaltet wird, wodurch Leistungsvorteile zunichte gemacht werden, sobald Sie zwei verschiedene RAIDs verschachteln. md hingegen wird versuchen, den Zugriff auf jedes Laufwerk unabhängig zu optimieren, wobei theoretische Zeiten berücksichtigt werden (wenn es natürlich keinen anderen Engpass gibt)
Javier
1
Das klingt nicht nach einer einfachen Untersuchung. Auf den ersten Blick würde ich die Möglichkeit bevorzugen, dass das stripingProgramm nicht über einen Multithreading-Algorithmus ausgeführt werden kann. Da Sie das Soft-RAID von verwenden mdadm, würde ich Ihnen empfehlen, sich die Quelle anzusehen.
Ring Ø

Antworten:

3

Haben Sie versucht, Latencytop auszuführen, während Sie Benchmarks durchführen? Dies kann hilfreich sein, um festzustellen, welcher Linux-Syscall der Schuldige ist (falls vorhanden).

Andika Triwidada
quelle
2

Soweit ich das beurteilen kann, handelt es sich um eine x8 PICe Gen 1-Karte. Die absolute maximale Datenrate, die unterstützt werden kann, beträgt 2 GByte / s bei einem Overhead von null. Adaptec selbst behauptet nur, dass die Karten bestenfalls 1,2 GByte / s aushalten können, und Sie überschreiten dies.

Ausgestattet mit branchenführendem Dual-Core-RAID-on-Chip (RoC), x8 PCI Express-Konnektivität und 512 MB DDR-Cache bieten sie über 250.000 E / A pro Sekunde und 1,2 GB / s.

Ich vermute, dass Striping die RAID-CPUs oder möglicherweise das RAM-Subsystem überlastet, da Sie in der Lage sind, die behauptete Leistung mit zwei RAID 0-Sätzen, die unabhängig voneinander die zusätzliche Last wirken, erheblich zu übertreffen Der Controller wird mit GByte / Sek. geladen.

Helvick
quelle
1
Ich verstehe nicht ganz ... Wie OP es ausdrückt, scheint es mir, dass er 2 RAID-Controller hat, die jeweils ein RAID6-Array handhaben. Dann RAID 0 ist die zwei RAID 6-Arrays in der Software, dh. unter Verwendung des in Linux integrierten Kernel-RAID. In diesem Fall sollte jeder Controller nur die Hälfte der Last bewältigen, sodass jeder Controller nur 780 MB / s schreiben und 1 GB / s lesen muss. Die Controller haben bereits bewiesen, dass sie dies können (bevor Software-RAID hinzugefügt wurde). Der PCI-Express-Bus / RAID-Controller selbst sollte also nicht der begrenzende Faktor sein?
Jesper M
Fairer Punkt - habe den Kommentar zum Dual-Controller verpasst (und den Teil lvm \ md, der das betont hat). Sein Argument, dass es sich nicht um eine Bus \ IO-Einschränkung handelt, ist dann ziemlich bewiesen.
Helvick