news 2026/10/16 3:11:39

Linux 6.12 源码深度剖析: submit_bio

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 6.12 源码深度剖析: submit_bio

Linux 6.12 源码深度剖析: submit_bio


1. 📌 技术点速览

  submit_bio是 Linux 块设备 I/O 子系统(Block_IO)提供给上层(虚拟文件系统 VFS、Page Cache 内存子系统、Direct I/O 引擎)的核心入口函数。它解决了通用块层与上层调用者在 I/O 语义、资源计量和调度优先级上的解耦与标准化传递问题。该函数在系统架构中位于文件系统映射层之下、blk-mq(多队列块设备层)之上,是所有通用块 I/O 请求下发到存储驱动必经的“第一关卡”。在职责划分上,它严格属于Block_IO (块设备IO层)模块。


2. 🗺️ 软件功能架构图

        在 Linux 6.12 内核中,submit_bio承担着承上启下的枢纽角色。下图展示了其在 arm64/x86 架构下的跨模块调用拓扑结构及模块从属关系:


3. 🔍 核心源码硬核解析 (基于 Linux 6.12)

        在 Linux 6.12 内核中,submit_bio驻留在block/blk-core.c文件中。尽管整个块设备层极其庞大,但submit_bio本身的实现高度凝练,是典型的模块门面(Facade)模式。

核心代码实现
// 源码路径: block/blk-core.c (Linux 6.12) void submit_bio(struct bio *bio) { /* 1. 检查 I/O 操作类型,针对读操作执行进程级与虚存级统计 */ if (bio_op(bio) == REQ_OP_READ) { task_io_account_read(bio->bi_iter.bi_size); count_vm_events(PGPGIN, bio_sectors(bio)); } else if (bio_op(bio) == REQ_OP_WRITE) { /* 2. 针对写操作执行虚存级换出统计 */ count_vm_events(PGPGOUT, bio_sectors(bio)); } ​ /* 3. 跨模块继承/推导 I/O 优先级并写入 bio 元数据 */ bio_set_ioprio(bio); ​ /* 4. 脱离统计上下文,进入防死锁重入的通用派发层 */ submit_bio_noacct(bio); } EXPORT_SYMBOL(submit_bio);
关键行深度解构与模块职责落地
(1)bio_op(bio) == REQ_OP_READ与操作码提取
  • 源码逻辑:bio_op(bio)并不是一个简单的字段访问,它通过位掩码(bio->bi_opf & REQ_OP_MASK)提取 bio 的低位操作码(如REQ_OP_READ、REQ_OP_WRITE、REQ_OP_FLUSH、REQ_OP_DISCARD)。

  • 底层原理:在 x86-64 和 arm64 架构下,编译器会将此操作编译为极快的单周期位与(AND)指令。该判断严格隔离了普通数据读写与控制指令(如 Trim/Discard/Zone Append),防止统计数据失真。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 3:11:04

接口文档和接口用例

接口文档和接口用例 一、熟悉接口文档和分析接口 1、接口文档(开发编写) 2、拿到接口文档 3、分析接口文档 详解: a、接口目录 b、接口的字段类型、字段必填向,字段意义,请求方式,请求协议等 c、接口请求模…

作者头像 李华
网站建设 2026/10/16 3:11:04

Java程序员转战大模型,8个月薪资涨50%,小白也能轻松入门!

本文分享了作者从Java开发转型大模型应用开发的经历,强调了自学与报班的利弊,并给出了6个月的学习路线规划,包括Python基础、大模型概念、实战项目等。文章还提供了面试准备建议,鼓励大家抓住AI风口,实现职业跃迁。适合…

作者头像 李华
网站建设 2026/10/16 3:10:30

Hadoop-MapReduceYARN面试总结

MapReduce计算流程 先看Map端,文件上传HDFS会切成Block,默认128M,然后有一个逻辑切片叫Split,它不改动存储,只是用来控制参与计算的节点数,一个切片就对应一个MapTask,Map任务从自己的切片里读数…

作者头像 李华
网站建设 2026/10/16 3:09:48

从字段类型到业务语义,深入理解 ABAP DDIC Data Element 的 Semantic Properties

在 SE11 或 ADT 里创建一个 Data Element 时,很容易把注意力全部放在数据类型、长度、Domain 上。一个字段是 CHAR 10、NUMC 4 还是 DEC 15,2,看起来像是 Data Element 最核心的部分。可真正进入一个成熟的 SAP 系统之后,会发现 Data Element 承担的职责远不止定义字段能存什…

作者头像 李华
网站建设 2026/10/16 3:09:48

从 S_CONN_ID 看懂 ABAP DDIC Data Element 的技术属性

在 SAP 系统里打开 SE11,查看一个再普通不过的 Data Element,很容易产生一种错觉,Data Element 好像只是给数据库字段起了一个更有业务含义的名字。字段原来是 CHAR,给它套一个 ZCUSTOMER_ID,再维护几组 Field Label,看起来工作也就结束了。 真正进入大型 S/4HANA 项目以…

作者头像 李华