FreeBSD 7 nfs Server Performance udp / tcp

kai_001

Well-Known Member
Hi,

ich habe nen 7er amd64 als nfs Server. Dort habe ich vfs.read_max auf 256 gesetzt und habe ne super Performance bei Tests mit dd ( lokal auf dem Server ).

Mounte ich nun ein Verzeichnis auf nem 6er Release habe ich zw. tcp und udp mount einen Unterschied von fast 15MB/sec zugunsten von udp.

Gemountet wird mit dem Kommando ... mount -t nfs -o (-U/-T),rw,-t=15,nfsv3,intr,-r=32768,-w=32768,noatime 192.168.xx.xx:/mnt/data /mnt/nfs

Ermittelt sind die Unterschiede mit "time dd if=/dev/zero of=testfile bs=16k count=16384"

Per udp komme ich auf fast 30MB/sec ... tcp pendelt sich eher bei 10MB/sec ein ( geht ab und an auf knapp 20MB/sec, aber nur kurzzeitig ).

Ich dachte immer TCP sei die bessere Wahl ... grade auch wegen Performance.

Habt ihr ne Idee?

Danke
Kai
 
UDP hat weniger Overhead, weil das Protokoll nicht die Integrität der Daten zur Verfügung stellt. Wenn NFS keine eigenen Sicherungsmechanismen hat besteht damit also das Risiko, dass Daten verfälscht werden.

TCP wurde mit FBSD7 deutlich verbessert, automatisch wachsende Puffer, usw. Ich denke das macht die Unterschiede aus.
 
FreeBSD 7.1 wird wirklich signifikante Verbesserungen im Bereich UDP bringen. In kurzen Tests mit 7-STABLE hat sich gezeigt, dass allein BIND bald doppelt so viele Queries wie zuvor schafft. Das wird die Karten dann ein weiteres Mal neu mischen.
 
Hey,

ging ja fix .... weiß jetzt aba nich ob ichs richtig ausgedrückt habe.

UDP is bei mir grade Faktor 1,5 - 2 schneller als TCP *grübel*

Hab die gängigen sysctl Einstellung wie sendspace, revcspace, mbufs u.s.w. schon erhöht.

Ich weiß nu nich, ob ich die per UDP mounten soll / kann ... es geht da ne Menge Traffic rüber ( Bilder ).

Kai
 
Hmm,

wenn ich mit dem NFS-Client per dd die Testdatei schreibe, komme ich jetzt per TCP auf ca. 25-30MB/sec .... lese ich diese dann per dd, komme ich auf ca. 90-100MB/sec.

Da muss doch was faul sein *grübel*. Habt ihr ne Idee?

Danke
Kai
 
Ganz blöde Frage: Hast du auch daran gedacht, das Share zwischen dem Schreiben und dem Lesen neu zu mounten? Ansonsten testest du nur den Cache.

Ansonsten bräuchten wir auch noch mehr Informationen zur verwendeten Hardware, insbesondere natürlich zu den beteiligten Netzwerkkarten. Da wird doch nicht etwa eine Realtek o.ä. Billigkram mitmischen...

Vielleicht solltest du noch den Durchsatz per FTP ermitteln. Dann sieht man, ob es am Protokoll oder doch eher an der Hardware liegen könnte.
 
Hi,

umount wurde immer gemacht.

Per ftp kommt er bei nem put sofort auf > 100MB/sec.

Karte aufm Server is ne Intel Pro 1000 Network.

Auf dem Client ist es ein Intel 82541EI Gigabit Ethernet Controller.

Laut dem ftp Test kanns nicht an der Hardware liegen ... sprich, da scheint doch mit nfs was zu sein. Eventuell einen vfs.nfs* Param ändern? Nur welchen ....

Danke
Kai
 
