1、配备NVMe SSD的服务器,是否应该开启blk_mq选项;
可以开启,且在kernel 3.19以后开始支持blk_mq,且都是默认开启的。
本地验证Centos 8.3 kernel 4.18,默认开启,且无法关闭。中科方德 NFSChina Server release 4.0.22061301,kernel 4.19的可以进行使能或者关闭且默认是开启的。
2、开启上述选项后硬盘的调度策略该如何设置。
查看是否开启blk_mq
cat /sys/block/dm-0/dm/use_blk_mq
1:enable 0:disable
#以中科方德OS举例
Enable:
a,vim /etc/default/grub #在GRUB_CMDLINE_LINUX 添加scsi_mod.use_blk_mq=y dm_mod.use_blk_mq=y 保存后退出
b,grub2-mkconfig-o /boot/efi/EFI/NFS/grub .cfg
c,reboot
3、性能提升原理解析
Multi-Queue Block IO Queueing Mechanism (blk-mq) 多队列块 IO 排队机制是一种 API,使快速存储设备能够通过对块设备同时排队和提交 IO 请求来实现每秒大量的输入/输出操作 (IOPS),从而受益于现代存储提供的并行性设备。
原因如下:
从内核开发之初起,磁硬盘就已经成为事实上的标准。块 IO 子系统旨在为那些在进行随机访问时具有高惩罚的设备实现最佳性能,而瓶颈是机械移动部件,比存储堆栈上的任何层都要慢得多。这种优化技术的一个示例涉及根据硬盘磁头的当前位置对读/写请求进行排序。
然而,随着固态硬盘和非易失性存储器的发展,没有机械部件,也没有随机访问惩罚,并且能够执行高并行访问,堆栈的瓶颈已经从存储设备转移到操作系统。为了利用这些设备设计中的并行性,引入了多队列机制。
以前的设计有一个队列来存储带有单个锁的块 IO 请求。由于缓存中的脏数据以及多个处理器具有单个锁的瓶颈,这在 SMP 系统中无法很好地扩展。当不同进程(或移动到不同 CPU 的同一进程)想要执行块 IO 时,此设置也会遇到拥塞。取而代之的是,blk-mq API 生成多个队列,其中具有 CPU 本地的各个入口点,从而消除了对锁的需要。
更详细的说明可参考如下连接: https://blog.csdn.net/t1506376703/article/details/109967166
4、本地验证了一组开启blk_mp和关闭的性能数据,看起来有4%的性能差异。具体数据对比如下,其他测试模型待验证,如有明显提供单独邮件更新。
实时测试数据对比:
汇总数据测试结果对比:
备注说明:
关于ssd-nvme磁盘设备:
①deadline应该是适用于hhd顺序I/O的类型,NONE就是ssd nvme随机类型。从测试结果看ssd nvme的NOEN磁盘调度算法性能更好一些。(TIDB标准为none或者NOOP)
关于开启底层blk-mq性能更好。
①hhd 机械物理磁盘走操作系统scsi接口落盘,需要修改grub.cnf 开启和关闭。
②SSD-NVME 默认是开启的,ssd不经过scsi接口直接落盘,ssd-nvme 开启开启blk-mq跟I/O算法绑定,[none]算法就是开启blk-mq/[deadline]就是关闭blk-mq。
文章
阅读量
获赞