简介

在第二个中小企业和分支机构HCI基准测试阶段,我们在12台Supermicro超级服务器组成的HCA集群上获得了2680万IOPS,是理论上2640万IOPS的101%,这些服务器采用了英特尔® Xeon® Platinum 8268处理器、英特尔® Optane™ SSD DC P4800X系列硬盘和Mellanox ConnectX-5 100GbE网卡,全部由Mellanox SN2700 Spectrum™交换机和Mellanox LinkX®铜缆连接。这是我们生产型HCA的标准硬件配置,其中只有CPU进行了升级,以追求HCI行业记录。

硬件

这是三个基准测试阶段的第三个阶段,显示了12节点可用于生产环境的StarWind HCA群集性能。 对于这种情况,我们决定使用NVMe-oF衡量存储性能。

StarWind HCA具有最大的功能:我们在每个节点上安装了4个Intel®Optane™SSD DC P4800X系列驱动器。 在我们的设置中,StarWind HCA具有运行最快的软件:Microsoft Hyper-V(Windows Server 2019)和StarWind Initiator服务应用程序在Windows用户区域中运行。 对于这种情况,StarWind NVMe-oFInitiator具有存储互连功能,并且SPDK NVMe-oF被用作目标。

软件

在我们的企业人机交互环境中,有一定的限制。英特尔Optane NVMe被用作最快的底层存储,与处理IO的虚拟机互联。该存储没有块级复制,这意味着高可用集群配置的特点是在虚拟机级或应用级上进行数据复制。这是因为在 "NVM保留 "功能上的缺乏。这种HCI配置适合SQL AG、SAP和其他数据库,对于DB-guys来说,他们在应用层使用自己的复制。我们正在开发NVMe Reservations的功能,使其可以被StarWind支持并投入使用。

在我们的网站上了解有关由StarWind Virtual SAN支持的超融合基础架构的更多信息。

12节点StarWind HyperConverged Appliance群集规格:

平台: Supermicro SuperServer 2029UZ-TR4+
CPU: 2 个英特尔® Xeon® Platinum 8268 处理器 2.90 GHz。 Intel® Turbo Boost开启,Intel® Hyper-Threading开启。
RAM: 96GB
启动和存储容量: 2个Intel®SSD D3-S4510系列(240GB,M.2 80mm SATA 6Gb / s,3D2,TLC)
存储容量: 4个Intel® Optane™ SSD DC P4800X系列(375GB, 1/2 Height PCIe x4, 3D XPoint™). 安装了最新的可用固件
RAW容量: 18TB
可用容量 16.8TB
工作集容量: 16.8TB
联网:2个Mellanox ConnectX-5 MCX516A-CCAT 100GbE双端口网卡
交换器 2个Mellanox SN2700 32个频谱端口100GbE以太网交换机

下图说明了服务器的互连情况。


注意:在每台服务器上,每个NUMA节点都有1个Intel®SSD D3-S4510、1个Intel®Optane™SSD DC P4800X系列和1个Mellanox ConnectX-5 100GbE双端口网卡。 这种配置能够从每个硬件中挤出最大性能。 这样的连接不是推荐而是严格的要求。 为了获得类似的性能,不需要调整NUMA节点配置,这意味着默认设置是可以的。

软件设置

操作系统: 在所有节点上安装了Windows Server 2019数据中心评估版1809,build 17763.404,并在2019年5月1日提供了最新更新。考虑到性能角度,电源计划被设置为高性能,所有其他设置,包括相关的侧通道缓解措施(应用了Spectre v1和Meltdown的缓解措施),都保持在默认设置。

Windows安装:Hype-V角色、MPIO和故障转移集群功能
为了使部署过程更快,我们制作了Windows Server 2019的图像,安装了Hype-V角色,并启用了MPIO和Failover Cluster功能。之后,该镜像被部署在12x Supermicro服务器上。
驱动程序安装。 固件升级
安装Windows后,将为每个硬件应用Windows Update,并为Intel NVMe SSD安装固件更新。

