【程序员必备小知识-内存知识22】详解内存的Buffer和Cache

187 阅读2分钟

引言

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

内存管理知识很硬核,也比较难啃,但我们不必注意太多细节,坚持的学,持续的学,学好基本功,后面复习就轻松不少,所以我们接着往下学,今天来学习下内存的BufferCache

内存大致情况

在开始今天的课题之前,我们先来看看系统的使用内存情况,首先我们用free命令查看:

image.png

这个界面包含了物理内存 Mem 和交换分区 Swap 的具体使用情况,但我们也看到了缓存buffcache,但是只有一个数值,就只能是它们两的和了,那Buffer我们知道是缓冲区,Cache我们知道是缓存,二者都是内存的临时存储区域,那到底有什么区别嘛?

深究临时缓存

既然Buffer和Cache都是临时缓存的指标,如果面试官问你有什么区别?你除了从字面意义上回答,还要深究,那怎么深究呢?查手册啊,好,我们来搞一下,输入 man free,我们可以看到如下界面:

image.png

  • Buffers 是内核缓冲区, 对应的是Buffers 值在/proc/meminfo 中。
  • Cache 是内核页缓存和 Slab 用到的内存,对应的是Cached 与 SReclaimable 之和,值在 /proc/meminfo 中 。

只说了值在哪?更具体的竟然没说,太能偷懒了吧你,那怎么办呢?这时候只能百度或者Google但是时间太长,但我想到了我们在CPU性能中提到的proc文件系统,那里面那么多和内核有关的接口文件,就不信没有我想拥有的。

proc文件系统

还真没有,哈哈哈,翻车了,只能Google了。 image.png

  • Buffers:Relatively temporary storage for raw disk blocks that shouldn't get tremendously large (20MB or so).

  • Buffers是对原始磁盘块的临时存储,即搞缓存磁盘,一般就(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写,减少写的次数。

  • Cached:In-memory cache for files read from the disk (the page cache). Doesn't include SwapCached.

  • Cached是从磁盘读取文件的页缓存,即搞缓存读取的文件。以便访问这些文件数据时,快速从内存中获取,就不用访问缓慢的磁盘了。 。