绝对原创:2.6中的I/O调度器
2.6中的I/O调度器
就象我们知道的2.6内核为我们带来了很多新的特性,这其中就包括了新的I/O调度机制。目前的测试版中包含了4个I/O调度程序,在最后的正式版中究竟会如何取舍不得而知。它们各有各的特点,各自有各自的适用环境。对于我们来讲如何根据情况选择合适的调度程序是一件十分有趣的事。由于这些特性实在是太新了,核心开发成员之间尚有不同的争论,所以我在这里只是简单介绍一下它们。如果大家有兴趣不妨试验一下,作为一名kernel的爱好者这也是一个不错的话题,如果有什么心得就一起拿出来分享吧:)
2.6测试版中包含的四个I/O调度器分别是No-op I/O scheduler、Anticipatory I/O scheduler、Deadline I/O scheduler与CFQ I/O scheduler。在后文中分别简称为ns、as、ds与cfq。这其中ns是一个简化的调度程序它只作最基本的合并与排序。与桌面系统的关系不是很大,主要用在一些特殊的软件与硬件环境下,这些软件与硬件一般都拥有自己的调度机制对内核支持的要求很小,这很适合一些嵌入式系统环境。作为桌面用户我们一般不会选择它。
as是当前内核中默认的I/O调度器。它拥有非常好的性能,在2.5中它就相当引人注意。在与2.4内核进行的对比测试中,在2.4中多项以分钟为单位完成的任务,它则是以秒为单位来完成的。正因为如此它成为目前2.6测试版中默认的I/O调度器。但它也存在着弱点,它本身是比较庞大与复杂的,在一些特殊的情况下,特别是在数据吞吐量非常大的数据库系统中它会变的比较缓慢。
ds就是针对as的缺点进行改善而来的,还处于测试阶段,但已经很稳定了。目前表现出的性能几乎与as一样好。加之比as更加小巧,是相当有前途的调度器,值得一试:)
最后一个是CFQ I/O调度器,它为系统内的所有任务分配相同的带宽,提供一个公平的工作环境,它比较适合桌面环境。事实上在测试中它也有不错的表现,mplayer xmms等多媒体播放器与它配合的相当好,回放平滑几乎没有因访问磁盘而出现的跳帧现象。对于喜欢在Linux下听音乐看电影的朋友不妨尝试一下。
它们的配置相当简单,只要在配置编译核心时不选择General setup下的 Remove kernel features (for embedded systems)选项,这四个调度器就会全部编译到内核中。那么该如何选择不同的调度器为我们工作呢?很简单只要在启动时给内核传递不同的参数就可以了。参数的格式为elevator=调度器名。这里调度器名按照上文介绍的次序分别为noop、as、deadline、cfq。
这里我假设你的系统启动为称为linux,要使用的调度器为deadline那么格式为
boot: linux elevator=deadline
这样我们就可以通过向核心传递不同的参数来尝试不同的I/O调度器带给我们的不同体验了。当你觉得哪个调度器最适合你时还可以对引导文件进行设置以省去每次手工输入参数的麻烦。这里我们以lilo为例,作如下更改
image=/boot/vmlinuz-2.6.0-test6
label=linux
initrd=/boot/initrd-2.6.0-test6.img
read-only
root=/dev/hdb2
append="elevator=deadline"
这样我们就让系统总是使用deadline调度器了。
哈哈,就写这么多了,祝每一个linuxer玩的愉快:)