
Situation: Wir haben einen Ubuntu-Server, der drei VMs mit KVM hostet. Alle Gäste sowie der Host müssen auf dieselben Dateien in einem bestimmten Unterordner von /var zugreifen. Daher wird der Unterordner über NFS exportiert. Unser Problem ist, dass der Gast mit nur der halben Geschwindigkeit des Hosts aus dem Verzeichnis lesen/darin schreiben kann. Die Exporttabelle sieht folgendermaßen aus
alice@host:~$ cat /etc/exports
/home/videos 192.168.10.0/24(rw,sync,no_root_squash)
wobei der Host die IP 192.168.10.2 und die VMs 192.168.10.1{1..3} haben. /home/videos ist ein symbolischer Link zu diesem bestimmten Unterordner in /var. Genauer gesagt ist es /var/videos/genvids.
Dies ist die relevante Zeile aus der fstab der VM:
192.168.10.2:/home/videos /mnt/nfs nfs auto,noatime,rsize=4096,wsize=4096 0 0
Die Festplatte hat eine dauerhafte Datenrate von ~155 MB/s, was durch die Ausgaben von hdparm -tT sowie dd bestätigt wird:
alice@host:~$ dd if=/home/videos/4987_1359358478.mp4 of=/dev/null bs=1024k count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 2.04579 s, 154 MB/s
Innerhalb einer VM sieht es anders aus:
bob@guest:~$ dd if=/mnt/nfs/4959_3184629068.mp4 of=/dev/null bs=1024k count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 4.60858 s, 68.3 MB/
Das Anpassen der Blockgröße an die Seitengröße des Dateisystems hatte keinen zufriedenstellenden Effekt:
bob@guest:~$ dd if=/mnt/nfs/4925_1385624470.mp4 of=/dev/null bs=4096 count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 5.77247 s, 71.0 MB/s
Ich habe verschiedene Seiten zur NFS-Leistung konsultiert, am relevantesten war dieHäufig gestellte Fragen zu NFSTeil B und die jeweiligenLeistungsoptimierungAnleitung. Die meisten Tipps sind nicht anwendbar. Die anderen haben die Ergebnisse nicht verbessert.Dort Sind Fäden Hierdie sich mit Festplattenleistung und KVM befassen. Sie decken jedoch nicht den NFS-Aspekt ab.DasThread tut dies, aber die Netzwerkgeschwindigkeit scheint in unserem Fall nicht der begrenzende Faktor zu sein.
Um ein vollständiges Bild zu geben, ist dies der Inhalt der Exporttabelle mit aufgelösten symbolischen Links und der Anzeige aller aktiven Exportoptionen:
alice@host:~$ cat /var/lib/nfs/etab
/var/videos/genvids 192.168.10.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,
no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,
anonuid=65534,anongid=65534)
Was mich in diesem Zusammenhang auch stört – und was ich nicht verstehe – ist die Ausgabe des Procfiles des NFSD:
alice@host:~$ cat /proc/net/rpc/nfsd
...
th 8 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
...
Für die dritte Spalte und alle weiteren hätte ich nach dem Lesen von der Festplatte innerhalb der VMs andere Werte als Nullen erwartet. nfsstat sagt mir jedoch, dass es tatsächlich Lesevorgänge gab:
alice@host:~$ nfsstat
...
Server nfs v3:
null getattr ...
9 0% 15106 3% ...
read write ...
411971 95% 118 0% ...
...
Also, das Thema ist ziemlich komplex und ich wüsste gerne, wo ich sonst noch suchen kann oder ob es dafür eine einfache Lösung gibt.
Antwort1
Wie sich herausstellte, war das Problem leichter zu lösen als erwartet.GrößeUndGrößeOption in der fstab der VM hat den Trick getan. Die entsprechende Zeile ist jetzt
192.168.10.2:/home/videos /mnt/nfs nfs auto,noatime,rsize=32768,wsize=32768 0 0
Für mich war das nicht offensichtlich, da ich die beste Leistung erwartet hatte, wenn Werte fürGrößeUndGrößeentsprechen der Blockgröße der Platte (4096) und sind nicht größer als die MTU der Netzwerkkarte (9000). Diese Annahme war offensichtlich falsch.
Es fällt auf, dass die exakte, dauerhafte Datenrate der Festplatte von der jeweiligen Datei abhängt: Für zwei ähnliche Dateien der Größe 9 GB habe ich Raten zwischen 155 MB/s (Datei 1) und 140 MB/s (Datei 2) beobachtet. Eine reduzierte Datenrate bei einer Datei kann also immer noch zur vollen Datenrate bei einer anderen Datei führen.