KVM + NFS 磁碟性能差
情況:我們有一個使用 KVM 託管三個 VM 的 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,虛擬機的 IP 為 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 常見問題解答B 部分以及相應的性能調整方法。大多數提示不適用。其他人沒有改善結果。這裡 有 處理磁碟性能和 KVM的執行緒 。但是,它們不涵蓋 NFS 方面。這個執行緒可以,但在我們的例子中,網路速度似乎不是限制因素。
為了給出完整的圖片,這是導出 etab 的內容,其中符號連結已解析,並顯示了所有活動的導出選項:
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 ...
對於第三列及以後的列,在從 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,noatime,rsize=32768,wsize=32768 0 0
對我來說,這並不明顯,因為如果rsize和wsize的值滿足磁碟的塊大小 (4096) 並且不大於 NIC 的 MTU (9000),我預計性能最佳。顯然,這個假設是錯誤的。
值得注意的是,確切的持續磁碟數據速率取決於文件本身:對於兩個 9 GB 大小的相似文件,我觀察到的速率在 155 MB/s(文件 1)和 140 MB/s(文件 2)之間。因此,降低一個文件的數據速率仍可能導致另一個文件的完整數據速率。