Ich führe einige Benchmarks von Knoten durch, während wir ein verteiltes Dateisystem aufbauen. Da Dateien auf viele Knoten verteilt und repliziert werden, verwenden wir raid0 auf den Knoten selbst. Ich erhalte jedoch einige merkwürdige Leistungszahlen und bin gespannt, ob die StackOverflow-Community helfen kann, herauszufinden, warum. Ich verwende fio als Benchmarking-Tool. Beachten Sie, dass Version 1.38 bei mir nicht funktionierte und ich Version 1.59 oder 1.60 verwenden musste.
Hier ist meine Fio-Konfigurationsdatei:
[global]
directory=/mnt/gluster
lockfile=readwrite
ioengine=libaio
iodepth=8
rw=randrw
nrfiles=200
openfiles=30
runtime=900
[file]
filesize=16-8k/8M-512M
size=1GiB
Für ein Raid0 mit Software-Raid habe ich folgende Ergebnisse erhalten (auf das Wesentliche reduziert):
read : io=285240KB, bw=324535 B/s, iops=79 , runt=900011msec
write: io=283532KB, bw=322592 B/s, iops=78 , runt=900011msec
Auf einem RAID1 mit Software-RAID habe ich folgende Ergebnisse erhalten:
read : io=683808KB, bw=778021 B/s, iops=189 , runt=900000msec
write: io=488184KB, bw=628122 B/s, iops=153 , runt=795864msec
Die Leistung einer einzelnen Festplatte übertrifft immer noch die Leistung von RAID:
read : io=546848KB, bw=622179 B/s, iops=151 , runt=900018msec
write: io=486736KB, bw=591126 B/s, iops=144 , runt=843166msec
LVM, verteilt auf die vier Festplatten mit 4K-Extents:
read : io=727036KB, bw=827198 B/s, iops=201 , runt=900007msec
write: io=489424KB, bw=604693 B/s, iops=147 , runt=828800msec
Hardware-RAID0 (HighPoint RocketRaid 2470)
read : io=326884KB, bw=371918 B/s, iops=90 , runt=900008msec
write: io=328824KB, bw=374125 B/s, iops=91 , runt=900008msec
Beachten Sie, dass die ersten vier Ergebnisse oben nur auf den SATA-Controllern des Motherboards laufen. Allerdings konnte ich die Ergebnisse mit Software-RAID reproduzieren, nachdem ich auf die RocketRaid-Karte umgestiegen war. Dies sind 1-TB-SATA-Laufwerke. Das Ausführen von Multithread-Tests lieferte ungefähr dieselben Ergebnisse. Gibt es einen Grund, warum RAID0 so langsam laufen sollte? Ich dachte, es würde eine bessere Leistung bei zufälligen E/A-Vorgängen als ein einzelnes Laufwerk oder RAID1 liefern.
Folgefrage: Aufgrund einiger Vorschläge von Joe von Scalable Informatics (netter Kerl, kaufen Sie seine Sachen!) habe ich meinen Test geändert, um eine tiefere Warteschlange und eine zufälligere Blockgröße zu verwenden.
[global]
directory=/mnt/glusterfs
lockfile=readwrite
ioengine=libaio
iodepth=32
rw=randrw
numjobs=8
[file]
filesize=16-8k/8M-512M
blocksize_range=64k-1M
size=1GiB
nrfiles=50
openfiles=8
runtime=900
Und das Endergebnis ist, dass die HighPoint RocketRaid 2740-Karte Mist ist.
- Leistung einer einzelnen Festplatte (SuperMicro-Motherboard SATA): 43,2 MB/s Lesen, 42,6 MB/s Schreiben
- MD Raid 0 (RocketRAID als HBA verwendet, mit oder ohne geladene Treiber): 53,1 MB/s Lesen, 54,1 MB/s Schreiben
- RocketRaid Raid 0: 29,4 MB/s Lesen, 29,2 MB/s Schreiben
- MD RAID 0 (Motherboard SATA): 58,0 MB/s Lesen, 58,3 MB/s Schreiben
Die Leistung im Zusammenhang mit einer RocketRaid-Karte war durch die Bank langsamer.
Ich werde diese Frage offen lassen: Wir bekommen in den nächsten ein bis zwei Wochen eine neue Reihe von RAID-Karten zum Testen und ich bin immer noch auf der Suche nach Optimierungstipps, um mehr als die Leistung einer einzelnen Festplatte zu erreichen. Diese Frage scheint noch nicht ausführlich beantwortet worden zu sein.
Antwort1
Möglicherweise liegt ein Stripesize-Problem vor, bei dem die geschriebenen oder gelesenen Daten auf einer einzigen Festplatte gespeichert sind - sieheSoftware-RAID-Anleitungfür Details. Sie können überprüfen, ob dies der Fall ist, indem Sie sich die Ausgabe von anseheniostat.
Wenn Sie die lineare Zugriffsleistung prüfen möchten, versuchen Sie es mit „hdparm -t“ oder dd zum Benchmarking. Dadurch sollten Leistungszahlen angezeigt werden, die ungefähr die doppelte Leistung einer einzelnen Festplatte aufweisen.
Antwort2
Ich dachte, es würde bei wahlfreiem I/O eine bessere Leistung als ein einzelnes Laufwerk oder RAID1 liefern.
Nein, wenn die Anzahl der Blöcke, nach denen Sie zufällig suchen, größer ist als die Streifengröße, dann sollte die Geschwindigkeit ungefähr der eines einzelnen Laufwerks entsprechen. Das erklärt aber immer noch nicht Ihre Ergebnisse, die schlechter sind als die eines einzelnen Laufwerks.
AusWikipedia.
Bei Lese- und Schreibvorgängen, die größer als die Stripe-Größe sind, wie z. B. beim Kopieren von Dateien oder bei der Videowiedergabe, suchen die Festplatten nach der gleichen Position auf jeder Festplatte.Die Suchzeit des Arrays ist also die gleiche wie die eines einzelnen Laufwerks.. Bei Lese- und Schreibvorgängen, die kleiner als die Streifengröße sind, wie z. B. Datenbankzugriffe, können die Laufwerke unabhängig voneinander suchen.