5. Optimierung der nfs-Performance-Ether-Kette

Dann zerlegen und mit einem größeren und kleineren Block wieder zusammenbauen. Sie müssen ein Vielfaches von 1024 sein und dürfen nicht größer sein als die von Ihrem System maximal zulässige Blockgröße. Beachten Sie, dass die NFS-Version 2 unabhängig von der durch NFSSVC_MAXBLKSIZE definierten maximalen Blockgröße auf maximal 8 KB beschränkt ist. Version 3 unterstützt bis zu 64 KB, sofern zulässig. Die Größe des Blocks muss eine Zweierpotenz sein, da die meisten Parameter, die ihn einschränken würden (z. B. die Blockgrößen des Dateisystems und die Größe des Netzwerkpakets), Potenzen von zwei sind. Einige Benutzer haben jedoch bessere Treffer mit Blockgrößen gemeldet, die keine Zweierpotenz sind, aber sie sind immer noch Vielfache der Blockgrößensätze des Dateisystems und der Größe des Netzwerkpakets.

Direkt nach dem Mounten mit einer größeren Größe, cd in das gemountete Dateisystem und zum Beispiel ls, erkunden Sie das Dateisystem ein wenig, um sicherzustellen, dass alles so ist, wie es sein sollte.


Wenn die Größe / Größe zu groß ist, sind die Symptome sehr merkwürdig und nicht zu 100% offensichtlich. Ein typisches Symptom sind Listen unvollständiger Dateien, wenn ls abgeschlossen ist und keine Fehlernachrichten angezeigt werden oder wenn die Dateien ohne Fehlermeldung auf mysteriöse Weise ausfallen. Nachdem Sie festgestellt haben, dass die angegebene Größe / Größe funktioniert, können Sie die Geschwindigkeitstests erneut ausführen. Es ist wahrscheinlich, dass verschiedene Serverplattformen unterschiedliche optimale Größen haben.

Verwenden Sie für eine umfassendere Analyse des NFS-Verhaltens insbesondere den Befehl nfsstat, um nfs-Transaktionen, Client- und Server-Statistiken, Netzwerkstatistiken usw. anzuzeigen. Die Option -o net zeigt Ihnen die Anzahl der verworfenen Pakete im Verhältnis zur Gesamtzahl der Transaktionen. Bei UDP-Transaktionen ist die wichtigste Statistik die Anzahl der erneuten Übertragungen aufgrund von verworfenen Paketen, Socket-Pufferüberläufen, allgemeiner Serverüberlastung, Wartezeiten usw. Dies hat enorme Auswirkungen auf die Leistung von NFS und sollte sorgfältig überwacht werden. Beachten Sie, dass nfsstat die Option -z noch nicht implementiert, wodurch alle Zähler auf Null zurückgesetzt werden. Sie sollten sich daher die aktuellen Werte des nfsstat-Zählers ansehen, bevor Sie die Referenzpunkte ausführen.

Um Netzwerkprobleme zu beheben, sollten Sie die Größe des Pakets, das Ihre Netzwerkkarte in Ihrem Zentrum verwendet, neu konfigurieren. Häufig gibt es an anderen Stellen im Netzwerk (z. B. einem Router) eine Einschränkung, die dazu führt, dass die maximale Paketgröße zwischen zwei Computern geringer ist, als dies bei den Netzwerkkarten der Computer tatsächlich möglich ist. TCP muss automatisch die entsprechende Paketgröße für ein Netzwerk erkennen, UDP bleibt jedoch auf einem Standardwert. Daher ist es besonders wichtig, die geeignete Paketgröße zu bestimmen, wenn Sie NFS über UDP verwenden.

Die Verwendung einer Größe oder Größe von ws, die größer als die MTU Ihres Netzwerks ist (in vielen Netzwerken häufig auf 1500 eingestellt), führt bei der Verwendung von NFS über UDP zur Fragmentierung von IP-Paketen. Die Fragmentierung und Zusammenstellung von IP-Paketen erfordert an beiden Enden einer Netzwerkverbindung erhebliche CPU-Ressourcen. Darüber hinaus macht die Paketfragmentierung auch den Netzwerkverkehr für eine größere Unzuverlässigkeit aus, da zum Erwerb des Ethers eine vollständige RPC-Anforderung erneut übertragen werden muss, wenn ein UDP-Paketfragment aus irgendeinem Grund gelöscht wird. Jede Erhöhung der RPC-Neuübertragungen zusammen mit der Möglichkeit längerer Wartezeiten ist das größte Hindernis für die Leistung von NFS über UDP.

