
全文概览
随着云计算和分布式系统的普及,如何高效地访问远端存储,成为了一个亟待解决的问题。NVMe over TCP (NVMeoTCP) 作为一种通过标准以太网传输 NVMe 协议的技术,为解耦存储提供了可能,但其性能优化却面临诸多挑战。
您是否曾困惑于,为什么即使使用了高速网络和存储设备,数据传输依然存在瓶颈?为什么将存储卸载到 DPU 上,看似能减轻宿主机负担,却引入了新的复杂性?数据在网络、内核、用户空间和硬件之间来回“跳跃”,这些不必要的拷贝和处理开销,正是吞吐量和时延的“隐形杀手”。
本文将深入探讨在 DPU 环境下优化 NVMeoTCP 所面临的技术难题,包括恼人的折返缓冲、用户空间拷贝、协议处理开销以及安全性挑战。同时,我们将剖析业界为解决这些问题提出的多种技术方案,从传统的 TCP 卸载引擎到现代的零拷贝 Socket、ULP DDP、io_uring,乃至前沿的 TCP DEVICEMEM 技术。通过对比分析这些方法的优劣和适用场景,希望能为您揭示高性能网络存储优化的核心秘密,并展望未来的发展方向。
阅读收获

DPU 卸载 NVMeoTCP 所面临的技术挑战
尽管 DPU 在解耦存储中具有显著优势,但在将 NVMeoTCP 处理完全卸载到 DPU 时,仍然存在一些技术难题:
这些问题表明,在 DPU 上实现高效的 NVMeoTCP 卸载需要精心设计硬件和软件,以最小化不必要的内存拷贝和处理开销,同时有效处理协议的复杂性和安全需求。克服这些挑战是实现 DPU 在存储卸载中全部潜力的关键。
下文,依次介绍上述技术问题的优化思路。

定制 TCP 协议栈 (TCP 卸载引擎 TOE)

零拷贝 Socket 机制
MSG_ZEROCOPY Socket 选项。应用可以将数据直接放入用户空间的缓冲区,内核通过 DMA 将数据从用户空间缓冲区发送到网卡。TCP_ZEROCOPY_RECIEVE Socket 选项。内核将网卡接收到的数据所在的内存页直接映射到用户空间的缓冲区,应用可以直接访问这些映射的内存,无需额外拷贝。图中 Socket 旁边的 mmap user buffers 也体现了这一点。
内核态 ULP DDP 卸载
If (src == dst) skip memcpy 暗示在某些优化路径下可以跳过内存拷贝。
基于 IO URING 的零拷贝机制
io_uring 接口来实现高性能的网络 I/O 零拷贝,特别适用于需要直接访问用户空间缓冲区的场景(如 NVMe over TCP)。io_uring 的核心在于用户空间和内核共享提交和完成队列,减少了系统调用开销。io_uring 注册其使用的内存缓冲区(App Memory Buffers)。内核知道这些缓冲区的物理地址和权限,从而可以指示硬件(网卡)将接收到的数据直接 DMA 到这些用户空间缓冲区中,或直接从这些缓冲区读取数据进行发送,消除了用户空间和内核缓冲区之间的拷贝 (Eliminates usercopy)。io_uring 零拷贝最直接的性能优势,减少了 CPU 负载和数据传输时延。io_uring 接口。io_uring 进行高性能 I/O 处理。io_uring 零拷贝主要解决了用户空间与内核之间的拷贝,但数据在网卡内部缓冲区与宿主机内存之间仍然可能存在折返缓冲。io_uring 本身不负责安全性。io_uring 接口交互。
TCP DEVICEMEM - 直接数据放置到设备内存

将 TCP DEVICEMEM(利用 UDMABUF)应用于 NVMe over TCP
udmabuf 机制来实现用户空间应用和网卡之间的高效数据传输。udmabuf 是一个 Linux 内核机制,允许在内核空间分配连续的内存块,并将这些内存块作为 DMA 缓冲区暴露给用户空间应用。udmabuf 机制获取 DMA 缓冲区(Memory Buffers)。udmabuf 获取的缓冲区中。udmabuf 交互,获取 Memory Buffers。
不同 TCP 优化方法的特性对比总结
下表总结了前述几种 TCP 优化方法在解决特定问题上的能力:
问题 | 定制 TCP 卸载引擎 | 零拷贝 Socket | ULP DDP 卸载 | IO URING 零拷贝 | TCP 设备内存 |
|---|---|---|---|---|---|
折返缓冲/时延 | 是 | 否 | 否 | 否 | 否 |
用户空间拷贝 | 是 | 是 | 是 | 是 | 是 |
PDU CRC 计算/校验 | 是 | 否 | 是 | 否 | 否 |
乱序的 PDU | 是 | 否 | 否 | 否 | 否 |
NVMeoTCP TLS 卸载 | 是 | 否 | 是 | 否 | 否 |
TCG OPAL SED 安全卸载 | 是 | 是 | 是 | 是 | 是 |
总体观察:
表格为理解不同 TCP 优化技术的能力边界提供了一个清晰的概览。

TCP 优化和 NVMe over TCP 集成的未来发展方向
延伸思考
这次分享的内容就到这里了,或许以下几个问题,能够启发你更多的思考,欢迎留言,说说你的想法~
#NVMe协议 #高性能存储
原文标题:Optimizing NVMe Over TCP for Disaggregated Storage on DPUs
Notice:Human's prompt, Datasets by Gemini-2.5-flash-thinking
---【本文完】---