码迷,mamicode.com
首页 > 编程语言 > 详细

《Linux内核设计与实现》学习笔记——I/O调度算法

时间:2016-07-05 08:50:33      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

I/O调度子系统用于调度来自多个进程对块设备的I/O请求。

电梯调度

  1. 首先,如果队列中已存在一个对相邻磁盘扇区操作的请求,那么新请求将和这个已经存在的请求合并为一个请求。
    2.如果队列中存在一个驻留时间过长的请求,那么新请求将被插入到队列尾部,以防止其他旧的请求发生饥饿。
    3.如果队列中以扇区方向为序存在合适的插入位置,那么新的请求将被插入到该位置,保证队列中的请求是以被访问磁盘物理位置为序进行排序的。
    4.如果队列中不存在合适的请求插入位置,请求将被插入到队列尾部。

最后期限IO调度

在最后期限I/O调度程序中,每个请求都有一个超时时间。默认情况下,读请求的超时时间是500ms,写请求的超时时间是5s。

最后期限IO调度请求类似与linux电梯,也以磁盘物理位置为次序维护请求队列,这个队列被称为排序队列。当一个新请求递交给排序队列时,最后期限IO调度程序类似于linux电梯,合并和插入请求,

最后期限I/O调度程序同时也会以请求类型为依据将它们插入到额外队列中。读请求按次序被插入到特定的读FIFO队列中,写请求被插入到特定的写FIFO队列中。

预测IO调度程序

基础就是最后期限IO调度程序。最主要的改进是它增加了预测启发能力。

它的不同之处在于读操作提交后并不直接返回处理其他请求,而是会有意空闲片刻。这空闲的几秒钟,对应用程序来说是个提交其他读请求的好机会—–任何对相邻磁盘位置操作的请求都会立刻得到处理。(基于实际发生情况统计效果好)

完全公正的排队I/O调度程序

完全公正的排队I/O调度程序(Complete Fair Queuing,简称CFQ)是为了专有工作负荷设计的。CFQI/O调度程序把进入的I/O请求放入特定的队列中,这种队列是根据引起I/O请求的进程组织的。在每个队列中,刚进入的请求与相邻的请求合并在一起,并进行插入分类,队列由此按扇区方式能分类。CFQI/O调度程序的差异在于每一个提交I /O请求的进程都有自己的队列。

CFQI/O调度程序以时间片轮转调度队列,从每个队列中选取请求数(默认是4),然后进行下一轮调度。
I/O调度程序实现在drivers/block/cfq-iosched.c中。

《Linux内核设计与实现》学习笔记——I/O调度算法

标签:

原文地址:http://blog.csdn.net/giantpoplar/article/details/51828498

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!