Lösung für die geringe Schreibeffizienz von unter AIX gemountetem NFS

Lösung für die geringe Schreibeffizienz von unter AIX gemountetem NFS

Von NFS bereitgestellte Dienste

Mounten: Aktivieren Sie den Servoprozess /usr/sbin/rpc.mountd auf dem Server und verwenden Sie den Mount-Befehl auf dem Client. Der gemountete Servoprozess ist ein RPC, der auf die Anfrage des Clients antwortet.

Remote-Dateizugriff: Durch Aktivieren von /usr/sbin/nfsd auf dem Server und /usr/sbin/biod auf dem Client werden Clientanforderungen für Dateien verarbeitet. Wenn jedoch ein Benutzer auf dem Client eine Datei auf dem Server lesen oder schreiben möchte, sendet der Biod-Servoprozess diese Anforderung an den Server.

Startparameter: Bietet Startparameter für SunOS-Clients ohne Festplatte, indem der Daemon /usr/sbin/rpc.bootparamd auf dem Server aktiviert wird.

PC-Authentifizierung: Bietet Benutzerauthentifizierungsdienst für PC-NFS durch Starten von /usr/sbin/rpc.pcnfsd auf der Serverseite

Ein NFS-Dienst ist zustandslos, das heißt, die NFS-Übertragung ist atomar und eine einzelne NFS-Übertragung entspricht einem einzelnen vollständigen Dateivorgang.

Hintergrund:

Linux ist die Serverseite von NFS und AIX ist die Clientseite von NFS (zusätzlich gibt es einen Vergleichstest, bei dem Linux auch als Clientseite verwendet wird).

1. Das NFS entsprechende zugrunde liegende Gerät ist eine Flash-Karte, und die lokale Test-E/A-Schreibleistung kann 2 GB/s erreichen;

2. Der Server ist eine Gigabit-Netzwerkkarte und die FTP-Testübertragung kann 100 MB/s erreichen;

3. AIX mountet NFS erfolgreich und die DD-Test-Schreibgeschwindigkeit beträgt nur 10 MB/s;

4. Linux mountet NFS erfolgreich und die Schreibgeschwindigkeit desselben DD-Tests kann 100 MB/s erreichen;

Hinweis: Die oben genannten Geschwindigkeiten spiegeln hauptsächlich den Unterschied in der Größenordnung wider. Bei tatsächlichen Tests kann es zu geringfügigen Abweichungen kommen.

Spezifische Umgebung:

  • NFS-Server: RHEL 6.8
  • NFS-Client: AIX 6.1, RHEL 6.8

Die Montageparameter werden gemäß dem MOS-Dokument konfiguriert:

Mount-Optionen für Oracle-Dateien für RAC-Datenbanken und Clusterware bei Verwendung mit NFS auf NAS-Geräten (Doc ID 359515.1)

Verfeinern Sie die zu konfigurierenden Parameter entsprechend den tatsächlichen Anforderungen dieses Mal:

--MOS-Empfehlungen (AIX):
cio,rw,bg,schwer,nointr,rsize=32768,
wsize=32768,proto=tcp,noac,
vers=3,timeo=600

--MOS-Empfehlungen (Linux):
rw, bg, schwer, nointr, rsize=32768,
wsize=32768,tcp,actimeo=0,
vers=3,timeo=600

AIX NFS-Mount-Parameter:

mount -o cio,rw,bg,hard,nointr,rsize=32768,wsize=32768,proto=tcp,noac,vers=3,timeo=600 10.xx.xx.212:/xtts /xtts

Bei der direkten Montage tritt der folgende Fehler auf:

# mount -o cio,rw,bg,hard,nointr,rsize=32768,wsize=32768,proto=tcp,noac,vers=3,timeo=600 10.xx.xx.212:/xtts /xtts
Montierung: 1831-008 Aufgeben:
10.xx.xx.212:/xtts
vmount: Vorgang nicht zulässig.

