Performance

KVM + NFS 磁碟性能差

  • September 26, 2013

情況:我們有一個使用 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

對我來說,這並不明顯,因為如果rsizewsize的值滿足磁碟的塊大小 (4096) 並且不大於 NIC 的 MTU (9000),我預計性能最佳。顯然,這個假設是錯誤的。

值得注意的是,確切的持續磁碟數據速率取決於文件​​本身:對於兩個 9 GB 大小的相似文件,我觀察到的速率在 155 MB/s(文件 1)和 140 MB/s(文件 2)之間。因此,降低一個文件的數據速率仍可能導致另一個文件的完整數據速率。

引用自:https://serverfault.com/questions/538417