首页 游戏 软件 资讯 排行榜 专题
首页
科技数码
Linux磁盘I/O性能优化:从调度到缓存的核心设计解析

Linux磁盘I/O性能优化:从调度到缓存的核心设计解析

热心网友
99
转载
2025-12-02

Linux磁盘的I/O调度是系统性能调优的一个重要组成部分,其核心目标在于根据存储设备的物理特性,合理的去规划I/O请求的顺序,减少无效操作导致性能问题。

0.引言

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

在前一篇文章中我们讲解了文件I/O与流的概念,帮助大家理解了上层的抽象设计。本文将深入更为底层的实现机制,探讨Linux如何高效访问磁盘的两大关键技术:磁盘调度算法和Page Cache。我们将分别从两个维度进行分析:一是I/O调度策略的优化,二是Page Cache的如何减少I/O操作。

1.磁盘I/O调度:减少寻道时间和延迟

Linux磁盘的I/O调度是系统性能调优的一个重要组成部分,其核心目标在于根据存储设备的物理特性,合理的去规划I/O请求的顺序,减少无效操作导致性能问题。因为调度的选择涉及设备的物理特性,所以我们来看常见的两种物理存储设备,然后再来去介绍不同调度算法:

1)机械硬盘(HDD):机械硬盘是传统的硬盘,其依赖于磁头移动和盘片旋转来实现读写,其寻道时间(磁头移动)和旋转延迟(盘片旋转)是其主要耗时,所以随机I/O性能远低于顺序I/O,这就要求调度算法要通过合并、排序等方式来减少磁头的移动。

2)固态硬盘(SSD):固态硬盘是由控制单元和存储单元组成,没有机械部件,所以寻道时间几乎可以忽略不计,也就是说它有着很好的随机I/O性能,但其存在擦写次数限制,和写入放大。所以SSD的调度需要考虑合并小写入,减少CPU计算调度。

1.1 调度算法介绍(基于Linux 5.10)

调度算法可以分为单队列(全局单一队列)和多队列(多CPU/硬件队列独立),因为现代主要使用多队列模式,所以我们主要介绍多队列的调度算法,先来看整体的调度结构:

图片

整体多队列调度的初始化函数如下,后面到具体算法因其实现涉及代码比较多,我们会主要描述思路。

void elevator_init_mq(struct request_queue *q){ struct elevator_type *e; // 指向选中的I/O调度器类型结构体 int err; // 函数返回值,用于检查初始化是否成功 // 检查当前队列是否支持I/O调度器(如部分设备可能强制使用noop调度器) // 若不支持,则直接返回,不进行调度器初始化 if (!elv_support_iosched(q)) return; // 警告:若队列已注册(已完成初始化),则触发BUG_ON警告(仅调试用) // 确保调度器初始化仅在队列未注册时执行 WARN_ON_ONCE(blk_queue_registered(q)); // 若队列已关联调度器(非空),则无需重复初始化,直接返回 if (unlikely(q->elevator)) return; // 根据队列需求选择合适的I/O调度器 if (!q->required_elevator_features) { // 若队列无特殊功能需求,选择默认调度器(由内核配置或设备类型决定) e = elevator_get_default(q); } else { // 若队列有特殊功能需求(如支持层级调度、延迟控制等), // 则根据需求匹配具备对应功能的调度器 e = elevator_get_by_features(q); } // 若未找到合适的调度器(e为NULL),则退出初始化 if (!e) return; // 冻结队列:阻止新的I/O请求进入队列,确保初始化期间队列状态稳定 blk_mq_freeze_queue(q); // 暂停队列:等待队列中已有请求处理完成,避免初始化干扰正在进行的I/O blk_mq_quiesce_queue(q); // 初始化调度器:将选中的调度器(e)与队列(q)绑定,创建调度器上下文 // 该函数会为多队列的每个软件队列初始化调度器实例(如MQ-Deadline的每个队列私有数据) err = blk_mq_init_sched(q, e); // 恢复队列运行:允许队列重新接收并处理I/O请求 blk_mq_unquiesce_queue(q); // 解冻队列:完全恢复队列的正常操作 blk_mq_unfreeze_queue(q); // 检查调度器初始化是否失败 if (err) { // 打印警告信息,提示当前调度器初始化失败,将回退到"none"调度器(noop) pr_warn("\"%s\" elevator initialization failed, " "falling back to \"none\"\n", e->elevator_name); // 释放之前获取的调度器引用,避免资源泄漏 elevator_put(e); }}

1.1.1 BFQ调度

BFQ(Budget Fair Queueing)其含义为公平对待每个进程,其主要逻辑可以见下图,其中实线代表IO请求的方向,通过add方法添加到IO队列,然后使用调度器调度,由dispatch方法进行下发处理。

虚线箭头budget表示每个进程被分配的访问的最大扇区数目,其每访问一个扇区就会进行减少,一旦消耗完就会选择其他进程执行IO,当前用完的进程会被重新估算下一次的budget数量。

然后再来看Next active application selection,这是所有IO调度器的核心功能,本质就是选择出一个下一个有访问磁盘权力的队列,BFQ是从符合条件的队列中进行选择(如budget没用完的,等待时间较长的)。

图片图片

1.1.2 mq-deadLine调度

其整体逻辑如下:通过两个结构进行管理,一个用来记录磁盘位置排序(为了方便连续读取),一个按照时间排序(为了deadline优先),其为每个CPU配置一个队列,减少锁竞争,同时采用上述的双重排序策略来提高性能。

图片图片

1.1.3 kyber调度

其整体逻辑如下:在初始化阶段时创建四类请求队列(读、写、discard、other),初始化 Token 池(控制每种请求的最大并发数),并设置延迟目标(读请求优先低延迟,写请求平衡吞吐);应用请求先进入暂存队列,完成请求合并(减少 I/O 次数)和类型分类,再分别进入对应类型的分发队列;核心调度逻辑:

1)调度器按固定顺序轮询四类队列,避免某类请求长期被忽略;

