Linux NFS加速與優化
1.網卡定速 (以1G網卡來看)
修改 /etc/sysconfig/network-scripts/ifcfg-eth0
加入這一行 ETHTOOL_OPTS="speed 1000 duplex full autoneg off"
重開機即可
 
2.增加處理 NFS 的 CPU核心數量
使用以下指令確認nfs使用多少CPU核心
ps aux | grep nfs
 
通常是看到8個CPU核心在運作(系統預設值)
root 4794 0.0 0.0 0 0 ? S< 03:18 0:00 [nfsd4] root 4795 0.0 0.0 0 0 ? S 03:18 0:00 [nfsd] root 4796 0.0 0.0 0 0 ? S 03:18 0:00 [nfsd] root 4797 0.0 0.0 0 0 ? S 03:18 0:00 [nfsd] root 4798 0.0 0.0 0 0 ? S 03:18 0:00 [nfsd] root 4799 0.0 0.0 0 0 ? S 03:18 0:00 [nfsd] root 4800 0.0 0.0 0 0 ? S 03:18 0:00 [nfsd] root 4801 0.0 0.0 0 0 ? S 03:18 0:00 [nfsd] root 4802 0.0 0.0 0 0 ? S 03:18 0:00 [nfsd] 如果你的 CPU 核心數大於8核,又使用雙CPU的話,這個值就建議放大 修改/etc/sysconfig/nfs 以增加 NFS CPU核心 RPCNFSDCOUNT把它改成16或20 # Number of nfs server processes to be started. # The default is 8. RPCNFSDCOUNT=16 重開機即可   3.安裝nfs 加速cachefile
要使用cachefile,首先是核心必須是2.6.30以上才可以
因為使用cachefile 需要開啟fsc 參數,而這個參數是到2.6.30以後才有支援
如果你是使用 Centos 6 的話,基本上就可以使用cachefile, Centos 6 Kernel 是2.6.32
如果你是使用 Centos 5 的話就必須重新編譯新核心,才能使用cachefile
推薦編譯核心的版本是2.6.30.10 或是 2.6.39.4 這2各版本

 
 
 
 
4.增加網路存取 Cache
修改 /etc/sysctl.conf 這個檔案
加入以下這幾行 (影響的資料夾在 /proc/sys/vm/)
net.core.wmem_max=16777216
net.core.rmem_max=16777216
net.ipv4.tcp_rmem= 10240 873800 16777216
net.ipv4.tcp_wmem= 10240 873800 16777216
vm.dirty_background_ratio = 2
vm.dirty_ratio = 2
vm.dirty_writeback_centisecs = 100
vm.dirty_expire_centisecs = 1000
 
補充說明如下:
 
vm.dirty_background_ratio = 2 這個參數主要是降低 Linux 寫檔案(dirty page)的 buffer 大小,如果是寫入的量很大的系統建議降低此值,因這樣會讓寫入更連續而且一致,而不會分批次每次都寫入大量的資料,Linux 原本預設的值太大了,這個值的算法是 MemFree + Cached – Mapped (指令 cat /proc/meminfo 可以看到) 假設我們算出來系統有 3G 而這個值 10 時表示 10% 則相當於超過 300MB 的 dirty page 才開始回寫硬碟,我猜是因這樣讓 Linux 的 I/O 變的很慢,因這個值也大於 RAID 卡的記憶體了,而且邊寫入又一直有 dirty page 一直進來,所以建議把這個值降低,我是直接設定成 1 也就是 1% 約 30M 就開始寫;相對於百分比,Linux 後來的 2.6.29 kernel 加入了 vm.dirty_background_bytes 是以 bytes 來計算
 
vm.dirty_ratio = 2 相對於 vm.dirty_background_ratioad 是所謂的”背景”寫入,實際上是透過 Linux 裏面的一隻叫 pdflush kernel thread 來回寫,vm.dirty_ratio 是如果 dirty page 真的超過多少就強制回寫,而不是透過背景慢慢回寫,所以 vm.dirty_ratio 更硬性,而vm.dirty_background_ratio 則相對較於軟性,也因這個特性當然 vm.dirty_background_ratio 是不會超過 vm.dirty_ratio 的,預設上(或者設定錯誤時) vm.dirty_background_ratio = vm.dirty_ratio /2 ,所以如果 vm.dirty_background_ratio = 1 則我們可以設定 vm.dirty_ratio = 2,同樣的 2.6.29 之後也有一個 vm.dirty_bytes
 
vm.dirty_writeback_centisecs = 100 單位是百分之一秒,這個就是多久要觸發回寫,預設也蠻大的好像有 500,也就是 5 秒才寫一次,建議在高寫入的系統設定短一點,我設定成 100 也就是每秒寫入一次(反正是先寫回 raid 卡的 cache),這樣以來可以讓寫入更均勻。
 
vm.dirty_expire_centisecs = 1000 單位也是百分之一秒,這個是表示 dirty page 過了多久之後下次 pdflush kernel thread 醒來時就會被寫回硬碟,預設是 3000 也就是 30 秒,一樣可以設低一點讓寫入均勻化,不過太低會一直寫,也不宜太低。
ERIC1900

Tags: , , , , , ,