专栏名称: 大话存储
由存储系统架构师、《大话存储》系列图书作者冬瓜哥创立。分享业界逼格甚高的存储和计算机系统底层知识,皆为原创。存储系统底层技术、机理、设计、思路分享,绝不忽悠。想变得比别人逼格高一点,就来阅读本公众号的文章。
目录
相关文章推荐
51好读  ›  专栏  ›  大话存储

4节点近160万IOPS:SDS\/超融合测试不能只看数字

大话存储  · 公众号  ·  · 2017-10-16 08:24

正文

请到「今天看啥」查看全文


作者:高翔( Sean )、唐僧

前不久有位朋友问我,随着近些年来企业存储的发展,每个阶段大致可以达到什么性能水平?直到前两天,我才想起来 5 年多前写过一篇《 SPC-1 :闪存 vs. 磁盘新旧势力的战场》 (链接 http://storage.chinabyte.com/264/12249264.shtml ),从一个侧面分析了企业级 SSD 大范围应用前夜的产品技术格局。到今天我想再补充一个简单的图表:

上面数值除了最右边的 SDS (软件定义存储) / 超融合之外,仍然参考自几份 SPC-1 测试报告,具体数字进行了一定模糊处理,以免大家对号入座:) SDS/ 超融合一项选择了其它测试方法获得的混合读写 IOPS ,一方面目前参与 SPC-1 测试的分布式 / 软件定义存储还不多(具体原因我放在本文结尾部分);另外如果用更多节点数量在这里“欺负”传统存储,可能也有点不够厚道吧:)

简单来说,早期磁盘阵列 IOPS 受限于 HDD 机械硬盘的平均访问时间,到了 SSD 时代介质的瓶颈相对容易解决。我给出的参考值不能充分代表所有厂商,也并不是每家厂商都积极参与 SPC-1 这样的军备竞赛,因为 性能不是存储的全部 。比如同样是全闪存高端多控阵列( AFA ),有的可能只是在 4K IOPS 达到 200 万,而这并不能简单评价为“性能差”,因为它同时还打开了重复数据删除和压缩等 数据服务

在初创的 All-Flash Array 厂商中,有些已经是分布式控制器的架构。随着多副本和纠删码技术的流行,人们也慢慢开始不再对 FC iSCSI 这些标准协议情有独钟。未来的 NVMe over Fabric 如果还是只限于 Initiator-Target 一对一,那么专用客户端和一些非标准块存储协议就有存在的价值。

如今,我们看到在一些 使用标准服务器硬件的软件定义存储,其每节点贡献的性能已经开始不逊于专门优化的闪存阵列控制器,并且具有更好弹性的和扩展性 。有了这些再加上逐渐的成熟,越来越多的传统存储用户开始青睐 SDS 和超融合( HCI )。

下面开始介绍本次测试的内容,大体上分为前后两部分,包括随机 IOPS 、顺序带宽这些基准测试结果,以及模拟 SQL Server OLTP 的表现。

第一部分: IOPS 、带宽和 SSD 性能的发挥

IOPS 测试看分布式存储软件的效率


注:上表中的 延时都是在虚拟机中直接收集的 (如无特别说明,以下同),相当于用户 / 应用最实际的感受。

我们部署了一个 4 节点 SDS/ 超融合集群 ,每节点上除了系统盘之外,有 7 SATA SSD 参与组建分布式存储,并采用最常见的 3 副本 配置。每台物理机上使用 20 个虚拟机(共 80 VM )进行测试。

我们测出的 4 节点 4KB 随机读最大性能为 1,587,480 IOPS ,平均每节点接近 40 IOPS ,此时的平均延时为 3.23ms 。总共 28 SSD 平均贡献 56,595IOPS ,这里使用的 Intel SSD S3610 官方标称 4KB 随机读 IOPS 84,000 ,分布式存储软件的效率还不错吧?

