无线电爱好网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

无线电爱好网 首页 技术应用 单片机 查看内容

Multi-queue 架构分析

2022-10-13 10:16| 发布者: 闪电| 查看: 7| 评论: 0

摘要: Linux上传统的块设备层(Block Layer)和IO调度器(如cfq)主要是针对HDD(hard disk drivers)设计的。我们知道,HDD设备的随机IO性能很差,吞吐量大约是几百IOPS(IOs per second),延迟在毫秒级,所以当时IO性能 ...


  • 尝试IO请求的QoS(Quality of Service)限流(目前实现的QoS策略有wbt, io-latency cgroup, io-cost cgroup三种)


  • 图10.  blk-mq中IO提交流程


    • 获取request,并将bio添加到request


    • 生成request后,将request插入请求队列中,分下面几种情况


    1.如果是fua/flush请求,则将request插入到flush队列,并调用blk_mq_run_hw_queue 启动请求派发


    2.如果当前线程正在做IO plug且块设备是硬件单队列的(nr_hw_queues=1),则将request插入到当前线程的plug list


    3.如果配置了调度器,则调用blk_mq_sched_insert_request将请求插入调度器队列(如果没有实现insert_requests接口,则插入到当前cpu的软件队列中)


    4.如果是硬件多队列块设备上的同步IO请求,则调用blk_mq_try_issue_directly尝试将request直接派发到块设备驱动


    5.其他情况,则调用blk_mq_sched_insert_request插入request(同case 3)



    IO的派发(dispatch)


    blk-mq中通过调用blk_mq_run_hw_queue派发IO请求到块设备驱动,MQ框架中存在很多的点会触发IO请求往块设备驱动派发,主要如下:



    blk_mq_run_hw_queue: 启动硬件队列派发IO请求,可以是同步/异步的执行的。如果队列不在静默状态(quiesced)且有IO请求pending,则启动派发:


    • 如果是同步派发,且当前cpu的软件队列映射到此硬件队列,则调用__blk_mq_run_hw_queue在当前线程上下文中执行IO请求派发


    • 如果是异步派发,则启动延迟任务(hctx->run_work)执行IO请求派发


    图11. blk-mq启动硬件队列派发IO请求的流程


    无论是同步还是异步的派发模式,最终都会调用__blk_mq_run_hw_queue派发IO请求,这个函数先检查执行的上下文,然后调用blk_mq_sched_dispatch_requests派发IO请求到块设备驱动,这个函数的主要流程如下:


    图12. blk-mq派发IO请求的流程


    • 如果硬件派发队列(hctx->dispatch)非空, 则先调用blk_mq_dispatch_rq_list派发这个队列中的IO请求


    • 如果配置了调度器,则调用blk_mq_do_dispatch_sched 从调度队列中派发IO请求


    • 如果队列繁忙(dispatch_busy记录繁忙状态),则调用blk_mq_do_dispatch_ctx 从软件队列(软件队列选取采用Round-Robin策略)中取1个IO请求派发


    • 否则,取映射到这个硬件队列的所有软件队列上的IO请求,调用blk_mq_dispatch_rq_list派发


    上述4种情况都会调用blk_mq_dispatch_rq_list 将IO请求派发到块设备驱动,这个函数使用块设备驱动实现的几个接口完成派发逻辑:



    IO的完成(complete)


    下面以UFS+scsi-mq驱动为例,讲解IO完成处理的过程,主要流程如图13所示:


    图13. ufs+scsi-mq驱动中一个IO的完成流程



    路过

    雷人

    握手

    鲜花

    鸡蛋

    QQ|关于本站|小黑屋|Archiver|手机版|无线电爱好网 ( 粤ICP备15040352号 ) 无线电爱好技术交流5 无线电爱好技术交流1无线电爱好技术交流9开关电源讨论群LED照明应用、电源无线电爱好技术交流4无线电爱好技术交流8无线电爱好技术交流10无线电爱好技术交流11

    粤公网安备 44030702001224号

    GMT+8, 2022-10-13 10:16 , Processed in 0.109200 second(s), 17 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2020, Tencent Cloud.

    返回顶部