
几个月前,在进行下一个项目时,我们研究实验室的人员研究了NVMe磁盘和软件解决方案,以便找到组装软件阵列的最佳选择。
令人惊讶的是,测试结果令人沮丧-NVMe磁盘的巨大速度潜力根本与现有软件产品的演示性能无关。
我们的开发人员不喜欢它。 于是他们决定编写自己的产品……营销人员随后高兴地提出了一个产品RAIDIX ERA。
如今,有十几家公司生产适用于NVMe驱动器的服务器。 支持和开发该技术的产品市场具有巨大的潜力。 在G2M分析报告中,给出了令人信服的数据,这些数据说服了这种数据传输协议将在不久的将来占主导地位。
G2M报告中的图表当前,英特尔是NVMe组件生产的领导者之一。 我们在他们的设备上进行了测试,以评估现有软件产品管理这种“创新”硬件的功能。
我们与合作伙伴Promobit(BITBLAZE商标下的服务器和数据存储系统制造商)一起组织了英特尔NVMe驱动器和用于管理此类设备的通用软件的测试。 根据SNIA方法进行测试。
在本文中,我们将分享在测试英特尔NVMe硬件系统,来自MDRAID的软件阵列,基于ZFS RAIDZ2的Zvol以及我们的新开发产品期间获得的数字。
硬件配置
作为测试平台的基础,我们采用了服务器系统Intel Server System R2224WFTZS。 它具有2个用于安装Intel Xeon可扩展处理器的插槽和12个内存通道(总共24个DIMM)DDR 4,频率最高为2666 MHz。
有关服务器平台的更多信息,请
访问制造商的网站 。
通过3个背板
F2U8X25S3PHS连接的所有NVMe驱动器。
系统中总共有12个NVMe驱动器INTEL SSDPD2MD800G4,固件为CVEK6256004E1P0BGN。
服务器平台配备了两个启用了超线程功能的英特尔®至强®金牌6130 CPU @ 2.10GHz处理器,从而允许从每个内核启动两个线程。 因此,在输出处,我们接收了64个计算线程。
测试准备
本文中的所有测试均根据SNIA SSS PTSe v 1.1方法论的规范进行。 其中,为了获得稳定和诚实的结果,对存储进行了初步准备。
SNIA允许用户设置线程数和队列深度的参数,因此我们设置64/32,在32个内核上具有64个计算线程。
为了使系统达到稳定的指标水平并排除随机值,每轮进行了16轮测试。
在开始测试之前,我们已对系统进行了初步准备:
- 在CentOS 7.4上安装内核版本4.11。
- 关闭C状态和P状态。
- 运行tuned-adm实用程序并设置延迟性能概要文件。
每个产品和项目的测试分以下几个阶段进行:
根据SNIA规范准备设备(取决于负载类型,与负载类型无关)。
- IOps测试以4k,8k,16k,32k,64k,128k,1m的块为单位,具有读/写组合的变化0 / 100、5 / 95、35 / 65、50 / 50、65 / 35、95 / 5、100 / 0 。
- 4k,8k,16k块的延迟测试,读/写组合的变化为0 / 100、65 / 35和100/0。 线程数和队列深度为1-1。 结果记录为平均和最大延迟。
- 在8个团队的64行中使用128k和1M块进行吞吐量测试。
我们首先测试硬件平台的性能,延迟和吞吐量。 这使我们能够评估拟议设备的潜力,并与应用软件解决方案的功能进行比较。
测试1.硬件测试
首先,我们决定查看一个Intel DCM D3700 NVMe驱动器的功能。
在规范中,制造商声明以下性能参数:
随机读取(100%跨度)450,000 IOPS
随机写入(100%跨度)88000 IOPS
测试1.1一个NVMe驱动器。 IOPS测试
表格形式的效果结果(IOps)。 读/写混合%。
块大小 | R0%/ W100% | R5%/ W95% | R35%/ W65% | R50%/ W50% | R65%/ W35% | R95%/ W5% | R100%/ W0% |
---|
4k | 84017.8 | 91393.8 | 117271.6 | 133059.4 | 175086.8 | 281131.2 | 390969.2 |
8k | 42602.6 | 45735.8 | 58980.2 | 67321.4 | 101357.2 | 171316.8 | 216551.4 |
16k | 21618.8 | 22834.8 | 29703.6 | 33821.2 | 52552.6 | 89731.2 | 108347 |
32k | 10929.4 | 11322 | 14787 | 16811 | 26577.6 | 47185.2 | 50670.8 |
64k | 5494.4 | 5671.6 | 7342.6 | 8285.8 | 13130.2 | 23884 | 27249.2 |
128k | 2748.4 | 2805.2 | 3617.8 | 4295.2 | 6506.6 | 11997.6 | 13631 |
1m | 351.6 | 354.8 | 451.2 | 684.8 | 830.2 | 1574.4 | 1702.8 |
图形形式的性能结果(IOps)。 读/写混合%。

