NFS使用詳解之三 NFS傳輸速度優化

2021-08-07 10:57:29 字數 4566 閱讀 5958

十、nfs的傳輸速度優化

如果按$ mount -o nolock 192.168.1.220(假設為宿主機ip):/mnt/nfs /mnt/nfs_t 

來mount ,傳輸速度可能很慢, 

只有幾k到幾十k左右,

所以想要獲得較快的速度就要對nfs進行優化。

1.設定塊大小

mount命令的

risize和wsize指定了server端和client端的傳輸的塊大小。

如果沒有指定,

那麼,系統根據nfs的版本來設定預設的risize和wsize大小。大多數情況是4k(4096bytes),

對於nfs v2,最大是8k,

對於nfs 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來測試。

這是來測試nfs寫:

$ time dd if=/dev/zero of=/testfs/testfile.dat bs=8k count=1024

1024+0 records in

1024+0 records out

8388608 bytes (8.4 mb) copied, 0.009669 seconds, 868 mb/s

real    0m0.013s

user    0m0.000s

sys     0m0.013s

這是測試nfs讀:

$ time dd if=/testfs/testfile.dat of=/dev/null bs=8k 

1024+0 records in

1024+0 records out

8388608 bytes (8.4 mb) copied, 0.002015 seconds, 4.2 gb/s

real    0m0.003s

user    0m0.000s

sys     0m0.002s

測試時檔案 /testfs/testfile 的大小至少是系統ram的兩倍,

每次測試都使用umount 和mount對/testfs進行掛載,

通過比較不同的塊大小,得到優化的塊大小。

2.網路傳輸包的大小

網路在包傳輸過程,對包要進行分組,過大或者過小都不能很好的利用網路的頻寬,

所以對網路要進行測試和調優。

可以使用: 

$ ping -s 2048 -f hostname 

進行 ping,嘗試不同的package size,這樣可以看到包的丟失情況。

同時,可以使用

$ nfsstat -o net 

測試nfs使用udp傳輸時丟包的多少。

因為統計不能清零,所以要先執行此命令記住該值,然後可以再次執行統計。

如果,經過上面的統計丟包很多。那麼可以看看網路傳輸包的大小。使用下面的命令:

$ tracepath node1/埠號

$ ifconfig eth0

比較網絡卡的mtu和剛剛的pmtu,使用#ifconfig eth0 mtu 16436設定網絡卡的mtu和測試的一致。

當然如果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

6. 兩組不同引數的實測結果 

引數一:

mount -t nfs 192.168.1.220:/mnt/nfs /mnt/nfs_t -o nolock, rsize=1024,wsize=1024,timeo=15 

就能獲得較快的傳輸速度。。。

讀速度測試:

$ time dd if=/opt/mnt_nfs_shared/nfs_test.flv of=/dev/null bs=8k 

1024+0 records in

1024+0 records out

8388608 bytes (8.4 mb) copied, 0.00206 seconds, 4.1 gb/s

real    0m0.003s

user    0m0.000s

sys     0m0.003s

寫速度測試:

$ time dd if=/dev/zero of=/opt/nfs_test.flv bs=8k count=1024

1024+0 records in

1024+0 records out

8388608 bytes (8.4 mb) copied, 0.010595 seconds, 792 mb/s

real    0m0.014s

user    0m0.001s

sys     0m0.013s

引數二:

server:/opt/nfs_shared /opt/mnt_nfs_shared nfs rsize=8192,wsize=8192,timeo=14,intr

讀速度測試:

$ time dd if=/opt/mnt_nfs_shared/nfs_test.flv of=/dev/null bs=8k   

1024+0 records in

1024+0 records out

8388608 bytes (8.4 mb) copied, 0.002931 seconds, 2.9 gb/s

real    0m0.004s

user    0m0.000s

sys     0m0.004s

寫速度測試:

$ time dd if=/dev/zero of=/opt/nfs_test.flv bs=8k count=1024

1024+0 records in

1024+0 records out

8388608 bytes (8.4 mb) copied, 0.010859 seconds, 773 mb/s

real    0m0.014s

user    0m0.000s

sys     0m0.014s

note:

我這裡提供的引數只是在我的機器上測到的;

實際上真正使用時要具體測試才知道;

有時候什麼引數都不設定,反而比設定了引數方案和讀/寫速度更好;

NFS共享使用方法詳解。

nfs是freebsd支援的檔案系統中的一種,它允許網路中的計算機之間通過tcp ip網路共享資源 如果不是最小化安裝預設是安裝了的 可以service nfs start 啟動rpm ivh nfs utils 1.2.3 39.el6.x86 64.rpm vim etc exports nfs...

NFS服務配置詳解

1 nfs簡介 2 nfs服務端的配置 2.1.nfs的基本安裝 2.2 etc exports配置檔案的相關引數 2.3 nfs的連線檢視 2.4nfs服務的啟動和停止 3 nfs客戶端的配置 3.1 掛載遠端目錄到本地目錄 本地目錄為空或建立乙個空的本地目錄 3.2 設定開機自動掛載 nfs n...

NFS共享儲存詳解

nfs network file system 即網路檔案系統,是freebsd支援的檔案系統中的一種,它允許網路中的計算機之間通過tcp ip網路共享資源。在nfs的應用中,本地nfs的客戶端應用可以透明地讀寫位於遠端nfs伺服器上的檔案,就像訪問本地檔案一樣。它的主要功能是通過網路讓不同的機器系...