【Linux系统】Ubuntu 缓冲区机制

在Ubuntu中,和其他操作系统有个不一样的机制:缓冲区。这篇文章是对与缓冲区的详细介绍。

在 Ubuntu 中(以及其他基于 Linux 的操作系统),缓冲区(Buffer)是内核用于优化 I/O 操作的重要机制。它通过在内存中暂存数据,减少对磁盘等慢速设备的直接访问,从而提升系统性能。缓冲区机制主要涉及 缓存(Cache)缓冲(Buffer) 两个核心概念。以下是 Ubuntu 缓冲区机制的详细介绍,包括其原理、分类和工作机制。

缓冲与缓存的区别

在 Linux 系统中,缓冲区和缓存是两个相关但不同的概念:

  1. 缓冲(Buffer)
    缓冲是指内核用于 写入操作 的数据暂存区。当数据从内存写入到磁盘或其他外设时,系统会先将数据存储到缓冲区中,然后批量写入到磁盘,以减少磁盘 I/O 操作的频率。

这么做可以优化写入性能。减少磁盘的物理写入次数,延长磁盘寿命。
缓冲主要用于 写操作。数据通常是即将写入磁盘或外设的数据。

  1. 缓存(Cache)
    缓存是指内核用于 读取操作 的数据暂存区。当数据从磁盘读取到内存时,系统会将数据存储到缓存中,以便后续访问时可以直接从内存读取,而不必再次访问磁盘。

这么做能够提高读取性能。减少磁盘的读取次数,提高系统响应速度。
缓存主要用于 读操作。数据通常是最近读取的数据。

特性缓冲(Buffer)缓存(Cache)
主要用途写操作优化读操作优化
数据来源用户空间即将写入磁盘的数据从磁盘读取到内存的数据
目标设备磁盘或其他外设内存
生命周期数据写入磁盘后清除数据可能会保留一段时间,直到被替换
Ubuntu 缓冲区的工作机制

Ubuntu 和其他 Linux 系统的缓冲区机制由内核管理,主要通过以下机制实现:

页缓存(Page Cache)
页缓存是 Linux 文件系统中的核心组件,用于在内存中缓存磁盘上的文件数据。当文件被读取时,数据会被加载到页缓存中。如果后续访问相同的数据,则直接从页缓存中读取,而无需再次访问磁盘。

页缓存的工作流程:

  1. 用户请求读取文件。
  2. 内核检查页缓存中是否已有该文件的数据。
    • 如果存在,直接从页缓存读取(称为 缓存命中)。
    • 如果不存在,从磁盘加载文件数据到页缓存,然后返回给用户(称为 缓存未命中)。
  3. 页缓存中的数据会根据内存压力和访问频率被替换。

页缓存的优点:① 提升文件读取性能。② 减少磁盘读取次数。

写缓冲(Write Buffering)
写缓冲用于暂存用户写入的数据。数据先写入到缓冲区中,稍后再批量写入磁盘(称为 “延迟写入”)。写缓冲通过减少频繁的小写操作来优化磁盘性能。

写缓冲的工作流程:

  1. 用户请求写入文件。
  2. 数据首先写入到内核缓冲区(内存中)。
  3. 内核根据调度策略(如延迟写入或同步写入),将缓冲区数据刷入磁盘。
    • 延迟写入:数据在缓冲区中保留一段时间,等待批量写入磁盘。
    • 同步写入:立即将缓冲区中的数据写入磁盘。

写缓冲的优点:① 减少磁盘写入次数,提高写入性能。② 延长磁盘寿命。

缓冲区机制的关键技术
  1. 内存管理中的缓冲与缓存
  • Linux 内存分为 内核空间用户空间,缓冲区和缓存主要由内核空间管理。
  • 缓冲区和缓存动态占用内存,内核会根据内存压力调整缓冲区和缓存的大小。
  1. 脏页(Dirty Pages)
  • 当缓存中的数据被修改而尚未写入磁盘时,这些数据被称为 脏页
  • 内核通过 脏页回写机制 将脏页中的数据写入磁盘:
    • pdflush 线程(旧版本 Linux)或 writeback 子系统管理脏页回写。
    • 回写触发条件:
      • 缓冲区达到一定比例。
      • 超过预设的延迟写入时间。
  1. 文件系统缓冲区
  • 文件系统(如 ext4xfs)在底层实现了块缓冲区,用于管理对磁盘块的访问。
  • 块缓冲区和页缓存协作工作,进一步优化 I/O 性能。
查看和管理缓冲区

在 Ubuntu 中,可以通过以下工具查看和管理缓冲区的使用情况:
1. 查看内存中的缓冲和缓存
使用 free 命令:

free -h

输出:

total        used        free      shared   buff/cache   available
Mem:         7.8G        3.2G       2.1G       200M        2.5G         4.0G
Swap:        2.0G          0B       2.0G
  • buff/cache:表示缓冲区和缓存占用的内存。
  • available:表示可用内存,包括未使用的内存和可回收的缓冲区/缓存。

