感觉上 Linux 桌面的 I/O 调度器用 CFQ 会反应快好多,不容易被拖住。
可以在 Linux 引导参数加一个
elevator=cfq , 比如 Grub 里用类似
kernel /boot/vmlinuz-2.6.17-6-686 root=/dev/hda ro quiet splash elevator=cfq为了让升级的内核在更新 Grub 时候也加上这个,可以修改
menu.lst 的
# defoptions 项
比如用下面的脚本
if (! grep “elevator=cfq” /boot/grub/menu.lst > /dev/null 2>&1); then
logger “ Kernel process scheduler changed to CFQ”
sudo sed -ie ‘/# defoptions/s/splash/splash elevator=cfq/’ /boot/grub/menu.lst
sudo update-grub
else
echo “Kernel process scheduler is already CFQ”
fi
Linux2.6 包含的 4 个 I/O 调度器分别是 No-op I/O scheduler, Anticipatory I/O scheduler, Deadline I/O scheduler, CFQ I/O scheduler 。
分别简称 ns , ds , as , cfq 。
ns是一个简化的调度程序它只作最基本的合并与排序。与桌面系统的关系不是很大,主要用在
一些特殊的软件与硬件环境下,这些软件与硬件一般都拥有自己的调度机制对内核支持的要
求很小,这很适合一些嵌入式系统环境。作为桌面用户我们一般不会选择它。
as是当前内核中默认的I/O调度器。它拥有非常好的性能,在2.5中它就相当引人注意。在
与2.4内核进行的对比测试中,在2.4中多项以分钟为单位完成的任务,它则是以秒为
单位来完成的。正因为如此它成为目前2.6测试版中默认的I/O调度器。但它也存在着
弱点,它本身是比较庞大与复杂的,在一些特殊的情况下,特别是在数据吞吐量非常大的数
据库系统中它会变的比较缓慢。
ds就是针对as的缺点进行改善而来的,还处于测试阶段,但已经很稳定了。目前表现出的性
能几乎与as一样好。加之比as更加小巧,是相当有前途的调度器。
cfq为系统内的所有任务分配相同的带宽,提供一个公平的工作环境,它比较适合桌面环境。事
实上在测试中它也有不错的表现,
原先我用 fontforge 编辑字体的时候, 系统会明显反应慢下来, 现在改用 CFQ I/O 调度器后不会了。而 fontforge 自己的反应也比以前灵敏, fontforge 的io 求应该明显比其他程序多,
zhllg 的解释是:<zhllg> 恩,那应该是因为merge的缘故
<zhllg> 因为cfq里每个进程有一个io请求队列
<zhllg> fontforge的都在一个队列里,而且是顺序提交的,都可以merge
<zhllg> 我的理解,呵呵
<zhllg> merge之后减少了磁头来回寻址,可以在一个地方一直写下去,当然有一定时间限制,不
会一直写下去
<zhllg> 磁盘寻址是整个计算机系统里操作速度最慢的动作之一了