pdflush進程介紹與優化【轉】

轉載地址: http://blog.ops88.com/2012/07/12/74node

一. /proc/sys/vm/dirty_background_ratiolinux

 

該參數是在嘗試一個write back 操做以前所持有的髒內存比例。在Linux內核中api

,pdflush內核線程池負責VM的回寫操做。並週期性同步文件系統給的元數據。若緩存

超出了這個後臺回寫百分比,則pdflush守護進程異步處理回寫操做。網絡

在CentOS5.5下,這個參數是異步

10socket

二. /proc/sys/vm/dirty_expire_centisecstcp

該參數是數據能夠保持爲dirty狀態的最大釐秒數。這個時間段經過查詢全部在內存中緩存了髒頁面的文件的時間戳來肯定。該參數表示一個上限值,確保最終能夠將數據寫入到磁盤子系統。釐秒錶示oop

1/100s的時間單位性能

在CentOS5.5下,這個參數是

2999

三. /proc/sys/vm/dirty_ratio

該參數是過量髒內存的比例。當一個任務(或者某一個進程)在髒內存過多的環境中執行文件寫操做時,若是(關於這個進程的)髒內存頁面佔用總內存的百分比高於dirty_ratio這個值,那麼系統就執行髒

內存頁面的寫出操做,直至髒內存頁面的百分比低於系統規定的閾值。I/O操做具備很高的延遲。因此這個參數很重要。

在CentOS5.5中,這個參數是

40

四. /proc/sys/vm/dirty_writeback_centisecs

該參數是 pdflush 內核線程執行回寫操做之間的時間間隔(釐秒爲單位)。也就是pdflush 內核線程執行的頻率。該參數的設置應該小於dirty_expire_centisecs,但也不能過小,過小I/O太頻繁,反而

使系統性能降低。具體可能須要在生產環境上測試。聽說1:6 (dirty_expire_centisecs  :    dirty_writeback_centisecs )的比例比較好。

在CentOS5.5中,這個參數是499

五.總結

1.經過這四個參數,能夠控制髒數據在內存中佔用多大比例寫入磁盤文件系統;

2.髒數據在內存中最多能夠存在多長時間,超過這個時間就寫入磁盤;

3.單個任務在內存中的髒數據所佔內存比例多大則寫入磁盤;

4.pdflush內核線程執行的頻率。

與磁盤IO子系統有關的如下方法重啓失效
/proc/sys/vm/dirty_ratio

這個參數控制文件系統的文件系統寫緩衝區的大小,單位是百分比,表示系統內存的百分比,表示當寫緩衝使用到系統內存多少的時候,開始向磁盤寫出數據。增大 之會使用更多系統內存用於磁盤寫緩衝,也能夠極大提升系統的寫性能。可是,當你須要持續、恆定的寫入場合時,應該下降其數值,通常啓動上缺省是 10。下面是增大的方法:

echo ’40′ > /proc/sys/vm/dirty_ratio /proc/sys/vm/dirty_background_ratio

這個參數控制文件系統的pdflush進程,在什麼時候刷新磁盤。單位是百分比,表示系統內存的百分比,意思是當寫緩衝使用到系統內存多少的時 候,pdflush開始向磁盤寫出數據。增大之會使用更多系統內存用於磁盤寫緩衝,也能夠極大提升系統的寫性能。可是,當你須要持續、恆定的寫入場合時, 應該下降其數值,通常啓動上缺省是 5。下面是增大的方法:

echo ’20′ > /proc/sys/vm/dirty_background_ratio /proc/sys/vm/dirty_writeback_centisecs

這個參數控制內核的髒數據刷新進程pdflush的運行間隔。單位是 1/100 秒。缺省數值是500,也就是 5 秒。若是你的系統是持續地寫入動做,那麼實際上仍是下降這個數值比較好,這樣能夠把尖峯的寫操做削平成屢次寫操做。設置方法以下:

echo 「200″ > /proc/sys/vm/dirty_writeback_centisecs

