查看当前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调度算法的方法:
要查看某个磁盘当前使用的调度器,可以使用以下命令:
cat /sys/block/sda/queue/scheduler
输出示例:
noop deadline [cfq] bfq
[]
cfq
注意:不同内核版本支持的调度器可能不同,sda 请替换为你的实际设备名(如 nvme0n1、sdb 等)。
Linux常见的调度器有以下几种:
要临时更改某个磁盘的调度器,例如将
sda
deadline
echo deadline > /sys/block/sda/queue/scheduler
注意:需要 root 权限,使用
或在 root 下执行。sudo登录后复制
验证是否更改成功:
cat /sys/block/sda/queue/scheduler
你会看到:
noop [deadline] cfq bfq
临时修改在重启后会失效。要永久生效,有以下几种方式:
编辑GRUB配置文件:
sudo vim /etc/default/grub
找到
GRUB_CMDLINE_LINUX
GRUB_CMDLINE_LINUX="elevator=deadline"
保存后更新GRUB配置:
Ubuntu/Debian:
sudo update-grub
CentOS/RHEL:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
重启后,所有块设备将默认使用
deadline
如果你只想对特定设备(如
sda
创建规则文件:
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调度算法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号