衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Buffer和Cache的定義

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 作者:馬哥Linux運維 ? 2022-05-13 09:53 ? 次閱讀

BufferCache 的定義:

  • Buffer:是原始磁盤塊的臨時存儲,即將緩存數據寫入磁盤。它通常不會很大(大約 20MB)。這樣,內核就可以將分散的寫入集中起來,從而對磁盤寫入進行統一優化。例如,多個小的寫入可以合并為一個大的寫入等。

  • Cache:是用于從磁盤讀取文件的頁面緩存,用于緩存從文件中讀取的數據。這樣,下次訪問這些文件數據時,可以直接從內存中快速取回,而無需再次訪問緩慢的磁盤。

但是讓我問你,由于 Buffer 只是將寫入磁盤的數據的緩存。反過來,它還會緩存從磁盤讀取的數據嗎?或者 Cache 是從文件中讀取數據的緩存,那么它是否也為寫入文件緩存數據呢?

如果你能回答以上兩個問題,你可以跳過這篇文章,我想你已經對 BufferCache 有了很好的理解。但如果你不能,請留下來看看我的進一步解釋。

free 命令

要檢查系統內存使用情況,您想到的第一個命令可能是 free ,例如:

$free-h
totalusedfreesharedbuff/cacheavailable
Mem:1.9G1.0G394M2.6M491M728M
Swap:0B0B0B

很明顯,該輸出包括了物理內存 MemSwap 的具體使用情況(如總內存、已用內存、緩存、可用內存等)。緩存是 BufferCache 兩部分的總和。

讓我們看一下 free 的手冊頁中的 BufferCache 定義:

buffers
Memoryusedbykernelbuffers(Buffersin/proc/meminfo)
cacheMemoryusedbythepagecacheandslabs(CachedandSReclaimablein/proc/meminfo)
buff/cache
Sumofbuffersandcache

我們可以看到 free 命令的源數據實際上存儲在 proc/meminfo 文件中。正如我前面提到的,/procLinux 內核提供的一個特殊的文件系統,它就像一個用戶與內核交互的接口

/proc 文件系統也是許多性能工具的最終數據源。在 man proc 中,BuffersCached 的定義如下:

Buffers%lu
Relativelytemporarystorageforrawdiskblocksthatshouldn'tgettremendouslylarge(20MBorso).
Cached%lu
In-memorycacheforfilesreadfromthedisk(thepagecache).Doesn'tincludeSwapCached.
...
SReclaimable%lu(sinceLinux2.6.19)
PartofSlab,thatmightbereclaimed,suchascaches.

SUnreclaim%lu(sinceLinux2.6.19)
PartofSlab,thatcannotbereclaimedonmemorypressure.

至此,您可能認為您已經找到了我的問題的答案,“Buffer”只是用于將數據寫入磁盤的緩存,“Cache”只是用于從文件中讀取數據的緩存。但事實上,“Buffer”也可以用于讀取,“Cache”也可以用于寫入。

實驗

我們將在這里做兩個實驗,寫緩存和讀緩存。

寫入 Cache

讓我們登錄到我們的 Linux 主機并準備好兩個終端。在終端 1,讓我們先清理緩存

c2f2f4ae-d25e-11ec-bce3-dac502259ad0.png

這里 /proc/sys/vm/drop_caches 是一個通過 proc 文件系統修改內核行為的例子。寫入 3 意味著清理各種緩存,例如文件頁、目錄條目和 Inode。

仍然在終端 1,讓我們開啟 vmstat 2 命令:

c3058236-d25e-11ec-bce3-dac502259ad0.png
  • buffcache 就是我們前面看到的 BufferCache,單位是 KB。
  • bibo 分別表示塊設備讀取和寫入的大小,以塊/s 為單位。由于 Linux 中的塊大小為 1KB,因此這個單位相當于 KB/s。

接下來,轉移到終端 2 并運行以下命令:

c31a58e6-d25e-11ec-bce3-dac502259ad0.png

現在切換回終端 1,并觀察 buffcache 的變化:

c32ecd6c-d25e-11ec-bce3-dac502259ad0.png

通過觀察 vmstat 的輸出,我們發現運行 dd 命令時,Cache 一直在增長,而 Buffer 基本沒有變化。

