401 Star 1.4K Fork 1.3K

GVPopenEuler / kernel

 / 详情

【OLK-5.10】blk-mq: avoid extending delays of active hctx from blk_mq_delay_run_hw_queues

已完成
任务
创建于  
2022-11-01 11:10

问题跟因:

环境:测试盘nvme,使用bfq调度器

bfq 从 in service queue 下发io到驱动返回错误,io被插入hctx1的dispatch链表,hctx1对应的run work开始排队,等待超时调用

blk_mq_run_hw_queue
 __blk_mq_delay_run_hw_queue
  __blk_mq_run_hw_queue
   blk_mq_sched_dispatch_requests
    __blk_mq_sched_dispatch_requests
     blk_mq_do_dispatch_sched
      __blk_mq_do_dispatch_sched
       bfq_dispatch_request -> 取出io
        blk_mq_dispatch_hctx_list
         blk_mq_dispatch_rq_list
          nvme_queue_rq -> 返回失败
          list_splice_tail_init(list, &hctx->dispatch); -> 插入 dispatch 链表
          blk_mq_delay_run_hw_queue(hctx, BLK_MQ_RESOURCE_DELAY); -> 重新排队

其他hctx触发run queue,从调度器取io时,调度器返回有io,但是因为in service queue为空,从调度器取io失败,从而调用blk_mq_delay_run_hw_queues

__blk_mq_do_dispatch_sched
 bfq_has_work -> 返回true
 bfq_dispatch_request -> 返回空
 blk_mq_delay_run_hw_queues -> 所有硬件队列
  blk_mq_delay_run_hw_queue -> 处理hctx1时
   __blk_mq_delay_run_hw_queue
    kblockd_mod_delayed_work_on -> 将计时器修改为 BLK_MQ_BUDGET_DELAY

在hctx1的run work触发前,如果2. 反复触发,将导致hctx1 的 run_work被卡住

评论 (0)

Yu Kuai 创建了任务
zhengzengkai 通过src-openeuler/kernel Pull Request !800任务状态待办的 修改为已完成
展开全部操作日志

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(1)
C
1
https://gitee.com/openeuler/kernel.git
git@gitee.com:openeuler/kernel.git
openeuler
kernel
kernel

搜索帮助