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

    文章

    338

    浏览量

    24880
  • buffer
    +关注

    关注

    2

    文章

    120

    浏览量

    29773
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21848

原文标题:Linux 内存中的缓冲区(Buffer)与缓存(Cache)

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    buffercache的区别

    buffercache的区别 缓冲区(Buffer)和缓存(Cache)是计算机系统中用于提高数据读写效率的两个关键概念,它们虽然功能有所重叠,但在实际应用中存在一些差异。在下文中,
    的头像 发表于 12-07 11:00 410次阅读

    什么是always on buffer?什么情况下需要插always on buffer

    相比普通的buffer cell,always on buffer(AOB)有secondary always on pin,可以让AOB即使在primary power off的情况下保持on的状态;AOB在secondary pg pin off的情况下也是off的。
    的头像 发表于 12-01 15:31 806次阅读
    什么是always on <b class='flag-5'>buffer</b>?什么情况下需要插always on <b class='flag-5'>buffer</b>?

    Cache和Write Buffer一般性介绍

    Cache是位于CPU与主存储器即DRAM(Dynamic RAM,动态存储器)之间的少量超高速静态存储器SRAM(Static RAM)
    的头像 发表于 10-31 15:07 384次阅读
    <b class='flag-5'>Cache</b>和Write <b class='flag-5'>Buffer</b>一般性介绍

    Cache替换策略和Write-through介绍

    Cache和存储器一样具有两种基本操作,即读操作和写操作。当CPU发出读操作命令时,根据它产生的主存地址分为两种情形:一种是需要的数据已在Cache中,那么只需要直接访问Cache,从对应单元中读取
    的头像 发表于 10-31 11:48 692次阅读

    Cache写入方式原理简介

    提高高速缓存命中率的最好方法是尽量使Cache存放CPU最近一直在使用的指令与数据,当Cache装满后,可将相对长期不用的数据删除,提高Cache的使用效率。 为保持Cache中数据与
    的头像 发表于 10-31 11:43 616次阅读

    Cache工作原理是什么

    具有Cache的计算机,当CPU需要进行存储器存取时,首先检查所需数据是否在Cache中。如果存在,则可以直接存取其中的数据而不必插入任何等待状态,这是最佳情况,称为高速命中; 当CPU所需信息不在
    的头像 发表于 10-31 11:34 493次阅读
    <b class='flag-5'>Cache</b>工作原理是什么

    Cache内容锁定是什么

    “锁定”在cache中的块在常规的cache替换操作中不会被替换,但当通过C7控制cache中特定的块时,比如使某特定的块无效时,这些被“锁定”在cache中的块也将受到相应
    的头像 发表于 10-31 11:31 366次阅读

    Cache分类与替换算法

    根据不同的分类标准可以按以下3种方法对Cache进行分类。 •1)数据cache和指令cache •● 指令cache:指令预取时使用的cache
    的头像 发表于 10-31 11:26 464次阅读
    <b class='flag-5'>Cache</b>分类与替换算法

    Cache的原理和地址映射

    cache存储系统中,把cache和主存储器都划分成相同大小的块。 主存地址由块号B和块内地址W两部分组成,cache地址由块号b和块内地址w组成。 当CPU访问cache时,CPU
    的头像 发表于 10-31 11:21 612次阅读

    Cache为什么还要分I-Cache,D-Cache,L2 Cache,作用是什么?

    Cache为什么还要分I-Cache,D-Cache,L2 Cache,作用是什么?
    发表于 10-25 06:38

    看看ARM处理器存储访问一致性问题

    当存储系统中引入了cache和写缓冲区(Write Buffer)时,同一地址单元的数据可能在系统中有多个副本,分别保存在cache、Write Buffer及主存中,如果系统采用了独
    发表于 10-17 17:35 443次阅读
    看看ARM处理器存储访问一致性问题

    在组相联cache中,用于替换cache line的算法有哪些?

    LRU(Least Recently Used)算法:该算法会跟踪每个cache line的age(年龄)情况,并在需要时替换掉近期最少使用的cache line。
    的头像 发表于 10-08 11:10 466次阅读

    IC设计中Buffer的作用有哪些?

    首先了解一下buffer是什么,buffer中文名称缓冲器,属于逻辑和电压转换分类,主要目的用于增强系统中的信号完整性。
    发表于 06-05 15:55 9294次阅读

    深入理解Cache工作原理

    按照数据关系划分:Inclusive/exclusive Cache: 下级Cache包含上级的数据叫inclusive Cache。不包含叫exclusive Cache。举个例子,
    的头像 发表于 05-30 16:02 462次阅读
    深入理解<b class='flag-5'>Cache</b>工作原理

    Cache验证参考模型对比来谈复杂度权衡

    总体而言,在验证L1 cache system (L1SYS)的过程中,L1SYS的机构被拆分为多个模块,包括shadow command buffer, store buffer, sram
    的头像 发表于 04-28 09:25 747次阅读
    从<b class='flag-5'>Cache</b>验证参考模型对比来谈复杂度权衡