当前位置: 首页 > news >正文

Linux中Buffer和Cache的区别

Linux中Buffer和Cache的区别

free命令中会有一项buff/cache,

在这里插入图片描述

通过man free可以看到这里的关于buff/cache的介绍

在这里插入图片描述

buff/cache包含两部分

buffers:内核缓存区用到的内存,对应/proc/meminfoBuffers的值

cache:内核页缓存和Slab用到的内存,对应/proc/meminfoCachedSReclaimable之和。

执行man proc可以看到关于/proc/meminfo的说明。

在这里插入图片描述

在这里插入图片描述

Buffers是对原始磁盘块的临时缓存,通常不会特别大(20M左右)。

Cached是从磁盘读取文件的页缓存

SReclaimableSlab的一部分。

Slab包括两部分,其中的可回收部分,用SReclaimable记录,而不可回收的部分,用SUnreclaim表示。

案例:

基于Ubuntu 20.04.1 LTS

执行apt install sysstat,安装sysstat包。

写入场景:

执行echo 3 >/proc/sys/vm/drop_caches清空系统缓存。

写入/proc/sys/vm/drop_caches表示清理文件页,目录项,Inodes等各种缓存。

执行vmstat 1每1秒输出1组数据。

buffcache 就是我们前面看到的 BuffersCache,单位是 KB

bibo 则分别表示块设备读取和写入的大小,单位为块 / 秒。因为 Linux 中块的大小是 1KB,所以这个单位也就等价于 KB/s

1.1、将数据写入文件测试

新开一个shell窗口,执行 dd if=/dev/urandom of=/tmp/file bs=1M count=500,通过读取随机设备,生成一个 500MB 大小的文件。

回到vmstat的窗口,会看到在 dd 命令运行时, Cache 在不停地增长,而 Buffer 基本保持不变。

在这里插入图片描述

可以看到cache刚开始增长,块设备 I/O 很少。而过一段时间后,才会出现大量的块设备写。

由于dd命令写出512000KB,所以bo的大小至少会等于512000KB,有可能会大于这个值,这是由于系统中其他进程也会写文件,比如第一行的bo的380。

多次执行的话,就会看到dd命令对应的bo的值就是512000KB。

这里也可以看到cache先增长,后面才会有bo增长。这是由于先写入cache缓存, 此时不会和磁盘进行交互, 当需要将缓存数据刷入磁盘时, 才会发生块写入此时bo值会升高

1.2、将数据写入磁盘测试

echo 3 > /proc/sys/vm/drop_caches
dd if=/dev/urandom of=/dev/sdb1 bs=1M count=2048 #注意:这个是直接写到磁盘上,会导致历史数据全部丢失。建议找一个空盘测试

在这里插入图片描述

再次观察vmstat的记录,可以看到buffcache 都在增长,但显然 buff 的增长快得多。

这里的结果和man命令的说明是一致的。写文件时会用到 Cache 缓存数据,而写磁盘则会用到 Buffer 来缓存数据。

读取场景:

刚才是文件和磁盘读取时候buffcache的变化,现在我们再看看写操作的情况。

2.1、从文件中读取数据测试

执行下面的命令。

# 首先清理缓存
echo 3 > /proc/sys/vm/drop_caches
# 运行dd命令读取文件数据
dd if=/tmp/file of=/dev/null

再次观察vmstat的记录

在这里插入图片描述

就可以看到这次还是cache有明显的增长,也就是我们读取内存的大小(512000KB),不过这次由于我们是读取,所以bi有明显的增长也会是512000KB。

上面是读取文件,我们再看看读取磁盘。

2.2、从磁盘中读取数据测试

执行下面给的命令

# 首先清理缓存
echo 3 > /proc/sys/vm/drop_caches
# 运行dd命令读取文件
dd if=/dev/sda1 of=/dev/null bs=1M count=1024

在这里插入图片描述

可以看到,buffbi有明显的增长。也就是我们读取内容的大小1024000KB

结论:

从上面也可以看到:

Buffer: 如果没有经过文件系统,直接从磁盘读取、写入数据,就会体现到Buffer中。既可以用作“将要写入磁盘数据的缓存”,也可以用作“从磁盘读取数据的缓存”。

Cache :如果经过文件系统,从磁盘读取、写入数据,就会体现到Cache中。既可以用作“从文件读取数据的页缓存”,也可以用作“写文件的页缓存”。

相关文章:

Linux中Buffer和Cache的区别

Linux中Buffer和Cache的区别 free命令中会有一项buff/cache, 通过man free可以看到这里的关于buff/cache的介绍 buff/cache包含两部分 buffers:内核缓存区用到的内存,对应/proc/meminfo中Buffers的值 cache:内核页缓存和Slab用到的内存,对应/proc/mem…...

Docker 镜像使用

目录 1、列出镜像列表 2、获取一个新的镜像 3、查找镜像 4、拖取镜像 5、删除镜像 6、创建镜像 a.更新镜像 b.构建镜像 设置镜像标签 当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 …...

Java阶段一Day10

