濮阳杆衣贸易有限公司

主頁 > 知識庫 > linux page buffer cache深入理解

linux page buffer cache深入理解

熱門標簽:南寧智能外呼系統(tǒng)線路商 成都移動外呼系統(tǒng) 佛山外呼系統(tǒng)平臺 電銷機器人的效果 美圖手機 聯(lián)客智能語音外呼系統(tǒng)賬號格式 長春外呼系統(tǒng)價格 南昌語音外呼系統(tǒng)代理 長沙智能外呼系統(tǒng)中心
Page cache和buffer cache一直以來是兩個比較容易混淆的概念,在網(wǎng)上也有很多人在爭辯和猜想這兩個cache到底有什么區(qū)別,討論到最后也一直沒有一個統(tǒng)一和正確的結(jié)論,在我工作的這一段時間,page cache和buffer cache的概念曾經(jīng)困擾過我,但是仔細分析一下,這兩個概念實際上非常的清晰。如果能夠了解到這兩個cache的本質(zhì),那么我們在分析io問題的時候可能會更加得心應手。
Page cache實際上是針對文件系統(tǒng)的,是文件的緩存,在文件層面上的數(shù)據(jù)會緩存到page cache。文件的邏輯層需要映射到實際的物理磁盤,這種映射關(guān)系由文件系統(tǒng)來完成。當page cache的數(shù)據(jù)需要刷新時,page cache中的數(shù)據(jù)交給buffer cache,但是這種處理在2.6版本的內(nèi)核之后就變的很簡單了,沒有真正意義上的cache操作。

Buffer cache是針對磁盤塊的緩存,也就是在沒有文件系統(tǒng)的情況下,直接對磁盤進行操作的數(shù)據(jù)會緩存到buffer cache中,例如,文件系統(tǒng)的元數(shù)據(jù)都會緩存到buffer cache中。
簡單說來,page cache用來緩存文件數(shù)據(jù),buffer cache用來緩存磁盤數(shù)據(jù)。在有文件系統(tǒng)的情況下,對文件操作,那么數(shù)據(jù)會緩存到page cache,如果直接采用dd等工具對磁盤進行讀寫,那么數(shù)據(jù)會緩存到buffer cache。

補充一點,在文件系統(tǒng)層每個設(shè)備都會分配一個def_blk_ops的文件操作方法,這是設(shè)備的操作方法,在每個設(shè)備的inode下面會存在一個radix tree,這個radix tree下面將會放置緩存數(shù)據(jù)的page頁。這個page的數(shù)量將會在top程序的buffer一欄中顯示。如果設(shè)備做了文件系統(tǒng),那么會生成一個inode,這個inode會分配ext3_ops之類的操作方法,這些方法是文件系統(tǒng)的方法,在這個inode下面同樣存在一個radix tree,這里會緩存文件的page頁,緩存頁的數(shù)量在top程序的cache一欄進行統(tǒng)計。從上面的分析可以看出,2.6內(nèi)核中的buffer cache和page cache在處理上是保持一致的,但是存在概念上的差別,page cache針對文件的cache,buffer是針對磁盤塊數(shù)據(jù)的cache,僅此而已。

buffer 與cache 的區(qū)別
A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use.
更詳細的解釋參考:Difference Between Buffer and Cache
對于共享內(nèi)存(Shared memory),主要用于在UNIX 環(huán)境下不同進程之間共享數(shù)據(jù),是進程間通信的一種方法,一般的應用程序不會申請使用共享內(nèi)存,筆者也沒有去驗證共享內(nèi)存對上面等式的影響。如果你有興趣,請參考:What is Shared Memory?

cache 和 buffer的區(qū)別:
Cache:高速緩存,是位于CPU與主內(nèi)存間的一種容量較小但速度很高的存儲器。由于CPU的速度遠高于主內(nèi)存,CPU直接從內(nèi)存中存取數(shù)據(jù)要等待一定時間周期,Cache中保存著CPU剛用過或循環(huán)使用的一部分數(shù)據(jù),當CPU再次使用該部分數(shù)據(jù)時可從Cache中直接調(diào)用,這樣就減少了CPU的等待時間,提高了系統(tǒng)的效率。Cache又分為一級Cache(L1 Cache)和二級Cache(L2 Cache),L1 Cache集成在CPU內(nèi)部,L2 Cache早期一般是焊在主板上,現(xiàn)在也都集成在CPU內(nèi)部,常見的容量有256KB或512KB L2 Cache.
Buffer:緩沖區(qū),一個用于存儲速度不同步的設(shè)備或優(yōu)先級不同的設(shè)備之間傳輸數(shù)據(jù)的區(qū)域。通過緩沖區(qū),可以使進程之間的相互等待變少,從而使從速度慢的設(shè)備讀入數(shù)據(jù)時,速度快的設(shè)備的操作進程不發(fā)生間斷。

Free中的buffer和cache:(它們都是占用內(nèi)存):
buffer :作為buffer cache的內(nèi)存,是塊設(shè)備的讀寫緩沖區(qū)
cache:作為page cache的內(nèi)存, 文件系統(tǒng)的cache
如果 cache 的值很大,說明cache住的文件數(shù)很多。如果頻繁訪問到的文件都能被cache住,那么磁盤的讀IO 必會非常小。

標簽:新鄉(xiāng) 慶陽 法律服務 阜陽 沈陽 東營 云浮 邵陽

巨人網(wǎng)絡(luò)通訊聲明:本文標題《linux page buffer cache深入理解》,本文關(guān)鍵詞  linux,page,buffer,cache,深入,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《linux page buffer cache深入理解》相關(guān)的同類信息!
  • 本頁收集關(guān)于linux page buffer cache深入理解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    天津市| 鸡西市| 舞阳县| 平原县| 灵川县| 九龙坡区| 西乡县| 阿瓦提县| 台湾省| 项城市| 平乡县| 抚宁县| 大埔区| 安西县| 胶州市| 乃东县| 福鼎市| 南城县| 罗甸县| 扬中市| 上高县| 射洪县| 宝鸡市| 化隆| 德惠市| 桦川县| 崇仁县| 沂南县| 济宁市| 古交市| 曲松县| 龙口市| 阳原县| 琼结县| 休宁县| 科技| 长丰县| 洛浦县| 吐鲁番市| 东港市| 峡江县|