当前位置:首页>Linux>linux中的磁盘调度算法

linux中的磁盘调度算法

  • 2026-09-18 16:27:32
linux中的磁盘调度算法
Linux中的磁盘调度算法,即I/O Scheduler,用于负责管理块设备(例如硬盘、SSD等)的I/O请求顺序,对系统性能有重要影响。
如下是主要的调度算法及其特点:
1,CFQ
Completely Fair Queuing,完全公平队列。
特点:
  • 为每个进程都单独维护一个I/O队列,按照时间片轮转的方式进行处理。
  • 目标是公平分配磁盘带宽,避免进程饥饿。
使用场景:
  • 面向HDD,即机械硬盘。
  • 多用户/多任务环境。
内核支持:
  • 为旧版内核的默认调度算法,在5.x内核中已被移除。
2,Deadline
特点:
  • 为每个请求设置截止时间,读请求优先于写请求。
  • 避免请求饿死,减少I/O延迟。
  • 包含读/写两个队列,并按照截止时间进行排序,同时维护一个按照扇区进行排序的队列。
适用场景:
  • 面向数据库、实时系统等。
  • 适用于延迟敏感的应用。
内核支持:
  • 依然在内核当中保留。
3,NOOP
特点:
  • 简单的FIFO队列,只进行基本的请求合并。
  • 不进行排序,依赖底层硬件或者虚拟化层的调度。
适用场景:
  • SSD、NVMe(无寻道时间)。
  • 虚拟化环境(宿主机已经有调度策略)。
内核支持:
  • 依然在内核当中保留。
4,BFQ
Budget Faire Queuing。
特点:
  • 基于CFQ而改进,强调低延迟和公平性。
  • 为进程分配“预算”(即时间或者扇区数量),控制带宽分配。
适用场景:
  • 桌面系统等交互式应用、多媒体应用。
  • 需要公平带宽分配的环境。
内核支持:
  • 从内核4.12开始成为部分Linux发行版的默认调度算法。
其逻辑图如下:
5,Kyber
特点:
  • 为快速设备例如SSD而设计,目标是最小化延迟。
  • 使用读、写两个队列,根据延迟目标动态调整队列深度。
适用场景:
  • SSD、NVMe等低延迟设备。
内核支持:
  • 从内核4.12引入。
6,MQ-Deadline
特点:
  • 针对多队列块设备,例如NVMe的Deadline改进版。
  • 支持多硬件队列,提高并发性能。
适用场景:
  • 现代高速存储设备,例如NVMe SSD。
内核支持:
  • 内核5.0+中的NVMe设备的默认调度算法。
调度算法的查看与切换
1,当前设置
[root@loaclhost ~]# cat /etc/.productinfoKylin Linux Advanced Serverrelease V10 SP3 2403/(Halberd)-x86_64-Build20/20240426[root@loaclhost ~]#  cat /sys/block/sda/queue/scheduler[mq-deadline] kyber bfq none
2,临时切换(重启后失效)
[root@loaclhost ~]# echo kyber > /sys/block/sda/queue/scheduler[root@loaclhost ~]# cat /sys/block/sda/queue/schedulermq-deadline [kyber] bfq none
3,永久切换
# 编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX 添加:elevator=bfq# 例如:GRUB_CMDLINE_LINUX="resume=/dev/mapper/klas-swap rd.lvm.lv=klas/root rd.lvm.lv=klas/swap rhgb quiet crashkernel=1024M,high audit=0 elevator=bfq"
[root@loaclhost ~]# cat /sys/block/sda/queue/schedulermq-deadline [kyber] bfq none
DM8推荐的设置
为确保达梦数据库的稳定运行,需要将磁盘的调度算法设置为 deadline,特别是 arm 平台,必须要设置为 deadline。如存储为 NVMe 等高性能的设备时,此类设备 IO 调度算法只有 none,则无需设置。

最新文章

随机文章