Linux中的磁盘调度算法,即I/O Scheduler,用于负责管理块设备(例如硬盘、SSD等)的I/O请求顺序,对系统性能有重要影响。Completely Fair Queuing,完全公平队列。- 为每个进程都单独维护一个I/O队列,按照时间片轮转的方式进行处理。
- 为旧版内核的默认调度算法,在5.x内核中已被移除。
- 包含读/写两个队列,并按照截止时间进行排序,同时维护一个按照扇区进行排序的队列。
- 为进程分配“预算”(即时间或者扇区数量),控制带宽分配。
- 从内核4.12开始成为部分Linux发行版的默认调度算法。
- 使用读、写两个队列,根据延迟目标动态调整队列深度。
- 针对多队列块设备,例如NVMe的Deadline改进版。
[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
[root@loaclhost ~]# echo kyber > /sys/block/sda/queue/scheduler[root@loaclhost ~]# cat /sys/block/sda/queue/schedulermq-deadline [kyber] bfq none
# 编辑 /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
为确保达梦数据库的稳定运行,需要将磁盘的调度算法设置为 deadline,特别是 arm 平台,必须要设置为 deadline。如存储为 NVMe 等高性能的设备时,此类设备 IO 调度算法只有 none,则无需设置。