news 2026/6/11 11:56:52

Linux内核学习轨迹第七部:块设备子系统的整体架构(第一节)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux内核学习轨迹第七部:块设备子系统的整体架构(第一节)

第七部分:块设备子系统与IO栈全解析

章节开篇

块设备子系统是Linux存储IO栈的核心枢纽,向上承接VFS虚拟文件系统、页缓存与具体文件系统,向下对接HDD/SSD/NVMe等物理存储设备的驱动程序,是用户态IO请求从业务代码落地到物理磁盘的必经之路。
线上服务的IO性能瓶颈、磁盘卡顿、数据丢失、存储故障,绝大多数根源都是对块设备子系统的底层机制、IO请求全生命周期、多队列架构、IO调度器的认知不足。本章节基于Linux 6.6 LTS内核,从架构设计、核心数据结构、源码实现、全链路流程、工程实践五个维度,完整拆解块设备子系统与Linux IO栈,同时提供可落地的性能调优、故障排查方案。

1. 块设备子系统的整体架构

1.1 块设备与字符设备的核心区别

Linux把外设分为两大基础类别,块设备与字符设备的设计目标、内核实现、访问模式有本质区别,是理解块设备子系统的基础:
特性
字符设备
块设备
访问模式
字节流顺序访问,不可随机寻址
固定大小的「块」为单位随机访问,支持任意偏移读写
最小访问单元
1字节
1个块,标准为512字节/4096字节,现代存储默认4KB逻辑块
缓存机制
无内核统一缓存,由驱动自行实现
内核统一提供页缓存、块缓存,绝大多数IO都会经过缓存优化
IO调度
无内核调度,请求直接下发驱动
内核提供IO调度器,对请求做合并、排序、优先级调度,优化硬件性能
访问入口
仅能通过/dev下的字符设备节点访问
可通过块设备节点直接访问,也可通过文件系统间接访问
典型场景
串口、键盘、终端、声卡
机械硬盘HDD、固态硬盘SSD、NVMe磁盘、RAID阵列
核心认知纠正:块设备的核心特征是支持随机寻址、按块批量访问,内核会对IO请求做合并、排序、批量处理,最大化发挥存储硬件的性能,这是与字符设备最本质的差异。

1.2 Linux IO栈的完整分层架构

用户态一次文件写操作,从业务代码到物理磁盘,会经过完整的8层IO栈,块设备子系统是承上启下的核心枢纽,完整分层如下:
┌─────────────────────────────────────────────────────────────────┐ │ 用户态层:业务进程、glibc库、read/write/fsync系统调用、fio测试工具 │ └───────────────────────────────┬─────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ VFS虚拟文件系统层:路径解析、权限检查、文件元数据管理、通用IO逻辑 │ └───────────────────────────────┬─────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ 具体文件系统层:ext4/xfs/btrfs,实现文件逻辑块到物理块的映射 │ └───────────────────────────────┬─────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ 页缓存层Page Cache:内存缓存文件数据,预读、脏页异步回写优化 │ └───────────────────────────────┬─────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ 通用块层Block Layer:BIO请求封装、IO合并、完整性校验、块设备管理 │ └───────────────────────────────┬─────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ IO调度器层:对BIO请求排序、合并、优先级调度,优化IO访问模式 │ └───────────────────────────────┬─────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ 多队列块层blk-mq:Per-CPU软件队列、硬件队列映射、请求分发、驱动适配 │ └───────────────────────────────┬─────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ 块设备驱动层:NVMe/ahci/RAID卡驱动,把IO请求转为硬件指令下发 │ └───────────────────────────────┬─────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ 物理存储层:HDD/SSD/NVMe/RAID阵列,最终的数据存储与读写执行 │ └─────────────────────────────────────────────────────────────────┘
各层核心职责详解
  1. 用户态层:IO请求的发起端,业务进程通过glibc封装的POSIX接口发起IO,也是IO性能压测、问题排查的入口;
  2. VFS层:统一所有文件系统的操作接口,完成路径解析、权限检查、文件句柄管理,屏蔽底层文件系统与块设备的差异;
  3. 文件系统层:实现文件的逻辑结构,把文件的逻辑偏移转换为磁盘物理块号,把用户IO请求转为对磁盘块的读写请求;
  4. 页缓存层:用内存缓存文件的磁盘块,读操作优先命中缓存,写操作先写入缓存标记为脏页,由内核回写线程异步落盘,是Linux IO性能的核心优化点;
  5. 通用块层:块设备子系统的入口,把文件系统的IO请求封装为标准BIO(Block IO)结构体,完成IO合并、完整性校验、cgroup IO限流,是IO请求的标准化层;
  6. IO调度器层:对BIO请求做排序、合并、优先级调度,减少机械硬盘的磁头寻道开销,同时保证IO的公平性与低延迟;
  7. 多队列块层blk-mq:现代多核CPU与多队列NVMe设备的核心适配层,通过Per-CPU软件队列消除全局锁竞争,映射到存储设备的硬件队列,实现全链路并行IO处理;
  8. 块设备驱动层:存储硬件的适配层,把内核的BIO请求转为硬件可识别的指令,下发给物理设备,处理硬件中断完成IO闭环;
  9. 物理存储层:IO请求的最终执行端,完成数据的物理读写与持久化。

