Linux中IO调度器按块设备独立配置,需用cat /sys/block/设备名/queue/scheduler查看,SSD/NVMe推荐none或mq-deadline,HDD适用mq-deadline或deadline,临时修改用echo写入sysfs,永久生效需添加elevator=参数至GRUB并更新配置。

Linux 中切换磁盘 I/O 调度器是提升读写效率的直接有效手段,关键在于匹配调度器特性与你的存储介质和负载类型。不用改内核、不重装系统,一条命令就能生效。
先确认当前调度器和可用选项
执行以下命令查看目标磁盘(如 sda)当前使用的调度器及所有支持的选项:
cat /sys/block/sda/queue/scheduler
输出类似:[cfq] noop deadline mq-deadline —— 方括号中的是当前启用的,其余为可选。注意:新内核(5.0+)多用 mq-deadline 或 bfq 替代旧版 cfq;SSD/NVMe 设备常见默认已是 none(即绕过调度器)或 kyber。
按设备类型选对调度器
选错调度器可能反而拖慢性能。核心原则:
- SSD / NVMe / RAM Disk:用 none(禁用调度)或 noop。它们无寻道延迟,排序合并请求反而增加开销。
- 传统 HDD(尤其数据库、高并发随机读写):优先试 mq-deadline(新内核)或 deadline(老内核)。它设超时机制,防请求饿死,保障响应延迟。
- 通用服务器、桌面环境、混合负载:bfq(Budget Fair Queueing)更公平分配带宽,适合多进程争抢 I/O 的场景;若不可用,cfq 仍可作为兼容选择。
即时切换并验证效果
无需重启,立即生效:
echo mq-deadline > /sys/block/sda/queue/scheduler
再运行一次 cat /sys/block/sda/queue/scheduler 确认方括号已移到新名字上。接着用 iostat -x 1 或 iotop 观察 await(平均等待时间)、%util(设备利用率)是否下降,r/s 和 w/s 是否提升——这才是真实收益。
永久生效要改启动参数
临时切换重启后会失效。永久设置需修改 GRUB:
编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX 行末尾添加:
elevator=mq-deadline(老内核用 elevator=deadline)
保存后运行:
sudo update-grub && sudo reboot
注意:部分发行版(如 RHEL 8+/CentOS 8+)使用 kernel command line 中的 scsi_mod.use_blk_mq=1 配合 mq-deadline 才能发挥最佳效果。


















