
情況:我們有一個 Ubuntu 伺服器,使用 KVM 託管三個虛擬機器。所有來賓和主機都需要存取 /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。
這是虛擬機器 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 常見問題解答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
...
對於第三列及之後的列,從虛擬機器內的磁碟讀取後,我會得到除零之外的預期值。然而,nfsstat 告訴我確實有讀操作:
alice@host:~$ nfsstat
...
Server nfs v3:
null getattr ...
9 0% 15106 3% ...
read write ...
411971 95% 118 0% ...
...
所以,這個主題非常複雜,我想知道還能去哪裡尋找或是否有一個簡單的解決方案。
答案1
事實證明,問題比預期更容易解決。調整大小和大小VM 的 fstab 中的選項可以解決問題。相應的線路現在是
192.168.10.2:/home/videos /mnt/nfs nfs auto,noatime,rsize=32768,wsize=32768 0 0
對我來說,這並不明顯,因為我預計如果值達到最佳性能大小和大小滿足磁碟的區塊大小 (4096) 且不大於 NIC 的 MTU (9000)。顯然,這個假設是錯的。
值得注意的是,確切的持續磁碟資料速率取決於文件本身:對於兩個大小為9 GB 的相似文件,我觀察到速率在155 MB/s(文件1)和140 MB/s(文件2)之間。因此,一個檔案的資料速率降低可能仍會導致另一個檔案的資料速率達到滿值。