在这个阶段,我们得到的结果还不能完全达到工厂的水平。 很有可能是NUMA(多处理器系统中使用的计算机内存实现方案,当对内存的访问时间由内存相对于处理器的位置确定时)发挥了作用,但目前我们不会关注它。
测试1.2一个NVMe驱动器。 延迟测试
表格形式的
平均响应时间 (毫秒)。 读/写混合%。
块大小 | R0%/ W100% | R65%/ W35% | R100%/ W0% |
---|
4k | 0.02719 | 0.072134 | 0.099402 |
8k | 0.029864 | 0.093092 | 0.121582 |
16k | 0.046726 | 0.137016 | 0.16405 |
图形形式的
平均响应时间 (毫秒)。 读/写混合%。

表格形式的
最大响应时间 (毫秒)。 读/写混合%。
块大小 | R0%/ W100% | R65%/ W35% | R100%/ W0% |
---|
4k | 6.9856 | 4.7147 | 1.5098 |
8k | 7.0004 | 4.3118 | 1.4086 |
16k | 7.0068 | 4.6445 | 1.1064 |
图形形式的
最大响应时间 (毫秒)。 读/写混合%。

测试1.3吞吐量
最后一步是评估吞吐量。 以下是以下指标:
1MB顺序记录-634 MBps。
1MB顺序读取-1707 MBps。
128Kb顺序记录-620 MBps。
128Kb顺序读取-1704 MBps。
处理了一个驱动器之后,我们继续评估由12个驱动器组成的整个平台。
在12个驱动器中测试1.4系统。 IOPS测试
在这里,为了节省时间而做出了一个坚决的决定,并且仅在使用4k块时才显示结果,这是迄今为止最常见的指示性性能评估方案。
表格形式的效果结果(IOps)。 读/写混合%。
块大小 | R0%/ W100% | R5%/ W95% | R35%/ W65% | R50%/ W50% | R65%/ W35% | R95%/ W5% | R100%/ W0% |
---|
4k | 1363078.6 | 1562345 | 1944105 | 2047612 | 2176476 | 3441311 | 4202364 |
图形形式的性能结果(IOps)。 读/写混合%。

在12个驱动器中测试1.5系统。 带宽测试
1MB顺序记录-8612 MBps。
1MB顺序读取-20481 MBps。
128Kb顺序记录-7500 MBps。
128Kb顺序读取-20400 MBps。
我们将在文章结尾再次查看获得的硬件性能指标,并将其与在其上测试的软件数量进行比较。
测试2:测试MDRAID
当我们谈论软件阵列时,首先想到MDRAID。 回想一下,这是Linux的基本软件RAID,它是免费分发的。
让我们看看MDRAID如何处理带有RAID 0阵列级别的建议的12磁盘系统,我们都知道在12个驱动器上构建RAID 0需要特别的勇气,但是现在我们需要这个阵列级别来展示此解决方案的最大功能。
测试2.1 MDRAID。 RAID0。IOPS测试
表格形式的效果结果(IOps)。 读/写混合%。
块大小 | R0%/ W100% | R5%/ W95% | R35%/ W65% | R50%/ W50% | R65%/ W35% | R95%/ W5% | R100%/ W0% |
---|
4k | 1010396 | 1049306.6 | 1312401.4 | 1459698.6 | 1932776.8 | 2692752.8 | 2963943.6 |
8k | 513627.8 | 527230.4 | 678140 | 771887.8 | 1146340.6 | 1894547.8 | 2526853.2 |
16k | 261087.4 | 263638.8 | 343679.2 | 392655.2 | 613912.8 | 1034843.2 | 1288299.6 |
32k | 131198.6 | 130947.4 | 170846.6 | 216039.4 | 309028.2 | 527920.6 | 644774.6 |
64k | 65083.4 | 65099.2 | 85257.2 | 131005.6 | 154839.8 | 268425 | 322739 |
128k | 32550.2 | 32718.2 | 43378.6 | 66999.8 | 78935.8 | 136869.8 | 161015.4 |
1m | 3802 | 3718.4 | 3233.4 | 3467.2 | 3546 | 6150.8 | 8193.2 |
图形形式的性能结果(IOps)。 读/写混合%。

