Post by Hauke LagingPost by Marcus JodorfZumindest der RAID1 Treiber im Kernel scheint kein Interleaving zu
machen (was theoretisch möglich wäre), mit der Folge, daß bei mir
(relativ viele kleine Dateien auf den Platten, viele Zugriffe) die
Zugriffzeiten kräftig den Bach runter gingen.
Das ergibt meines Erachtens wenig Sinn. Bei RAID-1 wird ja eh ständig
auf beide Platten geschrieben, so dass permanent Kopfpositionierungen
bei beiden Platten anfallen. Das Interleaving auf block-device-Ebene
ist bei kleinen Dateien natürlich ineffizient. Aber um Interleaving
auf Dateiebene machen zu können, müsste der Kernel ja wissen, welche
Datei als nächstes gelesen werden muss. Und wie sollte er das? Gibt es
dafür einen Syscall?
Es gibt RAID 1 Treiber, die z.B. Interleaving machen in dem Sinne, daß
z.B. bei einer Leseoperation die Platte den Lesebefehl bekommt, deren
Kopf schon am nächsten dran ist.
Man kann das noch weitertreiben und von der ersten Platte lesen und
gleichzeitig schon Folgedaten/Chunks von der nächsten anfordern, also
schon mal den nächsten Kopf in Marsch setzen, während der andere noch
Daten liefert.
Das äußert sich dann so, daß die Zugriffszeiten mindestens so gut sind,
wie bei einer Einzelplatte oder sogar noch etwas besser und die
Leseleistung auch vom Durchsatz her steigt.
Wenn ich da eben /usr/src/linux/drivers/md/raid1.c und speziell dort
read_balance() überfliege, dann sollte das auch beim Linuxtreiber
eigentlich so sein. Zumindest, daß dort gestartet wird, wo der Kopf im
Moment den gesuchten Daten am Nächsten ist (wie immer das möglich sein
soll, das zu wissen - vermutlich werden da eher statistische Annahmen
getroffen). Aber sieht jedenfalls so aus, als wäre der Sinn der Sache da
tatsächlich geringere Latenzen.
Eigentlich das, was ich da bei einem vernünftigen Treiber erwarten
würde.
In der Praxis ist das bei mir völlig in die Hose gegangen. Ich hab
vom Client aus viele Kopier- und Verschiebeaktionen gehabt aus und in
Verzeichnissen mit bereits vielen Dateien. Bedeutet viele stat()
Aufrufe des Dateimanagers (mc) und Gerödel auf Inodes, falls ich das
richtig überblicke. Zudem noch verschärft das ganze mit Netatalk, also
noch zwischendurch Zugriffe auf dessen interne Datenbank.
Zugriffzeiten spielen da jedenfalls eine große Rolle.
Ging mit Einzelplatten noch recht flott aber mit den selben
Datenbeständen und Operationen war RAID 1 da absolut grottig (auch per
nfs als Gegenprobe). Ich würde jetzt subjektiv schätzen teilweise nur
halb so schnell.
Dann alle Platten als RAID 5 zusammengefaßt und siehe da - merklich
schneller als Einzelplatten und vielfach schneller als RAID 1.
Wo jetzt wirklich die Ursachen liegen, weiß ich nicht. Kann auch sein,
daß sich da der Treiber mit dem Read-Ahead der Platten und deren Cache
beißt oder sonst was. Statt schneller zu werden, wurde die Geschichte
einfach viel langsamer.
Jedenfalls waren das aktuelle 1,5 TB 7200er SATA Platten (Barracudas
7200.11, die nun wirklich keine Schnarchnasen sind), darauf dann ext4
mit etwas härteren Einstellungen (noatime,data=writeback,journal_checksum,noauto_da_alloc) - wobei ext3/2
da in der Gegenprobe einfach nur noch langsamer war - und das Ergebnis
war zu lahm. Sequenziell war's noch OK, aber bei vielen Einzeldateien
und eben Verschieben und Kopieren das Grauen.
Zu lahm einfach im Sinne von merklich langsamer als Einzelplatte, was
eben nicht so sein sollte.
Ich hab damit einige Tage rumgespielt und das dann einfach frustriert
beerdigt.
Post by Hauke LagingDas wäre natürlich wirklich mal interessant.
Ich hab es eben mal überflogen und entgegen meiner ersten Annahme
scheint tatsächlich ein Interleaving implementiert zu sein.
Funktionierte in meinem Szenario nur irgendwie nicht.
Jetzt läuft RAID 5, das hat genug Dampf und erfüllt die Aufgabe flott
genug.
Freie Platten, um das nochmal alles eingehender zu testen, habe ich
nat. im Moment auch nicht.
Ich würde da jedenfalls jedem, der ein RAID 1 andenkt, mal empfehlen, das
erst mal ausgieber mit verschiedenen Belastungsszenarien zu testen,
bevor es produktiv genutzt wird.
Interessanterweise hab ich hier auf dem Mac Mini Server, an dem ich gerade
sitze, die zwei internen 500er Platten als RAID 1 zusammengefaßt und da
habe ich die Probleme nicht. Da haben sich die Leistungen der sonst eher
lahmen 2,5er Notebookplatten tatsächlich etwas verbessert. Aber das ist
ein anderer Softwareraid-Treiber und ein anderes Filesystem.
Gruß,
Marcus