Überprüfen Sie die Informationen, um zu bestätigen, dass AIX zusätzliche Netzwerkparameter festlegen muss:

# nfso -p -o nfs_use_reserved_ports=1

Versuchen Sie erneut, die Montage erfolgreich durchzuführen:

mount -o cio,rw,bg,hard,nointr,rsize=32768,wsize=32768,proto=tcp,noac,vers=3,timeo=600 10.xx.xx.212:/xtts /xtts

Die Geschwindigkeit des DD-Tests ist sehr unbefriedigend, nur 10 MB/s:

--Testleistung; AIX NFS
# Zeit dd wenn=/dev/zero von=/xtts/test-write bs=8192 Anzahl=102400
102400+0 Datensätze drin.
102400+0 Datensätze ausgegeben.

echt 0m43.20s
Benutzer 0m0.79s
System 0 m5,28 s
# Zeit dd wenn=/xtts/test-write von=/dev/null bs=8192 Anzahl=102400
102400+0 Datensätze drin.
102400+0 Datensätze ausgegeben.

real 0m30.86s
Benutzer 0m0.84s
System 0 m5,88 s

Alle Parameter werden entsprechend dem tatsächlichen Bedarf und gemäß den MOS-Empfehlungen eingestellt. Haben Sie eine Frage?

  • Ich habe versucht, den CIO-Parametertest zu entfernen und stellte fest, dass die Ergebnisse nahezu unverändert waren.
  • Ich habe versucht, den Test mit harten Parametern zu entfernen und habe festgestellt, dass die Ergebnisse nahezu unverändert waren.
  • Ich habe versucht, das Protokoll von TCP auf UDP zu ändern und stellte fest, dass die Ergebnisse nahezu unverändert blieben.

Wir haben fast alle möglichen Parameter ausprobiert, aber die Ergebnisse waren nicht optimal. Wir waren sofort bereit, Ressourcen zu koordinieren, um einen Host-Techniker zur Behebung des Problems zu finden.

In diesem Moment kam mir plötzlich die Inspiration und mir fiel eine Möglichkeit ein. Ist es möglich, dass NFS unter AIX den E/A-Durchsatz eines einzelnen Prozesses begrenzt? Führen Sie mit dieser Vermutung parallele Tests durch:

Öffnen Sie 5 Fenster und starten Sie dd gleichzeitig:

Zeit dd wenn=/dev/zero von=/xtts/test-write1 bs=8192 Anzahl=102400
Zeit dd wenn=/dev/zero von=/xtts/test-write2 bs=8192 Anzahl=102400
Zeit dd wenn=/dev/zero von=/xtts/test-write3 bs=8192 Anzahl=102400
Zeit dd wenn=/dev/zero von=/xtts/test-write4 bs=8192 Anzahl=102400
Zeit dd wenn=/dev/zero von=/xtts/test-write5 bs=8192 Anzahl=102400

Ich war angenehm überrascht, dass alle fünf Fenster gleichzeitig in 55 Sekunden abgeschlossen wurden, was 800 M*5 = 4000 M entspricht, alles in 55 Sekunden abgeschlossen, was 72 MB/s pro Sekunde entspricht. Dieser parallele Ansatz hat dem Bedarf an Effizienzverbesserungen entsprochen.

Und es scheint, dass wir, solange wir weiterhin versuchen, mehrere Fenster zum Testen zu öffnen, grundsätzlich das Netzwerklimit von 100 MB/s erreichen können (begrenzt durch Gigabit-Netzwerkkarten).

P.S. Beim Testen desselben NFS, das auf einem anderen Linux-Server gemountet ist, kann die DD-Schreibgeschwindigkeit ohne Parallelisierung 100 MB/s erreichen. Dies war auch der Faktor, der meine Überlegungen zuvor beeinflusst hat.
Linux NFS-Mount-Parameter:

