首页 > 运维 > linux运维 > 正文

如何设置磁盘调度 修改IO调度算法

P粉602998670
发布: 2025-08-23 09:52:02
原创
536人浏览过

查看当前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等工具测试实际性能表现以确定最优方案。

如何设置磁盘调度 修改IO调度算法

在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
登录后复制
行,添加调度器参数:

百度·度咔剪辑
百度·度咔剪辑

度咔剪辑,百度旗下独立视频剪辑App

百度·度咔剪辑 3
查看详情 百度·度咔剪辑
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调度算法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号