Linux内存中buffer与cache的区别

内存和CPU的关系非常紧密,而内存管理本身也是很负责的机制。
free输出界面

root@VM-4-9-ubuntu:~# free
              total        used        free      shared  buff/cache   available
Mem:        3514764      165864     3225656        6156      123244     3163460
Swap:             0           0           0

从man free的手册中可以看出,buffer和cache的说明

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

这些数值都来自/proc/meminfo,但更具体的Buffers、Cached和SReclaimable的含义。

proc文件系统

/proc是Linux内核提供的一种特殊文件系统,是用户跟内核交互的接口。比方说,用户可以从/proc中查询内核的运行状态和配置选项,查询进程的运行状态,统计数据等,当然,也可以通过/proc来修改内核的配置。
/proc/meminfo,继续查proc文件系统,获取上面三个的具体定义。
执行man proc

Buffers %lu
	Relatively temporary storage for raw disk blocks that shouldn't get tremendously large (20MB or so).
	
Cached %lu
	In-memory cache for files read from the disk (the page cache).  Doesn't include SwapCached.
...
SReclaimable %lu (since Linux 2.6.19)
	Part of Slab, that might be reclaimed, such as caches.

通过这个文档可以看到:

  • Buffers是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会很大(20Mb左右)。这样,内核就可以吧分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写等等。
  • Cache是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的额数据。这样,下次访问这些文件数据时,就可以从内存中快读获取,而不需要再次访问缓慢的磁盘。
  • SReclaimable是Slab的一部分,Slab包括两部分,其中的可回收部分,用SReclaimable记录;而不可回收部分,用SUnreclaim记录。

大概的意思是明确了,但也存在的问题就是Buffer的文档没有提到这是磁盘读数据还是写数据的缓存。Cache是对从文件读取数据的缓存,那么它是不是也会缓存写文件的数据

接下来,用几个实例来展示,Buffer与Cache在不同场景下的使用情况。

案列

准备

系统 Ubuntu 18.04
机器配置 2CPU 4GB内存
预先安装sysstat包,apt-get install sysstat。
安装sysstat是因为要使用到vmstat来观察Buffer和Cache的变化情况。可以从其他读到相同的结果,但还

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值