技术实践 | 如何给NVMe做RAID

1 传统RAID

硬盘阵列(Redundant Arrays of Independent Disks,RAID),是由很多块独立的硬盘,组合成一个容量巨大的硬盘组。

1.1  阵列卡

现如今,基本所有的服务器都通过RAID卡对硬盘进行管理。硬盘插入到服务器的槽位后由背板的线缆连接RAID卡进行一个统一的管理,然后提供给操作系统,操作系统不能直接使用硬盘。 

以下为一些常见的RAID级别:

  • RAID 0

    将数据分成若干相等大小的数据块,把他们写在不同的硬盘上,以独立的方式实现多块硬盘的并读访问,并发执行I/O操作。基本能够发挥出所有硬盘的性能,但是RAID0没有冗余机制,硬盘越多固然性能越好,然而出现故障导致卷组不可用的概率也越高。建议配合上层应用能够提供冗余的场景一起使。 

技术实践 | 如何给NVMe做RAID_第1张图片

  • RAID 1 
    当上层数据下发时,会将数据完全一致地写在两块硬盘上,实现数据冗余,可以用两块硬盘中读取数据,提升读性能。当一块硬盘发生故障,系统自动从另一块硬盘读取数据,提高可靠性,但是成本更高,适用于对数据可靠性要求高的应用,如:将系统盘放在RAID 1上面。

技术实践 | 如何给NVMe做RAID_第2张图片

  • RAID 5 
    将数据和相对应的奇偶校验信息分别存储在不同的硬盘上,奇偶校验信息占一个硬盘的空间,允许损坏一个硬盘。当一个硬盘损坏时,可以根据剩余的数据和相对应的奇偶校验信息计算出损坏的数据,恢复数据时性能会受到较大的影响。RAID 5写性能偏低,尤其是随机写性能,建议在读写不太频繁的场景上使用,如:用作数据备份。

技术实践 | 如何给NVMe做RAID_第3张图片

  • RAID 6 
    与RAID 5 相似,拥有两套独立的奇偶校验信息,可以允许损坏两块硬盘。 

技术实践 | 如何给NVMe做RAID_第4张图片

1.2  缓存策略

RAID卡除了将硬盘组建不同RAID级别的功能之外,还能提供加速读写的缓存功能。 

每张RAID卡都拥有大小不等的缓存。

技术实践 | 如何给NVMe做RAID_第5张图片

  • Read Policy 
    1、Read Ahead:预读缓存模式,将当前读取的后续块数据也预先读取保存在缓存中,可以快速对应后续的读取操作。当第二次读取相同的数据时,不需要再次从硬盘里面读取数据,频繁读取的热点数据保存在缓存中,可以大大提升读性能。 
    2、No Read Ahead:不通过缓存进行读取操作。

  • Write Policy 
    1、Write Back:WB回写模式,该模式会将上层的数据先写入RAID卡缓存当中,再将缓存中的数据写入硬盘中,对于上层应用而言,当数据写入缓存中时就已经认为落盘成功了,因此WB模式可以提升写性能。 
    2、Write Througt:WT直写模式,该模式会直接将数据写入到硬盘当中。

开启WB模式的前提是RAID卡带有电池,确保在服务器断电的情况下依然能将缓存里面的数据写入硬盘中。当服务器的RAID卡电池出现故障或者电量不足的情况,WB模式会被强制切换成WT模式,防止出现数据丢失,然而读策略不会受到任何影响,这是因为写到缓存里面的数据是脏数据,与硬盘里面的数据不一致,而读到缓存里面的数据与硬盘里面的数据完全一致,即使丢失了也没有任何关系。

WB模式能够提升写性能,这有个前提是上层下发的数据量不大,可以被RAID卡缓存所容纳,但是当上层下发大量数据时,缓存很快就会被击穿。我们可以通过一个实验去验证,将一块硬盘的写策略调整为WB模式,然后利用fio工具去模拟上层数据下发

技术实践 | 如何给NVMe做RAID_第6张图片

可以看到,当上层有大量数据下发时,缓存很快就被击穿,写性能呈现断崖式下划

1.3  性能对比

上文提到了各个RAID级别的特点及优劣势,下面我们通过fio工具测试,直观的感受一下不同RAID的性能。

技术实践 | 如何给NVMe做RAID_第7张图片

一块盘RAID0基本可以发挥这块盘的所有性能,通过以上测试数据可以发现: 

  1. RAID1使用两块盘,读能发挥出两块盘的性能,而写性能基本与单块盘一致,说明可以同时从两块盘读取不同的数据内容,而写时需要将相同的数据写在两块盘中。 
  2. RAID5使用三块盘,读能基本能发挥出三块盘的性能,但是写性能不高,尤其是随机写性能更是惨不忍睹

2 VROC

