性能优化理论篇 | Cache VS Buffer,傻傻分不清 ?

news2024/11/15 1:45:57

性能优化系列目录:
性能优化理论篇 | 彻底弄懂系统平均负载
性能优化理论篇 | swap area是个什么东西

从free命令开始

free 命令是一个在类 Unix 操作系统中用于显示内存使用情况的工具。它的输出包含了系统内存的不同方面,如总内存、已用内存、空闲内存等。理解这些数据之间的关系可以帮助你更好地监控和优化系统性能。

输出中各个字段的解释如下:

  • total: 系统中物理内存的总量。
  • used: 当前正在被进程和操作系统使用的内存量。这包括了正在使用的内存以及已分配但当前未使用的内存。
  • free: 未被分配的内存。这是可以分配给新进程或操作系统使用的内存。
  • shared: 不同进程间共享的内存量。这通常包括共享库或进程间通信所用的内存。
  • buff:块设备的读写缓冲区,更靠近存储设备,或者直接就是disk的缓冲区
  • cached:page cache的内存, 文件系统的cache,是memory的缓冲区。
  • available: 估算的可用内存量,包含缓冲和缓存的空间。因为如果需要这2部分内存可以被释放供新应用程序或进程使用。

这些数据之间的关系如下:

  • 物理内存的总量(total) = 已用内存(used) + 空闲内存(free) + 缓存/缓冲区内存(buff/cache)
  • 系统实际的可用内存(available) = 空闲内存(free) + 缓存/缓冲区内存(buff/cache
  • 交换空间的总量(Swap: total) = 已用交换空间(used) + 空闲交换空间(free)

注意:物理内存的总量不需要加上shared的空间,shared 字段表示被多个进程共享的内存量。已经包含在 used 和 buff/cache 中,因此不需要单独加上 shared 的值来计算总的物理内存。

从上面的输出可以看出,你会发现系统有大约 8 GB 的 RAM,其中 1.1 GB 已经被使用了,46 MB 用于共享内存,2.7 GB 用于存储缓冲区和缓存,可以空间是6.3GB。

free 命令显示的数据来自“ /proc/meminfo”文件,这是 Linux 中的一种特殊文件,提供有关系统内存的使用情况和统计信息。

在这些内存的概念中,有2个概念非常容易弄混——Buffers和Cache,很多人总是将它们当成一个东西来看待,这是一种误区。

下面我们通过两个实验来说明。

Buffers 实验

首先,打开终端清除缓存以获得更准确的测试结果。可以使用以下命令:

$ free -mh
$ echo 3 > /proc/sys/vm/drop_caches
$ free -mh

命令“ echo 3 > /proc/sys/vm/drop_caches”用于清除Linux内核页面缓存中的缓存数据。其中的“ 3”表示同时清除页面缓存和slab缓存。

然后,在另一个终端运行“ vmstat 2”命令,每隔2s显示与虚拟内存相关的统计数据。

上图中,大家只需要关注“ buff”这个表示缓冲区的列,以及“ cache”这个表示缓存的列,单位都是KB。

接着,再启动一个窗口使用dd 命令

$ dd if=/dev/sda3 of=/dev/null bs=100M count=500

再切换到运行“ vmstat 2”命令的窗口,观察“ buff”列和“ cache”列的变化,您会注意到,在使用 dd 命令读取磁盘时,缓冲区buffer和缓存cache的大小都会增加,但缓冲区buffer的增长速度明显更快。

Cache 实验

同样,实验前,使用以下命令清除文件系统缓存:

$ free -mh
$ echo 3 > /proc/sys/vm/drop_caches
$ free -mh

开个新终端窗口执行vmstat便于观察“ buff”和“ cache”的变化

再开个窗口运行以下命令:

$ dd if=/dev/zero of=testfile bs=100M count=500

现在,立即切换回之前运行“ vmstat 2”命令的终端窗口,观察“ buff”列和“ cache”列的变化,“ cache”列的值一直在增加,而“ buff”列的值基本不变。

这两个实验的输出结果证明了:当从磁盘读取时,数据会存储在缓冲区Buffer中,而读取文件则会导致数据存储在缓存Cache中。

简单来说,你可以理解缓冲区Buffer是用来缓存正在读取或写入到磁盘的数据。而缓存Cache是用来缓存正在读取或写入到文件的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不同路径 II[中等]

优质博文:IT-BLOG-CN 一、题目 一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为Start)。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为Finish)。 现在考虑网格中有…

@[TOC](letcode 分类练习 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度)