2)通过Token 机制控制并发:每种请求需消耗 Token 才能被处理,Token 耗尽则队列挂起,直到请求完成释放 Token;

3)优先保障有 Token 的队列,避免无限制并发导致设备拥堵;

4)通过定期统计实际延迟来动态适应设备负载。

图片图片

1.1.4 总结比较

我们从调度器的优劣以及适用场景进行比较,同时会描述我们修改调度器的方式。

切换调度器方式如下,中间路径需要根据实际存储类型变化:

sudo echo kyber > /sys/block/hda/queue/scheduler

2.Page Cache

Page Cache是Linux用于缓存数据的核心机制,通过将磁盘数据暂存到内存中,减少磁盘IO次数,我们将从Page Cache的查看、缓存管理、读写交互以及页面回收四个部分进行介绍。

2.1 如何查看Page Cache

可以使用vmstat -n 1查看读写,其中主要信息就是cache字段,另外更为详细的信息可以使用cat/proc/meminfo查看,其部分内容如图:

图片图片

2.2 缓存管理

缓存管理主要的三个结构就是inode、page和address_space,其代表的含义和核心关联如下:

1)inode表示文件元数据,并通过i_mapping关联对应的address_space。

2)address_space是连接元数据inode和物理页page的核心,每个address_space对应一个打开的文件,根据index来找到对应页,并通过统一抽象的operations来适配不同文件系统。

3)page是物理页结构,描述实际数据信息。

图片图片

2.3 缓存交互

缓存交互可以分为读写操作,先来看读:

1)读操作,先检查缓存再实际读取,其流程图和交互图示如下:

图片图片

图片图片

2)写操作,先写缓存然后标记为脏页,异步回写,主要流程如下:

图片图片

2.4 缓存淘汰

缓存淘汰逻辑较为简单,使用的是LRU算法进行Page Cahce中页的淘汰。

3.总结

本文从两个角度来描述了IO高效的实现方式,一个是合理调度磁盘,一个是减少磁盘访问。了解了实现磁盘高效IO的思想,下一篇将会讲解特殊的优化,零拷贝技术。

来源:https://www.51cto.com/article/826903.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

wsl安装OpenClaw
AI
wsl安装OpenClaw

参考指南与学习资料 若您希望在本地快速搭建并部署一个个人智能助手,OpenClaw 框架是一个理想的入门选择。为了帮助开发者更高效地上手,社区中已有丰富的学习资源与讨论可供参考,主要包括:OpenClaw 新手入门教程、核心命令行工具使用指南(openclaw -h 查看帮助)、配置文件的参数详解,

热心网友
04.02
openclaw 究极离谱的坑
AI
openclaw 究极离谱的坑

1 openclaw 工具权限报错解决方案:无法使用 exec read write webfetch 等工具的修复方法 当您在配置 openclaw 时遇到工具权限报错,提示缺少 exec、read、write、webfetch 等关键工具的使用权限,通常无需深入排查复杂的系统环境。此问题在多数

热心网友
04.02
OpenClaw 安装教程(Linux)
AI
OpenClaw 安装教程(Linux)

本次部署指南的核心目标非常明确:在 Linux 环境中,无论是云服务器还是本地物理机,我们都需要完整地完成 OpenClaw 智能体框架的安装与部署,并通过基础的健康检查与功能验证,确保整个系统能够成功启动并稳定运行。 一、环境要求 在开始动手安装之前,我们首先需要确认系统满足所有的基础运行环境要求