2. 查看页缓存和脏页
使用 vmstat 命令:

vmstat -a

输出:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa1  0      0  2156M   105M  2432M    0    0    10    15   45   60  2  1 97  0
  • buff:缓冲区使用的内存。
  • cache:缓存使用的内存。

3. 手动释放缓冲区和缓存
在某些情况下(如内存压力过大),可以手动清理缓冲区和缓存:

sudo sync          # 同步数据到磁盘
sudo echo 3 > /proc/sys/vm/drop_caches
  • /proc/sys/vm/drop_caches 的值:
    • 1:释放页缓存。
    • 2:释放 目录树inode 缓存
    • 3:同时释放 页缓存目录树/inode 缓存
缓冲区的性能优化

1. 文件系统优化

  • 使用支持日志功能的文件系统(如 ext4xfs)提高写入可靠性。
  • 调整文件系统挂载选项:
    • noatime:禁用访问时间更新,减少 I/O。
    • data=writeback:加速写入操作。

2. 调整内核参数
通过调整内核参数优化缓冲区性能:

sudo sysctl -w vm.dirty_background_ratio=10    # 设置后台回写的阈值
sudo sysctl -w vm.dirty_ratio=20               # 设置脏页占内存的最大比例
sudo sysctl -w vm.dirty_writeback_centisecs=500 # 设置脏页回写间隔

3. 使用异步 I/O
在高性能场景中,使用异步 I/O(如 aio)减少阻塞,提高 I/O 并发能力。

缓冲区中的常见问题与解决方案

缓冲区占用内存过多:
缓冲区和缓存占用了大量内存,导致用户态程序可用内存减少。

  • 解决方案:
    • 手动释放缓存(echo 3 > /proc/sys/vm/drop_caches)。
    • 调整内核缓冲区参数(如 vm.dirty_ratio)。

缓冲区写入延迟:
延迟写入机制导致数据未及时同步到磁盘,可能引发数据丢失。

  • 解决方案:
    • 使用同步写入(fsync 或挂载 sync 选项)。
    • 增加 vm.dirty_background_ratio 的值,提前触发回写。

综上。Ubuntu 的缓冲区机制(缓冲和缓存)在 Linux 内核中发挥了重要作用,为系统提供了优化磁盘 I/O 性能的手段:

  1. 缓冲区(Buffer):优化写入操作。
  2. 缓存(Cache):优化读取操作。
  3. 动态管理:缓冲区和缓存根据实际内存使用情况动态调整,提升系统性能。

理解缓冲区的价值:通过了解缓冲区的工作原理、配置参数和性能优化方法,可以更好地管理 Ubuntu 系统的内存和存储资源。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

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

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

相关文章

通俗易懂理解:网络安全恶意节点的检测与哨兵节点的激活【论文+代码】

以下资料参考来自本文末尾的参考资料与代码: 在网络安全中,恶意节点检测和哨兵节点激活是确保网络稳定性、可靠性和安全性的关键技术,尤其是在分布式系统、物联网 (IoT)、区块链网络等环境中。下面将详细介绍这两个概念及其应用。 一、恶意…

python作业

1.D 2.B 3.D 4.C 5.B 6.D 7.D 8.B 9.D 10. A 11.D 12.C 13.√ 14.√ 16.√ 17.√ 18.None 19.([1,3],[2]) 20. 列表思维导图

Redis(上)