若是你的系統是短時間地尖峯式的寫操做,而且寫入數據不大(幾十M/次)且內存有比較多富裕,那麼應該增大此數值:

echo 「1000″ > /proc/sys/vm/dirty_writeback_centisecs /proc/sys/vm/dirty_expire_centisecs

這個參數聲明Linux內核寫緩衝區裏面的數據多「舊」了以後,pdflush進程就開始考慮寫到磁盤中去。單位是 1/100秒。缺省是 30000,也就是 30 秒的數據就算舊了,將會刷新磁盤。對於特別重載的寫操做來講,這個值適當縮小也是好的,但也不能縮小太多,由於縮小太多也會致使IO提升太快。建議設置爲 1500,也就是15秒算舊。

echo 「1500″ > /proc/sys/vm/dirty_expire_centisecs

固然,若是你的系統內存比較大,而且寫入模式是間歇式的,而且每次寫入的數據不大(好比幾十M),那麼這個值仍是大些的好。

與網絡IO子系統有關的 /proc/sys/net/ipv4/tcp_retrans_collapse

這個參數控制TCP雙方Window協商出現錯誤的時候的一些重傳的行爲。可是在老的2.6的核 (<2.6.18)裏頭,這個重傳會致使kernel oops,kernel panic,因此,若是出現有 tcp_retrans_*樣子的kernel panic,能夠把這個參數給設置成0:

echo ’0′ > /proc/sys/net/ipv4/tcp_retrans_collapse 提升Linux應對短鏈接的負載能力

在存在大量短鏈接的狀況下,Linux的TCP棧通常都會生成大量的 TIME_WAIT 狀態的socket。你能夠用下面的命令看到:

netstat -ant| grep -i time_wait

有時候,這個數目是驚人的:

netstat -ant|grep -i time_wait |wc -l

可能會超過三四萬。這個時候,咱們須要修改 linux kernel 的 tcp time wait的時間,縮短之,有個 sysctl 參數貌似可使用,它是 /proc/sys/net/ipv4/tcp_fin_timeout,缺省值是 60,也就是60秒,不少網上的資料都說將這個數值設置低一些就能夠減小netstat 裏面的TIME_WAIT狀態,可是這個說法是錯誤的。通過認真閱讀Linux的內核源代碼,咱們發現這個數值實際上是輸出用的,修改以後並無真正的讀回內核中進行使用,而內核中真正管用的是一個宏定義,在 $KERNEL/include/net/tcp.h裏面,有下面的行:

#define TCP_TIMEWAIT_LEN (60*HZ)

而這個宏是真正控制 TCP TIME_WAIT 狀態的超時時間的。若是咱們但願減小 TIME_WAIT 狀態的數目(從而節省一點點內核操做時間),那麼能夠把這個數值設置低一些,根據咱們的測試,設置爲 10 秒比較合適,也就是把上面的修改成:

#define TCP_TIMEWAIT_LEN (10*HZ)

而後從新編譯內核,重啓系統便可發現短鏈接形成的TIME_WAIT狀態大大減小:

netstat -ant | grep -i time_wait |wc -l

通常狀況均可以致少減小2/3。也能相應提升系統應對短鏈接的速度。

/proc/irq/{number}/smp_affinity

在多 CPU 的環境中,還有一箇中斷平衡的問題,好比,網卡中斷會教給哪一個 CPU 處理,這個參數控制哪些 CPU 能夠綁定 IRQ 中斷。其中的 {number} 是對應設備的中斷編號,能夠用下面的命令找出:

cat /proc/interrupt

好比,通常 eth0 的 IRQ 編號是 16,因此控制 eth0 中斷綁定的 /proc 文件名是 /proc/irq/16/smp_affinity。上面這個命令還能夠看到某些中斷對應的CPU處理的次數,缺省的時候確定是不平衡的。