如果要看低延时 IOPS ,在 0.36ms IOPS 864,843 ,平均每节点也超过了 20 万。我们虽然没有使用 NVMe SSD ,但可以给大家看一个之前的测试参考——在《 Intel Optane P4800X 评测 (3) Windows 绑核优化篇 》中 Intel P3700 128 队列深度下达到 46 IOPS 的峰值,对应的延时为 226 μ s 。初步预计 换成 NVMe SSD 将有更好的表现 CPU 等配置可能也需要升级)。


上图为在 2 节点 上进行 4K 随机读测试的最高性能, 每节点贡献 44 IOPS 反映出了 SDS/ 超融合的线性扩展能力和本地读优化(后面我还会细谈这个主题)。另外此时 从物理机 OS 看到的存储读延时只有 0.28ms ,可见虚拟机中的延时很大一部分是由于队列,高 I/O 压力对 VM CPU 有明显的开销。

这时读者朋友可能会问,你们测试的是哪家 SDS ?先别着急,再看看随机写的表现。


如上图,在每个虚拟机设置 QD=32 时测出的 433,620 4K 随机写 IOPS 已经接近 4 节点集群的峰值。按照这时的数字来计算, 落到每个 SSD 上的 IOPS 就达到了 15,486 x 3=46459 (因为是 3 副本),已经超过了 IntelSSD S3610 官方标称的 27,000 稳态随机写 IOPS


上面是我们在开始测试时 SSD 简单摸底的成绩—— Intel SATA 1.6TB 54,491 4KB 随机写并未达到稳态。对这一点我们并不是太在意,因为本次测试考察的是 SDS 存储软件的效率, SSD 写表现快一点不是坏事吧:)

同理,由于企业级 SSD 是有带掉电保护的写缓存,所以在较低队列深度下 SDS/ 超融合集群也能有较好的表现—— 330,264 100% 随机写对应的延时只有 0.48ms

如果在物理节点上看,写延时也降低了不少。大家都知道直接在物理节点中测试 SDS 效果更好,但由于本文评估的是 虚拟化 & 超融合环境,所以仍然以应用感知的 VM 内延时结果为准

再谈副本数量与可靠性

有的朋友可能记得我写过一篇《 为什么 ScaleIO VSAN 不要求三副本? 》,其中提到 VSAN “不打散”所以双副本可用,而 ScaleIO 通过保护域和故障集的配合、以及重构速度来保障 2 副本可靠性。

也就是说双副本的应用不是完全没有限制的,包括 Ceph 在内的更多强一致性分布式存储软件,大多建议生产环境使用三副本。我在这里想说的一点就是, POC 等性能测试中,对于建议三副本的 SDS 产品使用双副本测试固然能看到更好的数字 ,但实际使用又是另一种情况。

对于宣称良好支持双副本的分布式存储,也要像我上面提到的 2 款那样有相应的理论设计基础到充分的测试和实践验证。毕竟 对于企业存储产品来说,数据可靠性重于一切,如果不能保证稳定跑再快也没用

微软 S2D 测试环境: 100Gb/s RoCE 网络成亮点


每节点 2 E5-2640 v4 10 CPU 只能算是 Intel XeonE5 系列中的主流配置,不属于“跑分很漂亮”但更接近大多数用户的环境。

以上就是本次微软 S2D Storage Spaces Direct )的测试平台——在上海的戴尔客户解决方案中心( CSC )进行,并特邀相关领域专家高翔亲自操刀。


高翔 Sean )上海维赛特网络系统有限公司 副总工程师

早在 3 年前,高翔老师就主持过微软 SOFS Windows Server 2012 Storage Spaces )的测试及相关项目实践,可以说是国内为数不多精通微软 Storage Spaces 的专家。

关于 RDMA 网络对分布式存储性能的影响,我们先稍后再谈。


除了 2 节点集群,微软建议 S2D 用户配置 3 副本(另有部分用途适合纠删码)。

我们测出 4 节点 S2D 集群的 顺序读带宽为 10951MB/s ,平均每个 SSD 达到 391MB/s ,对比下前面列出的裸盘性能效率也不低了。至于 2626MB/s 的顺序写,考虑到 3 副本的开销,平均每节点的底层 SSD 总写入量依然达到了 1969MB/s

