简介
在第二个中小企业和分支机构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。
总结
12节点的可用StarWind HCA集群NVMe-oF存储的第三阶段基准测试就到此为止。12个节点的全闪存NVMe集群提供了2018.7万IOPS,是理论2640万IOPS 84%的性能。
通过正确配置NVMe-oF集群,获得了突破性的性能。最快的NVMe存储是通过SPDK NVMe目标虚拟机和StarWind NVMeoF Initiator功能存储互联。