商城首页欢迎来到中国正版软件门户

您的位置:首页 >Linux怎么查看当前的IO调度算法是什么

Linux怎么查看当前的IO调度算法是什么

  发布于2026-08-11 阅读(0)

扫一扫,手机访问

真正靠谱的判断方式,还是直接去读 /sys/block/设备名/queue/scheduler:块设备的调度器是按设备单独配置的,不能一概而论。先用 lsblk -d 确认对应的物理设备名,再通过 cat 查看这个路径下的内容,方括号里的那一项,就是当前实际生效的配置。至于 NVMe 设备显示 [none],这属于正常设计,本身就不应该强行改动。

Linux怎么查看当前的IO调度算法是什么

查 /sys/block/设备名/queue/scheduler 是唯一可靠方式

Linux 没有全局“系统级”IO调度算法,每个块设备(如 sdanvme0n1)独立配置,lsblkdfdmesg 都不暴露调度器信息。必须直接读取 sysfs 接口:

  • 先确认设备名:lsblk -dcat /proc/partitions,排除 loopdm-zram 等非物理设备
  • 再查调度器:cat /sys/block/sda/queue/scheduler(把 sda 替换为你的真实设备名)
  • 输出形如 [mq-deadline] kyber bfq none,方括号内就是当前生效项
  • NVMe 设备(如 nvme0n1)常见输出是 [none]——这不是错误,而是内核主动绕过软件调度层,此时写入其他调度器会失败

看到 [none] 就别硬改,尤其对 NVMe 设备

none 在现代内核里并不等于“没设置”,它表达的是一个很明确的意思:直接跳过 blk-mq 的软件调度,把队列处理交给 NVMe 控制器自己完成。要是强行写成 kybermq-deadline,结果通常只有两种:要么直接返回 Invalid argument,要么表面上写进去了,实际上静默失败。

  • 验证是否为 NVMe:lsblk -d | grep nvmelspci | grep -i nvme
  • 若设备是 SATA SSD 却显示 [cfq][deadline],才值得考虑切换;若已是 [mq-deadline][kyber],通常无需调整
  • 部分旧驱动或 RAID 卡可能不支持 mq-deadline,写入后仍显示原值,说明内核拒绝了该设置

临时切换调度器:echo 写入 + root 权限

这个操作立即生效,但重启后还原。适合快速验证,但对根设备(如装系统的 sda)慎用,可能引发短暂卡顿:

  • 必须用 root:sudo sh -c 'echo kyber > /sys/block/sda/queue/scheduler'
  • 只能写入 cat 输出中列出的选项,比如输出是 [noop] mq-deadline,就不能写 bfq
  • 写成功后再次 cat 应看到方括号移位;若没变,说明设备不支持或权限不足
  • 某些场景(如数据库压测前)可临时切到 mq-deadline,但别在生产环境反复切换

永久修改靠 GRUB 参数,不是配置文件

靠内核启动参数 elevator=xxx 实现,对所有块设备统一生效,无法按设备区分:

  • 编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 行末加 elevator=mq-deadline(空格分隔)
  • Debian/Ubuntu 执行:sudo update-grub;RHEL/CentOS 执行:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  • 重启才生效;若启动失败,进 GRUB 编辑启动项,临时删掉 elevator= 参数即可恢复
  • 混用 HDD 和 SSD 时,这个全局参数会失效——此时得用 udev 规则按设备名精准设置,而不是依赖 GRUB
实际调优时,最易被忽略的是:NVMe 的 none 不是缺省值,而是设计选择;而 SATA SSD 用 mq-deadlinekybercfq 更稳,但改完必须用 iostat -x 1 观察 await%util 才算真正落地。
本文转载于:https://www.php.cn/faq/2972580.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注