测试2.2 MDRAID。 RAID0。延迟测试
表格形式的
平均响应时间 (毫秒)。 读/写混合%。
块大小 | R0%/ W100% | R65%/ W35% | R100%/ W0% |
---|
4k | 0.03015 | 0.067541 | 0.102942 |
8k | 0.03281 | 0.082132 | 0.126008 |
16k | 0.050058 | 0.114278 | 0.170798 |
图形形式的
平均响应时间 (毫秒)。 读/写混合%。

表格形式的
最大响应时间 (毫秒)。 读/写混合%。
块大小 | R0%/ W100% | R65%/ W35% | R100%/ W0% |
---|
4k | 6.7042 | 3.7257 | 0.8568 |
8k | 6.5918 | 2.2601 | 0.9004 |
16k | 6.3466 | 2.7741 | 2.5678 |
图形形式的
最大响应时间 (毫秒)。 读/写混合%。

测试2.3 MDRAID。 RAID0。带宽测试
1MB顺序写入-7820 MBPS。
1MB顺序读取-20418 MBPS。
128Kb顺序写入-7622 MBPS。
128Kb顺序读取-20,380 MBPS。
测试2.4 MDRAID。 RAID 6. IOPS测试
现在让我们看一下该系统在RAID级别6上的功能。
阵列创建选项
mdadm --create --verbose --chunk 16K / dev / md0 --level = 6 --raid-devices = 12 / dev / nvme0n1 / dev / nvme1n1 / dev / nvme2n1 / dev / nvme3n1 / dev / nvme4n1 / dev / nvme5n1 / dev / nvme8n1 / dev / nvme9n1 / dev / nvme10n1 / dev / nvme11n1 / dev / nvme6n1 / dev / nvme7n1
阵列的总体积为
7450.87 GiB。
我们在RAID阵列的初步初始化后开始测试。
表格形式的效果结果(IOps)。 读/写混合%。
块大小 | R0%/ W100% | R5%/ W95% | R35%/ W65% | R50%/ W50% | R65%/ W35% | R95%/ W5% | R100%/ W0% |
---|
4k | 39907.6 | 42849 | 61609.8 | 78167.6 | 108594.6 | 641950.4 | 1902561.6 |
8k | 19474.4 | 20701.6 | 30316.4 | 39737.8 | 57051.6 | 394072.2 | 1875791.4 |
16k | 10371.4 | 10979.2 | 16022 | 20992.8 | 29955.6 | 225157.4 | 1267495.6 |
32k | 8505.6 | 8824.8 | 12896 | 16657.8 | 23823 | 173261.8 | 596857.8 |
64k | 5679.4 | 5931 | 8576.2 | 11137.2 | 15906.4 | 109469.6 | 320874.6 |
128k | 3976.8 | 4170.2 | 5974.2 | 7716.6 | 10996 | 68124.4 | 160453.2 |
1m | 768.8 | 811.2 | 1177.8 | 1515 | 2149.6 | 4880.4 | 5499 |
图形形式的性能结果(IOps)。 读/写混合%。

测试2.5 MDRAID。 RAID 6.延迟测试
表格形式的
平均响应时间 (毫秒)。 读/写混合%。
块大小 | R0%/ W100% | R65%/ W35% | R100%/ W0% |
---|
4k | 0.193702 | 0.145565 | 0.10558 |
8k | 0.266582 | 0.186618 | 0.127142 |
16k | 0.426294 | 0.281667 | 0.169504 |
图形形式的
平均响应时间 (毫秒)。 读/写混合%。

表格形式的
最大响应时间 (毫秒)。 读/写混合%。
块大小 | R0%/ W100% | R65%/ W35% | R100%/ W0% |
---|
4k | 6.1306 | 4.5416 | 4.2322 |
8k | 6.2474 | 4.5197 | 3.5898 |
16k | 5.4074 | 5.5861 | 4.1404 |
图形形式的
最大响应时间 (毫秒)。 读/写混合%。

