查看当前i/o调度算法可通过命令cat /sys/block/sda/queue/scheduler,方括号中为当前使用的调度器;2. 常见调度器包括noop、deadline、cfq、bfq和none,各自适用于不同硬件与场景;3. 临时修改使用echo deadline > /sys/block/sda/queue/scheduler,需root权限且重启失效;4. 永久修改可通过在grub配置中添加elevator=deadline参数或创建udev规则实现;5. 推荐根据场景选择调度器:hdd多任务用deadline或bfq,ssd/nvme用noop或none,数据库用deadline,虚拟机用noop,桌面用bfq,修改前应通过iostat、iotop等工具测试实际性能表现以确定最优方案。

在Linux系统中,磁盘I/O调度算法(也称为电梯算法)决定了内核如何对块设备的读写请求进行排序和处理。合理选择和设置I/O调度器可以显著影响系统性能,尤其是在高负载或特定应用场景(如数据库、虚拟化、大文件读写)中。
以下是设置和修改磁盘I/O调度算法的方法:
一、查看当前I/O调度算法
要查看某个磁盘当前使用的调度器,可以使用以下命令:
cat /sys/block/sda/queue/scheduler
输出示例:
noop deadline [cfq] bfq
方括号
[]
中的是当前正在使用的调度器(如
cfq
)。其他是可用的调度器。
注意:不同内核版本支持的调度器可能不同,sda 请替换为你的实际设备名(如 nvme0n1、sdb 等)。
二、常见的I/O调度算法
Linux常见的调度器有以下几种:
noop:最简单的调度器,仅合并相邻的请求,不做排序。适合SSD、NVMe等无机械寻道的设备,或虚拟机中(由底层宿主处理调度)。deadline:保证请求在一定时间内被处理,避免饥饿。适合数据库类应用,强调低延迟。cfq(Completely Fair Queuing):为每个进程分配I/O队列,力求公平。在旧版内核中默认,但已被逐步淘汰。bfq(Budget Fair Queueing):cfq的现代替代,更精细控制带宽分配,适合桌面交互场景。none:用于非传统块设备(如某些NVMe设备),由设备自身管理调度。
三、临时修改I/O调度器(重启失效)
要临时更改某个磁盘的调度器,例如将
sda
的调度器改为
deadline
:
echo deadline > /sys/block/sda/queue/scheduler
注意:需要 root 权限,使用
sudo或在 root 下执行。
验证是否更改成功:
cat /sys/block/sda/queue/scheduler
你会看到:
noop [deadline] cfq bfq
四、永久修改I/O调度器
临时修改在重启后会失效。要永久生效,有以下几种方式:
1. 通过内核启动参数(推荐)
编辑GRUB配置文件:
sudo vim /etc/default/grub
找到
GRUB_CMDLINE_LINUX
行,添加调度器参数:
Glean
Glean是一个专为企业团队设计的AI搜索和知识发现工具
117 查看详情
GRUB_CMDLINE_LINUX="elevator=deadline"
保存后更新GRUB配置:
Ubuntu/Debian:
sudo update-grub
CentOS/RHEL:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
重启后,所有块设备将默认使用
deadline
调度器。
2. 使用udev规则(按设备设置)
如果你只想对特定设备(如
sda
)设置调度器,可创建udev规则。
创建规则文件:
sudo vim /etc/udev/rules.d/60-scheduler.rules
添加内容(以
sda
使用
deadline
为例):
ACTION=="add|change", KERNEL=="sda", ATTR{queue/scheduler}="deadline"
支持通配符,例如对所有SCSI设备:
ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="sd*", ATTR{queue/scheduler}="deadline"
保存后,重启或重新加载udev规则:
sudo udevadm control --reload-rules
下次设备加载时会自动应用。
五、不同场景的调度器选择建议
机械硬盘(HDD) + 多任务@@######@@ 或 @@######@@减少寻道,保证响应固态硬盘(SSD)/NVMe@@######@@ 或 @@######@@无机械延迟,无需复杂调度数据库服务器@@######@@避免I/O延迟波动虚拟机Guest系统@@######@@调度由宿主完成桌面系统@@######@@提升交互响应
基本上就这些。修改调度器不复杂,但需结合硬件和应用特点选择。建议先测试不同调度器在实际负载下的表现(可用
deadline
、
bfq
监控),再决定最优方案。
noop
none
deadline
noop
bfq
iostat
iotop
以上就是如何设置磁盘调度 修改IO调度算法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/807534.html
微信扫一扫
支付宝扫一扫