第二部分、 SQL Server 数据库 OLTP 模拟 I/O 测试

在下面的测试中,我们选择继续使用 DiskSpd + VM Fleet 产生存储压力。其中 DiskSpd 是微软提供的一个类似 fio Iometer 的工具,而 VM Fleet 则是配合 DiskSpd 使用的一套脚本,便于同时使用多个虚拟机进行测试。在后续的文章中我们也会用到其它工具,而总的原则如下:

1、 尽量避免因存储之外的配置造成测试瓶颈;

2、 通用性强,易于对比。虽然我们在本文中不做横向比较,但测试过程和结果方便复现,能够为用户和技术同行提供参考价值。

我们也考虑过在数据库中模拟交易 / 查询的测试方法,但其结果受多方面因素影响,包括:执行的 SQL 复杂(优化)程度、 CPU 性能、读写比例、内存命中率等等。想要跑出好看的 TPS TPM /QPS ,许多时候瓶颈会出在 CPU 核心数 x 主频而不是存储上,而用户的业务模型又是千差万别的。所以最终还是决定用微软官方建议的 SQL Server 存储性能评估方法。


上图截自《 UsingDiskspdforSQLServer 》文档中的范例,在听取几位朋友的意见之后,我们觉得 40% 的写入比例相对于各种 OLTP 用户平均的情况还是偏高了,因此选择了更有代表性的 8KB 70% 随机读 /30% 随机写。


对于实际应用来说, SQL Server 数据库虚机机在每台物理服务器上的部署数量往往不会很多,但每个 VM 内的 IO 并发 / 队列深度却可能比较大,最终给存储带来的压力应该是同等效果。根据上面图表,在 每台物理机 80 QD 时达到 48 万读写混合 IOPS ,延时为 0.66ms ;当每台物理机总 QD 达到 640 测出接近 最高的 62 IOPS (平均每节点超过 15 万),对应的延时在 5ms 以内。

以上都是 4 个节点上的虚拟机同时压测。如果数据库只是运行在单个虚拟机,或者是 1-2 个物理机上,底层存储仍然由 4 节点 Windows Server 2016 超融合集群提供,这时又会是什么样的性能表现呢?

VM 即可发挥一半性能:“另类” S2D 扩展性验证


由于这里想压测出单个虚拟机在 S2D 上的最大性能,“ 1 VM ”用的计算尺寸比较大,是 16 Core 56GB 内存,相当于 Azure 上的 D5V2 配置 。而其它测试每台物理机上 20 VM 用的是 A2 实例—— 2 Core 3.5GB 内存。

注: S2D 其实也是源自 Azure 公有云中的存储技术。

对于 1 个虚拟机中的 165,405 8KB 混合读写 IOPS 结果,我们比较满意。采用不同节点数量对 S2D 集群(仍为 3 副本)加压, 2 节点混合读写 IOPS 大约是单节点的 1.5 倍, 4 节点大约是单节点 2 倍。

上面的标题为什么称“另类”扩展性验证呢?因为人们普遍用整个集群、大量虚拟机来压测超融合的存储,而往往容易 忽略单一负载的效率表现 ?我除了想验证这一点,还有服务器 计算资源对性能发挥的影响 (前提是网络在测试环境中不是瓶颈)。不得不承认, 3x-4x IOPS VM 内(客户端)加上 SDS 分布式存储软件本身的开销,对于 2 颗主频一般的 10 CPU 已经够忙活了:)

换句话说,如果改用更好的 CPU NVMe SSD ,就应该能达到下面的测试结果:


4 节点 S2D 跑到 3 百万随机读 IOPS ,这应该是我目前看到过平均每节点跑得最快的一个分布式存储测试报告,当然盘的配置也比我们实测要高不少—— 2 Intel P3700 做缓存层, 8 个同样 NVMe P3500 做容量层。

从超融合本地读优化到分离式部署

