情况:我们有一台使用KVM托pipe三台虚拟机的Ubuntu服务器。 所有访客以及主机都需要访问/ var的某个子文件夹中的相同文件。 因此,子文件夹通过NFS导出。 我们的问题是客人只能以主机速度的一半读/写目录。 导出表如下所示
alice@host:~$ cat /etc/exports /home/videos 192.168.10.0/24(rw,sync,no_root_squash)
主机IP为192.168.10.2,虚拟机为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
从一个虚拟机内的东西看起来不同:
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部分以及相应的性能调整方法 。 大部分提示不适用。 其他人没有改善的结果。 这里 有 线程处理磁盘性能和KVM。 但是他们不包括NFS方面。 这个线程确实,但networking速度似乎不是我们的情况下的限制因素。
为了给出一个完整的图片,这是导出etab的内容,parsing了符号链接并显示了所有活动的导出选项:
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)
在这种情况下还有什么困扰我,而我不明白的是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 ...
对于第三列和更高版本,从虚拟机内的磁盘读取数据后,我会预期值不为零。 但是,nfsstat告诉我确实有读操作:
alice@host:~$ nfsstat ... Server nfs v3: null getattr ... 9 0% 15106 3% ... read write ... 411971 95% 118 0% ... ...
所以,这个话题是相当复杂的,我想知道还有什么地方看,或者是否有一个简单的解决scheme。
事实certificate,问题比预期更容易解决。 调整虚拟机的fstab中的rsize和wsize选项的窍门。 现在是相应的线路
192.168.10.2:/home/videos /mnt/nfs nfs auto,noatime,rsize=32768,wsize=32768 0 0
对我来说,这是不明显的,因为如果rsize和wsize的值满足磁盘的块大小(4096)并且不大于NIC的MTU(9000),我预期性能最好。 显然,这个假设是错误的。
值得注意的是,确切的持续磁盘数据速率取决于文件:对于两个大小为9 GB的相似文件,我观察到155 MB / s(文件1)和140 MB / s(文件2)之间的速率。 所以一个文件的数据速率降低可能仍然会导致另一个文件的全速率。