Teste Schreiben und Lesen bitte einmal mit einer Datei der Groesse 10GB.
Ich gehe davon aus, dass sich die Werte dann recht gut weiter unten angleichen, da die Wirkung des Cache weniger wirkt. Tatsaechliche Bremse wird dann in aller Regel deine HD sein, wobei die heute auch durchaus je nach Typ/RAID weit mehr als 100MB/s liefern koennen.
 
Hi,

habe nen 1GB File generiert.

- TCP ca. 8MB/sec
- UDP ca. 28MB/sec ( sprint zw. 20 und 45MB/sec )
- FTP durchgänging knapp 90MB/sec

Schreibend ... lese ich die Datei vom Server ( per NFS und dd ) komme ich per TCP auf Werte von ca. 70MB/sec.

Ich raff dass nich .... hdd's schließe ich aus. Der Server is grade nur zum Testen an, ich habe lokal werte von ca. 240-250MB/sec. Hat jemand noch ne Idee oder einen Tipp?

Gruß
Kai
 
Zunächst, wie schon gesagt, UDP ist schneller, keine Frage. TCP wird besser und schneller in unsicheren Netzwerken, sprich, dort, wo viele Korrektueren notwendig werden, weil manchmal Pakete unsauber übertragen werden (ich rede also nicht von unsicher, weil jemand mithören könnte oder so was, eher, weil die Verbindungen wackelig sind, nicht ganz so gut, wie sie sein könnten). In General kann vielleicht gesagt werden, daß innerhalb eines lokalen Netzes, wo also nur Switch und Kabel dazwischen liegen, UDP bessere Performance bringt.
Gerade mit FreeBSD bin ich dazu übergegangen, mount-Optionen so gut es geht ganz wegzulassen. Meiner Erfahrung nach stellen sich sehr gute Ergebnisse dann ein, wenn die Rechner das untereinander aushandeln dürfen und nicht zu etwas gezwungen werden. Diese Regel hat Ausnahmen, aber sie ist jedenfalls immer ein guter Ansatz, von dem aus weiter gebastelt werden kann.

Die Geschwindigkeitsmessung über time hat mich auch mit USB-Sticks schon irgendwie unglücklich zurückgelassen.
Ich wollte herausfinden, welcher Stick der schnellste unter einer ganzen Anzahl ist und erhielt bei allen etwa gleiche Ergebnisse und bei zahlreichen Wiederholungen auch eine enorme Bandbreite, so daß ich das nicht mehr messen nennen will, was ich da bekam. Mit den Sticks hatte ich mich darauf beschränkt, eine Datenmenge von 1GB zu schreiben und zu lesen (hinkopieren und wieder auf die Platte zurück). Danach machte ich das in einem Script mit einer Datengröße von 500MB aber mit zahlreichen Unterordnern sogar zehnmal in Folge und die Ergebnisse waren immer noch unbrauchbar, ich konnte auf diese Art und Weise keinen Favoriten ermitteln. Warum das so war, weiß ich nicht.

Netzwerkperformance sehe ich mir ganz gerne mit iftop an. Nicht nur den aktuellen Spitzenwert, auch eine über die Zeit summierte Ausgabe gibt es da. Trotzdem ermittle ich die tatsächlichen Verhältnisse am liebsten mit der Stopuhr. Bei Datenmengen, die groß genug sind, ergibt das eine wirklich brauchbare Aussage.

