栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

BLOCK层代码分析(10)IO下发之IO下发函数总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

BLOCK层代码分析(10)IO下发之IO下发函数总结

        BLOCK层IO下发涉及直接下发,调度器,没有设置调度类型以及plug/unplug等,因此下发函数纷繁复杂,这里做介绍几个主要的函数。

        前面介绍了函数blk_mq_try_issue_directly()和blk_mq_sched_insert_request(),以及最终调用的函数blk_mq_run_hw_queue()。这里再对blk_mq_run_hw_queue()进一步细化所涉及的下发函数做介绍(见BLOCK层代码分析(9)IO下发之IO下发)。

(1)函数blk_mq_dispatch_rq_list(&rq_list)

bool blk_mq_dispatch_rq_list(struct blk_mq_hw_ctx *hctx, struct list_head *list,
			     unsigned int nr_budgets)

        执行rq_list中的request(属于同一个hctx),若资源不足时没有执行完成时返回true,否则执行完成返回false;

(2)函数blk_mq_do_dispatch_sched(hctx)

static int blk_mq_do_dispatch_sched(struct blk_mq_hw_ctx *hctx)

        从调度器中取出max_dispatch个IO,若属于多个hctx,根据hctx idx排序下发;否则blk_rq_dispatch_rq_list()直接下发。

(3)函数blk_mq_do_dispatch_ctx(hctx)

static int blk_mq_do_dispatch_ctx(struct blk_mq_hw_ctx *hctx)

        一般硬件队列hctx对应多个ctx,该函数依次轮流(RR)从多个ctx中取IO发送,最后仍是通过blk_rq_dispatch_rq_list下发。

它们之间调用如下:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/606485.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号