Pakete können aus vielen Gründen zurückgezogen werden. Wenn die Topographie Ihres Netzwerks komplex ist, können sich die Fragmentpfade unterscheiden und es ist möglich, dass nicht alle von ihnen den Server erreichen, um sie wieder zusammenzubauen. Die Kapazität des NFS-Servers kann ebenfalls ein Problem sein, da der Kernel eine Beschränkung hat, wie viele Fragmente er im Puffer speichern kann, bevor er mit dem Verwerfen von Paketen beginnt. Mit den Kerneln, die das Dateisystem / proc unterstützen, können Sie die Dateien / proc / sys / net / ipv4 / ipfrag_high_thresh und / proc / sys / net / ipv4 / ipfrag_low_thresh überwachen. Wenn die Anzahl der fragmentierten und nicht verarbeiteten Pakete die durch ipfrag_high_thresh (in Byte) angegebene Anzahl erreicht, beginnt der Kernel einfach, die fragmentierten Pakete zu werfen, bis die Anzahl der unvollständigen Pakete die durch ipfrag_low_thresh angegebene Anzahl erreicht.

Eine neue Funktion, die für die Kernel 2.4 und 2.5 verfügbar ist, aber zum Zeitpunkt dieser Veröffentlichung noch nicht in den Hauptkern integriert wurde, ist NFS über TCP. Die Verwendung von TCP hat einen klaren Vorteil und einen klaren Nachteil gegenüber UDP. Der Vorteil ist, dass es in verlustbehafteten Netzwerken wesentlich besser arbeitet als UDP. Wenn TCP verwendet wird, kann ein einzelnes verworfenes Paket erneut übertragen werden, ohne dass die gesamte RPC-Anforderung erneut übertragen wird. Dies führt zu einer besseren Leistung in verlustbehafteten Netzwerken. Außerdem bewältigt TCP aufgrund der zugrunde liegenden Flusssteuerung auf Netzwerkebene Unterschiede in der Netzwerkgeschwindigkeit und der Wallet-Steuerung besser als UDP.

Der durch das TCP-Protokoll verursachte Overhead führt unter idealen Netzwerkbedingungen zu einer etwas langsameren Leistung als UDP. Die Kosten sind jedoch nicht gravierend und werden oft ohne sorgfältige Messung nicht wahrgenommen. Wenn Sie End-to-End-Gigabit-Ethernet verwenden, können Sie auch die Verwendung von Riesen-Frames untersuchen, da das Hochgeschwindigkeitsnetzwerk größere Frame-Größen ohne höhere Kollisionsraten zulassen kann, insbesondere wenn Sie das Netzwerk als Vollduplex konfiguriert haben.

Zwei Optionen für den Montagebefehl, Zeit und erneute Übertragungen, steuern das Verhalten von UDP-Anforderungen, wenn sie die Wartezeiten der Szene 4 des macbeth act 3-Clients aufgrund von Paketverlust, Netzwerküberlastung usw. einhalten. Mit der Option -o timeo können Sie die Zeit in Zehntelsekunden festlegen, zu der der Client wartet, bis er entscheidet, dass er keine Antwort vom Server erhält, und er versuchen sollte, die Anforderung erneut zu senden. Der Standardwert beträgt 7 Zehntelsekunden. Die Option -or oder retransmission ermöglicht die Angabe der Anzahl der Wartezeiten, bevor der Client aufgibt, und zeigt die Nachricht des Servers an, der nicht antwortet. Der Standardwert ist 3 Versuche. Sobald der Client diese Nachricht anzeigt, wird er weiterhin versuchen, die Anforderung zu senden, jedoch nur einmal, bevor die Fehlermeldung angezeigt wird, wenn ein anderes Zeitlimit auftritt. Wenn der Client den Behandlungskontakt des Harnröhrendivertikels wieder herstellt, verwendet er den korrekten Neuübertragungswert und zeigt die OK-Nachricht des Servers an.

