Linux 系统使用 I/O 调度算法,在各个竞争执行磁盘 I/0 的进程之间做仲裁。这个 I/O 调度器对请求的次序和时机做最优化处理,以求针对一个应用或者场合,取得尽可能最好的整体 I/O 性能。
常用调度算法说明
CFQ(Completely Fair Queuing)
这是 2.6 版的 Linux 内核的默认调度算法,对于通用服务器来说通常是比较好的选择。它试图均匀的分布对 I/O 带宽的访问。
Deadline
这个算法试图把每次请求的延迟降至最低。该算法重排了请求的顺序来提高性能。
NOOP
这个算法实现了一个简单 FIFO 队列。在有些 SAN 环境下,这种选择可能是最好的选择,而且对于 SSD 盘来说,它是最佳选择。
查看系统调度算法
# dmesg |grep -i scheduler
[ 1.061992] io scheduler noop registered
[ 1.061996] io scheduler deadline registered (default)
[ 1.062022] io scheduler cfq registered
[ 1.062025] io scheduler mq-deadline registered
[ 1.062027] io scheduler kyber registered
从上述命令输出结果中可以看到,当前默认使用的算法是 deadline 算法,deadline 也是 CentOS 7 系统默认的调度算法,而在 CentOS 6 版本中使用的默认调度算法是 cfq。
调度算法的配置
配置指定磁盘的 I/O 调度算法
# cat /sys/block/sda/que