全文概览
在数据爆炸式增长的今天,传统存储架构正面临前所未有的挑战。无论是直接连接存储(DAS)、集中式存储区域网络(SAN),还是基于IP的分布式存储,它们在性能、扩展性或灵活性上,都难以完全满足现代云计算和虚拟化环境对高性能、低时延存储的需求。
想象一下,您的服务器CPU正忙于处理复杂的应用逻辑,却不得不分出大量精力来处理存储协议和数据传输,这是否极大地限制了计算资源的效率?当您需要为成百上千个虚拟机提供稳定、可预测的存储性能时,如何避免存储流量在共享网络中相互干扰,确保关键应用的QoS?
正是在这样的背景下,存储解耦架构应运而生,它将计算与存储资源物理分离,通过网络连接。而NVMe over TCP (NVMeoTCP) 作为一种新兴技术,承诺在标准IP网络上提供接近本地NVMe SSD的性能。但如何才能在复杂的虚拟化环境中,充分释放NVMeoTCP的潜力,并最大程度地减轻宿主机CPU的负担?智能网卡(SmartNIC)和数据处理器(DPU)的出现,为解决这些问题提供了新的思路。本文将深入探讨NVMeoTCP的优势,以及SmartNIC和DPU如何通过硬件卸载和架构优化,将存储解耦推向新的高度。
阅读收获
- 理解存储解耦架构的核心理念及其在现代数据中心的价值。
- 掌握NVMeoTCP如何克服传统IP存储方案的局限,实现高性能存储访问。
- 了解智能网卡(SmartNIC)和数据处理器(DPU)在优化NVMeoTCP存储路径中的具体作用和优势。
- 认识到DPU如何通过卸载存储处理任务,显著提升宿主机CPU的可用性并改善存储QoS。
存储解耦,SAN/分布式存储/NVMe 比较
- 核心概念:
- 将计算资源(Apps)与存储资源(EBOF/JBOF)物理分离。
- 存储资源可以集中部署在数据中心内。
- 主要优势:
- 扩展性与效率:支持横向扩展(scale out),提高整体效率。
- 灵活性:在系统升级和硬件更换周期中提供更大的灵活性。
- 成本效益:无需像传统SAN那样依赖专用硬件,可直接利用通用的以太网。
- 关键技术支持:
- 支持NVMeoTCP,特别适用于云和虚拟机环境。
- DPUs(数据处理器)能提供额外的控制平面能力,帮助管理程序(hypervisor)分担NVMeoF连接的建立和终止等任务。
- NVMe:提供简单、高速的控制和数据接口。
- NVMeoTCP:使得NVMe存储可以通过TCP/IP和以太网等通用网络协议进行访问,这是最普及的网络基础。
- SmartNICs 和 DPUs:
- 架构示意:
- 多个计算节点(Apps)通过NVMeoF协议连接到独立的存储资源池(EBOF/JBOF)。
理解SAN 存储、分布式存储(如Ceph 块存储)、直连DAS存储的差异
1. 本地直连存储 (DAS - Direct Attached Storage)
- 描述: 存储设备直接连接到服务器的主板上,通过SATA、SAS或PCIe/NVMe等接口。存储资源不共享,通常只供连接它的服务器使用。
- 性能特点:
- 时延: 最低。数据传输仅通过服务器内部总线进行,没有网络传输、协议封装或额外的软件处理开销。时延主要受驱动器本身的寻道时间(HDD)或闪存访问时间(SSD)以及总线速度限制。
- 性能(吞吐/IOPS): 对于单台服务器及其直连存储而言,性能非常高,直接体现了存储设备的原始性能。瓶颈在于单个驱动器的性能和服务器的总线带宽。扩展性差(仅限单服务器内部)。
2. 传统SAN (Storage Area Network)
- 描述: 通过专用的高速网络(通常是光纤通道 Fibre Channel)将服务器连接到共享的块级存储阵列。存储资源可以在连接到SAN网络的服务器之间共享。
- 性能特点:
- 时延: 较低。光纤通道协议是为存储优化设计的,开销小,网络通常是专用的,避免了IP网络的通用性带来的额外处理。时延高于DAS,因为它涉及网络传输、HBA卡处理、SAN交换机转发和存储阵列内部处理。
- 性能(吞吐/IOPS): 高。SAN网络通常提供高带宽。存储阵列是专门设计的高性能硬件,具备强大的控制器和缓存能力。可以提供可观的聚合吞吐和IOPS给多台服务器。性能受限于SAN网络带宽、交换机性能、HBA卡性能以及存储阵列的整体处理能力。
3. 分布式存储 (以Ceph块存储 RBD 为例)
- 描述: 数据分散存储在集群中多个独立的存储节点(通常是普通的服务器),通过标准的IP网络(以太网)进行访问。数据通常进行复制或纠删码编码以保证冗余和可用性。访问请求需要在多个节点之间协调。
- 性能特点:
- 时延: 相对较高。这是因为数据需要通过IP网络传输,存在IP/TCP协议开销,数据读写可能需要访问多个存储节点(例如,写入时需要复制到多个副本),以及分布式系统自身的协调、元数据查找和软件处理开销。时延受网络跳数、网络拥塞、节点间通信和软件栈效率影响较大。
- 性能(吞吐/IOPS): 高且具备优异的横向扩展能力。虽然单次操作的时延较高,但分布式存储的优势在于可以通过增加存储节点来线性地提升整体的吞吐量和IOPS。对于大规模并行访问和需要巨大总容量的场景非常有利。性能受限于网络的整体带宽、集群规模、存储节点的硬件(特别是硬盘/SSD性能)以及分布式存储软件的效率和配置。
| | | |
|---|
| 直接连接服务器内部总线 (SATA, SAS, PCIe) | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
与传统IP存储方案相比,NVMe of TCP 解决了哪些问题?带来什么价值?
传统的 IP 存储方案,特别是基于 SCSI 协议通过 TCP/IP 进行封装的 iSCSI,虽然实现了在通用 IP 网络上传输块存储数据,但面临一些固有的局限性,尤其是在面对现代高性能存储介质(如 NVMe SSD)时。
传统 IP 存储方案(如 iSCSI)存在的问题:
- SCSI 协议开销:SCSI 是一个相对陈旧的协议,设计之初主要针对机械硬盘(HDD)。它是一个命令队列深度有限的串行协议。当面对 NVMe SSD 这种具备极高并行能力和低时延特性的设备时,SCSI 协议本身会成为性能瓶颈,无法充分发挥 SSD 的潜力。协议转换和封装也增加了处理开销。
- 传统存储栈开销: 在操作系统和存储驱动层面,传统的存储栈通常比较复杂,有多层软件处理,这会引入额外的时延。
- TCP/IP 开销: 虽然 TCP/IP 提供了可靠性传输,但其协议本身带有一定的处理开销,包括连接管理、流量控制、拥塞控制等,这也会增加存储访问的时延。
- 不匹配现代 SSD 特性: iSCSI 协议和传统的存储栈没有充分利用 NVMe SSD 的多队列、高并行度、低时延等特性。
NVMe over TCP/IP (NVMe-oTCP) 如何解决这些问题(价值):
- 采用 NVMe 协议: NVMe-oTCP 的核心在于使用了专为闪存和 SSD 设计的 NVMe 协议。NVMe 协议具备:
- 低时延: 减少了命令到完成的路径,直接访问 SSD。
- 高并行度: 支持大量的 I/O 队列和深度队列,可以同时处理大量 I/O 请求。
- 高效命令集: 设计更精简高效。 通过在网络上直接传输 NVMe 命令和数据,NVMe-oTCP 绕开了传统的 SCSI 协议栈,显著降低了协议开销,更好地释放了 NVMe SSD 的性能。
- 简化存储栈: NVMe-oF (NVMe over Fabrics) 协议栈通常比传统的 SCSI over IP 栈更扁平化,减少了软件层的处理时延。
- 优化 TCP/IP 利用: 虽然仍然使用 TCP/IP,但 NVMe-oTCP 的设计目标是在保证可靠性的前提下,尽可能高效地利用 TCP/IP,减少不必要的开销。它通过更高效的数据路径和更少的 CPU 交互来降低时延。
- 适配现代 SSD 特性: NVMe-oTCP 完全继承了 NVMe 协议的优势,可以充分利用远程 NVMe SSD 的高并行度和低时延特性,提供接近本地 NVMe 盘的性能体验(当然,网络时延是额外的)。
使用智能网卡为虚拟机提供解耦存储 (基于 NVMeoTCP)
使用智能网卡为虚拟机提供解耦存储 (基于 NVMeoTCP)
- 核心思想:
- 在虚拟机环境中,通过 NVMeoTCP 实现计算与存储的解耦。
- 利用智能网卡 (SmartNIC) 来优化网络和存储协议处理。
- 关键组件与流程 (参考图示):
- 运行 KVM 和 Qemu 来管理虚拟机。
- 需要运行 Virtio-blk/NVMe 的后端模拟。
- NVMeoTCP 发起端运行在宿主机上,可以在内核空间或用户空间的 SPDK 中实现。
- SPDK: 用户空间库,可以构建高性能的存储应用,图中显示 NVMeoF Initiator 可以基于 SPDK 实现。
- VFIO: 允许用户空间应用直接、安全地访问 PCI 设备(如 SmartNIC)。
- Vhost: 允许用户空间进程(如 Qemu)将设备模拟的后端暴露给内核,供 Virtio 前端使用。
- 智能网卡 (SmartNIC): 负责处理以太网连接,并可以执行协议卸载(如校验和、TSO、LRO),减轻宿主机 CPU 的网络处理负担。通过 PCIe 连接到宿主机。
- 远程存储 (Remote storage): 作为 NVMeoF TCP 的目标端,提供实际的存储资源。
- 客户虚拟机 (Guest VM): 运行标准的 Virtio-blk 或 NVMe 驱动来访问块设备。
- 宿主机 (Host):
- 数据路径大致流程:Guest VM 的 I/O 请求通过 Virtio-blk/NVMe 驱动,经过 Vhost 或 VFIO 接口到达宿主机用户空间或内核。在宿主机上,NVMeoTCP 发起端(可能在 SPDK 中)将请求封装成 NVMe over TCP/IP 报文,通过 PCIe 发送给 SmartNIC。SmartNIC 处理以太网协议并将数据发送到网络。远程存储接收请求并处理。返回路径类似。
- 面临的挑战/需要注意的问题:
- 宿主机 CPU 开销: 虽然 SmartNIC 负责网络卸载,但 Virtio-blk/NVMe 的后端模拟和 NVMeoTCP 发起端(如果不在 SmartNIC 上完全卸载)仍然需要占用宿主机的 CPU 周期,这些周期不能用于运行租户的实际工作负载。
- 存储 QoS 复杂性: 由于存储流量通过共享的网络带宽传输,确保存储的 QoS 变得复杂,可能会受到其他网络流量的影响。
- 智能网卡的作用:
- 提供以太网连接,作为数据进出宿主机的端口。
- 进行协议卸载,减轻宿主机 CPU 的网络处理负担。
- 可能未来会将 NVMeoTCP 发起端功能部分或完全卸载到 SmartNIC 上,进一步降低宿主机 CPU 开销。
利用 DPU 实现虚拟机解耦存储
- 核心理念:
- 将存储协议处理和相关的后端模拟功能从宿主机 CPU 完全或大部分卸载到 DPU 上。
- DPU 扮演存储代理的角色,向宿主机虚拟机暴露高性能的块设备接口。
- DPU 在此架构中的作用:
- 提供虚拟设备: DPU 通过 PCIe 接口向宿主机提供本地的 NVMe/Virtio-Blk 设备的虚拟功能 (VF) 或物理功能 (PF)。这些设备是 DPU 模拟出来的,后端连接到远程存储。
- 处理后端模拟: DPU 自身运行 Virtio-blk 和 NVMe 的后端处理逻辑。
- 运行 NVMeoTCP 发起端: NVMeoTCP 连接到远程存储的发起端直接在 DPU 上运行。发起端的配置也需要在 DPU 上完成。
- 执行协议处理: DPU 负责处理 NVMe over TCP/IP 协议栈,并通过其自身的以太网接口连接远程存储。
- 虚拟机访问方式:
- 客户虚拟机 (Guest VM) 直接使用标准的 NVMe 或 Virtio-blk 驱动。
- 通过 PCI 直通 (passthrough) 或 VFIO 机制,虚拟机可以直接访问 DPU 提供的 NVMe/Virtio-Blk VF/PF 设备,绕过宿主机内核和用户空间的模拟层。
- 相比 SmartNIC 或纯宿主机方案的优势:
- 显著节省宿主机 CPU 资源: NVMe/Virtio 的后端模拟和 NVMeoTCP 发起端的运行都被移到了 DPU 上,极大地减轻了宿主机 CPU 的负担。这意味着更多的宿主机 CPU 资源可以用于运行租户的实际工作负载。
- 更好的存储 QoS 分离: DPU 可以直接管理和控制提供给每个虚拟机的虚拟设备(VF)。通过在 DPU 层面限制或调整这些 VF 的访问,可以更精细和有效地实现存储的服务质量 (QoS) 分离,避免虚拟机之间因共享网络和后端处理资源而相互影响。
- 架构示意:
- Guest VM 通过 VFIO/PCIe 直连 DPU。
- DPU 内部运行 Virtio-blk/NVMe 后端和 NVMeoF Initiator。
- DPU 通过自身的 Ethernet 接口连接到远程存储 (NVMeoF TCP target)。
- 宿主机 CPU 仅负责虚拟机的调度和管理,存储相关的复杂处理都由 DPU 完成。
延伸思考
- 除了本文讨论的性能和CPU卸载,DPU在存储解耦架构中还能为数据安全、多租户隔离或存储管理带来哪些潜在价值?
- 随着NVMeoTCP和DPU技术的不断发展,未来数据中心在网络、存储和计算资源的规划与部署上将发生哪些根本性变化?
- 对于企业用户而言,在从传统存储架构向基于NVMeoTCP和DPU的解耦存储迁移时,可能面临哪些技术挑战和成本考量?
原文标题:Optimizing NVMe Over TCP for Disaggregated Storage on DPUs
Notice:Human's prompt, Datasets by Gemini-2.5-flash-thinking