linux IO 內核參數調優 之 參數調節和場景分析

請尊重原作者知識產權!

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/swappiness查看這個參數的配置(默認值是60)
echo 0 > /proc/sys/vm/swappiness 禁止操作系統使用任何的swap空間
echo 100 > /proc/sys/vm/swappiness 操作系統會盡量使用swap空間
swappniess設置一個適當值對於系統性能也會有明顯的影響。
swappniess很小時,系統能併發的進程或者線程就會減少,但每個進程或者線程運行的速度較快,cpu利用率較好。
swappniess很大時,系統併發好,但每個進程或者線程速度較慢。較多IO讀寫和系統中斷會消耗很多cpu資源,此時系統效率較低。
所以如果希望提高服務器的併發量,對服務的相應時間要求不很高的場景可以適當的把swappniess調節的高些。對於併發量不大但希望相應時間小的應用場景可以適當的調小這個參數,比如個人電腦可以直接禁掉swap。
發佈了32 篇原創文章 · 獲贊 25 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章