設置其值的方法很簡單,smp_affinity 自身是一個位掩碼(bitmask),特定的位對應特定的 CPU,這樣,01 就意味着只有第一個 CPU 能夠處理對應的中斷,而 0f(0×1111)意味着四個 CPU 都會參與中斷處理。

幾乎全部外設都有這個參數設置,能夠關注一下。

這個數值的推薦設置,其實在很大程度上,讓專門的CPU處理專門的中斷是效率最高的,好比,給磁盤IO一個CPU,給網卡一個CPU,這樣是比較合理的。

============================================

補充:

/proc/sys/vm/優化
1)      /proc/sys/vm/block_dump
該文件表示是否打開Block Debug模式,用於記錄全部的讀寫及Dirty Block寫回動做。

缺省設置:0,禁用Block Debug模式
2)      /proc/sys/vm/dirty_background_ratio

 

該文件表示髒數據到達系統總體內存的百分比,此時觸發pdflush進程把髒數據寫回磁盤。

缺省設置:10
3)      /proc/sys/vm/dirty_expire_centisecs
該文件表示若是髒數據在內存中駐留時間超過該值,pdflush進程在下一次將把這些數據寫回磁盤。

缺省設置:3000(1/100秒)
4)      /proc/sys/vm/dirty_ratio
該文件表示若是進程產生的髒數據到達系統總體內存的百分比,此時進程自行把髒數據寫回磁盤。

缺省設置:40
5)      /proc/sys/vm/dirty_writeback_centisecs
該文件表示pdflush進程週期性間隔多久把髒數據寫回磁盤。

缺省設置:500(1/100秒)
6)      /proc/sys/vm/vfs_cache_pressure
該 文件表示內核回收用於directory和inode cache內存的傾向;缺省值100表示內核將根據pagecache和swapcache,把directory和inode cache保持在一個合理的百分比;下降該值低於100,將致使內核傾向於保留directory和inode cache;增長該值超過100,將致使內核傾向於回收directory和inode cache。

缺省設置:100
7)      /proc/sys/vm/min_free_kbytes
該文件表示強制Linux VM最低保留多少空閒內存(Kbytes)。

缺省設置:724(512M物理內存)
8)      /proc/sys/vm/nr_pdflush_threads
該文件表示當前正在運行的pdflush進程數量,在I/O負載高的狀況下,內核會自動增長更多的pdflush進程。

缺省設置:2(只讀)
9)      /proc/sys/vm/overcommit_memory
該文件指定了內核針對內存分配的策略,其值能夠是0、一、2。
0,表示內核將檢查是否有足夠的可用內存供應用進程使用;若是有足夠的可用內存,內存申請容許;不然,內存申請失敗,並把錯誤返回給應用進程。
1,表示內核容許分配全部的物理內存,而無論當前的內存狀態如何。
2,表示內核容許分配超過全部物理內存和交換空間總和的內存(參照overcommit_ratio)。

缺省設置:0
10) /proc/sys/vm/overcommit_ratio
該文件表示,若是overcommit_memory=2,能夠過載內存的百分比,經過如下公式來計算系統總體可用內存。
系統可分配內存=交換空間+物理內存*overcommit_ratio/100

缺省設置:50(%)
11) /proc/sys/vm/page-cluster
該文件表示在寫一次到swap區的時候寫入的頁面數量,0表示1頁,1表示2頁,2表示4頁。

缺省設置:3(2的3次方,8頁)
12) /proc/sys/vm/swapiness
該文件表示系統進行交換行爲的程度,數值(0-100)越高,越可能發生磁盤交換。

缺省設置:60
13) legacy_va_layout
該文件表示是否使用最新的32位共享內存mmap()系統調用,Linux支持的共享內存分配方式包括mmap(),Posix,System VIPC。
0,使用最新32位mmap()系統調用。
1,使用2.4內核提供的系統調用。

缺省設置:014) nr_hugepages該文件表示系統保留的hugetlb頁數。15) hugetlb_shm_group該文件表示容許使用hugetlb頁建立System VIPC共享內存段的系統組ID。

相關文章
相關標籤/搜索