集群存储。 存储没有块级复制,这意味着高可用集群配置的特点是在应用层进行数据复制。此设置的工作集容量为16.8TB,这是18TB RAW容量的所有可用容量。

SPDK目标虚拟机现有的Windows接口驱动都不支持轮询模式。因此,配置了运行SPDK NVMe-oF目标的Linux虚拟机。在我们的集群中,我们部署了24个运行SPDK NVMe-oFmubiao 的Linux虚拟机。每台服务器上运行2个目标虚拟机(每个NUMA节点一个)。 2个NVMe SSD和1个NIC端口用作每个目标虚拟机的直通端口。
每个目标虚拟机有4个vCPU,6GB内存和10GB存储空间。目标虚拟机上安装了CentOS 7.6以及19.01.1版本的SPDK和18.11.0版本的DPDK。
这是nvme.conf文件清单:
[Nvmf]
#Set how often the acceptor polls for incoming connections. The acceptor is also responsible for polling existing connections that have gone idle. 0 means continuously poll. Units in microseconds. AcceptorPollRate 10000
# One valid transport type must be set in each [Transport]. The first is the case of RDMA transport and the second is the case of TCP transport.

[Transport]
# Set RDMA transport type.
Type RDMA
# Set the maximum number of outstanding I/O per queue.
MaxQueueDepth 512
# Set the maximum number of submission and completion queues per session. Setting this to '8', for example, allows for 8 submission and 8 completion queues per session.
MaxQueuesPerSession 8

[Nvme]
# NVMe Device Whitelist. Users may specify which NVMe devices to claim by their transport id. See spdk_nvme_transport_id_parse() in spdk/nvme.h for the correct format. The second argument is the assigned name, which can be referenced from other sections in the configuration file. For NVMe devices, a namespace is automatically appended to each name in the format nY, where Y is the NSID (starts at 1).
TransportID "trtype:PCIe traddr:97fd:00:00.0" Nvme0
TransportID "trtype:PCIe traddr:b0f4:00:00.0" Nvme1
# The number of attempts per I/O when an I/O fails. Do not include this key to get the default behavior.
RetryCount 4
# Timeout for each command, in microseconds. If 0, don't track timeouts.
TimeoutUsec 0
# Action to take on command time out. Only valid when Timeout is greater than 0. This may be 'Reset' to reset the controller, 'Abort' to abort the command, or 'None' to just print a message but do nothing. Admin command timeouts will always result in a reset.
ActionOnTimeout None
# Set how often the admin queue is polled for asynchronous events. Units in microseconds.
AdminPollRate 100000
# Set how often I/O queues are polled from completions. Units in microseconds.
IOPollRate 0
# Disable handling of hotplug (runtime insert and remove) events, users can set to Yes if want to enable it. Default: No
HotplugEnable No

# Namespaces backed by physical NVMe devices
[Subsystem1]
NQN nqn.2016-06.io.spdk:cnode1
Listen RDMA 100.1.2.10:4420
AllowAnyHost Yes
Host nqn.2016-06.io.spdk:init
MN SPDK_Controller
SN SPDK1111
Namespace Nvme0n1 1

[Subsystem2]
NQN nqn.2016-06.io.spdk:cnode2
Listen RDMA 100.1.2.10:4420
AllowAnyHost Yes
Host nqn.2016-06.io.spdk:init
MN SPDK_Controller
SN SPDK2222
Namespace Nvme1n1 1
通过执行以下命令来创建目标:./nvmf_tgt -m [0,2] -c ./nvmf.conf
Hyper-V虚拟机。 根据经验概括,我们采用了48个虚拟机x 1个虚拟处理器=每个群集节点48个虚拟处理器,以达到最佳性能。 总共12个服务器节点上共有576个Hyper-V Gen 2虚拟机。 每个虚拟机均运行Windows Server 2019标准版,并分配了1GiB的内存和25GB的存储空间。

注意: 根据NUMA扩展建议,已禁用NUMA扩展以确保虚拟机始终以最佳性能运行。

