1. pdflush刷新臟數據條件
(
linux IO 內核參數調優 之 原理和參數介紹 )上一章節講述了IO內核調優介個重要參數參數。
總結可知cached中的臟數據滿足如下幾個條件中一個或者多個的時候就會被pdflush刷新到磁盤:
(1)數據存在的時間超過了dirty_expire_centisecs(默認30s)時間
(2)臟數據所占內存 /
(MemFree + Cached - Mapped) > dirty_background_ratio。也就是說當臟數據所占用的內存占
(MemFree + Cached - Mapped)內存的內存的比例超過dirty_background_ratio的時候會觸發pdflush刷新臟數據。
可以看出這兩個參數是有聯系的。比如把dirty_expire_centisecss設置較小,那么pdflush就會刷新臟數據的頻率就會增加,這樣就會使得臟數據所占總內存的比例不會達到dirty_background_ratio,從而使得dirty_background_ratio參數沒有什么作用。相反,如果dirty_background_ratio參數設置很小同時dirty_expire_centisecs設置較大,可能在達到過期時間之前臟數據就被pdflush刷新到磁盤中。
2. 參數調優
如果系統的cached中臟數據量很大,會產生兩個問題:
a. 緩存的數據越多,丟數據的風險越大。
b. 會定期出現IO峰值,這個峰值時間會較長,在這期間所有新的寫IO性能會很差(極端情況直接被hang住)。
后一個問題對寫負載很高的應用會產生很大影響。
如何調節內核IO參數來優化IO寫性能?
(1)首先調優dirty_background_ratio
把這個參數適當調小,這樣可以使得cached主的臟數據減少,把原來一個大的IO刷新操作變為多個小的IO刷新操作,從而把IO寫峰值削平。對於cached很大或者磁盤很慢的場景,應該把這個值設置的小一點。調節方法:echo 5 >> /proc/sys/vm/dirty_background_ratio 把這個百分比更新為5% (注意這里所占的百分比是針對於:MemFree + Cached - Mapped而言的,並不是相對於MemTotal)
(2)第二步調節dirty_ratio參數
把這個參數適當調小,原理通(1)類似。如果cached的臟數據所占比例(這里是占MemTotal的比例)超過這個設置,系統會停止所有的應用層的IO寫操作,等待刷完數據后恢復IO。所以萬一觸發了系統的這個操作,對於用戶來說影響非常大的。
(3)第三步調節dirty_expire_centisecs參數(這個參數表示page cache中的數據多久標記為臟)
這個參數調節可能意義不大。調小這個參數並不保證可以很快的把臟數據刷新下去,因為這里會有個IO擁塞問題。
如果在一個dirty_expire_centisecs周期內沒有刷完臟數據就會導致這個參數失效了。理想情況我們希望一個dirty_expire_centisecs刷完臟數據,但如果cached的臟數據較多或者磁盤較慢的時候就會導致IO擁塞問題。一般使用默認值就好。
(4)第四步調節dirty_writeback_centisecs參數(這個參數調節pdflush被喚醒的頻率)
理論上調小這個參數,可以提高pdflush工作頻率,從而盡快把臟數據刷新到磁盤上。但是這一樣會遇到第三步IO擁塞問題。所以這個參數效果也不盡如人意。一般使用默認值就好。
3. Swapping調優
swap空間是一塊磁盤空間,操作系統使用這塊空間保存從內存中換出的操作系統不常用page數據,這樣可以分配出更多的內存做page cache。這樣通常會提升系統的吞吐量和IO性能,但同樣會產生很多問題。頁面頻繁換入換出會產生IO讀寫、操作系統中斷,這些都很影響系統的性能。這個值越大操作系統就會更加積極的使用swap空間。
調節swappniess方法如下:
cat /proc/sys/vm/swappniess查看這個參數的配置(默認值是60)
echo 0 >> /proc/sys/vm/swappniess 禁止操作系統使用任何的swap空間
echo 100 >> /proc/sys/vm/swappniess 操作系統會盡量使用swap空間
swappniess設置一個適當值對於系統性能也會有明顯的影響。
swappniess很小時,系統能並發的進程或者線程就會減少,但每個進程或者線程運行的速度較快,cpu利用率較好。
swappniess很大時,系統並發好,但每個進程或者線程速度較慢。較多IO讀寫和系統中斷會消耗很多cpu資源,此時系統效率較低。
所以如果希望提高服務器的並發量,對服務的相應時間要求不很高的場景可以適當的把swappniess調節的高些。對於並發量不大但希望相應時間小的應用場景可以適當的調小這個參數,比如個人電腦可以直接禁掉swap。