Wie kann man mehrere NFS / TCP-Verbindungen zum selben Server herstellen?

7

Ich versuche, die NFS / TCP-Bandbreite zwischen einem Linux-Client und einem einzelnen NFS-Server über eine 10-Gbit / s-Verbindung zu maximieren. Obwohl jeder NFS-Mount ein eigenes Gerät hat (Major / Minor), läuft alles auf eine einzige TCP-Verbindung hinaus, und dies ist ein Engpass.

Mit iperf und mehreren TCP-Verbindungen kann ich ~ 8 Gbit / s erreichen, aber NFS bleibt in einem einzelnen TCP-Stream hängen und ist auf ~ 2 Gbit / s beschränkt (noch keine TCP-Optimierung).

Unter Solaris gibt es die Systemeinstellung, mit rpcmod:clnt_max_connsder festgelegt werden kann, wie viele gleichzeitige TCP-Verbindungen das System zu einem einzelnen NFS-Server verwenden kann.

Gibt es ein Linux-Äquivalent oder eine Möglichkeit dazu?

Als Problemumgehung weiß ich, dass ich viele IP-Adressen auf dem NFS-Server festlegen und dann die Mountpunkte auf ihnen ausgleichen könnte, aber das wäre nicht optimal.

Benoît
quelle
1
Haben Sie den Durchsatz Ihrer Festplatten untersucht? 8 Gbit / s sind eine Menge zu verlangen von einem I / O-Stack.
Daniel Widrick
Das ist kein Problem, der NAS-Server ist eine Hochleistungsspeicher-Appliance, die dies definitiv unterstützen kann.
Benoît
Welche Distribution verwenden Sie auf dem Server? Wie viel RAM? Zahl der Kerne? Wie viele Festplatten? Art der Festplatten? Durchschnittliche Iops pro Festplatte, die Sie sehen? Operationen in der Warteschlange auf den Festplatten? Zeit in der Warteschlange pro Operation auf der Festplatte? Version von NFS? Anzahl der Clients, die eine Verbindung zum Server herstellen? Es gibt eine Menge, die in die Perfektionierung einfließen, und es ist wichtig, zurückzutreten und zuerst das Gesamtbild zu betrachten und dann einzugrenzen. Wenn Sie dies getan haben, ist es hilfreich, bereits gesammelte Zahlen und Statistiken zu veröffentlichen. Sogar die Clients haben möglicherweise etwas damit zu tun (z. B. Puffergröße, Mount-Optionen, verschmutzte Seiten usw.).
MaQleod
Ich bin nicht auf der Suche nach einer Feinabstimmung des Systems. Ich kann sehen, dass eine TCP-Verbindung 250 MB / s nicht überschreitet, aber wenn ich Netcat mit 8 gleichzeitigen TCP-Streams verwende, kann ich 800 MB / s erreichen. Aus diesem Grund suche ich nach einer Möglichkeit, mehrere TCP-Streams auf demselben NFS-Server auszuführen. Und da die NFS-Server proprietär sind, wird es sehr schwierig sein, sie zu optimieren. Daher würde ich lieber einen einfachen Trick wie mehrere Verbindungen verwenden.
Benoît
Mehrere Verbindungen sind der einzige Weg, um das zu tun, wonach Sie suchen. Ein einzelner Stream sollte auf einem fein abgestimmten NFS-Server maximal 350 MB / s pro Thread erreichen. Wenn wir nicht wissen, welche Distribution oder NFS-Version Sie verwenden, ist es auf jeden Fall schwierig, eine gute Empfehlung abzugeben.
MaQleod

Antworten:

1

Sie können wieder zu UDP wechseln und Jumbo-Pakete verwenden (z. B. 4k-Datagramme). Es kann sehr hilfreich sein, wenn Ihr gesamtes Netzwerk Jumbo-Frames unterstützt, sodass Sie nicht auf jeder Seite IP-Pakete wieder zusammensetzen müssen.

Xavier Nicollet
quelle
Guter Vorschlag. Im Idealfall sollten Jumbo-Frames bei etwa 9 KB liegen. Dadurch wird der Netzwerkdurchsatz maximiert.
Shodanshok
0

Wenn Sie NFS v4.1 oder höher verwenden, können Sie möglicherweise pNFS (paralleles NFS) verwenden. Gemäß den folgenden Release-Informationen von Red Hat ist es in RHEL 6.4 verfügbar, aber ich habe keine Updates gesehen, die auf die Verfügbarkeit in anderen Linux-Distributionen hinweisen.

https://www.redhat.com/about/news/press-archive/2013/2/red-hat-announces-general-availability-of-next-minor-release-of-red-hat-enterprise-linux- 6

pNFS ist in RFC5661 ab 2010 definiert. Möglicherweise möchten Sie untersuchen, ob Ihre Speicher-Appliance pNFS vollständig unterstützt.

Ruairi
quelle
Leider muss ich mich an NFSv3 halten.
Benoît