技术分享 PROXMOX 与 VMWARE ESXI:使用 NVME/TCP 的性能比较

kakax · 2023年10月21日 · 242 次阅读
本帖已被管理员设置为精华贴

概述

Proxmox 和 VMware 提供相互竞争的虚拟化平台。Proxmox 是一款利用 QEMU 和 KVM 的 开源产品。VMware ESXi 是一款基于专有软件构建的商业产品。

本技术说明比较了 Proxmox VE 7.2 和 VMware ESXi 7.0 Update 3c 对于存储主导型应用程序的性能。实验是在中度到重度负载下运行的相同硬件配置上进行的。测试重点关注 32 个并发活动虚拟机的聚合存储性能。

我们的测试系统是 Dell PowerEdge R7515,配备 AMD EPYC 7452 32 核处理器和 Mellanox 100Gbit 网络。服务器配置为双引导:Proxmox 7.2 和 ESXi 7.0 Update 3c。存储使用 NVMe/TCP 连接网络。后端存储软件是 Blockbridge 6。

该测试床由在单个主机上运行的 32 个 Ubuntu 虚拟机组成,每个虚拟机配置有四个虚拟 CPU。每个虚拟机都附加一个虚拟磁盘以进行测试。每个虚拟机作为一个 fio 工作者运行;测试在所有 32 个虚拟机上同时执行。对于每个队列深度和块大小,都会收集一个数据点,该数据点表示紧随 1 分钟预热期之后的 20 分钟间隔内的平均性能。

您可以在此处查看我们的调查结果/TLDR,并在此处查看我们的原始基准数据。

架构比较

VMware/PVSCSI/VMFS

VMware 通过虚拟化 SCSI、SATA 或 NVMe 控制器向来宾提供存储。通常,存储是使用 VMware 准虚拟 SCSI 适配器提供的虚拟 SCSI 磁盘。与这些虚拟磁盘关联的后备存储通常是存储在称为 VMFS 的专用集群文件系统上的文件。VFMS 提供存储管理功能,包括精简配置、快照和集群移动性。

注意:VVOL 和原始设备映射提供更直接的路径,但 NVMeOF 设备不支持。

下图说明了来宾发出的 I/O 流程。请注意,现有的存储堆栈主要以 SCSI 为中心。NVMe 设备使用薄 SCSI 虚拟化层(图中称为“垫片”)来适应此模型。

GUEST
│           ┌────────┐
│           │ PVSCSI │
│           │ DRIVER │
▼           └┬───────┘
KERNEL       │
│           ┌▼───────┐  ┌────────┐  ┌─────────┐  ┌────────┐
│           │ PVSCSI ├──►  VMFS  ├──►   I/O   ├──►  SCSI  │
│           │ DEVICE │  │        │  │  SCHED  │  │  DISK  │
│           └────────┘  └────────┘  └─────────┘  └┬───────┘
│                                                 │
│                                                ┌▼───────┐  ┌────────┐  ┌────────┐
│                                                │  HPP   ├──►  SCSI  ├──►  NVME  │
│                                                │        │  │  PATH  │  │  SHIM  │
│                                                └────────┘  └────────┘  └┬───────┘
│                                                                         │
│                                                                        ┌▼───────┐  ┌────────┐
│                                                                        │  NVME  ├──►  NVME  │
│                                                                        │  CORE  │  │  TCP   │
▼                                                                        └────────┘  └────────┘

我们的经验表明,集中式 I/O 调度程序是一个重要的瓶颈和延迟来源。幸运的是,NVMe/TCP 默认使用更新的“高性能插件”(即 HPP)。只要后端存储保持快速,HPP 插件就允许来宾 I/O 绕过调度程序。

提示:绕过 I/O 调度程序的延迟阈值配置如下:esxcli storage core device latencythreshold set -t [value in milliseconds]。更多信息请点击此处

Proxmox / Virtio-SCSI / RAW

Proxmox 通常将存储作为连接到使用 virtio-scsi 实现的虚拟 SCSI 控制器的虚拟化 SCSI 设备提供给来宾。当与网络附加存储一起使用时,来宾的虚拟 SCSI 设备由本机 Linux 块设备支持;Proxmox 中没有中间集群文件系统层。自动精简配置、快照、加密和高可用性是由网络附加存储实现的。