1.3 块设备子系统的核心设计目标

  1. 统一抽象:为所有类型的块设备提供标准抽象接口,向上对文件系统屏蔽硬件差异,向下为驱动提供标准化适配框架;
  2. 极致性能:通过IO合并、排序、多队列并行、缓存机制,最大化存储设备的IO吞吐量,降低IO延迟;
  3. 高可扩展性:支持热插拔、驱动动态加载,兼容新存储硬件(NVMe、持久化内存PMEM),无需修改内核核心代码;
  4. 企业级特性:支持设备映射、多路径冗余、快照、RAID、热备、配额等企业级存储能力;
  5. 可观测性:提供完善的IO统计、追踪、调试接口,支撑IO性能瓶颈排查与故障定位。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 11:52:19

如何在Windows 11 24H2 LTSC上轻松恢复微软商店:完整指南

如何在Windows 11 24H2 LTSC上轻松恢复微软商店:完整指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 还在为Windows 11 24H2 LTSC系统…

作者头像 李华
网站建设 2026/6/11 11:51:56

别再盲打了!手把手教你给《饥荒》所有生物加上实时血条(含隐藏怪物显示)

告别盲打时代:《饥荒》全生物血条显示Mod实战指南在《饥荒》的世界里生存已经足够艰难——你需要对抗饥饿、寒冷、黑暗和各种怪物的袭击。但最令人抓狂的或许是那些看不见的血条:你永远不知道眼前这个巨鹿还剩多少血量,也不知道地下洞穴里潜伏…

作者头像 李华
网站建设 2026/6/11 11:49:57

一文看懂新一代Claude模型 Fable 5 Mythos 5:安全护栏之下的 AI 神话

2026年6月9日,Anthropic正式推出了新一代Claude模型——Claude Fable 5和Claude Mythos 5。这两款模型的发布,不仅标志着Anthropic在AI能力上的一次"代际跃迁",也体现了一家企业在大模型能力与安全风险之间的微妙平衡。一、来自&qu…

作者头像 李华
网站建设 2026/6/11 11:46:17

DDrawCompat:3分钟解决Windows 10/11运行经典游戏兼容性问题

DDrawCompat:3分钟解决Windows 10/11运行经典游戏兼容性问题 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/…

作者头像 李华
网站建设 2026/6/11 11:44:58

三月七小助手:星穹铁道玩家的智能效率革命

三月七小助手:星穹铁道玩家的智能效率革命 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 还在为《崩坏:星穹铁道》中重复繁琐的日常任务消耗…

作者头像 李华