[轉貼]NFS優化

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://brandon.blog.51cto.com/602651/759013

nfs優化篇

1.配置塊大小
mount命令的risize和wsize指定了server端和client端的傳輸的塊大小。假如沒有指定,那麼,系統根據nfs的版本來配置缺省的 risize和wsize大小。大多數情況是4K(4096bytes),對於nfs v2,最大是8K,對於v3,在server端配置risize和wsize的限制,最大塊大小在kernel的常量 NFSSVC_MAXBLKSIZE,該常量在usr/src/linux2.4/include/linux/nfsd/const.h.任何的2.4 的的client都支持最大32K的傳輸塊。系統缺省的塊可能會太大或太小,這主要取決於您的kernel和您的網卡,太大或太小都有可能導致nfs速度 很慢。具體的能夠使用Bonnie,Bonnie ,iozone等benchmark來測試不同risize和wsize下nfs的速度。當然,也能夠使用dd來測試。
#time dd if=/dev/zero of=/testfs/testfile bs=8k count=1024這是來測試nfs寫
#time dd if=/testfs/testfile of=/dev/null bs=8k 這是測試nfs讀
測試時文檔的大小至少時系統RAM的兩倍,每次測試都使用umount 和mount對/testfs進行掛載,通過比較不同的塊大小,得到優化的塊大小。
2.網絡傳輸包的大小
網絡在包傳輸過程,對包要進行分組,過大或過小都不能很好的利用網絡的帶寬,所以對網絡要進行測試和調優。能夠使用ping -s 2048 -f hostname進行 ping,嘗試不同的package size,這樣能夠看到包的丟失情況。同時,能夠使用nfsstat -o net 測試nfs使用udp傳輸時丟包的多少。
因為統計不能清零,所以要先運行此命令記住該值,然後能夠再次運行統計。假如,經過上面的統計丟包很多。那麼能夠看看網絡傳輸包的大小。使用下面的命令:
#tracepath node1/端口號 如 #tracepat 192.168.1.1/2049 # 這裡2049為nfs的偵聽端口
#ifconfig eth0
比較網卡的mtu和剛剛的pmtu,使用#ifconfig eth0 mtu 16436配置網卡的mtu和測試的一致。備註:linux最大包大小的有效範圍是 64 到 9216 字節,並且9216是支持jumbo frame的。

當 然假如risize和wsize比mtu的值大,那麼的話,server端的包傳到client端就要進行重組,這是要消耗client端的cpu資源。 此外,包重組可能導致網絡的不可信和丟包,任何的丟包都會是的rpc請求重新傳輸,rpc請求的重傳有會導致超時,嚴重降低nfs的性能。能夠通過查看 /proc/sys/net/ipv4/ipfrag_high_thresh和/proc/sys/net/ipv4 /ipfrag_low_thresh瞭解系統能夠處理的包的數目,假如網絡包到達了ipfrag_high_thresh,那麼系統就會開始丟包,直到 包的數目到達ipfrag_low_thresh。
3.nfs掛載的優化

timeo:假如超時,客戶端等待的時間,以十分之一秒計算。
retrans:超時嘗試的次數。
bg:後台掛載,很有用
hard:假如server端沒有響應,那麼客戶端一直嘗試掛載。
wsize:寫塊大小
rsize:讀塊大小
intr:能夠中斷不成功的掛載
noatime:不更新文檔的inode訪問時間,能夠提高速度。
async:異步讀寫。
4.nfsd的個數
缺省的系統在啟動時,有8個nfsd進程。
#ps -efl|grep nfsd
通過查看/proc/net/rpc/nfsd文檔的th行,第一個是nfsd的個數,後十個是線程是用的時間數,第二個到第四個值假如很大,那麼就需要增加nfsd的個數。
具體如下:
#vi /etc/init.d/nfs
找到RPCNFSDCOUNT,修改該值,一般和client端數目一致。
然後,重啟服務。
#service nfs restart
#mount -a
5.nfsd的隊列長度
對於8個nfsd進程,系統的nfsd隊列長度是64k大小,假如是多於8個,就要相應的增加相應的隊列大小,具體的在/proc/sys/net /core/【rw】mem_default和/proc/sys/net/core/【rw】mem_max。隊列的長度最好是每一個nfsd有8k的 大小。這樣,server端就能夠對client的請求作排隊處理。假如要永久更改此值
#vi /etc/sysctl.conf
加入
net.core.【rw】mem_max=數目
net.core.【rw】mem_default=數目
#service nfs restart

本文出自 「惟丑有才」 博客,請務必保留此出處http://brandon.blog.51cto.com/602651/759013

分類: server。這篇內容的永久連結