Linux中Buffer和Cache的區別

時間 2023-05-11 11:27:06

1樓:世紀網路

free 的輸出包含了物理記憶體 mem 和交換分割槽 swap 的具體使用情況,比如總記憶體、已用記憶體、快取、可用記憶體等。其中快取是 buffer 和 cache 兩部分的總和 。

其中buffer 和cache 的區別是:

簡單來說,buffer 是對磁碟資料的快取,而 cache 是檔案資料的快取,它們既會用在讀請求中,也會用在寫請求中。

buffer 和 cache 分別快取磁碟和檔案系統的讀寫資料。

磁碟是乙個塊裝置,可以劃分為不同的分割槽;在分割槽之上再建立檔案系統,掛載到某個目錄,之後才可以在這個目錄中讀寫檔案。

其實 linux 中「一切皆檔案」,而文章中提到的「檔案」是普通檔案,磁碟是塊裝置檔案。

在讀寫普通檔案時,會經過檔案系統,由檔案系統負責與磁碟互動;而讀寫磁碟或者分割槽時,就會跳過檔案系統,也就是所謂的「裸i/o「。這兩種讀寫方式所使用的快取是不同的,也是本文提到的 cache 和 buffer 區別。

linux中,buffer記憶體與cache記憶體有何區別?

2樓:匿名使用者

兩者都是ram中的資料。簡單來說,buffer是即將要被寫入磁碟的,而cache是被從磁碟中讀出來的。

快取(cached)是把讀取過的資料儲存起來,重新讀取時若命中(找到需要的資料)就不要去讀硬碟了,若沒有命中就讀硬碟。其中的資料會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。

快取(cache)實際並不是緩衝檔案的,而是緩衝塊的,塊是磁碟i/o操作的最小單元(在linux中,它們通常是1kb)。這樣,目錄、超級塊、其它檔案系統的薄記資料以及非檔案系統的磁碟資料都可以被緩衝了。

如果快取有固定的大小,那麼快取太大了也不好,因為這會使得空閒的記憶體太小而導致進行交換操作(這同樣是慢的)。為了最有效地使用實際記憶體,linux自動地使用所有空閒的記憶體作為高速緩衝,當程式需要更多的記憶體時,它也會自動地減小緩衝的大小。

緩衝(buffers)是根據磁碟的讀寫設計的,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反覆尋道,從而提高系統效能。linux有乙個守護程序定期清空緩衝內容(即寫磁碟),也可以通過sync命令手動清空緩衝。舉個例子吧:

我這裡有乙個ext2的u盤,我往裡面cp乙個3m的 ***,但u盤的燈沒有跳動,過了一會兒(或者手動輸入sync)u盤的燈就跳動起來了。解除安裝裝置時會清空緩衝,所以有些時候解除安裝乙個裝置時要等上幾秒鐘。

buffer是由各種程序分配的,由程序和系統一起管理。被用在如輸入佇列等方面,乙個簡單的例子如某個程序要求有多個字段讀入,在所有欄位被讀入完整之前,程序把先前讀入的字段放在buffer中儲存。

cache經常被用在磁碟的i/o請求上,如果有多個程序都要訪問某個檔案,於是該檔案便被做成cache以方便下次被訪問,這樣可提供系統效能。

綜上所述可以理解為cache系統管理, buffer由程序和系統一起管理。

3樓:匿名使用者

這種形式比老版本中利用fieldcache來實現正排查詢更加高效,更加節省記憶體。倒排索引將字段記憶體切分成乙個term列表,每個term都對應著乙個docid列表,這樣一種結構使得查詢能夠非常快速,因為term對應的docid是現成就有的。但是,利用它來做統計,排序,高亮操作的時候需要通過docid來找到,field的值卻變得不那麼高效了。

之前之前會利用fieldcache在例項啟動的時候預先將倒排索引的值load到記憶體中,問題是,如果文件多會導致預載入耗費大量時間,還會占用寶貴的記憶體資源。

索引在之後引入了新的機制docvalues,可以將這個理解為正排索引,是面向列儲存的。

4樓:匿名使用者

page cache和buffer cache一直以來是兩個比較容易混淆的概念,在網上也有很多人在爭辯和猜想這兩個cache到底有什麼區別,討論到最後也一直沒有乙個統一和正確的結論,在我工作的這一段時間,page cache和buffer cache的概念曾經困擾過我,但是仔細分析一下,這兩個概念實際上非常的清晰。如果能夠了解到這兩個cache的本質,那麼我們在分析io問題的時候可能會更加得心應手。

page cache實際上是針對檔案系統的,是檔案的快取,在檔案層面上的資料會快取到page cache。檔案的邏輯層需要對映到實際的物理磁碟,這種對映關係由檔案系統來完成。當page cache的資料需要重新整理時,page cache中的資料交給buffer cache,但是這種處理在2.

6版本的核心之後就變的很簡單了,沒有真正意義上的cache操作。

buffer cache是針對磁碟塊的快取,也就是在沒有檔案系統的情況下,直接對磁碟進行操作的資料會快取到buffer cache中,例如,檔案系統的元資料都會快取到buffer cache中。

簡單說來,page cache用來快取檔案資料,buffer cache用來快取磁碟資料。在有檔案系統的情況下,對檔案操作,那麼資料會快取到page cache,如果直接採用dd等工具對磁碟進行讀寫,那麼資料會快取到buffer cache。

補充一點,在檔案系統層每個裝置都會分配乙個def_blk_ops的檔案操作方法,這是裝置的操作方法,在每個裝置的inode下面會存在乙個radix tree,這個radix tree下面將會放置快取資料的page頁。這個page的數量將會在top程式的buffer一欄中顯示。如果裝置做了檔案系統,那麼會生成乙個inode,這個inode會分配ext3_ops之類的操作方法,這些方法是檔案系統的方法,在這個inode下面同樣存在乙個radix tree,這裡會快取檔案的page頁,快取頁的數量在top程式的cache一欄進行統計。

從上面的分析可以看出,核心中的buffer cache和page cache在處理上是保持一致的,但是存在概念上的差別,page cache針對檔案的cache,buffer是針對磁碟塊資料的cache,僅此而已。

5樓:焦碎裂躺

至今思項羽,不肯過江東。

什麼是Buffer和Unbuffer的

cnet伺服器專家 1 buffer是快取器的英文說法,也是快取記憶體,2 伺服器及圖形工作站記憶體有較多應用,容量多為64k,但隨著記憶體容量的不斷增大,其容量也不斷增加,具有buffer的記憶體將對記憶體的讀寫速度有較大提高,象早期的168芯edoecc伺服器記憶體大多都帶buffer,unbu...

linux中findname和find name有什麼區別啊!我執行命令結果是一樣的,求指教

4終 1 find是用來查詢檔案或目錄。首先看一下最簡單的用法直接根據路徑來查詢檔案。命令詳解 find 路徑 檔名或目錄名 注意不要在 根 目錄下查詢檔案,最好在查詢的時候精確一點。2 name 命令詳解 find 路徑 name 檔名或目錄名 3 引數 可以匹配任意值包括空值,在搜尋檔案的時候有...

Linux記憶體中Page cache和buffer cache的區別

七彩虹科技 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 free中看到的...