Redis 基础 什么是 Redis? Redis (REmote DIctionary Server)是一个基于 C 语言开发的开源 NoSQL 数据库(BSD 许可)。与传统数据库不同的是,Redis 的数据是保存在内存中的(内存数据库&#xf…

LabVIEW气缸摩擦力测试系统

基于LabVIEW的气缸摩擦力测试系统实现了气缸在不同工作状态下摩擦力的快速、准确测试。系统由硬件平台和软件两大部分组成,具有高自动化、精确测量和用户友好等特点,可广泛应用于精密机械和自动化领域。 ​ 项目背景: 气缸作为舵机关键部件…

CentOS7.X 安装RustDesk自建服务器实现远程桌面控制

参照文章CentOS安装RustDesk自建服务器中间总有几个位置出错,经实践做个记录防止遗忘 一 环境&工具准备 1.1 阿里云轻量服务器、Centos7系统、目前最高1.1.11版本rustdesk-server-linux-amd64.zip 1.2 阿里云轻量服务器–安全组–开放端口:TCP(21…

工具篇:IDEA VFS 损害启动报错 com.intellij.util.io.CorruptedException 处理

文章目录 前言一、 idea 的 VFS是什么?二、解决方式:2.1 退出Idea 然后重新打开:2.2 手动清除Idea 缓存,让Idea 重新建立缓存:2.2.1 打开 Invalidate Caches / Restart 对话框:2.2.2 勾选要清除的缓存: 总结…

2.linux中调度kettle

一.准备转换,等会在linux中用 1.添加excel输入组件,并添加对应的文件 2.添加列拆分为多行组件 3.添加文本文件输出组件 4.保存转换 二.linux安装java 1.把jdk-8u144-linux-x64.tar.gz上传到linux的/lx目录下 2. 解压jdk包,然后配置环境变量…

第四节、电机定角度转动【51单片机-TB6600驱动器-步进电机教程】

摘要:本节介绍用电机转动角度计算步骤,从而控制步进电机转角 一、 计算过程 1.1 驱动器接收一个脉冲后,步进电机转动一步,根据驱动器设置的细分值 计算一个脉冲对应电机转动的角度step_x s t e p x s t e p X … … ① step_{x…

如何终身使用 100% 免费的服务器

作为开发人员,我们需要在云服务上运行和托管后端。有许多 BaaS(后端即服务)可用,但它们有一些限制。 如果我说我已经免费使用基于 Linux 的服务器超过 4-5 年了,那会怎样?是的,你没听错。我正在使用这台安装了 Ubuntu 20、24 GB RAM、4 个 CPU 和 200 GB 存储空间的 Lin…

【计算机组成原理】期末复习题库

5.主存储器和CPU之间增加cache的目的是 。 A.解决CPU和主存之间的速度匹配问题 B.扩大主存储器的容量 C.扩大CPU中通用寄存器的数量 D.既扩大主存容量又扩大CPU中通用寄存器的数量 在计算机系统中,CPU的速…

SAP中Smartforms 翻译越南语

点击打印预览 打印预览中确实是越南语 转出成PDF 成了乱码 SPAD中查询LP01其实是简体中文 换成LP02试试 显示看上去正常的 SPAD中的LP02 SU3可以设置自己的默认打印参数 查查Smartforms中的字体样式 是宋体,看上去不用为了越南文刻意改字体样式成TIMES 看这篇文章…

26.删除有序数组中的重复项 python

删除有序数组中的重复项 题目题目描述示例 1:示例 2:提示:题目链接 题解解题思路python实现代码解释提交结果 题目 题目描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现…

R语言 | 峰峦图 / 山脊图

目的:为展示不同数据分布的差异。 1. ggplot2 实现 # 准备数据 datmtcars[, c("mpg", "cyl")] colnames(dat)c("value", "type") head(dat) # value type #Mazda RX4 21.0 6 #Mazda RX4 Wag …

四川创新志成健康管理有限公司

四川创新志成健康管理有限公司 成都市青羊区广富路168号 公司简介 四川创新志成健康管理有限公司成立于2021年,公司专注体外诊断领域,致力为医学实验室、生产厂家、 经销商提供专业的学术、技术增值服务,涵盖免疫、生化、输血等检测领域&a…

系统级 I/O

Unix I/O **了解 Unix I/O 将帮助你理解其他的系统概念。**I/O 是系统操作不可或缺的一部分。我们经常遇到 I/O 和其他系统概念之间的循环依赖。例如,I/O 在进程的创建和执行中扮演着关键的角色。反过来,进程创建又在不同进程间的文件共享中扮演着关键角…

Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索

在之前的文章 “Elasticsearch 开放推理 API 新增阿里云 AI 搜索支持”,它详细描述了如何使用 Elastic inference API 来针对阿里的密集向量模型,稀疏向量模型, 重新排名及 completion 进行展示。在那篇文章里,它使用了很多的英文…

基于公网的无线全双工内部通话系统在演出行业可以用吗?

文旅名城再出发,更待“烟花”绽繁花 2024年4月将开业的扬州首个大型沉浸式剧场-《运河密城》 以运河为原点 追随河的记忆 从春秋时代的吴王夫差 到贯通南北的大运河成形 穿梭时空 探索扬州的前世今生 「运河第一锹」古运河旁 有一处新地标正在悄然兴起 如…

POSTGRESQL跟ORACLE语法区别和相同之处

跟ORACLE语法区别之处 1. Update和delete语法区别 Pg 和MySQL Update和delete的时候表名不能加别名 2. 插入数字类型不一样 ORACLE 对number类型的数据可以用’’ 字符串标记插入,但是PG不行,必须要进行正确的数据类型 3. SEQ使用不同 ORACEL的SEQ…

C++编程物联网:舵机VS步进电机

舵机和步进电机都是常见的电机类型,它们在自动化和机器人控制中有着不同的应用场景。两者的主要区别在于控制方式、运动精度、适用范围等方面。下面详细介绍它们的作用、应用场景和主要区别。 1. 舵机(Servo Motor) 工作原理 舵机是一种具有反馈控制的电动机,通常由电动…

鸿翼参与撰写档案数据管理与长期保存策略基于数字中国战略的研究

​编者按:近日,由中国财富出版社有限公司出版的《档案数据管理与长期保存策略——基于数字中国战略的研究》正式发行,上海鸿翼软件技术股份有限公司董事长兼CEO龙凌云作为核心作者参与主要编写工作。 本书是在国家档案局立项科研项目“数字档…