letcode 分类练习 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度 226.翻转二叉树101. 对称二叉树104.二叉树的最大深度111.二叉树的最小深度 226.翻转二叉树 利用自底向上的遍历交换左子树和右子树 class Solution { public:TreeNode* invertTr…

后端Web之数据库(以MySQL为例)

目录 1.概述 2.MySQL 3.DDL 4.DML 5.DQL 1.概述 对于我们自己写的一些小功能,数据一般存储在文件中,比如XML文件。而在实际项目中,数据都是存放在数据库中的。数据库(DataBase )是一个存储数据的集合&#xff0c…

双剑合璧,网络无敌!Windows Server 2012 R2双网卡绑定实战教程

文章目录 双剑合璧,网络无敌!Windows Server 2012 R2双网卡绑定实战教程1 背景信息2 配置步骤2.1 登录服务器2.2 分别清除两块网卡的配置2.3 进入“本地服务器”界面2.4 进入“NIC组合”界面2.5 创建网卡绑定组2.6 设置新建组参数2.7 查看已创建的网卡组…

【计算机硬件蓝光光驱】

蓝光光驱(Blu-ray Disc Drive)是一种光盘驱动器,用于读取和写入蓝光光盘。蓝光光盘是一种高容量、高清晰度的光存储介质,用于存储视频、音频、数据等多种媒体内容。蓝光光驱的名称“蓝光”来源于其使用的蓝色激光光束,…

Windows 安装 及解决 tvm 无法打开 源 文件 “dmlc/logging.h“

如果你在编译 TVM 时遇到 dmlc/logging.h 文件缺失的问题,很可能是因为在克隆 TVM 仓库时没有包含其子模块,而这些子模块(如 dmlc-core)是通过 Git 管理的。解决步骤 安装 Git: 如果你还没有安装 Git,需要先…

ES6学习笔记(九)——class(类)

1. 封装 传统面向对象的编程序语言都是【类】的概念,对象都是由类创建出来,然而早期 JavaScript 中是没有类的,面向对象大多都是基于构造函数和原型实现的,但是 ECMAScript 6 规范开始增加了【类】相关的语法,使得 Ja…

虚幻5|AI视力系统,听力系统,预测系统(1)视力系统

继宠物伴随系统初步篇后续 虚幻5|AI巡逻宠物伴随及定点巡逻—初步篇-CSDN博客 一,听力系统 1.打开宠物ai的角色蓝图 2.选中ai感知组件 右侧细节,找到ai感知,添加感知配置,我们需要的是ai视力配置 3.选中左侧创建的ai感知组件&…

CLRerNet推理详解及部署实现(上)

目录 前言1. 概述2. 环境配置3. Demo测试4. ONNX导出初探5. ONNX导出优化6. ONNX导出总结结语下载链接参考 前言 继续我们的车道线检测任务,之前我们分享了基于 anchor 的 LaneATT 模型以及 CVPR2022 的 SOTA 方案 CLRNet,这里我们分享 WACV2024 中的一个…

如何在Linux系统上使用ONLYOFFICE文档编辑PDF文件

​对Linux用户来说,得益于各类免费PDF编辑器,编辑PDF文件从来都不是无解难题。 如果您需要为PDF文件添加注释、留下批注、编辑已有文本或添加新文本框、插入图片或形状、删除某些页面或永久删除页面,您始终可以找到合适的应用,轻…

有关JavaScript的函数定义和函数的两种声明方式

1.函数 函数是一段可重复执行的代码块,它可以接收参数,并返回结果。在JavaScript中,函数用于封装可重用的代码,提高代码的可读性和可维护性。 1.1 函数的定义 函数的定义包括以下几个部分: 函数名称:用…

Hive3:表性能优化-分区与分桶

一、分区 1、概念 我们知道,一个Hive表,对应的HDFS是一个文件夹。 那么,当数据非常多的时候,存放在一个文件夹中,后期进行查询操作会影响性能。 所以,Hive引入了分区管理的方式。 本质就是,在…

Datawhale X 魔搭 AI夏令营-AIGC方向-LoRA学习笔记

LoRA(Low-Rank Adaptation)是一种用于优化大规模预训练模型的微调技术,特别适用于在资源有限的情况下,对模型进行高效且低成本的微调。LoRA的核心思想是通过低秩分解方法,仅微调模型的少数参数,从而显著减少…

关于图像亮度相关的调试总结

1、问题背景 关于图像亮度的调试,是整个ISP中非常重要的一块,它决定了图像整体的亮度、对比度、细节、以及噪声,对人眼有非常直观的感受, 之前也就具体问题,整理过几篇图像亮度模块相关的调试总结: 关于图…

标题中有多少个字符(c语言)

1.//描述 //凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? //注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字 符数时,空格和换行符不计算在内。 //输入描述: //输入文件只有一…

【12】KMP和Manacher算法

目录 一.KMP算法解决的问题 二.Manacher算法解决的问题 基本概念 优化 一.KMP算法解决的问题 暴力求解复杂度O(N*M) next数组:next[i]表示arr[0...i-1]的前缀和后缀的最长公共长度。 Y位置失败,将前缀和后缀完全匹配,将前缀的部分和后缀对…

软件测试---接口自动化

一、pythonrequests模块 (1)requests全局观 安装:pip install requests 1.发送请求 ①requests.get() 发送get请求 ②requests.post() 发送post请求 data和json的区别:取绝于你需要传递的参数的类型。 files:文件上…

大学成长之路:如何从烧锅炉的逆袭成为FPGA大厂高管

如何从烧锅炉的逆袭成为FPGA大厂Sales Director 在即将到来的开学季,很多学子从高中生成为一个大学生,走入新的征程。大学生涯是人生的一个非常重要的阶段,如何度过大学4年的时光,并学有所成,是很多大学新生和家长思考…

Spring IoCDI(下)—DI的尾声

我们之前学习了控制反转IoC,接下来就开始学习依赖注入DI的细节。 依赖注入是一个过程,是指IoC容器在创建Bean时,去提供运行时所依赖的资源,而资源指的就是对象。我们使用 Autowired 注解,完成依赖注入的操作。简单来说…

AMBA-CHI协议详解(六)

AMBA-CHI协议详解(一) AMBA-CHI协议详解(二) AMBA-CHI协议详解(三) AMBA-CHI协议详解(四) AMBA-CHI协议详解(五) AMBA-CHI协议详解(六&#xff09…