I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。
下面列出4种调度算法:
CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq): 这是默认算法,对于通用服务器来说通常是最好的选择。它试图均匀地分布对I/O带宽的访问。
Deadline (elevator=deadline): 这个算法试图把每次请求的延迟降至最低。该算法重排了请求的顺序来提高性能。
NOOP (elevator=noop): 这个算法实现了一个简单FIFO队列。他假定I/O请求由驱动程序或者设备做了优化或者重排了顺序(就像一个智能控制器完成的工作那样)。在有些SAN环境下,这个选择可能是最好选择。
Anticipatory (elevator=as): 这个算法推迟I/O请求,希望能对它们进行排序,获得最高的效率。对于桌面工作站来说,这个算法可能是一个不错的选择,但对服务器则很少会理想。
查询当前使用的IO调度器
cat /sys/block/{DEVICE-NAME}/queue/scheduler
例如:
cat /sys/block/sda/queue/scheduler
如何修改IO调度器
To set a specific scheduler, simply type the command as follows:
# echo {SCHEDULER-NAME} > /sys/block/{DEVICE-NAME}/queue/scheduler
For example, set noop scheduler, enter:
# echo noop > /sys/block/hda/queue/scheduler
也可以在引导的时候传递参数给内核
elevator=deadline
Debian lenny默认选择的CFQ调度器,不过据说DBServer上使用deadline会更好。
See : http://www.ibm.com/developerworks/cn/linux/l-scheduler/
http://www.redhat.com/magazine/008jun05/features/schedulers/