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下发。

它们之间调用如下:

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

  1. BLOCK层代码分析(9)IO下发之IO下发

    看着题目是不是很奇怪,想不出好的名字,就这样将就吧. 前面bio bounce过程,bio的切分和合并,request的获取是为IO请求下发做准备工作.当这些准备工作完成后,才进入到真正的IO下发过程 ...

  2. BLOCK层代码分析(8)IO下发之plug/unplug机制

    前面bio bounce过程,bio的切分和合并,request的获取是为IO请求下发做准备工作.当这些准备工作完成后,才进入到真正的IO下发过程.之前在前面章节中介绍过,IO下发基本上有三条路径:经 ...

  3. BLOCK层代码分析(1)数据的组织BIO

    对于BLOCK层,表示一个IO的数据结构为BIO和request.对于request在后续的章节中做介绍,这里只介绍与BIO相关的结构体. 1. bio/bio_vec结构体 bio结构体用于表示数据 ...

  4. BLOCK层代码分析(6)IO下发之SGL聚散列表

    原本计划本节介绍request的分配,发现会涉及到数据组织从bio到sgl的映射,因此本节介绍数据的SGL组织方式. 在BLOCK层数据的组织形式为bio和request,通过这两个结构体就可以找到数 ...

  5. BLOCK层代码分析(5)IO下发之BIO bounce过程

    若bio中存在数据处于高端内存时,外设无法在此高端内存上执行DMA,这里需要创建反弹缓冲区,将处于高端内存的缓存区和反弹缓冲区之间进行数据的复制.此过程称为bounce过程.但对于大部分驱动来説,并不 ...

  6. 三:Sensor SLPI层代码分析---

    三:Sensor SLPI层代码分析 在学习SLPI侧代码前我们先了解下SEE的registry&config. registry 放在/persist/sensors/registry/re ...

  7. perf-perf stat用户层代码分析

    perf_event 源码分析 前言 简单来说,perf是一种性能监测工具,它首先对通用处理器提供的performance counter进行编程,设定计数器阈值和事件,然后性能计数器就会在设定事件发 ...

  8. 四--RIL层代码分析--整个电话来访过程

    最近公司开发一个几百万的项目,要求重写系统RIL层,看了几个招聘信息,只要你会RIL层开发的,工资上w每个月不是梦,这是几天研究的成果,希望对大家有所帮助,兄弟们加油吧! 先来一个总的流程图: 拨出电 ...

  9. RIL层代码分析--拨号整个流程

    拨出电话流程: 1 在系统源码这个路径下/packages/apps/Phone/src/com/android/phone/DialtactsActivity.java contacts的andro ...

最新文章

  1. 【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | ClassLoader#loadClass 函数分析 | BaseDexClassLoader#findClass 分析 )
  2. pyghon list指定位置插入字符的方法
  3. 【Linux】一步一步学Linux——bg命令(131)
  4. kafka 集群启动失败:FATAL [KafkaServer id=0] Fatal error during KafkaServer startup.
  5. 模板:拉格朗日插值(多项式)
  6. spring+hibernate+Struts2 整合(全注解及注意事项)
  7. Tekton基础概念介绍
  8. Hibernate入门案例及增删改查
  9. Android Studio 2.0来啦
  10. PHP经验——获得PHP版本信息及版本比较
  11. java中用Executor代替Thread的四大理由
  12. testbench文件显示波形_十大基本功之testbench
  13. 酷派android4.4.4到5.0,酷派大神F1电信版升级安卓5.0刷机教程[多图]
  14. UnityHub 安装失败
  15. 时间管理—重要紧急四象限法则
  16. Chaotica for Mac(分形艺术作品创作工具)
  17. golang runtime.Caller 学习笔记
  18. 逻辑漏洞之无密码登录(vlcms)
  19. 回顾1024长沙程序员节的收获
  20. AXURE手机版注册登录原型(下载+教学)

热门文章

  1. 【Oracle】使用expdp/impdp导入导出用户数据库数据
  2. Oracle笔记之 的CMD命令
  3. 现代软件工程讲义 7 用户界面和用户体验
  4. 计算机游戏本和商务本的区别,游戏本和商务本的区别有哪些
  5. Zzzzzz 每天来点负能量---看着就会心地笑了
  6. 【Android】App首页上下滚动快报控件 通知控件 类似京东快报控件(二)
  7. 【C++】spdlog--log4cxx有点笨重,试一试spdlog
  8. java添加坚挺_Java连载136-两种方式插入数据
  9. Win10系统 默认以管理员权限运行所有程序
  10. R语言散点图分类、配色、添加趋势线