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的同步,异步,阻塞,非阻塞 (阅读:15776)
- Linux服务器性能评估 (阅读:9418)
- 提升磁盘IO性能的几个技巧 (阅读:8108)
- I/O模型-读书笔记 (阅读:7559)
- Innodb IO优化-配置优化 (阅读:7331)
- 查看 CPU, Memory, I/O and NetFlow (阅读:7396)
- blktrace 深度了解linux系统的IO运作 (阅读:6600)
- Linux操作系统内核3.3版本I/O Stack的流图 (阅读:6463)
- Linux IO协议栈框图 (阅读:5971)
- MySQL Tuning之浅析I/O优化 (阅读:5951)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Linux Kernel and Tao 来源: Linux Kernel and Tao
- 标签: CFQ IO
- 发布时间:2012-09-18 23:17:11
-
[930] WordPress插件开发 -- 在插件使用 -
[130] 解决 nginx 反向代理网页首尾出现神秘字 -
[51] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] 海量小文件存储 -
[50] 整理了一份招PHP高级工程师的面试题 -
[49] CloudSMS:免费匿名的云短信 -
[48] 全站换域名时利用nginx和javascri -
[48] 用 Jquery 模拟 select -
[47] Innodb分表太多或者表分区太多,会导致内 -
[46] ps 命令常见用法