Wenn Sie bereits übermäßige Neuübertragungen feststellen (siehe Ausgabe des Befehls nfsstat) oder wenn Sie die Blockübertragungsgröße ohne Wartezeiten und Neuübertragungen erhöhen möchten, können Sie diese Werte anpassen. Die spezifische Einstellung hängt von Ihrer Umgebung ab und in den meisten Fällen sind die aktuellen Standardwerte ausreichend.

Die meisten Startskripts, Linux und andere initiieren 8 Instanzen von nfsd. In den ersten Tagen von NFS entschied sich die Sonne generell für diese Nummer, und alle anderen kopierten sie. Es gibt keine guten Maße, wie viele Instanzen optimal sind, ein Server mit mehr Verkehr kann jedoch mehr erfordern. Sie müssen mindestens einen Daemon pro Prozessor verwenden, aber vier bis acht pro Prozessor können eine bessere Regel sein. Wenn Sie einen 2.4-Kernel oder höher verwenden und sehen möchten, wie viel Nfsd-Thread gerade verwendet wird, können Sie sich die Datei / proc / net / rpc / nfsd ansehen. Die letzten zehn Zahlen in der dritten Zeile dieser Datei geben an, wie viele Sekunden der Thread-Verbrauch diesen Prozentsatz des maximal zulässigen Werts erreicht hat. Wenn Sie in den ersten drei Dezilen eine große Anzahl haben, möchten Sie möglicherweise die Anzahl der nfsd-Instanzen erhöhen. Dies geschieht beim Start von nfsd mit der Anzahl der Instanzen als Befehlszeilenoption und wird im NFS-Startskript (/etc/rc.D/init.D/nfs in Red Hat) als RPCNFSDCOUNT angegeben. Weitere Informationen finden Sie auf der Handbuchseite zu nfsd (8).

In den Kernen 2.2 und 2.4 hat die Socket-Eingabewarteschlange, in der sich die Anforderungen befinden, während sie gerade verarbeitet werden, eine kleine Standardgrößenbegrenzung (rmem_default) von 64 KB. Diese Warteschlange ist wichtig für Kunden mit hohen Readloads und Servern mit hohen Schreiblasten. Wenn Sie beispielsweise 8 nfsd-Instanzen auf dem Server ausführen, werden für jede dieser Instanzen nur 8 KB zur Verfügung stehen, um Schreibanforderungen während der Verarbeitung zu speichern. Außerdem hat die Ethminer-Download-Socket-Ausgabewarteschlange, die für Clients mit hohen Schreiblasten und Servern mit hohen Leselasten wichtig ist, eine geringe Standardgröße (wmem_default).

Mehrere veröffentlichte Ausführungen des NFS-Referenzpunkts specsfs97 legen die Verwendung eines viel größeren Werts für die Lese- und Schreibwerte fest, [rw] mem_default und [rw] mem_max. Sie können diese Werte auf mindestens 256k erhöhen. Die Lese- und Schreibgrenzen werden im proc-Dateisystem beispielsweise über die Dateien / proc / sys / net / core / rmem_default und / proc / sys / net / core / rmem_max festgelegt. Der Wert für rmem_default kann in drei Schritten erhöht werden. Die folgende Methode ist ein bisschen gehackt, sollte jedoch funktionieren und keine Probleme mit dem Hasherechereumrechner verursachen:

Das Standardexportverhalten für die Protokolle NFS Version 2 und Version 3, die von exportfs in nfs-utils-Versionen vor nfs-utils-1.0.1 verwendet werden, ist "asynchron". Mit diesem Standardwert kann der Server auf Clientanforderungen reagieren, sobald die Anforderung verarbeitet und an das lokale Dateisystem übermittelt wurde, ohne darauf zu warten, dass die Daten in einen stabilen Speicher geschrieben werden. Dies wird durch die asynchrone Option in der Exportliste des Servers angezeigt. Dies führt zu einer besseren Leistung auf Kosten einer möglichen Datenbeschädigung, wenn der Server neu gestartet wird, während Daten und / oder Metadaten erhalten bleiben, die nicht in den Caches gespeichert sind. Diese mögliche Datenbeschädigung ist zum Zeitpunkt des Auftretens nicht erkennbar, da die asynchrone Option den Server anweist, den Client anzulügen und ihm mitzuteilen, dass alle Daten unabhängig vom verwendeten Protokoll in einen stabilen Speicher geschrieben wurden.