RDMA. Mellanox ConnectX-5网卡整合了Resilent RoCE,只需在网络交换机上启用显式拥塞通知(ECN)即可提供最佳性能。通常通过启用PFC实现的无损结构不再是强制性的。ConnectX网卡硬件中实施的Resilient RoCE拥塞管理,即使在有损网络上使用UDP也能提供可靠性。Mellanox Spectrum以太网络交换机提供100GbE线路速率性能和持续的低延迟,且数据丢失包为零。

StarWind NVMe-oF Initiator. NVMe-oF或NVMe over Fabrics是一种网络协议,就像iSCSI一样,用于在主机和存储系统之间通过网络(又称fabric)进行通信,利用RDMA通过融合以太网(RoCE)技术在网络上传输数据。这是一项新兴的技术,为数据中心提供了前所未有的NVMe SSD存储空间。我们使用NVMe Storport Miniport驱动模型开发了自己的Windows版NVMe-oF Initiator。

StarWind NVMe-oF Initiator具有存储互联的功能,并以SPDK NVMe-oF为目标。由于Windows内核缺乏SPDK,没有针对网卡和接口的轮询驱动,所以这个启动器是完全从头开始写的。我们已经非常接近你在Linux上看到的 "戏剧性的低延迟结果 "了。我们相信,只要接触到Linux,微软就会决定重写内核,或者允许其他厂商开发出一套符合Linux存储性能的应用。

NUMA节点。 考虑到每个群集节点上的NUMA节点配置,每个NVMe SSD都要使用与其所在的同一NUMA节点上的网络适配器进行配置。例如,在集群节点3上,Intel Optane SSD与位于NUMA节点1上的Mellanox网卡配对。每个群集节点使用网格模型连接到虚拟机目标,如下图所示。

CPU群组。 CPU组允许Hyper-V管理员跨来宾虚拟机管理和分配主机CPU资源。 使用CPU组可以轻松地将属于不同CPU组(即NUMA节点)的虚拟机相互隔离,以便将网卡和固态硬盘分配给特定的虚拟机。

Hyper-V调度程序。 对于Windows Server 2019,默认的Hyper-V调度器是核心调度器。核心调度器为客户工作负载隔离提供了强大的安全边界,但性能较低。我们将其设置为经典调度器,这是Windows Hyper-V管理程序成立以来所有版本的默认调度器,包括Windows Server 2016 Hyper-V。

Hyper-V虚拟机总线(VMBus)多通道。

在我们的方案中,每个虚拟机具有1个vCPU,以优化IO工作负载并消除等待时间。 我们设置1:1:1匹配-> VMBus通道:vCPU。

基准测试

在虚拟化和超融合基础架构中,通常根据每秒输入/输出(I/O)操作的数量或 "IOPS "来判断性能--本质上是虚拟机可以执行的读或写的数量。一台虚拟机可以产生大量的随机或顺序读/写。在真实的生产环境中,通常有大量的虚拟机,这使得数据流完全随机化。4 kB模块对齐IO是Hyper-V虚拟机使用的模块大小,所以它是我们选择的IO模式。

硬件和软件厂商经常使用这种类型的模式。换句话说,他们基本上是在最坏的情况下衡量可能的最佳性能。

在本文中,我们在测量Storage Spaces Direct性能时不仅执行了与Microsoft相同的基准测试,还针对虚拟化生产环境中常用的其他IO模式进行了额外的测试。

在这个基准测试阶段,我们把测试分为几个阶段。RAW设备性能和基于虚拟机的性能。RAW设备配置由VM Fleet和FIO测试。基于虚拟机的IO基准使用VM Fleet和DSKSPD运行。此外,VM Fleet、StarWind命令中心被用来显示性能结果。

FIO是一种工具,它可以根据用户的指定,生成一些线程或进程,进行特定类型的I/O操作。FIO的典型用途是编写一个与想要模拟的I/O负载相匹配的作业文件。

为了测试原始设备的性能,我们使用StarWind NVMe-oF Initiator将每个集群节点连接到目标虚拟机。客户端是裸机主机,服务器是运行SPDK的目标虚拟机。


