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只是数字,数字的具体含义是什么,看源码是最简单直接的方式。

Linux 系统Buffers与Cached的区别相关推荐

  1. Buffers与cached啥区别

    转自: https://www.cnblogs.com/argb/p/3448744.html  A buffer is something that has yet to be "writ ...

  2. Linux Buffers和Cached的区别(转)

    在linux下使用free命令查看内存使用情况,有buffers和cached两项,以下是它们的区别: buffers是为块设备设计的缓冲.比如磁盘读写,把分散的写操作集中进行,减少磁盘I/O,从而提 ...

  3. Linux系统内存的Cached Memory

    Linux与Windows不同,会存在缓存内存,通常叫做Cache Memory.有些时候你会发现没有什么程序在运行,但是使用top或free命令看到可用内存会很少. 什么是Cache Memory( ...

  4. linux系统-软链接与硬链接区别

    目录 引言 硬盘 软.硬链接方式 硬链接 软链接 问题 引言 在介绍硬链接和软链接之前,首先介绍下硬盘相关的知识,主要是了解下 inode . 硬盘 硬盘设备是由大量的扇区组成的.以 MBR 分区为例 ...

  5. Linux系统中的文件系统格式区别及详解

    Linux系统中常见文件系统格式 Windows常用的分区格式有三种,分别是FAT16.FAT32.NTFS格式 在Linux操作系统里有Ext2.Ext3.Linux swap和VFAT 种格式. ...

  6. linux系统——fread()与read()函数族区别

    fread与read区别: 1,fread是带缓冲的,read不带缓冲. 2,fopen是标准c里定义的,open是POSIX中定义的. 3,fread可以读一个结构.read在linux/unix中 ...

  7. linux系统32和64的区别,32位和64位的Linux系统区别

    区别之一:当初设计的定位不同 64位操作系统的设计定位是:满足机械设计和分析.三维动画.视频编辑和创作,以及科学计算和高性能计算应用程序等领域,这些应用领域的共同特点就是需要有大量的系统内存和浮点性能 ...

  8. linux 系统账户 和 普通账户 的区别

    最近使用 useradd -r 选项进行创建账户,用于测试,对-r 选项不是很明白,下面记录一些调研的过程: -r, --systemCreate a system account.System us ...

  9. buffers与cached的区别

    具体参考以下博文: 1.https://www.cnblogs.com/chenpingzhao/p/5161844.html 2.https://blog.csdn.net/heweimingmin ...

最新文章

  1. 『非常重要』非矿工用户如何安全度过BCH11月算力战历史时刻!
  2. Play! Framework 系列(二):play 的项目结构
  3. jquery Ajax请求本地json
  4. IAR STM32报错Error[Pe147]:declaration is incompatible with“__nounwind __interwork __softfp unsigned
  5. 数据挖掘基础学习一:VMware虚拟机Ubuntu上安装Python和IPython Notebook(Jupyter Notebook)完整步骤及需要注意的问题(以ubuntu-18.04.3为例)
  6. ElasticSearch的一些核心概念
  7. linux 编译链接出错,Qt编译和链接错误
  8. python set集合与列表_python set集合的添加、删除、修改和访问操作/frozenset 集合,集合内置方法完整列表-立地货...
  9. 背景图(css sprite)尺寸设置,DIPS,设备像素比,Retina,,border 1px问题
  10. 从一个骗人的技术说起光线追踪——光影技术的里程碑
  11. lua 的斗地主逻辑算法
  12. lol服务器稳定性补偿,lol游戏稳定性补偿皮肤领取
  13. pwm超详细解读,大佬细说pwm的控制方式
  14. IOS 使用TestFlight 详解
  15. appinventor HTML5,用APP Inventor纯图形化编程自制APP,通过WIFI物联网控制掌控板
  16. 软件类大学生求职就业攻略(一)
  17. CS61A Homework 7
  18. 《Cortex-CM3权威指南》——存储器系统
  19. 出海、上市,分众传媒还能再造一个“分众”吗?
  20. Tinymce 编辑器中字数统计问题,统计所有字符(包括数字,字母。。。)

热门文章

  1. 国外7个免费的网络主机服务
  2. Jetsonnano的环境配置--ros环境
  3. (一)BST树(二叉搜索树)
  4. ESP32 Ubuntu开发环境搭建
  5. Redis实现的布隆过滤器如何快速有效删除数据
  6. Redis批量删除Key的三种方式(linux和windows环境下都有)
  7. 成都拓嘉启远:如何全面看待拼多多百亿补贴
  8. OCJP(1Z0-851) 模拟题分析(二)
  9. 计算机视觉中的Transformer
  10. 4G图传移动视频取证-可视安全生产监管-常见问题解答FAQ