Linux的IO调度器-CFQ
最近由于一些控制IO带宽的需求,开始研究CFQ以及对应的IO cgroup,今天baidu了一下,竟然发现没有多少中文的介绍,所以准备写一个系列,介绍一下这个调度器,粗粗想了一下,大概可以灌四篇水,包括CFQ的基本介绍,CFQ各个配置参数的含义和调优,CFQ的基本架构以及CFQ+cgroup。各位看官要是觉得还有什么值得写的,请留言给我或者直接新浪微博 @淘伯瑜。闲话少说,言归正传。
CFQ是Completely Fair Queuing的缩写,顾名思义,他存在的主要目的就是为了保证公平性, 并为此做了大量的工作。为了说明他的公平性,让我们先来简单看看另外目前kernel另外两个IO调度器,noop和deadline。那么怎么看自己目前硬盘的调度器呢?sysfs里面就有:
cat /sys/block/sda/queue/scheduler 目前这个是设备相关的,不同的盘可以选择不同的IO调度器。
noop
这个调度器基本上什么也不做,没有自己的请求队列,不做排队,基本上是上层发什么请求就直接扔给驱动的队列(其实他也可以做简单的尾部合并,不过这个合并实际上是通用的block层代码实现,可能也不应该算在他的头上)。代码么,也只有100行左右,非常简单。对于一些非常快速的设备,如fusion IO的pci-e卡,noop的性能还是相当不错的。
deadline
这个调度器功能上有以下特点,有自己的请求队列,可以做前端合并,读写分离,并用红黑树来管理请求,红黑树的key是请求的读写位置,另外他还设置了fifo队列来管理请求的超时,这样对于一般的请求通过排序来照顾到顺序IO,并通过fifo来保证请求的响应时间。400多行的代码做到如此的简单高效,非常赞。另外一般的SSD读写混合时候效率很差,deadline使用的batch方式,读写请求的发送在某种程度上是分离的。从我们的测试来看,一般的SSD(如Intel的x25-m系列)使用deadline效果还是非常棒的。
CFQ
CFQ相对于上面两个那可真是巨无霸了,目前的block/cfq-iosched.c就有4000多行,这个还不包括blk-cgroup的1700行代码,这许多代码加起来的特性那就相当丰富了。下面咱们简单来理理。
下一篇将介绍CFQ的各个参数的含义,各位感兴趣的可以先看看,主要的参数在这里:
taoma@tma-laptop1:~/kernel/linux-2.6$ ls /sys/block/sda/queue/iosched/
back_seek_max fifo_expire_async group_idle quantum slice_async_rq slice_sync
back_seek_penalty fifo_expire_sync low_latency slice_async slice_idle
建议继续学习:
- 关于IO的同步,异步,阻塞,非阻塞 (阅读:14482)
- Linux服务器性能评估 (阅读:8190)
- 提升磁盘IO性能的几个技巧 (阅读:7606)
- I/O模型-读书笔记 (阅读:6918)
- Innodb IO优化-配置优化 (阅读:6658)
- 查看 CPU, Memory, I/O and NetFlow (阅读:6443)
- blktrace 深度了解linux系统的IO运作 (阅读:6012)
- Linux操作系统内核3.3版本I/O Stack的流图 (阅读:5781)
- Linux IO协议栈框图 (阅读:5338)
- MySQL Tuning之浅析I/O优化 (阅读:5147)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Linux Kernel and Tao 来源: Linux Kernel and Tao
- 标签: CFQ IO
- 发布时间:2012-09-18 23:17:11
- [56] Oracle MTS模式下 进程地址与会话信
- [56] IOS安全–浅谈关于IOS加固的几种方法
- [55] 图书馆的世界纪录
- [55] android 开发入门
- [53] 如何拿下简短的域名
- [52] Go Reflect 性能
- [51] 【社会化设计】自我(self)部分――欢迎区
- [48] 读书笔记-壹百度:百度十年千倍的29条法则
- [37] 程序员技术练级攻略
- [34] 视觉调整-设计师 vs. 逻辑