The Page Cache and Page Writeback

page cache是kernel實(shí)現(xiàn)的disk cache, 這是為了減少磁盤I/O。page writeback是把page cache寫回磁盤的處理過程嘱腥。

  • 磁盤訪問速度比內(nèi)存慢幾個(gè)數(shù)量級(jí)
  • 磁盤訪問有時(shí)間局部性

所以對磁盤做內(nèi)存cache會(huì)有很大的性能提升录别。

Approaches to Caching

  • page cache大小是動(dòng)態(tài)的朽色,可以花掉全部空閑內(nèi)存也可以釋放降低內(nèi)存壓力
  • backing store : 被cached的設(shè)備

一個(gè)read()調(diào)用

  • cache hit
    命中cache不需要磁盤I/O
  • cache miss
    需要調(diào)度block I/O操作讀取數(shù)據(jù)

Write Caching

對于寫cache系統(tǒng)一般有三種策略

  • no write
    對這里來說就是直接寫磁盤,invalid cache
  • write through
    同時(shí)寫cache更磁盤
  • write-back (Linux采用的)
    寫直接操作page cache, 由page cache寫會(huì)磁盤
    這樣可以合并和批量操作组题, 但會(huì)變得復(fù)雜葫男。

Cache Eviction

Linux只會(huì)選一個(gè)clean的page evict, 如果clean的page不夠就需要writeback空出更多clean page.
難點(diǎn)是evict哪個(gè)page, 如果能知道未來的訪問就能實(shí)現(xiàn)最優(yōu)的策略clairvoyant algorithm崔列,但這是不可能的梢褐。

Least Recently Used

太知名了, 不說了赵讯。
注意kernel不知道文件會(huì)被訪問多少次盈咳,但是它可以知道過去的訪問情況。

The Two-List Strategy

修改版本的LRU: two-list strategy(LRU/2), 維護(hù)兩個(gè)list

  • active list
    表示訪問頻繁的边翼,不拿來evict的鱼响,當(dāng)一個(gè)page被訪問并且在inactive list里了才會(huì)移到active list
  • inactive list
    page只在inactive list 里evict

在兩個(gè)列表里控制平衡,active的太多就在active的evict到inactive.
這解決了LRU use-only-once的問題讯私, 比如掃描操作會(huì)把cache全部刷掉热押。

The Linux Page Cache

The address_space Object

  • 一個(gè)page可能由多個(gè)不連續(xù)的disk block組成,索引是一個(gè)問題斤寇。
  • Linux page cache要cache 任何page-based object, 包括何種文件跟memory mappings.
  • 引入 address_space 結(jié)構(gòu)用來管理cache跟page I/O操作

address_space Operations

Radix Tree

用來索引page, 每個(gè)address_space 有一個(gè)radix tree

The Old Page Hash Table

2.6前使用全局hash來索引會(huì)有這些問題

  • 一個(gè)全局鎖桶癣,沖突很高影響性能。
  • The hash was larger than necessary because it contained all the pages in the page cache, whereas only pages pertaining to the current file were relevant. (不是很理解)
  • 查找失敗時(shí)性能問題娘锁,特別時(shí)需要遍歷整個(gè)鏈表的時(shí)候
  • 花費(fèi)比較多內(nèi)存

The Buffer Cache