讀取 Buffer

現在,讓我們做第二個實驗。再次清除終端 1中的緩存

c34774d4-d25e-11ec-bce3-dac502259ad0.png

同樣在終端 1 中,再次啟動 vmstat 2 命令:

c36567fa-d25e-11ec-bce3-dac502259ad0.png

您可以看到此時 buff0。現在在終端 2 中,運行以下命令:

c37f4dc8-d25e-11ec-bce3-dac502259ad0.png

然后,回到終端 1 觀察:

c3991460-d25e-11ec-bce3-dac502259ad0.png

觀察 vmstat 的輸出,你會發現在讀盤的時候(也就是 bi > 0 的時候),BufferCache 都在增長,但是顯然 Buffer 的增長要快很多。這意味著當從磁盤讀取時,數據被緩存在 Buffer 中。

現在我們幾乎可以得出結論:

讀取文件時數據會緩存在 Cache 中,讀取磁盤時數據會緩存在 Buffer 中。

結論

在這里您應該會發現,雖然本文對 BufferCache 進行了描述,但仍然無法涵蓋所有細節。我們如今學到了以下兩點:

  • Buffer:既可以用作“要寫入磁盤的數據緩存”,也可以用作“讀取磁盤讀的數據緩存”。
  • Cache:既可以用作“從讀取文件的頁面緩存”,也可以用作“寫入文件的頁面緩存”。

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 磁盤
    +關注

    關注

    1

    文章

    380

    瀏覽量

    25276
  • buffer
    +關注

    關注

    2

    文章

    120

    瀏覽量

    30130
  • 命令
    +關注

    關注

    5

    文章

    696

    瀏覽量

    22109

