必须按介质类型精准配置调度器:HDD用bfq、SATA SSD用mq-deadline、NVMe用none;先查rotational值和当前调度器,再临时或永久修改,避免IO阻塞。

银河麒麟OS中磁盘I/O调度算法若未匹配实际存储介质类型,会导致数据库响应延迟升高、iostat显示await异常偏高、iotop中请求持续堆积,吞吐量下降20%以上——必须按HDD用bfq、SATA SSD用mq-deadline、NVMe用none的原则精准调整。
确认目标磁盘类型与当前调度器
这一步不能跳过,否则后续修改可能无效甚至引发IO阻塞。银河麒麟V10/V11默认对不同设备启用不同调度器,需先定位目标盘并验证其物理属性。
执行命令列出所有块设备:ls /sys/block/
查看目标设备(如sda)是否为旋转介质:cat /sys/block/sda/queue/rotational。返回【1】表示是HDD,【0】表示SSD/NVMe。
读取当前调度器:cat /sys/block/sda/queue/scheduler。输出形如[bfq] mq-deadline kyber none——方括号内为生效项;若显示【[none]】且设备为NVMe,说明已绕过内核调度层,此时强行改写将失败。
临时切换调度器(立即生效,重启失效)
适用于快速验证效果或紧急调优,无需重启,但仅作用于当前运行时。
方法一:针对SATA SSD或数据库盘,设为mq-deadlinesudo sh -c 'echo mq-deadline > /sys/block/sda/queue/scheduler'
方法二:针对NVMe盘,设为none(注意:部分NVMe驱动不接受写入,若cat后仍显示[none]则属正常)sudo sh -c 'echo none > /sys/block/nvme0n1/queue/scheduler'
方法三:针对老旧HDD服务器,设为bfq(需确认内核支持:cat /sys/block/sda/queue/scheduler中含bfq才可用)sudo sh -c 'echo bfq > /sys/block/sdb/queue/scheduler'
验证是否成功:cat /sys/block/sda/queue/scheduler,必须看到新调度器被方括号包裹。若报错【Invalid argument】,说明该设备不支持所选算法或当前处于只读状态。
永久修改为设备级默认调度器(推荐生产环境)
混合存储环境(如SATA HDD + NVMe SSD共存)必须按设备类型分别配置,避免全局设置引发性能劣化。
第一步:创建专用udev规则文件sudo nano /etc/udev/rules.d/99-io-scheduler.rules
第二步:根据设备类型填入对应规则(以下三行任选其一粘贴):ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none"ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="sd[a-z]", PROGRAM=="/bin/sh -c 'cat /sys/block/%k/queue/rotational'", RESULT=="1", ATTR{queue/scheduler}="bfq"ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="sd[a-z]", PROGRAM=="/bin/sh -c 'cat /sys/block/%k/queue/rotational'", RESULT=="0", ATTR{queue/scheduler}="mq-deadline"
第三步:重新加载udev规则并触发生效sudo udevadm control --reload-rules && sudo udevadm trigger
第四步:验证是否生效——执行cat /sys/block/sda/queue/scheduler,输出应显示目标调度器被方括号包裹;重启后再次检查,确保值未回退。

