disk blocks也會(huì)跟通過block I/O buffers 跟page cache綁定牙寞。buffer是disk block的內(nèi)存表示。這個(gè)cache叫buffer cache, 做為page cache的一部分實(shí)現(xiàn)莫秆。(搞不清具體怎么協(xié)作

The Flusher Threads

寫操作在page cache里是延后的间雀,這些dirty pages最縱需要寫回到磁盤,有這三種情況:

  • 可用內(nèi)存少于一個(gè)閥值镊屎,write back了dirty pages才可能釋放這些cache
  • 臟數(shù)據(jù)老于一個(gè)閥值惹挟, 避免臟數(shù)據(jù)一直在內(nèi)存
  • sync() & fsync() 等系統(tǒng)調(diào)用。

Linux2.6 flusher threads 執(zhí)行這些操作

  • 第一種情況
root@july-VirtualBox:/data1/july# sysctl -a | grep 
vm.dirty_background_ratio = 10

當(dāng)達(dá)到配置(dirty pages占總內(nèi)存多少百分比時(shí)需要刷到磁盤)值會(huì)觸發(fā)

  • 第二種
root@july-VirtualBox:/data1/july# sysctl -a | grep "vm.dirty_writeback_"
vm.dirty_writeback_centisecs = 500

單位1/100,這里是5s

Laptop Mode

特殊的策略為了減少磁盤活動(dòng)省點(diǎn)缝驳。

History: bdflush, kupdated, and pdflush

bdflush跟kupdated是2.6之前的连锯,現(xiàn)在只有pdflush, pdflush的線程數(shù)是動(dòng)態(tài)的,默認(rèn)2~8個(gè)用狱, pdflush線程不跟任何磁盤關(guān)聯(lián)(global to all disks in the system)运怖。容易擁塞與某個(gè)硬盤,2.6.32 flusher threads替換了pdflush. 它是 per-spindle flushing夏伊。

Avoiding Congestion with Multiple Threads

flusher threads 每個(gè)線程都會(huì)跟一個(gè)device關(guān)聯(lián)摇展,每個(gè)thread分別獲取對應(yīng)設(shè)備的dirty pages處理,這樣工作效果很好又簡單溺忧,避免以前bdflush pdflush等可能的擁塞問題咏连,bdflush線程只有一個(gè), pdflush threads會(huì)盡量避免擁塞的queues(沒跟設(shè)備關(guān)聯(lián)依然可能處理同一個(gè)設(shè)備)砸狞。

Conclusion

  • page cahce可以顯著的提升性能跟減少磁盤I/O捻勉。
  • write-back 保持臟數(shù)據(jù)在內(nèi)存延遲寫到磁盤
  • flusher threads 處理最終的page writeback

reference

LKD ch16
http://sylab-srv.cs.fiu.edu/lib/exe/fetch.php?media=paperclub:lkd3ch16.pdf
https://www3.cs.stonybrook.edu/~porter/courses/cse506/f12/slides/page-cache.pdf

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刀森,隨后出現(xiàn)的幾起案子踱启,更是在濱河造成了極大的恐慌,老刑警劉巖研底,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埠偿,死亡現(xiàn)場離奇詭異,居然都是意外死亡榜晦,警方通過查閱死者的電腦和手機(jī)冠蒋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乾胶,“玉大人抖剿,你說我怎么就攤上這事朽寞。” “怎么了斩郎?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵脑融,是天一觀的道長。 經(jīng)常有香客問我缩宜,道長肘迎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任锻煌,我火速辦了婚禮妓布,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宋梧。我一直安慰自己匣沼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布乃秀。 她就那樣靜靜地躺著肛著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跺讯。 梳的紋絲不亂的頭發(fā)上枢贿,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音刀脏,去河邊找鬼局荚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛愈污,可吹牛的內(nèi)容都是我干的耀态。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼暂雹,長吁一口氣:“原來是場噩夢啊……” “哼首装!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起杭跪,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤仙逻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后涧尿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體系奉,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年姑廉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缺亮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桥言,死狀恐怖萌踱,靈堂內(nèi)的尸體忽然破棺而出葵礼,到底是詐尸還是另有隱情,我是刑警寧澤并鸵,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布章咧,位于F島的核電站,受9級(jí)特大地震影響能真,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扰柠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一粉铐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卤档,春花似錦蝙泼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舔腾,卻和暖如春溪胶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稳诚。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工哗脖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扳还。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓才避,卻偏偏與公主長得像,于是被迫代替她去往敵國和親氨距。 傳聞我的和親對象是個(gè)殘疾皇子桑逝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,325評(píng)論 0 10
  • 最新數(shù)據(jù)監(jiān)控項(xiàng): Aborted Clients 因客戶端沒有正確地關(guān)閉而被丟棄的連接的個(gè)數(shù),數(shù)字增大意味著有客戶...
    Catke閱讀 2,379評(píng)論 0 11
  • afinalAfinal是一個(gè)android的ioc俏让,orm框架 https://github.com/yangf...
    passiontim閱讀 15,429評(píng)論 2 45
  • 不溫不火楞遏, 日子, 細(xì)水長流舆驶。 多一些陪伴橱健, 是對雙親的寬慰。 讓時(shí)光沙廉, 再慢些拘荡, 再慢些……
    痞子杜甫閱讀 355評(píng)論 0 0
  • “我還是送你回去吧∏肆辏”林蕭幾乎是機(jī)械式的說完了這句話珊皿。 “好吧网缝。”任靜表情失望的低下了頭蟋定。 看到任靜失望的樣子粉臊,林...
    左瀟龍閱讀 509評(píng)論 2 2