Java阶段一Day10 文章目录Java阶段一Day10抽象类和抽象方法接口案例小练习引用类型数组教师总结回顾:精华笔记:笔记:补充:抽象类和抽象方法 关键字:abstract 只有方法的定义,没有具体的实现(连…...

触摸屏与PLC之间如何快速实现无线PPI通信?

PPI协议是西门子为S7-200专门开发的通信协议,是不开放的协议,CPU自带的两个通信口(Port0,Port1)均支持该协议,S7-200的一些通信模块也支持PPI协议。编程软件Micro/WIN与CPU进行编程通信也使用PPI协议&#…...

【华为OD机试 2023最新 】 羊、狼、农夫过河(C++ 100%)

题目描述 羊、狼、农夫都在岸边,当羊的数量小于狼的数量时,狼会攻击羊,农夫则会损失羊。农夫有一艘容量固定的船,能够承载固定数量的动物。 要求求出不损失羊情况下将全部羊和狼运到对岸需要的最小次数。 只计算农夫去对岸的次数,回程时农夫不会运送羊和狼。 备注:农…...

Java中关于try、catch、finally中的细节分析

本文讲解的是关于Java中关于try、catch、finally中一些问题 下面看一个例子(例1),来讲解java里面中try、catch、finally的处理流程 public class TryCatchFinally {SuppressWarnings("finally")public static final String test(…...

Zookeeper原理

一、概念 Zookeeper是一个开源的、分布式的,为分布式应用提供协调服务的Apache项目。封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 二、选举机制 首先是几个概念: myid:节点的唯一标识&…...

关于FPGA如何快速生成模块的例化模板(实用)

关于FPGA如何快速生成模块的例化模板(实用) 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于FPGA如何快速生成模块的例化模板(实用)一、引言二、快速生成例化模块的几种方法1. IP核的例化模…...

在 Python 中将字符串转换为集合

使用 set() 类将字符串转换为集合,例如 my_set set(my_str)。 set() 类将通过拆分其字符将字符串转换为集合。 my_str one# ✅ 通过拆分字符将字符串转换为集合 my_set set(my_str) print(my_set) # 👉️ {n, o, e}# -----------------------------…...

大数据Flink进阶(十三):Flink 任务提交模式

文章目录 Flink 任务提交模式 一、会话模式(Session Mode) 二、单作业模式(Per-Job Mode) 三、应用模式(Application Mode) Flink 任务提交模式 Flink分布式计算框架可以基于多种模式部署,…...

day11—编程题

文章目录1.第一题1.1题目1.2涉及的相关知识1.3思路1.4解题2.第二题2.1题目2.2思路2.3解题1.第一题 1.1题目 描述: 将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法&#xff0…...

CentOS下安装crontab及cron表达式解析

目录安装依赖服务启停任务操作参数简要说明1、参数说明2、cron表达式解析(1)定义(2)结构(3)字段含义(4)注意事项(5)常用表达式例子crontab示例结尾安装依赖 # vixie-cron软件包是crontab的主程序 # crontabs软件包是用来安装、卸装、或列举用来驱动crontab守护进程的表格的程序…...

python 绘制训练曲线--基于Numpy.convolve曲线平均滤波

文章目录1 训练曲线--震荡的非常厉害2 基于Numpy.convolve曲线平均滤波3 python 绘制训练曲线 平滑处理--Savitzky-Golay 滤波器曲线平滑4 python 绘制训练曲线--插值法 曲线平滑处理1 训练曲线–震荡的非常厉害 上一篇文章用python自己绘制训练曲线震荡的非常厉害&#xff08…...

状态管理插件vuex

概念: 专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。 作用: 如果我们使用全局总线要让所有的组件…...

arthas—阿里开源的Java诊断工具

一、arthas简述Arthas 是阿里开源的Java诊断工具。安装在系统所在服务器,有着强大的能力,是一个开发运维神器。主要功能在线热替换代码/代码增强全局视角的性能分析查看方法执行情况,帮助跟踪偶现的bug支持JDK6二、官方资料官方文档的介绍非常…...

Java学习记录

阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!! 文章目录阅读前请看一下:我是一…...

OpenGL API 之 glVertexAttribPointer

glVertexAttribPointer 定义通用顶点属性数据的数组 C Specification format void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const void * pointer); Parameters nametypedescriptionindexGLuint Specifies the inde…...

蓝桥杯真题4

[蓝桥杯 2017 省 AB] 分巧克力 题目描述 儿童节那天有 KKK 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 NNN 块巧克力,其中第 iii 块是 HiWiH_i \times W_iHi​Wi​ 的方格组成的长方形。 为了公平起见,小明需要从这 NN…...

day02_基本语法

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记Java2307_沐沐霸的博客-CSDN博客 零、复习昨日 一、程序&Java介绍 二、安装JDK&配置环境变量 三、DOS命令 四、第一个程序[重点] 五、Java语言规范[重点] 六、运行机制 七、Typora工具使用 附录:…...

多线程之单例模式

前言 本篇介绍的是wait与notify方法,通过wait来顺序控制执行一些代码,了解单例模式,进行单例模式的简单实现,介绍饿汉模式下出现线程不安全的问题与解决;如有错误,请在评论区指正,让我们一起交…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...