需配置内核i/o调度器以适配存储介质:一、查看当前支持算法及设置;二、临时修改指定设备调度器;三、永久修改系统默认调度器;四、按设备类型差异化配置;五、验证实际io效果。

如果您在银河麒麟操作系统中需要调整磁盘I/O行为以适配特定存储介质或工作负载,则需配置内核elevator(即I/O调度器)。不同调度算法对HDD、NVMe SSD或混合存储栈表现差异显著,配置不当可能导致延迟升高或吞吐下降。以下是多种可行的配置方法:
一、查看当前系统支持的I/O调度算法及当前设置
该步骤用于确认系统可用的调度器列表与各块设备当前启用的算法,是后续修改的前提。Linux内核通过/sys/block/接口暴露调度器信息,不同设备可能呈现不同默认值。
1、执行命令列出所有块设备名称:ls /sys/block/
2、针对目标设备(例如sda或nvme0n1),查看其支持的调度器及当前激活项:cat /sys/block/sda/queue/scheduler
3、输出示例为:[mq-deadline] kyber bfq none,其中方括号内为当前生效算法。
二、临时修改指定设备的I/O调度算法
该方法通过向sysfs写入参数实现运行时切换,无需重启,但重启后失效。适用于测试验证或紧急调优场景,特别适合SSD设备启用none或kyber,或HDD启用mq-deadline。
1、确认目标设备名(如sda)并检查当前状态:cat /sys/block/sda/queue/scheduler
2、将调度器临时设为none(适用于NVMe SSD):echo none > /sys/block/sda/queue/scheduler
3、将调度器临时设为kyber(适用于低延迟敏感型SSD):echo kyber > /sys/block/sda/queue/scheduler
4、验证是否生效:cat /sys/block/sda/queue/scheduler
三、永久修改系统级默认I/O调度算法
该方法通过修改内核启动参数,在GRUB引导阶段注入elevator选项,使所有兼容块设备在系统启动时统一采用指定调度器。适用于生产环境标准化部署,尤其适合全闪存服务器或数据库专用节点。
1、编辑GRUB配置文件:sudo vim /etc/default/grub
2、定位到GRUB_CMDLINE_LINUX行,在引号内添加参数:elevator=kyber(可选值:none、mq-deadline、bfq、kyber)
3、更新GRUB配置:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
4、重启系统使更改生效:sudo reboot
四、按设备类型差异化配置多调度器策略
当系统存在异构存储(如同时挂载SATA SSD和NVMe盘)时,单一全局调度器无法兼顾性能。可通过udev规则为不同设备匹配专属调度器,实现精细化控制。
1、创建udev规则文件:sudo vim /etc/udev/rules.d/60-io-scheduler.rules
2、为NVMe设备强制设为none:ACTION=="add|change", KERNEL=="nvme[0-9]*n[0-9]*", ATTR{queue/scheduler}="none"
3、为SATA SSD(基于型号识别)设为kyber:ACTION=="add|change", SUBSYSTEM=="block", ATTR{device/model}==".*SSD.*", ATTR{queue/scheduler}="kyber"
4、重新加载udev规则并触发应用:sudo udevadm control --reload-rules && sudo udevadm trigger
五、验证调度器实际效果与IO行为
仅确认调度器名称不等于性能优化达成。必须结合iostat、blktrace等工具观测真实IO路径行为,判断是否达到预期目标,例如减少平均等待时间、提升IOPS或降低延迟抖动。
1、使用iostat持续监控延迟分布:iostat -x 1 /dev/sda
2、捕获IO请求排队深度与合并率:iostat -x -d 1 /dev/sda | grep -E "(await|svctm|aqu-sz|rrqm)"
3、对关键业务路径进行blktrace抓包分析:blktrace -d /dev/sda -o sda_trace && blkparse -i sda_trace