现如今,对硬盘的性能要求越来越高,SATA、SAS因为本身的缺陷,性能基本不会超过600MiB/s,因此对NVMe盘的需求越来越多,尤其是数据库等对底层硬件性能要求比较高的行业。

NVMe盘直通到cpu,无法通过RAID卡进行管理,因此也不能通过RAID卡去创建不同的RAID级别。目前给NVMe做raid的方式有两种,一种是软RAID,另一种是Intel VROC

  • 软RAID

    软RAID的实现没有硬件参与,完全通过软件模仿磁盘阵列的方式来实现,通过CPU内核计算RAID逻辑

  • Intel VROC

    Intel VROC 是一种混合 RAID 解决方案。它的属性与硬件 RAID 类似,是因为英特尔卷管理设备(英特尔 VMD)的一项关键芯片功能是通过新的英特尔至强可扩展处理器提供的。英特尔虚拟 RAID on CPU (VROC)利用英特尔 VMD 来聚合 NVMe 固态盘,从而实现可引导 RAID。英特尔 VROC 还具有软件 RAID 等属性。例如:它使用一些 CPU 内核来计算 RAID 逻辑。由于这种软件与芯片相结合,英特尔 VROC 称为混合 RAID 解决方案。 

技术实践 | 如何给NVMe做RAID_第8张图片

2.1  VROC的使用方式

目前,英特尔至强可扩展处理器基本都支持VMD,但是并不是cpu支持就可以使用VROC了,需要满足以下几个条件:

1.VMD是一个比较新的技术,需要将服务器的引导模式调整为UEFI引导模式。

2.需要VROC Key,Intel VROC 是一种通过 OEM 或 ODM 与支持服务级别协议一起销售的许可产品。Intel VROC 硬件密钥是获取Intel VROC 软件许可的机制。某些 OEM/ODM 通过在其主板上添加密钥标头,构建了支持Intel VROC 的服务器和工作站。每个VROC Key的售价在100美金左右。

技术实践 | 如何给NVMe做RAID_第9张图片

VROC Key有几个不同的型号,每个型号Key的功能都有一些差别,有些型号的Key可以支持其余品牌的NVMe盘,但是出于兼容性考虑,还是不建议使用其余品牌的NVMe盘 。

3.服务器支持,并不是每一台服务器都可以安装VROC Key,需要服务器的主板有相应的槽位可以插入VROC Key。

2.2  VROC与软raid

VROC的管理方式以及系统上面的展示与软RAID非常相似。 \
VROC与软RAID都使用mdadm的命令进行管理,VROC需要安装相对应版本的mdadm rpm包。

rpm –U mdadm-4.0-13.1.IntelVROC6.0.el7.x86_64.rpm

VROC与软RAID这么相似,那么在性能上有什么差距吗?我们可以通过实验看一下

  • RAID 0

技术实践 | 如何给NVMe做RAID_第10张图片

为了效果更加明显,使用了三块盘创建RAID0,结果显示VROC与软RAID没有明显的性能差距

  • RAID 1

技术实践 | 如何给NVMe做RAID_第11张图片

VROC与软RAID组建RAID1各项性能基本一致

  • RAID 5

技术实践 | 如何给NVMe做RAID_第12张图片

VROC与软RAID组建的raid5各项性能基本一致,但是两者的写性能都是偏低的,通过观察cpu的使用率可以发现,VROC与软RAID都是单核进程,所在core的使用率也已经被打满了,cpu的性能也是制约RAID5写性能的一项因素

技术实践 | 如何给NVMe做RAID_第13张图片

通过以上的测试可以发现,VROC与软RAID的性能基本是一致的,因为两者都需要使用cpu内核去来计算RAID逻辑。而VROC有硬件的支持,具备了一些其他的功能

2.3  VROC其余功能

1 可引导RAID

VROC可以作为系统盘使用,VROC有硬件的支持,在没有安装操作系统之前就可以在BIOS里面使用NVMe盘创建RAID,然后再将系统安装在这块raid卷组上面。

技术实践 | 如何给NVMe做RAID_第14张图片

2 备份功能

VROC拥有热备功能,当检测到设备故障时,热备盘可用于重建RAID

技术实践 | 如何给NVMe做RAID_第15张图片

3 NVMe盘定位

NVMe盘一直没有很好的方式去定位,而VROC可以准确定位到NVMe盘

ledctl locate=/dev/nvme0n1

通过以上命令可以使指定的NVMe盘闪灯

3 总结

性能方面,VROC与软RAID基本一致。软RAID的优势是不需要额外的成本,而VROC优势是有硬件的支持,具备一些特性(可引导RAID、NVMe盘定位等),以及有Intel的技术服务。两者各有优势,所以,可以根据实际的需求去选择使用哪一项技术

你可能感兴趣的:(服务器)