通过更多测试,我们观察到 S2D 3 副本配置的情况下,写入数据时会全局打散到所有节点,而在读数据时 一旦有副本在本地节点就优先从本地读取 ,对于超融合应用有助于减少网络的开销(尽管本文的测试环境网络不是瓶颈)。


上面只是我们配置过程中的一个截图,可以看到 S2D 4 个用于测试的 CSV (集群共享卷) Onwer 分别指向了不用的节点,这样在对应服务器上加压时就可以享受到本地读的效果。如果某个 Onwer 节点故障,会重新选举新的 Onwer 接管 CSV

不知是否有朋友会问:我的 Hyper-V 服务器平均存储压力没有这么大, S2D 如此性能水平 可否支持为集群外面的主机提供服务? 答案是肯定的。


上图我在以前的文章中列出过,右边就是 Hyper-V 集群和 SOFS on S2D 集群分离部署(非超融合)。应用主机和存储节点通过 SMB3 协议网络连接,依然可以选用 RDMA

根据 IDC 的预测,“ 2017 年到 2021 年期间,全球软件定义存储市场的复合年增长率将达到 13.5% ,到 2021 年收入接近 162 亿美元。 HCI 不仅增长最快,复合年增长率为 26.6% ,同时也是最大的子领域 ,到 2021 年收入将达到 71.5 亿美元。在预测期内,对象存储的复合年增长率将达到 10.3% ,而文件存储和块存储的复合年增长率将分别达到 6.3% 4.7%

除了技术之外,再谈一下微软 S2D 在销售策略上的特点:与 VMware VSAN NSX 单独销售不同的是,微软将 Windows Server 2016 数据中心版定位成软件定义数据中心的基础,将所需功能集成,一个 License 就搞定 OS 许可 +Hypervisor+SDS+SDN Windows Server 2016 三种部署方式:图形化界面、 Server Core Nano Server 均支持 S2D

更多应用针对性的 S2D 测试数据,我们将在后续的文章中继续分享。敬请关注:)

最后,特别感谢上海戴尔客户解决方案中心 Tony Wang 对本次测试的大力支持!

1 RDMA 性能影响、 SSD 混合存储规则

笔者之前还写过 2 S2D 相关的东西:

微软 WS2016 原生分布式存储:还在追赶 VSAN

Azure Stack 中的超融合存储 -S2D 进阶篇

现在看来,一年多之前由于资料有限,当时写的一些技术点还不够准确。比如一位微软的朋友就曾指出:“ Built-In Cache ”和“ ReFS Real-Time Tiering ”在 S2D 里可以都看成是缓存技术,区别主要在于后者是先将数据写入副本分层来改善纠删码的性能。

回过来接着看前面的架构图:本次测试使用了 4 Dell PowerEdgeR630 服务器,比较豪华的一点是 100Gb/sRDMA 作为 S2D 集群互连网络,包括 Mellanox ConnentX-4 双端口 100Gb 网卡和 Dell Networking S6100-ON 交换机。


上图来自微软提供的参考数据,启用 RDMA 之后, S2D IOPS 和延时性能都有明显的改善。如果说在 RDMA 网络下 S2D 的效率才能充分发挥,换个角度也证明 微软于 RDMA (包括 SMB Direct )方面在业内较早地进行了比较充分的优化


另外说明一点,在这阶段测试中我们并未使用每台服务器上的 1 NVMe SSD ,因为不符合当前 Windows Server 2016 S2D 的规则。 S2D 支持 SSD + HDD 或者 NVMe + SSD 的缓存配置,但要求 Cache SSD 每节点不少于 2 。关于混合 S2D 配置与全闪存的性能差异,后续我想在另一篇文章中给大家介绍。

2 :企业存储系统发展的三个阶段

1 5-10 年前的传统 HDD 磁盘阵列

相信许多朋友都看到过以下这组公式,根据硬盘的平均访问(寻道 + 旋转)延时来计算单盘的 IOPS 参考值:

15000rpm 硬盘 1000/(2+3.5) 180

10000rpm 硬盘 1000/(3+3.5) 150