原文標題:Linux 內存中的緩沖區(Buffer)與緩存(Cache)

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么是緩存(Cache)及其作用

    緩存(Cache)是一種高速存儲器,用于臨時存儲數據,以便快速訪問。在計算機系統中,緩存的作用是減少處理器訪問主存儲器(如隨機存取存儲器RAM)所需的時間。 緩存(Cache)概述 緩存是一種位于
    的頭像 發表于 12-18 09:28 ?1512次閱讀

    SN74HC14D buffer的數據速率是多大?

    該型號buffer的數據速率是多大?
    發表于 11-29 07:10

    CDCM61004時鐘Buffer是否支持SSC功能?

    CDCM61004 時鐘Buffer是否支持SSC功能
    發表于 11-08 16:09

    Cache和內存有什么區別

    Cache(高速緩存)和內存(Memory,通常指主存儲器或RAM)是計算機存儲系統中兩個重要的組成部分,它們在計算機的性能和數據處理中扮演著不同的角色。以下是對Cache和內存之間區別的詳細解析。
    的頭像 發表于 09-26 15:28 ?2142次閱讀

    MSPM0 UART通信中DMA和Ring Buffer環形緩沖的應用

    電子發燒友網站提供《MSPM0 UART通信中DMA和Ring Buffer環形緩沖的應用.pdf》資料免費下載
    發表于 09-05 11:01 ?0次下載
    MSPM0 UART通信中DMA和Ring <b class='flag-5'>Buffer</b>環形緩沖的應用

    解析Arm Neoverse N2 PMU事件L2D_CACHE_WR

    有客戶希望我們幫忙分析 Eigen gemm 基準測試的一些執行情況。具體來說是為什么 L1D_CACHE_WR 的值會低于 L2D_CACHE_WR,這種情況令人費解。
    的頭像 發表于 09-03 11:42 ?1379次閱讀
    解析Arm Neoverse N2 PMU事件L2D_<b class='flag-5'>CACHE</b>_WR

    請教論壇大神Labview調用BlueSuite TestEngine.dll問題

    file to write the configuration cache data to. If NULL, the configuration cache data is written
    發表于 07-31 18:27

    Cortex R52內核Cache的具體操作(2)

    本節內容主要講述CortexR52內核Cache的具體操作包括使緩存無效(invalidate)操作,清除(clean)緩存。有的時候客戶可能需要對cache做一些清理,比如invalidate
    的頭像 發表于 07-15 15:44 ?1547次閱讀
    Cortex R52內核<b class='flag-5'>Cache</b>的具體操作(2)

    Cortex R52內核Cache的相關概念(1)

    在開始閱讀本系列文章之前,請先參閱《有關CR52 MPU配置說明》。因為這篇文章講述了,cache配置所涉及到的寄存器的設置和MPU的一些基本概念。如果讀者都已經理解了上述內容,可以跳過。本章內容主要講述cache屬性的具體含意、注意事項、以及在RZ/T2M的性能測試。
    的頭像 發表于 07-15 10:37 ?1765次閱讀
    Cortex R52內核<b class='flag-5'>Cache</b>的相關概念(1)

    CortexR52內核Cache的具體操作

    本節內容主要講述CortexR52內核Cache的具體操作包括使緩存無效(invalidate)操作,清除(clean)緩存。有的時候客戶可能需要對cache做一些清理,比如invalidate
    的頭像 發表于 07-15 10:32 ?1404次閱讀
    CortexR52內核<b class='flag-5'>Cache</b>的具體操作

    STM32的DAC輸出有個BUFFER功能,BUFFer的驅動能力究竟有多大,普通的運放輸出可以嗎?驅動LED可以嗎?

    DAC是輸出模擬電壓給外界參考,STM32的DAC輸出有個BUFFER功能,但不知這個BUFFer的驅動能力究竟有多大,普通的運放輸出可以嗎?驅動LED可以嗎?有沒有人做過這塊,給個建議,因為最近要設計個DAC輸出調節運放輸出,希望能有個參考。 如果外接跟隨的話,用LM3
    發表于 05-15 07:42

    OpenHarmony語言基礎類庫【@ohos.buffer (Buffer)】

    Buffer對象用于表示固定長度的字節序列,是專門存放二進制數據的緩存區。
    的頭像 發表于 04-23 17:34 ?952次閱讀
    OpenHarmony語言基礎類庫【@ohos.<b class='flag-5'>buffer</b> (<b class='flag-5'>Buffer</b>)】

    為什么HAL庫在操作Flash erase的時候,需要把I-Cache和D-Cache關閉呢?

    請問為什么HAL庫在操作Flash erase的時候,需要把I-Cache和D-Cache關閉呢? 這有什么原因呢? 有人可以解答嗎?
    發表于 04-07 09:08

    STM32F429使用外部SPI flash,只要執行Bitmap::cache(id)就進入硬件錯誤怎么解決?

    ,就進入硬件錯誤。 執行Bitmap::cacheAll()函數也會進入硬件錯誤。 正常執行cache函數之后會進入TouchGFXHAL::blockCopy()函數,然后執行自定義的拷貝函數,但是
    發表于 03-27 07:39

    請問STM32MP13X的MMU和Cache如何使能?

    STM32MP13X的MMU和Cache如何使能?修改了hal_conf里的DATA_CACHE_ENABLE的宏console里還是顯示沒開,在設置里的Define symbols把NO_CACHE_USE刪了好像還是不行。。
    發表于 03-12 06:46
    百家乐2号程序| 24风水| 娱乐网百家乐官网的玩法技巧和规则| 在线百家乐官网策略| 24山向中那个向最好| 百家乐游戏平台有哪些哪家的口碑最好 | 永德县| 澳门百家乐官网开户投注| 迪威百家乐官网娱乐平台| 做生意门口对着通道| 百家乐平注7s88| 全讯网找a3322.com| 澳门威尼斯人| BB百家乐官网大转轮| 百家乐游戏类型| 电子百家乐规则| 尊尚会娱乐城| 澳门百家乐官网怎么才能赢钱| 百家乐官网双峰县| 六合彩百家乐有什么平码| 大发888国际娱乐net| 百家乐官网蓝盾假网| 真钱的棋牌游戏| 关于百家乐官网切入点| 百家乐百家乐群| 免费百家乐过滤工具| 赣榆县| 网上赌百家乐官网的玩法技巧和规则 | 大发888注册送| 真人百家乐官网什么平台| 百家乐神仙道官网| 大发888游戏网站| 赌场百家乐官网规则| 百家乐最常见的路子| 大发888娱乐场下载yguard| 实战百家乐官网博彩正网| 7月24日风水| 威尼斯人娱乐场首页| 谈谈百家乐官网赢钱技巧| 喜达百家乐现金网| 大发888怎么|