請注意,NFS客戶機和服務器的選項并不一定完全相同,而且有的時候會有沖突。比如說服務器以只讀的方式導出,客戶端卻以可寫的方式mount,雖然可以成功mount上,但嘗試寫入的時候就會發生錯誤。一般服務器和客戶端配置沖突的時候,會以服務器的配置為準。
NFS性能優化和測試
1.同步或異步寫入
了解了NFS配置的各種選項以后,再來看看各選項對性能及安全性的影響。Server端同步寫入(sync)能提供較好的穩定性,但會減慢磁盤的速度。在高負載的服務器上,應用程序會經?;ㄙM大量的時間等待寫入完成。異步寫入(async)是服務器不把數據立即寫入磁盤,而先將其保存到內核內存(緩沖區)中,計劃在后邊的某個時刻寫入,迅速向客戶機返回寫入成功的信息。這種方法大大地提高了性能,但卻犧牲了可靠性,如果系統在將緩沖區中的內容寫入磁盤之前崩潰,則數據會永遠丟失。
NFS客戶端也可以采用異步寫入的方式,在客戶端緩存用戶進程寫入的數據,Linux的缺省方式如此。這種方法使得客戶機的速度更快,當客戶機崩潰時只丟失該客戶端的數據。顯而易見,客戶端異步寫入的風險比服務端異步寫入的風險要小。鑒于Linux是個相當穩定的系統,為了得到比較好的NFS性能,值得采用客戶端異步寫入的辦法。
2.選擇TCP還是UDP
早期,Sun公司曾將NFS v2設計成為只使用UDP協議,主要原因是當時機器的內存、網絡速度和CPU的影響,不得不選擇對機器負擔較輕的方式。而到了NFS v3, Sun公司選擇了TCP協議作為缺省的傳輸方式。在Linux上,UDP協議是缺省使用的協議。作為服務器而言,別無選擇。但作為客戶端,可以使用TCP協議和其它使用TCP的Unix NFS服務器互連。
3.NFS性能測試
通常使用測試硬盤讀寫速度的方法來測試NFS的讀寫速度,但要注意以下幾點:
◆ 保證主機和網絡工作正常,集線器、交換機、路由器等網絡設備工作正常;
◆ 分別在網絡安靜、普通和繁忙的時候進行測試,真實地了解實際狀況和理想狀況,以及最壞的狀況;
◆ 沒有必要為提高少許的性能而花費更多的精力。
基本測試可以用ping工具來檢查網絡狀況,分別從服務器ping客戶機,以及從客戶機ping服務器。如果沒有非對稱路由的問題,這兩種方法的結果應該相近。如果丟包率小于5%,就會造成NFS的性能不良。
測試程序用下面命令就可以完成:
time dd if=/dev/zero of=nfs.dat bs=4k count=4098
這個命令意思是在nfs.dat文件里寫4098個4KB的塊,也就是一個16MB的文件,也可以根據需要改變命令的參數, 但要注意每次實驗時使用不同的文件名,否則又會和緩沖有關。
可能返回的結果如下:
4098+0 records in4098+0 records outreal 0m23.984s user 0m0.260ssys
0m4.080s
這里主要關心的是real的時間,上面的實驗結果表明在NFS上寫一個16MB的文件花了23.984秒,在改變導出選項和mount選項以后重復這個實驗,就能初步確定各個選項對性能的影響。