值得注意的是,此处的MDRAID显示了非常好的延迟水平。
测试2.6 MDRAID。 RAID 6.带宽测试
1MB顺序写入-890 MBPS。
1MB顺序读取-18800 MBPS。
128Kb顺序写入-870 MBPS。
128Kb顺序读取-10400 MBPS。
测试3. Zvol over ZFS RAIDZ2
ZFS具有内置的RAID创建功能和内置的卷管理器,该管理器创建虚拟块设备,许多存储制造商都在使用它。 我们还将通过创建具有RAIDZ2保护的池(类似于RAID 6)并在其之上创建虚拟块卷来利用这些功能。
版本0.79(ZFS)已编译。 阵列和卷创建选项:
ashift = 12 /压缩-关闭/重复-关闭/ recordsize = 1M / atime =关闭/缓存文件=无/类型RAID = RAIDZ2
ZFS在新创建的池中显示出非常好的结果。 但是,如果反复配音,性能会大大降低。
SNIA方法很好,因为它允许您在重复覆盖类似文件系统(基于ZFS的文件系统)后看到真实结果。
测试3.1 ZVOL(ZFS)。 RAIDZ2。 IOps测试
表格形式的效果结果(IOps)。 读/写混合%。
块大小 | R0%/ W100% | R5%/ W95% | R35%/ W65% | R50%/ W50% | R65%/ W35% | R95%/ W5% | R100%/ W0% |
---|
4k | 15719.6 | 15147.2 | 14190.2 | 15592.4 | 17965.6 | 44832.2 | 76314.8 |
8k | 15536.2 | 14929.4 | 15140.8 | 16551 | 17898.8 | 44553.4 | 76187.4 |
16k | 16696.6 | 15937.2 | 15982.6 | 17350 | 18546.2 | 44895.4 | 75549.4 |
32k | 11859.6 | 10915 | 9698.2 | 10235.4 | 11265 | 26741.8 | 38167.2 |
64k | 7444 | 6440.2 | 6313.2 | 6578.2 | 7465.6 | 14145.8 | 19099 |
128k | 4425.4 | 3785.6 | 4059.8 | 3859.4 | 4246.4 | 7143.4 | 10052.6 |
1m | 772 | 730.2 | 779.6 | 784 | 824.4 | 995.8 | 1514.2 |
图形形式的性能结果(IOps)。 读/写混合%。

绩效数字完全令人印象深刻。 同时,纯zvol(重写之前)给出的结果要好得多(高出5-6倍)。 在这里,测试表明,在第一次复制后,性能会下降。
测试3.2 ZVOL(ZFS)。 RAIDZ2。 延迟测试
表格形式的
平均响应时间 (毫秒)。 读/写混合%。
块大小 | R0%/ W100% | R65%/ W35% | R100%/ W0% |
---|
4k | 0.332824 | 0.255225 | 0.218354 |
8k | 0.3299 | 0.259013 | 0.225514 |
16k | 0.139738 | 0.180467 | 0.233332 |
图形形式的
平均响应时间 (毫秒)。 读/写混合%。

表格形式的
最大响应时间 (毫秒)。 读/写混合%。
块大小 | R0%/ W100% | R65%/ W35% | R100%/ W0% |
---|
4k | 90.55 | 69.9718 | 84.4018 |
8k | 91.6214 | 86.6109 | 104.7368 |
16k | 108.2192 | 86.2194 | 105.658 |
图形形式的
最大响应时间 (毫秒)。 读/写混合%。

测试3.3 ZVOL(ZFS)。 RAIDZ2。 带宽测试
1MB顺序写入-1150 MBPS。
1MB顺序读取-5500 MBPS。
128Kb顺序写入-1100 MBPS。
128Kb顺序读取-5300 MBPS。
测试4:RAIDIX ERA
现在让我们看一下我们新产品RAIDIX ERA的测试。
我们创建了RAID6。 条带大小:16kb。 初始化完成后,运行测试。
表格形式的效果结果(IOps)。 读/写混合%。
块大小 | R0%/ W100% | R5%/ W95% | R35%/ W65% | R50%/ W50% | R65%/ W35% | R95%/ W5% | R100%/ W0% |
---|
4k | 354887 | 363830 | 486865.6 | 619349.4 | 921403.6 | 2202384.8 | 4073187.8 |
8k | 180914.8 | 185371 | 249927.2 | 320438.8 | 520188.4 | 1413096.4 | 2510729 |
16k | 92115.8 | 96327.2 | 130661.2 | 169247.4 | 275446.6 | 763307.4 | 1278465 |
32k | 59994.2 | 61765.2 | 83512.8 | 116562.2 | 167028.8 | 420216.4 | 640418.8 |
64k | 27660.4 | 28229.8 | 38687.6 | 56603.8 | 76976 | 214958.8 | 299137.8 |
128k | 14475.8 | 14730 | 20674.2 | 30358.8 | 40259 | 109258.2 | 160141.8 |
1m | 2892.8 | 3031.8 | 4032.8 | 6331.6 | 7514.8 | 15871 | 19078 |
图形形式的性能结果(IOps)。 读/写混合%。

