Block multi-queue 架构解析(二)流程与机制

本文详细解析了Linux Block Multi-Queue架构的主要流程和机制,包括request_queue初始化、IO提交与request转换、request获取与加入队列、request派发以及request完成。此外,还探讨了plug/unplug机制、IO合并、软硬件队列映射和并发管理,以及调度器的作用和不同场景下的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要流程

request_queue初始化

块设备初始化时通过blk_mq_init_queue()创建request_queue并初始化,主要功能包含:

  • request_queue与块设备的blk_mq_tag_set相互绑定,根据blk_mq_tag_set设置一些参数。
  • 创建软硬件队列及进行绑定。
  • 设置io请求入口函数make_request_fn 为 blk_mq_make_request()。

IO提交/转换request

IO请求的入口为blk_mq_make_request(),其中首先判断IO是否可以跟其他request合并,若无法合并再将IO转换为request进一步处理。

request获取

request是事先在硬件队列的tags或者sched_tags中分配好的,通过blk_mq_get_request()获取,期间有可能会因获取不到request而被io_schedule,进入iowait状态。(扩展阅读IOwait 到底在wait什么

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值