NFS-Schreibgeschwindigkeit sinkt bei fehlerhaftem COMMIT-Vorgang

NFS-Schreibgeschwindigkeit sinkt bei fehlerhaftem COMMIT-Vorgang

Entschuldigen Sie zunächst, dass ich eine offensichtliche Studienfrage gestellt habe. Ich weiß, dass das eine schlechte Angewohnheit ist, aber ich hoffe, dass ich hier trotzdem Hilfe bekomme, denn ich habe eine Menge recherchiert und konnte keine Antwort darauf finden.

DerSzenariosieht so aus: Ein NFS-Client schreibt eine einzelne Datei mit 50GB auf den NFS-Server. Nach dem Schreiben von 4GB mit einer durchschnittlichen Geschwindigkeit von 125 MByte/s sinkt die Geschwindigkeit auf 12MByte/s.

Frage: Wie können Sie das erklären?

DergegebenAntwortZur Frage: Nach 4 GB Schreibzugriff antwortet der Server nicht mehr auf das COMMIT und der Client sendet in regelmäßigen Abständen COMMITs, bis der Server darauf antwortet, weil der Client seinen Cache leeren möchte. In dieser Zeit sinkt die Datenrate auf das Niveau des langsamsten Elements.

Zum COMMIT-Prozess kann ich nur eine Erklärung wie diese finden:

Der Client schreibt Daten und wenn die Daten an den Server übertragen werden, sendet der Client das COMMIT. Der Server schreibt die Daten in den stabilen Speicher und antwortet auf das COMMIT mit dem Verf-Cookie. Wenn sich das Cookie NICHT vom Cookie des Clients unterscheidet, kann der Client seinen Cache leeren.

Hier ist alsomeine Frage: Stimmt es, dass, wenn der Server auf das COMMIT-Verfahren nicht mit dem Senden des Verf-Cookies antwortet, der Client in regelmäßigen Abständen COMMITs sendet und die Datenrate deutlich abfällt? Wenn ja, auf welches Niveau fällt die Datenrate? Aus der Antwort kann ich nicht schließen, auf welches Niveau die Datenrate abfällt.

Antwort1

Ich denke, dass Folgendes passiert:

Die vom Client gesendeten Daten werden serverseitig in den FS-Cache geschrieben. Sobald die COMMIT-Anforderung gesendet wurde, werden diese Daten in den persistenten Speicher (DISK) geschrieben. Abhängig von der Festplattenleistung des Servers kann dies einige Zeit dauern. Nehmen wir an, die Festplattenleistung beträgt 300 MB/s. Das Leeren von 4 GB dauert 13 Sekunden. Wenn diese Zeit länger als das NFS-Timeout ist, sendet der Client möglicherweise eine weitere COMMIT-Anforderung, da er davon ausgeht, dass die erste verloren gegangen ist. Der COMMIT/WRITE-Verifizierer wird verwendet, um sicherzustellen, dass der Server zwischen diesen Vorgängen nicht neu gestartet wird.

In einem solchen Szenario können Sie Folgendes tun:

  • Erhöhen Sie das NFS-Timeout auf dem Client durch AngabeZeito=Mount-Option. Dies wird jedoch nurFixwiederholte COMMITs.
  • Weisen Sie den Server an, früh genug mit dem Leeren der Daten zu beginnen und Protokollverzögerungen zu vermeiden.

verwenden

sysctl -w vm.dirty_background_ratio=0
sysctl -w vm.dirty_ratio=0
sysctl -w vm.dirty_background_bytes=67108864
sysctl -w vm.dirty_bytes=536870912

Die Größen sollten entsprechend der Server-E/A-Leistung und des Netzwerks abgestimmt werden.

Um zu steuern, wann der Kernel beginnt, Daten auf die Festplatte des Servers zu übertragen und an den Server auf der Clientseite zu senden.

HINWEIS: Diese Optionen sind global und wirken sich auf alle Dateisysteme aus.

verwandte Informationen