BLOCK层代码分析(5)IO下发之BIO bounce过程
若bio中存在数据处于高端内存时,外设无法在此高端内存上执行DMA,这里需要创建反弹缓冲区,将处于高端内存的缓存区和反弹缓冲区之间进行数据的复制。此过程称为bounce过程。但对于大部分驱动来説,并不需要考虑。
过程如下所示:
流程如下:
- 对bio中每个segment,检查数据所对应的内存是否在高端内存区,若不存在,直接返回,不需要作bounce过程;
- 若bio存在数据在高端内存区,且存在segment数目过多时,将原bio进行切分,将切分后的第二部分通过submit_bio()再次下发;
- 分配新的bio,将原bio的第一部分相关信息拷贝到新的bio中;
- 遍历新的bio每个segment,若segment对应的页为高端内存,分配新的页,让新的bio指向此页;若操作为写时,将原来在高端内存区的数据拷贝到新的页中;
- 设置bio->bi_end_io,对于操作为读时,将反弹缓冲区的数据拷贝到高端内存区。
如下图所示,origin bio存在3个bio_vec,其中bvec 0处于高端内存区,此时bounce过程会生成新的new bio,在低端内存区分配新的内存区0'(反弹缓存区),在读写时,会将数据在原内存区和bounce缓冲区进行拷贝。
BLOCK层代码分析(5)IO下发之BIO bounce过程相关推荐
- BLOCK层代码分析(10)IO下发之IO下发函数总结
BLOCK层IO下发涉及直接下发,调度器,没有设置调度类型以及plug/unplug等,因此下发函数纷繁复杂,这里做介绍几个主要的函数. 前面介绍了函数blk_mq_try_issue_directl ...
- BLOCK层代码分析(9)IO下发之IO下发
看着题目是不是很奇怪,想不出好的名字,就这样将就吧. 前面bio bounce过程,bio的切分和合并,request的获取是为IO请求下发做准备工作.当这些准备工作完成后,才进入到真正的IO下发过程 ...
- BLOCK层代码分析(8)IO下发之plug/unplug机制
前面bio bounce过程,bio的切分和合并,request的获取是为IO请求下发做准备工作.当这些准备工作完成后,才进入到真正的IO下发过程.之前在前面章节中介绍过,IO下发基本上有三条路径:经 ...
- BLOCK层代码分析(1)数据的组织BIO
对于BLOCK层,表示一个IO的数据结构为BIO和request.对于request在后续的章节中做介绍,这里只介绍与BIO相关的结构体. 1. bio/bio_vec结构体 bio结构体用于表示数据 ...
- BLOCK层代码分析(6)IO下发之SGL聚散列表
原本计划本节介绍request的分配,发现会涉及到数据组织从bio到sgl的映射,因此本节介绍数据的SGL组织方式. 在BLOCK层数据的组织形式为bio和request,通过这两个结构体就可以找到数 ...
- 三:Sensor SLPI层代码分析---
三:Sensor SLPI层代码分析 在学习SLPI侧代码前我们先了解下SEE的registry&config. registry 放在/persist/sensors/registry/re ...
- perf-perf stat用户层代码分析
perf_event 源码分析 前言 简单来说,perf是一种性能监测工具,它首先对通用处理器提供的performance counter进行编程,设定计数器阈值和事件,然后性能计数器就会在设定事件发 ...
- 四--RIL层代码分析--整个电话来访过程
最近公司开发一个几百万的项目,要求重写系统RIL层,看了几个招聘信息,只要你会RIL层开发的,工资上w每个月不是梦,这是几天研究的成果,希望对大家有所帮助,兄弟们加油吧! 先来一个总的流程图: 拨出电 ...
- RIL层代码分析--拨号整个流程
拨出电话流程: 1 在系统源码这个路径下/packages/apps/Phone/src/com/android/phone/DialtactsActivity.java contacts的andro ...
最新文章
- ssh连接虚拟机中mysql_用SSH连接Vmware redhat虚拟机
- 一个用于分页的page类
- html5 弹性布局
- mysql load character_mysql load data Invalid utf8mb4 character string: ”
- vue 组件属性监听_详解vuex 中的 state 在组件中如何监听
- Python中的回文详解
- Bootstrap+Angularjs自制弹框
- 我的微博,三层嵌套,
- html5swf小游戏源码,亲测可用120个H5小游戏实例源码
- 数字频率系数测试软件,基于单片机简易数字频率计设计方案汇总
- java如何美化按钮_css美化button按钮
- P7369 [COCI2018-2019#4] Elder 题解
- 计算机为什么获取mac地址,电脑获取mac地址失败怎么办
- 配置Web.config文件显示错误信息
- 一键设置电脑锁屏后程序仍然运行
- 四、Solr数据源配置(JNDI、DIH)及定时重做索引
- 超实用的新加坡两日游攻略来啦
- 电影《满城尽带黄金甲》周杰伦接受了新浪娱乐独家对话
- android go 联发科 p10,联发科P10和高通骁龙435哪个性能强?联发科P10对比高通骁龙435评测...
- Torch 训练的一些注意点:优化器params参数 与 lr 调度器篇 [1]