Um zu entsprechen "synchron" Verhalten, das als Standard für die meisten proprietären Systeme verwendet wird, die NFS (Solaris, HP-UX, RS / 6000 usw.) unterstützen, und jetzt als Standard in der neuesten Version von exportfs verwendet wird, sollte das Linux-Server-Dateisystem mein Ether Wallet Review mit der Sync-Option exportiert werden. Beachten Sie, dass bei der Angabe synchroner Exporte keine Optionen in der Exportliste des Servers angezeigt werden:

Neben der bisherigen Definition des synchronen Verhaltens kann der Client unabhängig vom Protokoll explizit auf das gesamte synchrone Verhalten bestehen, indem er alle Dateien mit der Option O_SYNC öffnet. In diesem Fall warten alle Antworten auf Clientanforderungen, bis die Daten auf der Serverfestplatte ankommen, und zwar unabhängig vom verwendeten Protokoll. Dies bedeutet, dass in NFS Version 3 alle Anforderungen NFS_FILE_SYNC-Anforderungen sind und dies erfordert Server gibt diesen Status zurück). In diesem Fall ist die Leistung von NFS Version 2 und NFS Version 3 nahezu identisch.

Beachten Sie schließlich, dass bei Protokollanforderungen von NFS Version 3 eine Anforderung zur anschließenden Bestätigung vom NFS-Client zum Zeitpunkt des Schließens der Datei oder zum Zeitpunkt von fsync () den Server zum Schreiben zwingt Auf dem Datenträger werden keine Daten / Metadaten gespeichert, die nicht zuvor geschrieben wurden, und der Server antwortet dem Client erst, wenn dies abgeschlossen ist, solange das Synchronisationsverhalten eingehalten wird. Wenn async verwendet wird, ist das Festschreiben im Wesentlichen ein Nicht-Op, da der Server wieder dem Client entspricht und ihm mitteilt, dass die Daten von kurs etherum an einen stabilen Speicher gesendet wurden. Dadurch werden der Client und der Server erneut Datenbeschädigungen ausgesetzt, da die zwischengespeicherten Daten im Client gelöscht werden können, da davon ausgegangen wird, dass der Server die Daten jetzt in einem stabilen Speicher aufbewahrt.

• Ein tägliches Protokolldateisystem reduziert die Neustartzeit im Falle eines Systemausfalls drastisch. Derzeit funktioniert ext3 mit NFS Version 3 korrekt. Darüber hinaus funktioniert die Version 3.6 von Reiserfs mit NFS Version 3 in Kerneln der Version 2.4.7 oder höher (Patches sind für vorherige Kernel verfügbar). Frühere Versionen von reiserfs enthielten keinen Platz für Generierungsnummern im Inode, wodurch die Möglichkeit einer Beschädigung der Daten während des Neustarts des Servers aufgedeckt werden konnte.

• Darüber hinaus können registrierte Dateisysteme so konfiguriert werden, dass die Leistung maximiert wird, indem die Tatsache genutzt wird, dass Journalaktualisierungen alle für den Datenschutz erforderlich sind. Ein Beispiel ist die Verwendung von ext3 mit data = journal, sodass alle Aktualisierungen zuerst an das Journal und dann an das Hauptdateisystem gehen. Sobald das Journal aktualisiert wurde, kann der NFS-Server die Antwort sicher an die Clients senden, und die Aktualisierung des Hauptdateisystems kann in der freien Zeit des Servers erfolgen. Das Journal in einem Journaldateisystem kann sich auch in einem separaten Gerät befinden, z. B. einer Online-Speicherkarte zur Abschätzung der ethnischen Zugehörigkeit, sodass für Zeitschriftenaktualisierungen normalerweise keine Suche erforderlich ist. Mit nur einer Umdrehungsverzögerung, die Kosten verursacht, bietet dies eine relativ gute synchrone E / A-Leistung. Beachten Sie, dass ext3 derzeit die Verlagerung von Zeitschriften unterstützt, und reiserfs (offiziell) dies bald zulässt. Das unter ftp://ftp.Namesys.Com/pub/reiserfsprogs/reiserfsprogs-3.X.0k.Tar.Gz enthaltene reiserfs-Toolkit enthält das reiserfstune-Tool, mit dem das Journal verschoben werden kann. Es ist jedoch ein Kernel-Patch erforderlich, der im Januar 2002 noch nicht offiziell veröffentlicht wurde.