如果按mount -o nolock 192.168.1.220(假設為宿主機ip):/mnt/nfs /mnt/nfs_t 來mount ,傳輸速度可能很慢, 只有幾k到幾十k左右,所以想要獲得較快的速度就要對nfs進行優化。
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/埠號
#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
nfs:網路檔案系統
(nfs:network file system)
網路檔案系統(nfs),起初由 sun 微系統公司進行開發,後經 ietf 擴充套件,現在能夠支援在不同型別的系統之間通過網路進行檔案共享。換言之,nfs 可用於不同型別計算機、作業系統、網路架構和傳輸協議執行環境中的網路檔案遠端訪問和共享。
nfs 使用客戶端/伺服器架構,並由乙個客戶端程式和伺服器程式組成。伺服器程式向其它計算機提供對檔案系統的訪問,其過程就叫做「輸出」。nfs 客戶端程式對共享檔案系統進行訪問時,把它們從 nfs 伺服器中「輸送」出來。nfs 傳輸協議用於伺服器和客戶機之間檔案訪問和共享的通訊,該協議還支援伺服器通過輸出控制向一組受到限制的客戶計算機分配遠端訪問特權。
nfs 版本2,是 nfs 最早被廣泛應用的版本,起初完全執行於 udp 協議之上,並且不保留狀態。幾大廠商擴充套件了 nsf 版本2,使之支援 tcp 傳輸。nfs 版本3整合了 tcp 傳輸。使用了 tcp 傳輸後,使得廣域網中的 nfs 應用更為靈活。在繼承了以前版本優點的基礎之上,目前,nfs 版本4在功能上有如下的改進:
* 提高了經由 internet 進行訪問的效能。本協議能夠很容易地通過防火牆;在等待時間較長時頻寬較小的情況下,其效能優越;且每台伺服器所連線使用者的數目可擴充套件到相當大的數目。
* 將許可條款內建到協議之中,安全性得到了極大的加強。在對遠端過程呼叫(rpc) prcsec_gsb 協議的支援上,本協議則建立在 oncrpc 工作組的工作之上。另外,nfs 版本4支援客戶機與伺服器之間的安全對話,並要求客戶機和伺服器支援最簡單的安全計畫。
* 支援擴充套件協議。本協議接受所支援協議的標準擴充套件,而不是打折的向後相容。
nfs 與 unix 系統息息相關,儘管它可以用於任何平台中,如 macintosh 和 microsoft windows 作業系統。伺服器訊息塊協議(smb)和國際網際網路普通檔案系統(cifs)是 nfs 的類似協議,在 microsoft windows 平台中,擁有著對等的網路檔案系統應用。
其實就是改為mount 192.168.1.220:/mnt/nfs /mnt/nfs_t -o nolock, rsize=1024,wsize=1024,timeo=15 就能獲得較快的傳輸速度。。。
NFS使用詳解之三 NFS傳輸速度優化
十 nfs的傳輸速度優化 如果按 mount o nolock 192.168.1.220 假設為宿主機ip mnt nfs mnt nfs t 來mount 傳輸速度可能很慢,只有幾k到幾十k左右,所以想要獲得較快的速度就要對nfs進行優化。1.設定塊大小 mount命令的 risize和wsiz...
uboot下nfs與tftp傳輸速度對比
一 前言 uboot是支援檔案傳輸的,無論是電腦上的檔案傳到開發板,還是開發板的檔案傳到電腦,都是可以實現的,傳輸協議有nfs和tftp,兩者在傳輸速度上是有區別的,下面來介紹一下僅用uboot傳檔案的速度對比。二 開發環境 開發板 imx6ull,512m的ddr,從tf卡載入uboot,電腦 u...
語言的速度優化
for 語句可能是我們最常用的。大家習慣可能是這樣。比如對乙個資料屢遍 for int i 0 i這樣寫有什麼不好呢?先看下面這段 for int i 0,len array.length i顯然兩種寫法的效果一樣 但是就第一種寫法而言 迴圈中不得不對記憶體的兩次查詢 首先在當前作用域中查詢到arr...