新版内核在blk层加入了多队列功能,可以尽情发挥SSD的性能,开启多队列可以在编译内核的时候默认开启,也可以通过启动参数配置scsi_mod.use_blk_mq
- 在/etc/default/grub中添加参数:
GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=1" # 1是开启 0是关闭
- 更新grub:
sudo update-grub
或者直接编辑/boot/grub/grub.cfg在vmlinuz开头的一行结尾处添加
scsi_mod.use_blk_mq=1
开启blk-mq之后可以使用mq-deadline、BFQ和Kyber调度器,开启之后不支持电梯标记,也就是启动参数中的:
elevator=none
有多个磁盘可以配置一下udev规则:
# 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"
注:开启多对列之后单队列就不能使用了,相应的单队列算法都看不见了,想要使用单队列关闭多队列调度即可。