Linux内核IO调度器有CFQ、Deadline、NOOP和BFQ四种:CFQ保障进程间IO公平与低延迟,适合桌面与多用户服务器;Deadline通过超时机制平衡响应与吞吐,适用于数据库;NOOP仅FIFO排队,专为SSD等智能设备设计;BFQ是CFQ增强版,以预算制提升公平性与效率,适合容器与云环境。

Linux内核的IO调度器(也称磁盘调度算法)负责决定块设备请求的执行顺序,直接影响磁盘I/O性能、延迟和吞吐量。不同场景下,合适的调度器能显著提升系统响应或吞吐能力。
CFQ:适合交互式桌面与通用负载
CFQ(Completely Fair Queuing)为每个进程分配独立IO队列,按时间片轮转调度,保障公平性与低延迟。它会主动合并相邻请求、进行预读,并限制单个进程的IO带宽,避免某进程独占磁盘。
- 适用场景:桌面环境、虚拟机宿主机、多用户服务器(如Web+DB混合负载)
- 优势:响应快、交互体验好、避免IO饥饿
- 注意:在SSD或高并发随机IO场景下可能引入额外开销,因无需考虑寻道优化
Deadline:强调响应确定性与吞吐平衡
Deadline调度器维护读/写两个FIFO队列,并为每个请求设置超时时间(默认读500ms、写5s)。它优先处理即将超时的请求,同时积极合并邻近扇区请求,兼顾延迟可控性和吞吐效率。
- 适用场景:数据库服务器(如MySQL、PostgreSQL)、对延迟敏感的在线服务
- 优势:避免请求长时间等待,比CFQ更轻量,SSD上表现稳定
- 可调参数:read_expire 和 write_expire 可根据业务IO特征微调
NOOP:极简调度,专为SSD与智能存储设计
NOOP仅做基础请求合并与先进先出(FIFO)排队,不进行排序或预判。它把调度权完全交给底层设备——现代SSD主控、NVMe控制器或智能RAID卡自身已具备高效内部调度能力。
- 适用场景:NVMe SSD、SATA/SAS SSD、带TCM或智能缓存的存储阵列
- 优势:CPU开销最低、延迟最短、避免内核与设备双重调度冲突
- 验证方式:可通过iostat -x 1观察%util是否持续接近100%,若IO延迟仍低,说明NOOP适配良好
BFQ:CFQ的增强替代,兼顾公平与吞吐
BFQ(Budget Fair Queuing)是CFQ的继任者,采用“预算制”代替时间片,更精准控制每个进程的IO份额。它对小文件随机读写、后台刷盘、突发IO等场景优化明显,尤其在高负载下仍保持低延迟。
- 适用场景:容器平台、Kubernetes节点、高密度虚拟化、混合负载云服务器
- 优势:比CFQ更节能、更少IO抖动;在HDD和SSD上均有稳定收益
- 启用方式:需内核≥4.12,通过echo bfq > /sys/block/sda/queue/scheduler切换










