NVMe 上的 RAID 阵列

NVMe 上的 RAID 阵列
在本文中,我们将讨论组织 RAID 阵列的不同方法,并展示第一个支持 NVMe 的硬件 RAID 控制器。

RAID 技术的所有应用都可以在服务器领域找到。 在客户端部分,最常使用的是两个磁盘上的软件 RAID0 或 RAID1。

本文将简要概述 RAID 技术、关于如何使用三种不同工具创建 RAID 阵列的简短教程,以及使用每种方法的虚拟磁盘性能比较。

什么是RAID?

维基百科 给出了RAID技术的全面定义:

的RAID (英语 独立磁盘冗余阵列 - 独立(独立)磁盘冗余阵列) - 数据虚拟化技术,用于将多个物理磁盘设备组合成一个逻辑模块,以提高容错能力和性能。

磁盘阵列的配置和使用的技术取决于所选的 RAID级别。 RAID 级别在规范中标准化 常见 RAID 磁盘数据格式。 它描述了许多 RAID 级别,但最常见的是 RAID0、RAID1、RAID5 和 RAID6。

RAID0条纹,是一种 RAID 级别,它将两个或多个物理驱动器组合成一个逻辑驱动器。 逻辑磁盘的卷等于阵列中包含的物理磁盘的卷的总和。 此 RAID 级别没有冗余,一个驱动器发生故障可能会导致虚拟磁盘中的所有数据丢失。

Уровень RAID1镜子,在两个或更多磁盘上创建相同的数据副本。 虚拟磁盘的大小不超过物理磁盘的最小大小。 只要阵列中至少有一个物理磁盘处于运行状态,RAID1 虚拟磁盘上的数据就可用。 使用 RAID1 增加了冗余,但这是一种相当昂贵的解决方案,因为在两个或多个磁盘的阵列中只有一个磁盘的容量可用。

Уровень RAID5 解决了成本高的问题。 创建RAID5级别的阵列至少需要3块磁盘,并且该阵列可以抵抗5块磁盘的故障。 RAID5 中的数据存储在带有校验和的块中。 数据盘和校验盘没有严格的划分。 RAID1 中的校验和是对 N-XNUMX 个块进行 XOR 运算的结果,每个块取自不同的磁盘。

虽然RAID阵列增加了冗余并提供冗余,但它们不适合存储备份。

在简要介绍了 RAID 阵列的类型之后,您可以继续学习允许您组装和使用磁盘阵列的设备和程序。

RAID 控制器的类型

创建和使用 RAID 阵列有两种方法:硬件和软件。 我们将考虑以下解决方案:

  • Linux 软件 RAID。
  • 英特尔® CPU 上的虚拟 RAID。
  • LSI MegaRAID 9460-8i。

请注意,英特尔® 解决方案在芯片组上运行,这就提出了它是硬件解决方案还是软件解决方案的问题。 例如,VMWare ESXi 虚拟机管理程序考虑了 VROC 软件,但并未正式支持它。

Linux 软件 RAID

Linux 操作系统系列中的软件 RAID 阵列在客户端和服务器领域都是相当常见的解决方案。 创建阵列所需的只是 mdadm 实用程序和一些块设备。 Linux 软件 RAID 对所使用的驱动器的唯一要求是成为系统可访问的块设备。

没有设备和软件成本是这种方法的一个明显优势。 Linux 软件 RAID 以 CPU 时间为代价组织磁盘阵列。 支持的 RAID 级别列表和当前磁盘阵列的状态可以在 mdstat 文件中查看,该文件位于 procfs 根目录中:

root@grindelwald:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] 
unused devices: <none>

通过连接适当的内核模块来添加对 RAID 级别的支持,例如:

root@grindelwald:~# modprobe raid456
root@grindelwald:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
unused devices: <none>

所有磁盘阵列操作均通过 mdadm 命令行实用程序执行。 磁盘阵列通过一条命令组装:

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/nvme1n1 /dev/nvme2n1

执行这个命令后,系统中就会出现/dev/md0块设备,它代表你是一个虚拟磁盘。

英特尔® CPU 上的虚拟 RAID

NVMe 上的 RAID 阵列英特尔® VROC 标准硬件密钥
英特尔® Virtual RAID On CPU (VROC) 是一种基于英特尔® 芯片组创建 RAID 阵列的硬件和软件技术。 该技术主要适用于支持英特尔® 至强® 可扩展处理器的主板。 默认情况下,VROC 不可用。 要激活它,您必须安装 VROC 硬件许可证密钥。

标准 VROC 许可证允许您创建具有 0、1 和 10 RAID 级别的磁盘阵列。 高级版本通过 RAID5 支持扩展了此列表。

现代主板上的英特尔® VROC 技术与英特尔® 卷管理设备 (VMD) 结合使用,为 NVMe 驱动器提供热插拔功能。

NVMe 上的 RAID 阵列英特尔® VROC 标准许可证 服务器启动时,通过设置实用程序配置阵列。 在选项卡上 高级 将出现 Intel® Virtual RAID on CPU 项目,您可以在其中配置磁盘阵列。

NVMe 上的 RAID 阵列在两个驱动器上创建 RAID1 阵列
英特尔® VROC 技术自有其王牌。 使用 VROC 构建的磁盘阵列与 Linux Software RAID 兼容。 这意味着可以在 /proc/mdstat 中监视阵列的状态并通过 mdadm 进行管理。 这个“功能”得到了英特尔的官方支持。 在Setup Utility中组装RAID1后,您可以在操作系统中观察驱动器的同步情况:

root@grindelwald:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md126 : active raid1 nvme2n1[1] nvme1n1[0]
      1855832064 blocks super external:/md127/0 [2/2] [UU]
      [>....................]  resync =  1.3% (24207232/1855832064) finish=148.2min speed=205933K/sec
      
md127 : inactive nvme1n1[1](S) nvme2n1[0](S)
      10402 blocks super external:imsm
       
unused devices: <none>

请注意,您无法使用 mdadm 在 VROC 上组装阵列(组装后的阵列将是 Linux SW RAID),但您可以更改其中的磁盘并拆卸阵列。

大规模集成电路 MegaRAID 9460-8i

NVMe 上的 RAID 阵列LSI MegaRAID 9460-8i 控制器外观
RAID 控制器是一个独立的硬件解决方案。 该控制器仅适用于直接与其连接的驱动器。 该 RAID 控制器最多支持 24 个 NVMe 驱动器。 正是 NVMe 支持使该控制器与许多其他控制器区分开来。

NVMe 上的 RAID 阵列硬件控制器的主菜单
使用 UEFI 模式时,控制器设置将集成到设置实用程序中。 与 VROC 相比,硬件控制器菜单看起来要复杂得多。

NVMe 上的 RAID 阵列在两个磁盘上创建 RAID1
解释如何在硬件控制器上配置磁盘阵列是一个相当微妙的主题,可能是一篇成熟文章的原因。 这里我们将简单地限制自己使用默认设置创建 RAID0 和 RAID1。

连接到硬件控制器的磁盘对操作系统不可见。 相反,控制器将所有 RAID 阵列“屏蔽”为 SAS 驱动器。 连接到控制器但不属于磁盘阵列的驱动器将无法被操作系统访问。

root@grindelwald:~# smartctl -i /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-48-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               AVAGO
Product:              MR9460-8i
Revision:             5.14
Compliance:           SPC-3
User Capacity:        1,999,844,147,200 bytes [1.99 TB]
Logical block size:   512 bytes
Rotation Rate:        Solid State Device
Logical Unit id:      0x000000000000000000000000000000
Serial number:        00000000000000000000000000000000
Device type:          disk
Local Time is:        Sun Oct 11 16:27:59 2020 MSK
SMART support is:     Unavailable - device lacks SMART capability.

尽管伪装成 SAS 驱动器,NVMe 阵列仍将以 PCIe 速度运行。 但是,此功能允许您从旧版 NVMe 启动。

测试台

每种组织磁盘阵列的方法都有其自身的物理优点和缺点。 但是使用磁盘阵列时是否存在性能差异?

为了达到最大的公平性,所有测试将在同一台服务器上进行。 其配置:

  • 2 个英特尔® 至强® 6240;
  • 12 个 DDR4-2666 16 GB;
  • LSI MegaRAID 9460-8i;
  • 英特尔® VROC 标准硬件密钥;
  • 4 个英特尔® 固态盘 DC P4510 U.2 2TB;
  • 1x 三星 970 EVO Plus M.2 500GB。

测试单元为P4510,一半连接主板,另一半连接RAID控制器。 M.2 运行的是 Ubuntu 20.04,测试将使用 fio 版本 3.16 运行。

测试

首先,让我们检查一下使用磁盘时的延迟。 测试在一个线程中执行,块大小为4 KB。 每个测试持续 5 分钟。 在启动之前,将相应的块设备设置为none作为I/O调度器。 fio 命令如下所示:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --iodepth=1 --loops=1000 --runtime=300  --rw=<mode> --filename=<blkdev>

从 fio 结果中我们得出 clat 99.00%。 结果如下表所示。

随机读数,μs
随机记录,μs

磁盘
112
78

Linux 软件 RAID、RAID0
113
45

VROC、RAID0
112
46

大规模集成电路、RAID0
122
63

Linux 软件 RAID、RAID1
113
48

VROC、RAID1
113
45

大规模集成电路、RAID1
128
89

除了访问数据时的延迟之外,我还想查看虚拟驱动器的性能并将其与物理磁盘的性能进行比较。 运行 fio 的命令:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --loops=1000 --runtime=300  --iodepth=<threads> --rw=<mode> --filename=<blkdev>

性能是根据 I/O 操作来衡量的。 结果如下表所示。

随机读1线程,IOPS
随机写入1线程,IOPS
随机读128线程,IOPS
随机写入128线程,IOPS

磁盘
11300
40700
453000
105000

Linux 软件 RAID、RAID0
11200
52000
429000
232000

VROC、RAID0
11200
52300
441000
162000

大规模集成电路、RAID0
10900
44200
311000
160000

Linux 软件 RAID、RAID1
10000
48600
395000
147000

VROC、RAID1
10000
54400
378000
244000

大规模集成电路、RAID1
11000
34300
229000
248000

很容易看出,与软件解决方案相比,使用硬件控制器会导致延迟增加和性能下降。

结论

使用硬件解决方案从两个磁盘创建磁盘阵列看起来不合理。 然而,在某些任务中使用 RAID 控制器是合理的。 随着支持 NVMe 接口的控制器的出现,用户有机会在其项目中使用更快的 SSD。

NVMe 上的 RAID 阵列

只有注册用户才能参与调查。 登录拜托

您使用 RAID 解决方案吗?

  • 29,6%是的,硬件解决方案32

  • 50,0%是的,软件解决方案54

  • 16,7%18号

  • 3,7%无需 RAID4

108 位用户投票。 14 名用户弃权。

来源: habr.com

添加评论