情况:我们有一台ubuntu服务器,它使用KVM托管三个虚拟机.所有来宾和主持人都需要访问/ var的某个子文件夹中的相同文件.因此,子文件夹通过NFS导出.我们的问题是guest虚拟机只能以主机速度的一半读取/写入目录.导出表看起来像这样
alice@host:~$cat /etc/exports /home/videos 192.168.10.0/24(rw,sync,no_root_squash)
其中主机具有IP 192.168.10.2和VM 192.168.10.1 {1..3}. / home / videos是/ var中某个子文件夹的符号链接.特别是,它是/ var / videos / genvids.
这是来自VM的fstab的相关行:
192.168.10.2:/home/videos /mnt/nfs nfs auto,noatime,rsize=4096,wsize=4096 0 0
硬盘的持续数据速率约为155 MB / s,由hdparm -tT和dd的输出验证:
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
在VM中,事物看起来不同:
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/
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
我咨询了有关NFS性能的各种页面,最相关的是NFS FAQs B部分,以及相应的Performance Tuning Howto.大多数提示不适用.其他人没有改善结果. There are threads here处理磁盘性能和KVM.但是它们不包括NFS方面. This线程确实如此,但网络速度似乎不是我们案例中的限制因素.
为了给出完整的图片,这是解析了符号链接的导出etab的内容,并显示了所有活动的导出选项:
alice@host:~$cat /var/lib/nfs/etab /var/videos/genvids 192.168.10.0/24(rw,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)
在这种情况下我也困扰我 – 以及我不理解的 – 是nfsd的procfile输出:
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 ...
对于第三列及更高版本,在从VM中的磁盘读取之后,我将期望除零之外的值.但是,nfsstat告诉我确实有读取操作:
alice@host:~$nfsstat ... Server nfs v3: null getattr ... 9 0% 15106 3% ... read write ... 411971 95% 118 0% ... ...
解决方法
事实证明,问题比预期更容易解决.调整VM的fstab中的rsize和wsize选项就可以了.各自的线路现在
192.168.10.2:/home/videos /mnt/nfs nfs auto,rsize=32768,wsize=32768 0 0
对我来说,这并不明显,因为如果rsize和wsize的值满足磁盘的块大小(4096)并且不大于NIC的MTU(9000),我的预期性能最佳.显然,这种假设是错误的.
值得注意的是,确切的持续磁盘数据速率取决于文件:对于两个大小为9 GB的类似文件,我观察到的速率介于155 MB / s(文件1)和140 MB / s(文件2)之间.因此,使用一个文件降低数据速率仍可能导致另一个文件的完整数据速率.