FIO测试参数与linux内核IO栈的关联分析-part1

一、Linux IO栈

一个常见Linux IO处理流程示意图如下:

图片

这个示意图主要描述了Linux系统中I/O请求的处理流程,涉及了I/O接口、文件系统、块层、NVMe驱动等多个部分,整个IO流程处理主要概括以下步骤:

1. 应用程序(Applications)将I/O请求提交给I/O接口(Step 1)。这些请求可以是POSIX的read/write操作(如psync)、libaio、io_uring等。

2. I/O接口构建一个struct kiocb结构体,并通过VFS(虚拟文件系统)将其提交给文件系统(Step 2)。

3. 文件系统解析包含数据的块地址,构建一个struct bio请求,并通过submit_bio()函数将其提交给块层(Step 3)。

4. Linux块层将struct bio转换为struct request(Step 4),并将其放入每个核心的软件队列(Step 5)中。

5. 然后,这些请求由块I/O调度器处理,并放入硬件调度队列(Step 6-7)中。

6. 硬件调度队列中的请求将被NVMe驱动程序通过nvme_queue_rq()函数处理(Step 8)。

7. NVMe驱动程序根据请求构建一个NVMe命令(Step 9),并将其写入提交队列(SQ)(Step 10)以供设备进行处理(Step 11)。

8. 在设备处理完命令后,设备将请求写入完成队列(CQ)并生成中断(Step 12)。

9. 完成队列中的请求由nvme_process_cq函数处理,然后调用blk_mq_end_request()和bio_end_io()函数来完成bio层的请求(Step 14)。

10. 最后,应用程序将收到完成结果的通知(Step 15)。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串函数内存函数(从零到一)【C语言】

长度不受限制的字符串函数:strcpy,strcat,strcmp 长度受限制的字符串函数:strncpy,strncat,strncmp strlen strlen函数是库函数中我们最常使用的函数,它可以求出字符串的长度(不包含‘\0’) 使用方法 通过前面对strlen函数的模拟实现我们知…

c语言力扣题目:消失的数字(有关时间复杂度O(N²)O(N))以及对异或操作符的更深入的理解(如何用人脑的十进制去考量二进制)

目录 Way One :暴力求解,时间复杂度为 O(N) 代码1 Way Two : 时间复杂度限制到 O(N) 代码及其详解 如题 Way One :暴力求解,时间复杂度为 O(N) 大体思路:比如这里我们需要处理的整型数组是"3,0,1",我们可以用冒泡排序或者 qsort函数将他从大到小进行排序成"…

【数组Array】力扣-1094 拼车

目录 题目描述 解题过程 题目描述 车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向) 给定整数 capacity 和一个数组 trips , trip[i] [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassen…

理解pom.xml中的parent标签

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏&…

06:2440----异常与中断

目录 一:概念的引入 1:ARM系统 2:CPU处理中断的过程 3:ARM对异常(中断)处理的过程 4:软/硬件工作分配 二:CPU模式状态与寄存器 1:ARM CPU的七种工作模式 2:state 3:寄存器 A:寄存器情况 B:CPSR C:状态位和保留位 D:协同工作 E:异常向量表 …

Text2SQL学习整理(四)将预训练语言模型引入WikiSQL任务

导语 上篇博客:Text2SQL学习整理(三):SQLNet与TypeSQL模型简要介绍了WikiSQL数据集提出后两个早期的baseline,那时候像BERT之类的预训练语言模型还未在各种NLP任务中广泛应用,因而作者基本都是使用Bi-LSTM…

广东建筑模板价格一览表

在建筑行业,合适的建筑模板是确保工程顺利进行的关键材料之一。在选择建筑模板时,除了质量、材质等因素外,价格也是一个重要的考虑因素。本文将提供一个广东建筑模板的价格一览表,以供业内人士参考。需要注意的是,以下…

SpringSecurity入门

前言 Spring Security是一个用于在Java应用程序中提供身份验证和授权功能的强大框架。它构建在Spring框架之上,为开发人员提供了一套灵活且全面的安全性服务,本篇将为大家带来Spring Security的详细介绍及入门 一.安全框架 在学习了解Spring Security之…

【qt信号槽-5】信号槽相关注意事项记录

背景: 信号槽是qt很重要的概念,遇到问题帮助没少看。其中就有signals and slots这一章节,说得很到位。 概念琐碎,记录备忘。不对之处望指正。 【qt信号槽-1】槽函数重写问题,qt_metacall和qt_static_metacall-CSDN博…

【数据结构】并查集的简单实现,合并,查找(C++)

文章目录 前言举例: 一、1.构造函数2.查找元素属于哪个集合FindRoot3.将两个集合归并成一个集合Union4.查找集合数量SetCount 二、源码 前言 需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规…

交叉验证之KFold和StratifiedKFold的使用(附案例实战)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

文件操作学习总结

磁盘上的⽂件是⽂件。 但是在程序设计中,我们⼀般谈的⽂件有两种: 程序⽂件、数据⽂件 (从⽂件功能的⻆度来分类 的)。 程序⽂件 : 程序⽂件包括源 程序⽂件(后缀为.c) , ⽬标⽂件&#xff0…