linux IO 核心引數調優 之 原理和引數介紹

2021-09-08 19:04:11 字數 2346 閱讀 1263

1.  page cache

linux作業系統預設情況下寫都是有寫快取的,可以使用direct io方式繞過作業系統的寫快取。當你寫一串資料時,系統會開闢一塊記憶體區域快取這些資料,這塊區域就是我們常說的page cache(作業系統的頁快取)。檢視系統記憶體常用的命令有:vmstat、free、top等。

可以使用 cat /proc/meminfo 檢視詳細的記憶體使用情況

其中的cached為140m左右(page cache)。注意其中有乙個dirty: 24kb,表示當前有24kb的資料快取在page cache,這些資料等待後台執行緒刷入磁碟。隨著寫入資料增加,這個值也會增加。

有了page cache就有了writeback寫方式。乙個寫io會先寫入page cache,然後等待後台pdflush把page cache中髒資料刷入磁碟。如果在刷入磁碟之前系統斷電,則page cache的資料丟失。所以對一些可靠性要求高的場景都會把這個寫快取禁掉。writeback寫方式是linux作業系統提供的一種非常通用寫模式。writeback提供了較好的吞吐量,有了快取也縮短了io響應時間。但它也有缺點:(1)斷電可能丟資料(資料安全性)(2)對於像資料庫這樣自快取的系統來說,多了一層io快取開銷。因為資料庫已經在應用層做了一層快取。所以對於這樣的應用可以用direct io方式,減少使用者空間和page cache之間資料複製開銷。(3)如果page cache過大,那麼就會快取太多的資料,當需要統一刷入磁碟的時候就會出現乙個io峰值和瓶頸,在這其間對使用者的io訪問出現明顯影響。如果想削平這個峰值可以把page cache容量設定小一點,讓pdflush一段時間內較為平均的重新整理dirty資料。

3. pdflush

pdflush是linux系統後台執行的乙個執行緒,這個程序負責把page cahce中的dirty狀態的資料定期的輸入磁碟。乙個系統中會執行很多這個pdflush。cat /proc/sys/vm/nr_pdflush_threads檢視當前系統執行pdflush數量。當一段時間(一般是1s)沒有任何的pdflush處於工作狀態,系統會remove乙個pdflush執行緒。pdflush最大和最小的數量是有配置的,但這些配置一般很少修改。

4. 幾個重要的io寫相關引數

4.1 dirty_writeback_centisecs

cat /proc/sys/vm/dirty_writeback_centisecs檢視這個值,預設一般是500(單位是1/100秒)。這個引數表示5s的時間pdflush就會被喚起去重新整理髒資料。沒有官方文件說明減少這個值就會有更多的pdflush參與刷資料。比如2.6或者更早的核心,linux中mm/page-writeback.c的原始碼中有這樣一段

描述「如果pdflush重新整理髒資料的時間超過了這個配置時間,則完成重新整理後pdflush會sleep 1s「。這種擁塞的保護機制描述只是寫在原始碼裡,並沒有寫入官方文件或者形成規範,所以也就意味著這種機制在不同的版本可能有不同的表現。

所以修改dirty_writeback_centisecs並不一定能給你帶來多少效能的提公升,相反有可能出現你意想不到的問題。一般建議使用者使用預設值。

4.2 dirty_expire_centisecs

cat /proc/sys/vm/dirty_expire_centicecs檢視這個值,預設是3000(單位是1/100秒)。這個值表示page cache中的資料多久之後被標記為臟資料。只有標記為臟的資料在下乙個週期到來時pdflush才會刷入到磁碟,這樣就意味著使用者寫的資料在30秒之後才有可能被刷入磁碟,在這期間斷電都是會丟資料的。如果想pdfflush重新整理頻率大寫可以減小這個值,比如:echo 1000 >> /proc/sys/vm/dirty_expire_centicecs 設定為10s乙個重新整理周期。

4.3 dirty_backgroud_ratio

4.4  dirty_ratio

cat /proc/sys/vm/dirty_ratio檢視這個值,預設是20(單位是百分比,不同的核心版本可能有不同的預設值)。表示當髒資料占用總記憶體的百分比超過20%的時候,核心會把所有的寫操作阻塞掉,等待pdflush把這些髒資料刷入到磁碟後才能恢復正常的io寫。要注意的是當這個事件發生時,會阻塞掉所有寫操作。這樣會產生乙個很大的問題,乙個長時間大io會搶占更多的io寫資源,可能把其它的小io餓死。因為大io產生的髒資料較多,很快達到這個閥值,此時就會系統會阻塞掉所有的寫io,從而小寫io無法進行寫操作。

linux IO 核心引數調優 之 原理和引數介紹

page cache linux作業系統預設情況下寫都是有寫快取的,可以使用direct io方式繞過作業系統的寫快取。當你寫一串資料時,系統會開闢一塊記憶體區域快取這些資料,這塊區域就是我們常說的page cache 作業系統的頁快取 檢視系統記憶體常用的命令有 vmstat free top等。...

linux之核心引數調優

調優1 調優2調優3 調優4net.ipv4.tcp syncookies 1 net.ipv4.tcp tw reuse 1 net.ipv4.tcp tw recycle 1 net.ipv4.tcp fin timeout 30 net.ipv4.tcp keepalive time 1200...

Linux核心 修改TCP IP調優引數

所有的tcp ip調優引數都位於 proc sys net 目錄.例如,下面是最重要的一些調優引數,後面是它們的含義 1.proc sys net core rmem max 最大的tcp資料接收緩衝 2.proc sys net core wmem max 最大的tcp資料傳送緩衝 3.proc ...