NFS中的rsize、wsize
rsize、wsize對于NFS的效能有很大的影響.wsize和rsize設(shè)定了SERVER和CLIENT之間往來數(shù)據(jù)塊的大小,這兩個參數(shù)
的合理設(shè)定與很多方面有關(guān),不僅是軟件方面也有硬件方面的因素會影響這兩個參數(shù)的設(shè)定(例如LINUX
KERNEL、網(wǎng)卡,交換機(jī)等等).
下面這個命令可以簡單測試NFS的執(zhí)行效能,讀和寫的效能可以分別測試,分別找到合適的參數(shù).對于要測試分散的大量的數(shù)據(jù)的讀寫可以通過編寫腳本來進(jìn)行測試.在每次測試的時候最好能重復(fù)的執(zhí)行一次MOUNT和unmount.
time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384
用于測試的wsize,rsize最好是1024的倍數(shù),大多的時候,默認(rèn)是4K(4096),對于NFS
V2來說8192是rsize和wsize的最大數(shù)值,如果使用的是NFS V3則可以嘗試的最大數(shù)值是32768.
我測試過,在內(nèi)網(wǎng)比較合理的每個客戶機(jī)應(yīng)該用 rsize=32768,wsize=32768,intr,noatime
掛裝遠(yuǎn)程文件系統(tǒng),從而確保速度:
*
使用大的讀/寫塊(數(shù)字指定最大塊大小,在這個示例中是 32KB).
* 在掛起時 NFS
操作可以被中斷.
* 不持續(xù)更新
atime.
可以將這些設(shè)置放在 /etc/fstab 中.
注意,在測試rsize和wsize比mtu值大時,server的包發(fā)送到client要進(jìn)行重組,會要浪費二者的cpu.另外重組也會導(dǎo)致
nfs不穩(wěn)定,因為丟包會讓rpc重傳,重傳象tcp一樣,會導(dǎo)致超時,可以通過查看/proc/sys/net/ipv4
/ipfrag_high_thresh和/proc/sys/net/ipv4/ipfrag_low_thresh了解系統(tǒng)處理包的數(shù)量,如果包到了
ipfrag_high_thresh就會開始丟包.真到數(shù)目達(dá)到ipfrag_low_thresh.
NFS客戶端的數(shù)目
在服務(wù)器端,一定要確保有足夠的 NFS 內(nèi)核線程來處理所有客戶機(jī).在默認(rèn)情況Red Hat系統(tǒng)會啟動8個線程.對于繁忙的 NFS
服務(wù)器,應(yīng)該提高這個數(shù)字,比如32或64.可以用 nfsstat -rc
命令評估客戶機(jī),了解是否有阻塞的現(xiàn)象,這個命令顯示客戶機(jī)遠(yuǎn)程過程調(diào)用(RPC)統(tǒng)計數(shù)據(jù).
例:
# nfsstat -rc
Client rpc stats:
calls
retrans
authrefrsh
95374234
3432
0
第二列retrans是3432,這表示從上一次系統(tǒng)啟動以來出現(xiàn)了3432次重新傳輸?shù)那闆r.這個數(shù)字比較大,就應(yīng)該考慮增加NFS線程.
設(shè)置方法是將所需的線程數(shù)量設(shè)置到nfs,比如設(shè)置128 會啟動 128
個線程.任何時候都可以進(jìn)行這種設(shè)置.線程會根據(jù)需要啟動或銷毀.同樣,這個設(shè)置應(yīng)該放在啟動腳本中,尤其是在系統(tǒng)上啟用 NFS
的腳本.
如RedHat和Centos
vim /etc/init.d/nfs
找到下面這行修改
[ -z "$RPCNFSDCOUNT" ] &&
RPCNFSDCOUNT=32
如上,我修改的是啟動32個.隨著nfsd數(shù)目的增加,平均負(fù)載會上升(可用uptime查看),就應(yīng)減少nfsd數(shù)目.平時測試和客戶端的數(shù)量一樣多就行.
NFS的版本
關(guān)于 NFS,需要注意一點:避免使用 NFSv2,因為 NFSv2 的性能比 v3 和 v4 差得多.當(dāng)前的Linux
發(fā)行版中這應(yīng)該不是問題,我們可以在nfs的服務(wù)器上檢查nfsstat 的輸出,了解是否有任何 NFSv2 調(diào)用.
Client nfs v3:
null
getattr
setattr
lookup
access
readlink
0
0%
13536
0%
1
0%
14150
0%
26160
0%
0
0%
read
write
create
mkdir
symlink
mknod
95313570 99%
70
0%
1
0%
0
0%
0
0%
0
0%
remove
rmdir
rename
link
readdir
readdirplus
0
0%
0
0%
0
0%
0
0%
56
0%
6650
0%
fsstat
fsinfo
pathconf
commit