7200rpm 硬盘 1000/(4.17+8) 80

利用每块硬盘的 IOPS ,乘以盘数(主轴数量) 可以得到一个存储系统的经验 IOPS 值,比如设计合理的情况下 256 15K HDD 可达 4-6 万随机读 IOPS ,此时控制器的处理能力往往还不会是瓶颈。随机写的情况相对复杂一些, RAID 1 的写惩罚 =2 RAID 5/6 写惩罚则是 4/6 ,所以我们看到各存储厂商在测试 SPC-1 这些交易类型的 BenchMark 时,大多会选择 RAID 1 (双副本镜像)以获得较好的表现。


上图来自于 6 年前某高端存储( 8 控制器)的 SPC-1 测试报告,在此只用于技术举例无意提及品牌型号。它配置了 1920 15K HDD 硬盘,按照总共 45 IOPS 来计算,平均每块盘贡献大约 230 IOPS

为什么比前面的经验公式要高呢?我认为有以下几个方面的原因

a. SPC-1 测试负载中包括一部分顺序读写;

b. 阵列的预读 / 写缓存有一定 I/O 合并效果( HDD 阵列低于 5ms 延时也是因为 Cache 优化);

c. 有些参测阵列并未划分全部容量,使实际的平均访问时间低于全盘范围(类似于短击的效果,只针对机械硬盘)。

记得在《 存储极客: SPC-1 负载分析与 AFA 寿命评估 》一文中,我对 SPC-1 曾有过粗略研究,根据 IOPS 计算出写入的数据量。

SPC-1 是个比较复杂的混合负载,包括约 39% 的读 IO (应该主要是随机)和 61% 的写 I/O ,而后者当中至少有接近一半(占整体 28% )的日志 / 顺序写入 。在数据块大小方面,分为 4KB SMIX 两种类型, SMIX 是按照一定比例的混合块,经计算其平均 I/O 大小为 14.4KB 。整体上看, I/O 平均尺寸为 6.76KB ,写 I/O 平均 8.83KB

注:后来推出的 SPC-1 V3 测试模型有所变化,以上 仅针对 SPC-1 V1 讨论。

2 、当前的全闪存阵列

随着基于 NAND 闪存 SSD 的普及,只需要数量少得多的驱动器就可达到以前“堆硬盘”的效果。 中端双控 AFA 阵列普遍能达到数十万 IOPS 的水平 ,此时性能瓶颈已经从存储介质转到了控制器上, SPC-1 测试 平均到每个 SAS SSD 能贡献 2 IOPS 就算效率比较高的 。再加上性能更高的双端口 NVMeSSD 刚开始成熟,人们普遍更加看好 Server SAN/ 分布式软件定义存储( SDS ),特别是超融合( HCI )部署形态的发展。

3 、分布式软件定义存储

如今虽然 Server SAN/SDS 厂商如雨后春笋般涌现,但参与 SPC-1 的热度似乎不如以前高。 SPC 组织收费高昂是一方面,此外一位国内做存储研发比较资深的朋友还告诉我一些限制: SPC-1 V1 应该是只支持 UNIX Windows 客户端; SPC-1 V3 加入了 Linux ,但还是要求 FC iSCSI iSER 这些标准块设备连接协议,专用客户端访问的存储产品无法参与测试。

这样一来,像 VMware VSAN Dell EMC ScaleIO 、微软 S2D Storage Spaces Direct ,基于 SMB3 协议)等主流软件定义存储产品就不太适合用 SPC-1 来测试。 Ceph 其实也是如此, iSCSI/FC 网关显然没有原生的 librbd 效率高。

从性能角度来看, Server SAN/SDS 的扩展性普遍不错,而单节点 IOPS 并不是都能做到很高,达到 10 IOPS 每节点就算比较好的了,这方面其实我也撰文讨论过。









请到「今天看啥」查看全文


推荐文章
禅茶一味  ·  有颗童心,一生都会精彩
8 年前
山西老乡俱乐部  ·  句句让人心痛的大实话,都看看吧!
8 年前