《Linux内核设计与实现》学习笔记——I/O调度算法
来源:互联网 发布:淘宝商城童装男童装 编辑:程序博客网 时间:2024/06/08 04:42
I/O调度子系统用于调度来自多个进程对块设备的I/O请求。
电梯调度
- 首先,如果队列中已存在一个对相邻磁盘扇区操作的请求,那么新请求将和这个已经存在的请求合并为一个请求。
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中。
0 0
- 《Linux内核设计与实现》学习笔记——I/O调度算法
- Linux内核学习笔记十一——I/O层和I/O调度机制
- Linux内核设计与实现 学习笔记(4)块I/O层
- 《Linux内核设计与实现》笔记——进程调度
- 《Linux内核设计与实现》——块I/O层
- Linux内核设计与实现(15)--块I/O层
- 《Linux内核设计与实现》——进程调度
- Linux进程调度(Linux内核设计与实现学习笔记)
- 《linux内核设计与实现》阅读笔记 第三章 调度
- 《linux内核设计与实现》Chapter4进程调度(笔记)
- [笔记]《Linux内核设计与实现》第四章进程调度
- Linux I/O 调度算法
- Linux内核设计与实现学习笔记
- linux deadline I/O调度算法分析笔记
- Linux Anticipatory I/O 调度算法分析笔记
- linux deadline I/O调度算法分析笔记
- Linux Anticipatory (预测)I/O 调度算法分析笔记
- 《Linux内核设计与实现》--进程调度
- 机房收费系统--MDI窗体不能放控件和子窗体不能显示
- 前缀"im-","in-","il-","ir-"的使用规律
- hdu4889Scary Path Finding Algorithm【构造】搞坏spfa-slf 2014多校联合
- bzoj 1057: [ZJOI2007]棋盘制作 求最大全0/1矩阵(极大扩展矩阵)动态规划
- ContentProvider
- 《Linux内核设计与实现》学习笔记——I/O调度算法
- idea2016中tomcat配置及运行
- View
- 结果是:空格空格3.0e+001,我不明白这加001是怎么回事啊?还有这个printf("%e\n",30.14);结果是3.014000e+001这是怎么算出来的?谁帮我讲下方法?
- ViewController页面跳转的方法
- 数组是如何实现扩容的
- 互斥锁和条件变量
- 不同的系统针对不同的换行符号识别
- 让iOS开发变得更有效率-分类、工具类