Tuning für parallele Plattenzugriffe
Tuning für parallele Plattenzugriffe
Hallo,
hab hier ein 8-Kern-System mit Debian Etch. Im Rechner befindet sich ein internes RAID im Stripe-Modus mit Redundanz-Platte. Extern angeschlossen an einen PCIx-SCSI-Controller (Adaptec) ist ein 2TB EasyRaid mit 8 SATA-Platten (ReiserFS) auf dem jede Menge Videosequenzen bestehend aus (grösstenteils) Einzelframes abgelegt sind.
Leider ist der Datendurchsatz auf diese Bild-Daten nicht doll. hdparm (-tT) zeigt zwar folgendes an:
Timing cached reads: 6034 MB in 2.00 seconds = 3018.73 MB/sec
Timing buffered disk reads: 114 MB in 3.01 seconds = 37.81 MB/sec
Beim 8fach-parallelen Zugriff mit 8 Instanzen unserer Software rudert jedoch spätestens der dritte Prozess nur noch auf 30 bis 40 Prozent Kernauslastung herum. xosview zeigt auch für die Kerne immer nur einige wenige Spitzen an. Oftmals scheinen die Kerne für Bruchteile von Sekunden "gar nichts" zu tun. Allerdings muss man sagen, dass auch meine bisherigen Versuche, die Daten von den internen Platten einzulesen, ähnliche Ergebnisse zeigten. Evtl. dauert es von den internen Platten etwas länger bis die Prozesse von 100 Prozent Kernauslastung wegkommen.
Es gab auch für beide Fälle (extern und intern) kaum Performance-Unterschied, egal ob ich die Prozesse wie im Normalfall aus den notwendigen Perl-Scripts startete oder direkt an der Shell.
Nun hab ich im direkten Vergleich noch ein (hardware-mässig) identisches System mit Windows Server 2003, das ebenfalls über ein externes RAID verfügt (NTFS). Auf diesem System funktioniert der Zugriff absolut hoch-performant und unter voller Kernauslastung. Der Source-Code für die Datenzugriffe in unserer Software ist für Linux und Windows identisch.
Es sei noch erwähnt, dass die 8-Kern-Unterstützung generell zu funkionieren scheint. Starte ich einen "make -j8", sind alle Kerne ganz fleissig am Rödeln im Bereich 90 bis 100 Prozent.
Ich frage mich, ob vielleicht der Treiber für das externe RAID auf dem Debian bzw. auch irgendeine Konfiguration für die internen Plattenzugriffe noch getuned werden könnte, um die Kernauslastung nicht durch evtl. langsame Plattenzugriffe zu beeinträchtigen. Wie könnte ich die Ursache für das Ausbremsen finden? Welche Massnahmen würdet Ihr vorschlagen?
Grüsse,
Mac
PS: Nicht wundern. Wer sich heute in mehreren Linux-Foren herumtreibt, wird diese Anfrage nahezu identisch mehrmals wiederfinden. Hoffe das ist ok. Ergebnisstreuung sozusagen...
hab hier ein 8-Kern-System mit Debian Etch. Im Rechner befindet sich ein internes RAID im Stripe-Modus mit Redundanz-Platte. Extern angeschlossen an einen PCIx-SCSI-Controller (Adaptec) ist ein 2TB EasyRaid mit 8 SATA-Platten (ReiserFS) auf dem jede Menge Videosequenzen bestehend aus (grösstenteils) Einzelframes abgelegt sind.
Leider ist der Datendurchsatz auf diese Bild-Daten nicht doll. hdparm (-tT) zeigt zwar folgendes an:
Timing cached reads: 6034 MB in 2.00 seconds = 3018.73 MB/sec
Timing buffered disk reads: 114 MB in 3.01 seconds = 37.81 MB/sec
Beim 8fach-parallelen Zugriff mit 8 Instanzen unserer Software rudert jedoch spätestens der dritte Prozess nur noch auf 30 bis 40 Prozent Kernauslastung herum. xosview zeigt auch für die Kerne immer nur einige wenige Spitzen an. Oftmals scheinen die Kerne für Bruchteile von Sekunden "gar nichts" zu tun. Allerdings muss man sagen, dass auch meine bisherigen Versuche, die Daten von den internen Platten einzulesen, ähnliche Ergebnisse zeigten. Evtl. dauert es von den internen Platten etwas länger bis die Prozesse von 100 Prozent Kernauslastung wegkommen.
Es gab auch für beide Fälle (extern und intern) kaum Performance-Unterschied, egal ob ich die Prozesse wie im Normalfall aus den notwendigen Perl-Scripts startete oder direkt an der Shell.
Nun hab ich im direkten Vergleich noch ein (hardware-mässig) identisches System mit Windows Server 2003, das ebenfalls über ein externes RAID verfügt (NTFS). Auf diesem System funktioniert der Zugriff absolut hoch-performant und unter voller Kernauslastung. Der Source-Code für die Datenzugriffe in unserer Software ist für Linux und Windows identisch.
Es sei noch erwähnt, dass die 8-Kern-Unterstützung generell zu funkionieren scheint. Starte ich einen "make -j8", sind alle Kerne ganz fleissig am Rödeln im Bereich 90 bis 100 Prozent.
Ich frage mich, ob vielleicht der Treiber für das externe RAID auf dem Debian bzw. auch irgendeine Konfiguration für die internen Plattenzugriffe noch getuned werden könnte, um die Kernauslastung nicht durch evtl. langsame Plattenzugriffe zu beeinträchtigen. Wie könnte ich die Ursache für das Ausbremsen finden? Welche Massnahmen würdet Ihr vorschlagen?
Grüsse,
Mac
PS: Nicht wundern. Wer sich heute in mehreren Linux-Foren herumtreibt, wird diese Anfrage nahezu identisch mehrmals wiederfinden. Hoffe das ist ok. Ergebnisstreuung sozusagen...
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
Hab mit dem Wert auch schon herumgespielt und einen halbwegs befriedigenden gefunden. Gib mir noch mal bitte ein paar Hinweise zu "den Schedulern". Mir sagt das im Moment nicht viel, und Google-Ergebnisse bringen mir alles Mögliche.Ryven hat geschrieben:Den Wert für read-ahead muss man austesten. Vom verlauf her ist der Periodisch gedämpft. Der erste Max-Hügel ist der beste.
Ich leg mir da eine Datei an in /etc/init.d/blockdev
Wie gesagt, test auch die Scheduler durch, du wirst überrascht sein.
Ryven
Gruss,
Mac
-
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Um für sda z.B. den deadline io-Scheduler auszuwählen:
Mehr dazu hier: http://www.wlug.org.nz/LinuxIoScheduler
Code: Alles auswählen
echo deadline > /sys/block/sda/queue/scheduler