在linux新内核版本中增加了BFQ和Kyber调度器(多队列IO排队机制),要启用这两个新调度器,需要scsi_mod.use_blk_mq启动,
在/etc/default/grub中启动:
GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=1(0是关闭)"
并重新生成grub:
grub-mkconfig -o /boot/grub/grub.cfg
另外blk_mq调度系统是不支持grub中的电梯标记,也就是grub中的:
GRUB_CMDLINE_LINUX_DEFAULT="elevator=none"<---是不会生效的
需要使用udev规则,在/etc/udev/rules.d中创建一个scheduler.rules,添加如下:
-
ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"<---也可是别的多队列调度器
如果有多个硬盘,可以使用一下规则:
-
# set deadline scheduler for non-rotating disks
-
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0",ATTR{queue/scheduler}="bfq"
-
# set bfq scheduler for rotating disks
-
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="deadline"
-
# set mq-deadline scheduler for non-rotating nvme-disks
-
ACTION=="add|change", KERNEL=="nvme[0-9]n1", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="bfq"
如果没有看到单队列调度器,又有场景需要使用的话,需要尝试在boot的时候把scsi_mod.use_blk_mq关了,旧的队列如cfq应该可以看到
至于多队列调度器和单队列调度器的优劣,请自行百度,暂时先写到这里,有问题再更新
阅读(5632) | 评论(0) | 转发(0) |