# mount -o rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,actimeo=0,vers=3,timeo=600 10.xx.xx.212:/xtts /xtts

Linux NFS-Testergebnisse:

--Testleistung; Linux NFS
# dd wenn=/dev/zero von=/xtts/test-write bs=8192 Anzahl=102400
102400+0 Datensätze in
102400+0 Datensätze aus
838860800 Bytes (839 MB) kopiert, 6,02451 s, 139 MB/s
# dd wenn=/xtts/test-write von=/dev/null bs=8192 Anzahl=102400
102400+0 Datensätze in
102400+0 Datensätze aus
838860800 Bytes (839 MB) kopiert, 8,55925 s, 98,0 MB/s

Ich bin mit AIX nicht vertraut und habe mich nicht näher mit den zugrunde liegenden Prinzipien befasst. Die größte Verwirrung bei der Lösung des Problems bestand zu Beginn darin, warum der DD-Test bei Verwendung von Linux als Client ohne Parallelisierung eine Geschwindigkeit von 100 MB/s erreichen konnte, was mich in die inhärente Denkweise verfallen ließ. Die Lektion, die ich aus diesem Vorfall gelernt habe, lautet: Manchmal muss man über den Tellerrand hinausblicken, um einen Durchbruch zu erzielen.

Abschließend habe ich auch die Ergebnisse des lokalen Tests auf der NFS-Serverseite gepostet, um meine Bewunderung für die E/A-Fähigkeiten der Flash-Speicherkarte auszudrücken:

# dd wenn=/dev/zero von=/dev/test-write2 bs=8192 Anzahl=1024000
1024000+0 Datensätze in
1024000+0 Datensätze aus
8388608000 Bytes (8,4 GB) kopiert, 4,19912 s, 2,0 GB/s

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • So mounten Sie das NFS-Netzwerkdateisystem zwischen Linux-Systemen
  • MacOS kann NFS nicht mounten. Lösung für den Fehler „Operation nicht zulässig“.
  • Centos7-Installation und -Konfiguration des NFS-Dienstes und Montage-Tutorial (empfohlen)

<<:  Lernen Sie die schwarze Technologie der Union-All-Verwendung in MySQL 5.7 in 5 Minuten

>>:  Vermeiden Sie den Missbrauch zum Lesen von Daten in Vue

Artikel empfehlen

Detaillierte Erklärung zur Verwendung von Join zur Optimierung von SQL in MySQL

0. Bereiten Sie relevante Tabellen für die folgen...

Detaillierte Erläuterung des MySQL-Clusterindex und des Nicht-Clusterindex

1. Clustered-Index Tabellendaten werden in der Re...

Details zu gängigen Javascript-Funktionen höherer Ordnung

Inhaltsverzeichnis 1. Gemeinsame Funktionen höher...

So installieren Sie suPHP für PHP5 auf CentOS 7 (Peng Ge)

Standardmäßig wird PHP unter CentOS 7 als Apache ...

JavaScript verwendet häufig Array-Deduplizierung tatsächliche Kampf Quellcode

Mit der Array-Deduplizierung wird man häufig bei ...

Implementieren eines Tabellen-Scrollkarusselleffekts durch CSS-Animation

Eine Anwendung einer CSS-Animation mit demselben ...

Beispiel zum Einbetten von H5 in die Webansicht des WeChat-Applets

Vorwort WeChat-Miniprogramme bieten neue offene F...

Umfassende Analyse von Prototypen, Prototypobjekten und Prototypketten in js

Inhaltsverzeichnis Prototypen verstehen Prototypo...

Detaillierte Erläuterung des Quellcodes der vue.$set()-Methode von Vue

Bei der Verwendung von Vue zum Entwickeln von Pro...

Der gesamte Prozess der Installation von Gogs mit Pagoda Panel und Docker

Inhaltsverzeichnis 1 Installieren Sie Docker im B...