下图说明了来宾发出的 I/O 流程。请注意,Proxmox 和 VMware 之间的调度域明显不同。Proxmox 为各个设备调度 I/O,NVMe 设备使用 Linux no-op 调度程序。VMware 为竞争的虚拟机调度 I/O,试图协调物理设备 I/O 排队功能的有效使用。

注意:我们非常小心地确保聚合队列深度不是性能的限制因素。

GUEST
│           ┌─────────────┐
│           │ VIRTIO-SCSI │
│           │ DRIVER      │
▼           └┬────────────┘
QEMU         │
│           ┌▼────────────┐   ┌─────────┐
│           │ VIRTIO-SCSI ├───► ASYNC   │
│           │ DEVICE      │   │ I/O     │
▼           └─────────────┘   └┬────────┘
KERNEL                         │
│                             ┌▼────────┐  ┌─────────┐
│                             │ BLOCK   ├──► SCHED   │
│                             │ LAYER   │  │ NOOP    │
│                             └─────────┘  └┬────────┘
│                                           │
│                                          ┌▼────────┐  ┌─────────┐
│                                          │ NVME    ├──► NVME    │
│                                          │ CORE    │  │ TCP     │
▼                                          └─────────┘  └─────────┘

发现

Proxmox 提供更高的 IOPS

Proxmox VE 在 57 项测试中的 56 项中击败了 VMware ESXi,IOPS 性能提升了近 50%。在具有较大队列深度和较小 I/O 大小的各个测试用例中,峰值增益超过 70%。

下图显示了每个队列深度的百分比增益(跨块大小的平均值)。例如,数据点 QD=128 是在队列深度为 128 时针对 0.5KiB、4KiB、8KiB、16KiB、32KiB、64KiB 和 128KiB 块大小测量的平均增益。该图显示了 48.9% 的平均性能优势 Proxmox 的青睐。

Proxmox 具有较低的延迟

Proxmox VE 将延迟减少了 30% 以上,同时提供了更高的 IOPS,在 57 项测试中的 56 项中击败了 VMware。

下图显示了每个队列深度的延迟减少(跨块大小的平均值)。例如,数据点 QD=128 是队列深度为 128 时 0.5KiB、4KiB、8KiB、16KiB、32KiB、64KiB 和 128KiB 块大小的延迟平均减少量。该图显示 32.6% 的性能优势有利于普罗克斯莫克斯。

Proxmox 提供更多带宽

在峰值负载条件下,Proxmox 的带宽比 VMware ESXi 高出 38%:Proxmox 的带宽为 12.8GB/s,而 VMware ESXi 的带宽为 9.3GB/s。

注意:进一步调查表明 VMware ESXi 难以维持高带宽存储网络。性能问题可能与动态接收端扩展(即 RSS)的交互、网络中断的定期重新平衡以及为 NVMe 实现的路径选择策略的行为有关。

基准

IOPS

以下 IOPS 图表绘制了 Proxmox VE 和 VMware ESXi 的相对性能。每个图表显示了以固定块大小运行的八个不同队列深度的平均 IOPS 结果。显示了七种块大小的结果,包括 0.5K、4K、8K、16K、32K、64K 和 128K。IOPS 结果越高越好。

潜伏

以下延迟图表绘制了 Proxmox VE 和 VMware IOPS 测试期间测得的平均 I/O 延迟。每个图表显示了在固定块大小下运行的八个队列深度的平均延迟。显示了七种块大小的结果,包括 0.5K、4K、8K、16K、32K、64K 和 128K。延迟越低越好。

提示:直接比较在不同 IOPS 性能水平下运行时的延迟可能会产生误导。

带宽

带宽图表绘制了 Proxmox VE 和 VMware IOPS 测试期间测得的平均数据吞吐量。每个图表显示了以固定块大小运行的八个队列深度的平均带宽。显示了七种块大小的结果,包括 0.5K、4K、8K、16K、32K、64K 和 128K。带宽越高越好。

提示:由于块大小是固定的,带宽应与 IOPS 直接相关!带宽 = IOPS * 队列深度

引用文献

1 楼 已删除
需要 登录 后方可回复