用于测试原始设备性能的FIO配置文件选项:
  • ioengine=windowsaio--定义了作业如何发出I/O,我们使用Windows原生非同步I/O。
  • blocksize = 4k,2048k--I / O单元的块大小。 默认值:4k。 读取和写入的值可以以读取,写入的格式分别指定,任一个都可以为空,以将该值保留为默认值。
  • rw = randrw,读写,--I / O模式的类型。
  • rwmixread = 90,70--应该读取的混合工作负载的百分比。 适用于读写模式。
  • thread--用pthread_create创建的线程代替用fork创建的进程。
  • direct=1--使用非缓冲I/O。
  • buffered = 0--这与直接参数相反。 默认值:true。
  • time_based--在指定的运行时间内运行,即使文件被完全读写。在运行时间允许的情况下,同一工作负载将重复运行多次。
  • timeout=900--运行时间
  • group_reporting--当指定numjobs时,显示按组的报告而不是按职位显示
  • iodepth = 8--针对文件保持运行的I / O单元数。
  • numjobs = 8--此作业的克隆数(执行相同工作量的进程/线程)
VM Fleet. 我们使用了GitHub上提供的开源VM Fleet工具。VM Fleet可以轻松地在数百或数千台Hyper-V虚拟机中同时协调DISKSPD(流行的Windows微基准工具)。

用于基于虚拟机基准的VM Fleet配置。 为了使性能饱和,我们为每个文件设置了1个线程(-t1)。考虑到英特尔Optane的建议,给定的线程数被用于大量的存储IO测试。结果,我们在每个线程16个优秀IO下,在饱和点得到了最高的存储性能(-o16)。为了禁用硬件和软件缓存,我们设置了非缓冲IO(-Sh)。我们为随机工作负载指定了-r,为4 kB模块大小指定了-b4K。读/写比例用-w参数改变。

这是DISKSPD的启动方式: .\diskspd.exe -b4 -t1 -o16 -w0 -Sh -L -r -d900 [...]

注意: 我们修改了VM Fleet脚本,以准确地对存储进行基准测试。默认情况下,VM Fleet从CSVFS获取I/O性能。考虑到存储是通过NVMe-oF呈现的,我们设置VM Fleet从本地存储获取性能。

StarWind命令中心 StarWind命令中心旨在替代没有功能的Windows Admin Center和庞杂的System Center Configuration Manager的常规任务,它整合了复杂的操作面板,在一个屏幕上涵盖了每个环境组件状态的所有重要信息。

作为单屏工具,StarWind命令中心可以解决与管理和监视IT基础结构,应用程序和服务有关的所有任务。 作为StarWind生态系统的一部分,StarWind命令中心允许管理虚拟机监控程序(VMware vSphere,Microsoft Hyper-V,Red Hat KVM等),并与Veeam Backup&Replication和公共云基础架构集成。 最重要的是,该解决方案还包含StarWind ProActive Premium支持,该支持可全天候监控24/7群集,预测故障并在故障发生之前做出反应。

例如,StarWind命令中心存储性能操作面案具有交互式图表,该图表在 Windows 中的 CSV 文件系统层测量的群集范围汇总 IOPS 。更详细的报告可在DISKSPD和VM Fleet的命令行输出中获得。

存储性能的另一面是延迟--一个IO需要多长时间才能完成。许多存储系统在重度排队下表现更好,这有助于最大化堆栈每一层的并行性和繁忙时间。但是有一个权衡:排队会增加延迟。例如,如果你能在亚毫秒级延迟的情况下做到100 IOPS,如果你能容忍更高的延迟,你可能也能达到200 IOPS。延迟是要提防的:有时,最大的IOPS基准测试数只能通过延迟来实现,否则延迟是不可接受的。

在Windows中同一层测量的集群范围内的总IO延迟也被绘制在HCI操作面板上。

总结

12节点的可用StarWind HCA集群NVMe-oF存储的第三阶段基准测试就到此为止。12个节点的全闪存NVMe集群提供了2018.7万IOPS,是理论2640万IOPS 84%的性能。

通过正确配置NVMe-oF集群,获得了突破性的性能。最快的NVMe存储是通过SPDK NVMe目标虚拟机和StarWind NVMeoF Initiator功能存储互联。