免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > linux > Linux设备驱动--块设备之“自造请求” .

Linux设备驱动--块设备之“自造请求” .

时间:2012-01-21 16:47来源:未知 整理:寂涯网络 点击:

前面, 我们已经讨论了内核所作的在队列中优化请求顺序的工作; 这个工作包括排列请求和, 或许, 甚至延迟队列来允许一个预期的请求到达. 这些技术在处理一个真正的旋转的磁盘驱动器时有助于系统的性能. 但是, 许多面向块的设备, 例如闪存阵列, 用于数字相机的存储卡的读取器、u盘等, 并且 RAM 盘真正地有随机存取的性能, 包含从高级的请求队列逻辑中获益. 其他设备, 例如软件 RAID 阵列或者被逻辑卷管理者创建的虚拟磁盘, 没有这个块层的请求队列被优化的性能特征. 对于这类设备, 它最好直接从块层接收请求, 并且根本不去烦请求队列.

这时候我们就不用内核提供的IO调度器来优化排列和合并请求,不用内核的__make_request 帮我们处理bio,而是我们自己处理bio

数据流程

当我们初始化一个请求队列

  1. struct request_queue *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock)  
  2. {  
  3.     return blk_init_queue_node(rfn, lock, -1);  
  4. }  

把请求队列和这个内核已经实现好的函数绑定起来,__make_request就是负责制造请求request 的

  1. blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id)  
  2. {  
  3.     struct request_queue *q = blk_alloc_queue_node(GFP_KERNEL, node_id);  
  4.     ......  
  5.     blk_queue_make_request(q, __make_request);  
  6.     ......  
  7. }  

 

  1. static int __make_request(struct request_queue *q, struct bio *bio)  

推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com