在SSD与HDD混合部署的服务器中,必须为不同磁盘类型差异化配置IO调度器:SSD应设为none(或noop),以消除冗余调度开销;HDD应设为deadline,以优化寻道路径、降低随机IO延迟;统一使用cfq等通用调度器会导致HDD寻道延迟飙升、SSD响应变慢,实测平均写延迟可能增加40%以上。

在服务器同时插着机械硬盘(HDD)和固态硬盘(SSD)的混合环境中,若所有磁盘统一使用默认调度器(如cfq或kyber),HDD会因频繁随机IO导致寻道延迟飙升,SSD则被冗余调度拖慢响应——实测平均写延迟可能增加40%以上。
确认当前各磁盘的调度器类型
先查清每块盘实际用的是什么算法,避免盲目修改。运行:
cat /sys/block/sda/queue/scheduler → 输出形如 [mq-deadline] kyber bfq none;方括号内为当前激活项。
对NVMe盘,需用nvme0n1代替sda;多个盘要逐个检查,不能只看一块。
【必须区分设备名】 sda、sdb、nvme0n1是不同物理设备,混用会导致HDD被误设为noop,引发严重IO饥饿。
为SSD类设备设置none调度器
方法一:临时生效(重启失效)
echo none > /sys/block/nvme0n1/queue/scheduler
echo none > /sys/block/sdb/queue/scheduler(若sdb是SATA SSD)
注意:部分旧内核不支持none,改用noop即可。
方法二:永久生效(推荐)
编辑 /etc/default/grub,在GRUB_CMDLINE_LINUX行末尾添加 elevator=none;
执行 grub2-mkconfig -o /boot/grub2/grub.cfg(CentOS/RHEL)或 update-grub(Debian/Ubuntu);
重启后生效。此方式确保initrd阶段即加载正确调度器,避免早期IO卡顿。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
为HDD类设备设置deadline调度器
第一步:确认目标设备确为HDD
使用 smartctl -i /dev/sda | grep "Rotation Rate",输出"Rotation Rate: 7200 rpm"即为机械盘;若显示"None"则为SSD/NVMe。
第二步:临时切换调度器
echo deadline > /sys/block/sda/queue/scheduler
第三步:验证是否生效
cat /sys/block/sda/queue/scheduler 应显示 [deadline] kyber bfq none
第四步:永久配置(可选)
若该HDD长期承担数据库归档或备份任务,建议单独为其建立udev规则,避免与其他盘共用GRUB全局参数:
新建 /etc/udev/rules.d/60-hdd-scheduler.rules,内容为:
SUBSYSTEM=="block", KERNEL=="sda", ATTR{queue/scheduler}="deadline"
验证调度器生效后的IO表现
运行 iostat -xdz 2 5,重点观察三项:
• w_await:HDD应低于30ms,SSD应低于2ms;
• aqu-sz:HDD队列深度稳定在1.5~3之间,SSD可升至60+;
• %util:HDD持续高于85%说明仍过载,需检查应用是否做了IO合并。
若HDD的w_await突然跳到50ms以上,立即检查是否误将该盘设为none——此时需立刻切回deadline,否则业务写入将大面积超时。


















