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?
quelle
striping
Programm nicht über einen Multithreading-Algorithmus ausgeführt werden kann. Da Sie das Soft-RAID von verwendenmdadm
, würde ich Ihnen empfehlen, sich die Quelle anzusehen.Antworten:
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).
quelle
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.
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.
quelle