Langsame NFS-Übertragungsleistung kleiner Dateien

12

Ich verwende Openfiler 2.3 auf einem HP ML370 G5, Smart Array P400, SAS-Festplatten, die mit RAID 1 + 0 kombiniert wurden.

Ich habe eine NFS-Freigabe von einer ext3-Partition mithilfe der webbasierten Konfiguration von Openfiler eingerichtet und konnte die Freigabe von einem anderen Host aus bereitstellen. Beide Hosts sind über eine dedizierte Gigabit-Verbindung verbunden.

Einfacher Benchmark mit dd:

 $ dd if=/dev/zero of=outfile bs=1000 count=2000000
 2000000+0 records in
 2000000+0 records out
 2000000000 bytes (2.0 GB) copied, 34.4737 s, 58.0 MB/s

Ich sehe, dass es eine moderate Übertragungsgeschwindigkeit (58,0 MB / s) erreichen kann.

Wenn ich jedoch ein Verzeichnis kopiere, das viele kleine Dateien ( .phpund .jpgetwa 1 bis 4 KB pro Datei) mit einer Gesamtgröße von ~ 300 MB enthält, cpendet der Vorgang in etwa 10 Minuten.

Ist NFS nicht wie oben beschrieben für die Übertragung kleiner Dateien geeignet? Oder gibt es einige Parameter, die angepasst werden müssen?

Arie K.
quelle
Beantwortet das deine Frage? NFS schlechte Schreibleistung
Aleksandr Dubinsky

Antworten:

7

Es gibt viele Gründe, warum das Übertragen vieler kleiner Dateien immer langsamer ist als das Übertragen einer einzelnen großen Datei. Beim Lesen sind die Dateien mit größerer Wahrscheinlichkeit auf der Festplatte verteilt, sodass überall gesucht werden muss, um sie abzurufen. Wie Evan erwähnte, gibt es auch Metadaten im Fall von NFS (oder einem anderen Dateisystem!), Was die Dinge ebenfalls kompliziert macht.

Sie können versuchen, Ihre rsizeund wsizeParameter auf den NFS-Mount zu erhöhen , um festzustellen, ob dies die Leistung ein wenig verbessert. Lesen Sie auch diese Frage zum Optimieren von NFS auf minimale Latenz, da sie viele hilfreiche Ratschläge enthält, die bei vielen kleinen Dateiübertragungen hilfreich sind.

Kamil Kisiel
quelle
8

Ich habe nicht viel NFS-Erfahrung, aber meine Erfahrung mit anderen Netzwerk-Filesharing-Protokollen zeigt, dass die Leistung im Szenario "Viele kleine Dateien" fast überall leidet. Sie haben eine Round-Trip-Latenz und über eine große Gruppe von Dateien summiert sich diese Latenz.

Evan Anderson
quelle
4

Haben Sie es mit einem anderen Dateisystem wie XFS versucht? Es löste alle meine Probleme bei extrem kleinen Mengen kleiner iSCSI-Blockübertragungen. Keine Ahnung warum.

Außerdem ist iSCSI / NFS normalerweise für ziemlich große Datenrahmen (Jumbo-Rahmen usw.) konfiguriert. Es kann Sie verletzen, wenn Sie winzige Dateien einzeln kopieren. Vielleicht würde es Ihnen helfen, zu tarieren und dann zu übertragen.

pauska
quelle
1
Ja, mein Test zeigte eine gewisse Verbesserung unter Verwendung von XFS als ext3 (~ 8 Minuten gegenüber ~ 14 Minuten).
Arie K
1
Etwas? Ich würde sagen, das ist eine ziemlich große Verbesserung :)
Pause
1

Überprüfen Sie, ob Sie eine TCP-Verbindung verwenden ( mount -t nfs -o TCP- Host: / mount / target ). Die Leistung auf modernen Systemen wird nicht beeinträchtigt, aber kleine E / A können sich erheblich verbessern, wenn Ihr Netzwerk geladen ist.

Und Sie sollten auch ein anderes Dateisystem ausprobieren. ext3 ist im Grunde das langsamste von allen. Es ist solide, bekannt, aber für einen Dateiserver ziemlich ungeeignet. XFS ist viel besser und reiserfs ist auch bei kleinen E / A viel besser.

Wazoox
quelle
1

Wenn Sie einen großen Verzeichnisbaum kleiner Dateien über NFS übertragen möchten und sich beim Server anmelden können, erstellen Sie am besten eine TAR-Datei, die automatisch auf dem Client wie folgt extrahiert wird:

tar c mydirectory | ssh user @ host tar -xf - -C destdir

Auf diese Weise wird nur eine einzige "Datei" über das Netzwerk übertragen und Sie haben sofort alle Ihre Dateien auf dem Host.


quelle
0

Um Evans Antwort zu ergänzen, haben Sie auch den gesamten Aufwand für das Erstellen der Metadaten (Verzeichniseinträge usw.) für jede Datei, über die Sie kopieren.

TCampbell
quelle
0

Eine ähnliche Lösung wie Chris 'Antwort wäre, Ihre Dateien regelmäßig mit den Clients zu synchronisieren. Wenn Sie bidirektionale Änderungen vornehmen möchten, können Sie auch unisono verwenden.

Ztyx
quelle
0

Das Problem ist, dass Ihre Freigabe mit der syncOption (Standardeinstellung) exportiert wird . Verwenden Sie asyncdiese Option, um das Schreiben erheblich zu beschleunigen. Siehe nfs.sourceforge.net/nfs-howto/ar01s05.html

Aleksandr Dubinsky
quelle