热心网友
04.02
【openclaw】linux安装openclaw排坑
AI
【openclaw】linux安装openclaw排坑

场景一:npm install 安装失败问题详解与解决方案 在进行前端开发或是安装Node js工具时,你是否经常遇到令人困扰的“npm install failed”报错?这个问题通常表现为命令行输出一串红色错误信息,最终停止在安装失败的提示上。深入分析这些报错日志,你会发现一个关键提示:缺少C+

热心网友
04.02
笔记本厂商 Framework 赞助 KDE,协助改善 Linux 桌面体验
科技数码
笔记本厂商 Framework 赞助 KDE,协助改善 Linux 桌面体验

Framework笔记本携手KDE社区:共同推进Linux桌面深度优化方案 近期,模块化笔记本领域的领导者Framework公司宣布与全球知名的开源社区KDE达成战略合作,正式成为KDE的重要赞助伙伴。这一举措不仅象征着Framework在推动开源生态发展上迈出关键一步,也标志着硬件创新厂商与顶级L

热心网友
04.02

最新APP

火柴人传奇
火柴人传奇
动作冒险 04-01
街球艺术
街球艺术
体育竞技 04-01
飞行员模拟
飞行员模拟
休闲益智 04-01
史莱姆农场
史莱姆农场
休闲益智 04-01
绝区零
绝区零
角色扮演 04-01

热门推荐

《全面战争:中世纪3》:只怀旧做不成好游戏经典需要现代化
游戏资讯
《全面战争:中世纪3》:只怀旧做不成好游戏经典需要现代化

《全面战争:中世纪3》:经典延续,如何平衡怀旧与创新? 近期,《全面战争:中世纪3》的项目负责人帕维尔·沃伊斯坦然指出,要打造一款真正优秀的续作,绝不能仅仅依赖对前作模式的简单复刻。这一观点引人深思——尽管《中世纪2:全面战争》至今仍在策略游戏爱好者心中占据着经典地位,但开发团队此次显然决心跳出“照

热心网友
04.02
雷鸟创新AWE斩获艾普兰创新奖 蝙蝠侠限定款国内首秀
科技数码
雷鸟创新AWE斩获艾普兰创新奖 蝙蝠侠限定款国内首秀

雷鸟X3 Pro斩获AWE艾普兰创新大奖,开启全民AR生活新篇章 在上海新国际博览中心隆重揭幕的2026年中国家电及消费电子博览会(AWE)上,前沿AI科技与未来生活愿景激情碰撞。全球消费级AR领导品牌雷鸟创新,以其里程碑式的表现,定义了行业发展的新方向。 通过“顶尖硬件科技+顶级文化IP”的双轨战

热心网友
04.02
AWE探展MOVA:31款创新产品集中亮相 重新定义智慧生活新体验
科技数码
AWE探展MOVA:31款创新产品集中亮相 重新定义智慧生活新体验

借力AWE2026“一展双区”,MOVA双区协同、震撼登场 备受瞩目的科技盛会——2026年中国家电及消费电子博览会(AWE),于3月12日至15日在上海盛大举办。本届AWE展会首次创新采用“一展双区”的展览模式,主会场位于上海新国际博览中心,分会场则设于上海东方枢纽国际商务合作区,两大展区高效联动

热心网友
04.02
DNF2026冰结技能数据是怎样的-2026DNF冰结技能数据详情
游戏攻略
DNF2026冰结技能数据是怎样的-2026DNF冰结技能数据详情

冰结师技能全解析 踏入2026年,《地下城与勇士》中的冰结师职业,其技能体系已构建得更为成熟与强大。无论是在副本中高效清理海量怪物,还是在决斗场与高手玩家周旋,这个职业都能凭借其独特的冰霜艺术掌控战局。刷图时,酷寒的范围法术可瞬间清屏;而在PVP竞技中,一套将冻结控制与瞬间爆发完美衔接的连招,往往让

热心网友
04.02
iPhone 18 Pro设计挤牙膏了 继续用前代模具
科技数码
iPhone 18 Pro设计挤牙膏了 继续用前代模具

iPhone 18 Pro系列模具不变,屏幕形态将与iPhone 17 Pro保持一致 备受期待的屏下Face ID组件小型化设计与灵动岛区域缩窄方案,预计将被推迟至后续迭代机型中正式应用。 近期,关于iPhone 18 Pro系列的技术传闻持续引发行业关注,尤其在显示与解锁设计领域传言甚多。多方消

热心网友
04.02