测试4.2 RAIDIX ERA。 RAID 6.延迟测试
表格形式的
平均响应时间 (毫秒)。 读/写混合%。
块大小 | R0%/ W100% | R65%/ W35% | R100%/ W0% |
---|
4k | 0.16334 | 0.136397 | 0.10958 |
8k | 0.207056 | 0.163325 | 0.132586 |
16k | 0.313774 | 0.225767 | 0.182928 |
图形形式的
平均响应时间 (毫秒)。 读/写混合%。

表格形式的
最大响应时间 (毫秒)。 读/写混合%。
块大小 | R0%/ W100% | R65%/ W35% | R100%/ W0% |
---|
4k | 5.371 | 3.4244 | 3.5438 |
8k | 5.243 | 3.7415 | 3.5414 |
16k | 7.628 | 4.2891 | 4.0562 |
图形形式的
最大响应时间 (毫秒)。 读/写混合%。

延迟类似于MDRAID产生的延迟。 但是为了得出更准确的结论,应该对更严重的负载下的延迟进行估计。
测试4.3 RAIDIX ERA。 RAID 6.带宽测试
1MB顺序写入-8160 MBPS。
1MB顺序读取-19700 MBPS。
128Kb顺序写入-6200 MBPS。
128Kb顺序读取-19700 MBPS。
结论
作为测试的结果,有必要将从软件解决方案获得的数字与硬件平台提供给我们的数字进行比较。
为了分析随机负载的性能,我们将比较使用4k块时RAID 6(RAIDZ2)的速度。
| MD RAID 6 | RAIDZ2 | RAIDIX时代RAID 6 | 硬体 |
---|
4k R100%/ W0% | 1902561 | 76314 | 4073187 | 4,494,142 |
4k R65%/ W35% | 108594 | 17965 | 921403 | 1823432 |
4k R0%/ W100% | 39907 | 15719 | 354887 | 958054 |

为了分析串行负载的性能,我们将看一下具有128k块的RAID 6(RAIDZ2)。 在线程之间,我们使用了10GB的空间来消除缓存命中并显示实际性能。
| MD RAID 6 | RAIDZ2 | RAIDIX时代RAID 6 | 硬体 |
---|
读取128k seq | 10400 | 5300 | 19700 | 20,400 |
128k seq写 | 870 | 1100 | 6200 | 7500 |

结果如何?
用于NVMe设备的流行且价格合理的软件RAID阵列无法显示出硬件潜力所固有的性能。
在这里,非常需要控制软件,该软件可以激起这种情况并显示与NVMe驱动器的程序控制共生可以非常高效和灵活。
理解此要求,我们公司创建了RAIDIX ERA产品,其开发重点在于解决以下问题:
- 混合模式下具有奇偶校验的阵列具有很高的读写性能(几百万IOps)。
- 包括故障转移和恢复期间的30GBps流性能。
- 支持RAID级别5、6、7.3。
- 后台初始化和重建。
- 灵活设置不同类型的负载(用户端)。
今天,我们可以说这些任务已经完成,产品可以使用了。
同时,在了解了许多相关方对此类技术的兴趣之后,我们不仅准备发布付费版本,而且还发布了
免费许可证 ,该
许可证可以完全用于解决NVMe和SSD驱动器上的问题。
在我们的网站上了解有关RAIDIX ERA的更多信息。
UPD 减少记录大小和volblocksize 8k的ZFS测试
ZFS选项表
姓名 | 物业 | 值 | 来源 |
---|
战车 | 记录大小 | 8K | 本地的 |
战车 | 压缩 | 关 | 默认值 |
战车 | 重复的 | 关 | 默认值 |
战车 | 校验和 | 关 | 本地的 |
战车 | 卷块大小 | -- | -- |
坦克/突袭 | 记录大小 | -- | -- |
坦克/突袭 | 压缩 | 关 | 本地的 |
坦克/突袭 | 重复的 | 关 | 默认值 |
坦克/突袭 | 校验和 | 关 | 本地的 |
坦克/突袭 | 卷块大小 | 8k | 默认值 |
录音变得更糟,阅读效果更好。
但是,所有结果都比其他解决方案差很多
块大小 | R0%/ W100% | R5%/ W95% | R35%/ W65% | R50%/ W50% | R65%/ W35% | R95%/ W5% | R100%/ W0% |
---|
4k | 13703.8 | 14399.8 | 20903.8 | 25669 | 31610 | 66955.2 | 140849.8 |
8k | 15126 | 16227.2 | 22393.6 | 27720.2 | 34274.8 | 67008 | 139480.8 |
16k | 11111.2 | 11412.4 | 16980.8 | 20812.8 | 24680.2 | 48803.6 | 83710.4 |