Doch das sind nur allgemeine Hinweise, die dich mit deinem Problem nicht unbedingt weiter bringen. Ganz sicher ist es bei mir so, daß alle NFS-Verbindungen besser laufen, als ftp-Datentransfer. Dabei kommen FreeBSD und Linux NFS-3 zum Einsatz und fast alle sind mit 100MB verbunden, nur wenige haben einen GB Link. Manchmal habe ich den Eindruck, (hier besonders, bei Verwendung eines Sat-Receivers, der ein Linux mit busybox laufen hat und nur 32MB Ram oder so was hat, einen 250MHz PPC und eine recht langsame 2.5" IDE Festplatte drinnen) daß die verwendete Hardware bis an die Grenzen kommt und nicht etwa das NFS-Protokoll oder das Netzwerk stört.

Ich kann dir nun nicht die ermittelten Werte in meinem Netz aus dem Kopf zitieren, aber, ich habe einen NAS von Thecus und da wird wohl eine maximale Datenrate von etwa 40MB/s als der Renner angesehen, vielleicht siehst du selbst mal nach, mein Gedächtnis ist nicht mehr so gut.. Der Thecus kann auch NFS und ftp und bei mir arbeitet er sehr zufriedenstellend. Trotzdem bekomme ich von unterschiedlichen Programmen ganz unterschiedliche Datenraten angezeigt und zwar erheblich unterschiedliche. Also, auch während einer datenübrtragung zeigt mir der KDE-(KIO)-Dienst da ganz was anderes an, als iftop und auch, wenn ich versuche, die Einheiten umzurechnen, ergibt sich eine große Abweichung der angezeigten Werte um etwa den Faktor drei bis vier. Alleine die KDE-Anzeige ermittelt auch bei mir die ftp-Übertragung etwa doppelt so schnell, während sie mit Stopuhr oder iftop doch ganz anders bewertet werden muß.

Also, sieh einfach mal nach mit der Stopuhr und ich bin neugierig, was dabei rauskommt.
 
Hi,

habe jetzt mehrfach "anders" gemessen.

Komme per NFS schreibend nie per TCP über 16MB/sec :grumble:

Lesend komischerweise zw. 30 und 45MB/sec.

Mittels ftp wie gesagt die knapp 100MB/sec ( beide Richtungen ).

Mittels netperf komme ich auf ca. 120MB/sec ( was für GB Netzwerk ja top ist ).

Ich versteh nich, wo es bei NFS hakt ... ist es wirklich so langsam?????

Danke und viele Grüße
Kai

PS: habe beide Scheduler getestet ... keine Unterschiede, kann es noch an amd64 liegen???
 
Ahoi,

ich glaube was gefunden zu haben ... es wurden wohl clustered writes ( nfsserver ) entfernt, welche die Performance so gering lassen.

Ich patche und checke dass mal.

Kai

UPDATE:

jipiii ... Besserung in Sicht, komme jetzt PEAK auf knapp 60MB/sec ( ohne sysctl Änderungen, nur durch den nfs Patch )

Hier der Link: google Groups Link

UPDATE 2: komme jetzt per UDP auf ca. 90-98MB/sec schreibend wie lesend :-)
 
Zuletzt bearbeitet:
Moin,

lese den Thread schon die ganze Zeit mit. Sehr interessant finde ich. Nur folgende Fragen:

Kannst du hier zeigen, wie deine /etc/fstab aussieht oder mountest du nur per mount? Ich finde übrigens in der manpage zu mount keinen Eintrag zu "-U/-T" in der Sektion "-o". Wobei ich zugeben muss, dass ich aktuell nur auf einem 6.3 nachsehen kann.

Du hast ein 7.0 am Laufen, richtig? Welche Änderungen hast du genau vorgenommen, der patch, von dem die Rede ist, soll ja eigentlich für -current sein. Ich möchte aber nicht ausschließen, dass ich mich hier vertan habe...

Gruß
 
Hi,

wegen -U/-T ... man nfs_mount ( UDP/TCP).

fstab sieht bei mir so aus ...

192.168.xx.xx:/mnt/data /xxxx nfs -U,rw,-t=15,nfsv3,intr,-r=32768,-w=32768 0 0

Den Patch habe ich auf mein 7er Release angewendet ( is wohl für 5/6 und 7 ).

Ticket dazu findet man hier: klick ....

Gruß
Kai
 
Hört sich interessant an.
Gebt doch bitte positives Feedback beim PR, wenn das zuverlässig läuft, damit der Patch auch aufgenommen wird.
 
Zurück
Oben