Linux 系统Buffers与Cached的区别

1.概念介绍

      在Linux系统使用“free -w”命令查看内存使用情况。该文通过查看源码的方式,介绍下图中buffers和cache的具体含义。

2.源码分析

      该文参考的内核版本为4.19。在我们查看系统资源使用情况时,一般我们都借助Linux提供的/proc  目录下的信息进行分析。比如“free -w”命令的信息来源于/proc/meminfo。/proc下的信息的具体含义,可以分析内核源码获得。

2.1 /proc/meminfo信息

      通过命令“cat /proc/meminfo”可以获取系统中关于内存的整体信息,我们重点关注下图信息中的Buffers和Cached项。

       上图中Buffers的数值等于“free -w”中buffers对应的数值。而Cached的数值小于“free -w”中cache对应的数值。这是因为,Cached和SReclaimable表示的数值和等于“free -w”中cache对应的数值。SReclaimable表示可回收的Slab缓存,该文不关心SReclaimable数值,主要分析Cached和Buffers数值。

2.2 源码分析

       内核源代码fs/proc/meminfo.c文件中包含了命令“cat /proc/meminfo”具体执行步骤和显示的信息,源代码如下(只保留必要的函数)。

 对应的公式如下:

vm_node_stat[NR_FILE_PAGES] = Buffers+Cached。

Buffers = 块设备inode节点管理的缓存。

Cached = 普通文件inode节点管理的缓存。

      普通文件和块设备的缓存总大小统计在vm_node_stat[NR_FILE_PAGES]变量中。meminfo中Buffers统计了块设备文件(如/dev/sd*)inode节点管理的缓存。meminfo中Cached统计了总缓存减去Buffers缓存大小,即普通文件inode节点管理的缓存。

       在Linux系统中普通文件和块设备文件都会创建inode节点。当操作普通文件时,文件的缓存由其inode节点进行管理,比如open("/file.txt")后的read/write操作。操作块设备时,块设备的缓存也由其inode节点进行管理,比如open("/dev/sd*")后的read/write操作。

注:Buffers和Cached只是数字,数字的具体含义是什么,看源码是最简单直接的方式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值