跳到主要内容
主页代理入口联系客服

概念辨析

DMA 与 RDMA 有什么不同?本机设备访问与远程数据放置

DMA 和 RDMA 都能减少 CPU 参与数据搬运,但作用范围不同。DMA 通常描述一台计算机内部的设备与内存传输;RDMA(Remote Direct Memory Access)是一套网络能力,让一台主机上的 RDMA 适配器在受注册与权限保护的范围内,与另一台主机的内存交换数据。

最后审核: 2026-09-05发布:Heino HMA Hardware Lab

一个字母改变了系统边界

RDMA 的 R 代表 Remote。它通常在本地仍使用网卡 DMA 引擎,但额外加入网络传输、内存注册、队列和远端保护语义;因此不能把任意 PCIe DMA 设备称为 RDMA。

DMA 范围单机设备 ↔ 内存
RDMA 范围主机 ↔ 网络 ↔ 主机
共同目标少复制 / 低 CPU
RDMA 边界注册内存与权限

DMA 是本机 I/O 的基础机制

存储控制器、网卡和图形设备都可以通过 DMA 与本机内存交换数据。操作系统驱动负责准备缓冲区、建立设备映射、提交描述符并回收资源。

IOMMU 与 DMA Remapping 可以把设备限制在获准的地址范围。这里不需要另一台计算机,也不定义网络上的远端访问协议。

RDMA 在网络两端增加了什么

RDMA 面向高吞吐、低延迟和低 CPU 占用的跨主机通信。RDMA-capable NIC 向软件栈提供 RDMA 接口;数据可直接放入已经注册的应用缓冲区,减少中间复制。

常见承载包括 iWARP、InfiniBand 和 RoCE。它们的网络与部署要求不同,但都需要明确的连接、队列、内存注册和保护状态。

两条数据路径如何比较

普通网卡 DMA 的典型路径是本机内存、PCIe 网卡和网络帧;远端主机的网络栈再处理收到的数据。RDMA 则让 RDMA 适配器依据协议和已授权状态,把数据直接放置到远端已注册区域。

RDMA 设备内部仍可能依靠 DMA 引擎访问本机内存,所以二者有关联但不是同义词:DMA 是底层数据搬运能力,RDMA 是建立在网络和内存保护语义之上的通信模型。

RDMA 仍然需要内存保护

“Direct”不代表无权限检查。应用需要注册可用于 RDMA 的内存,适配器与软件维护访问键、队列和连接状态,使操作限制在获准区域。

网络访问控制、身份与加密需求也不会因零复制而消失。Microsoft 的 SMB Direct 在受支持系统中可结合 SMB 加密,说明性能路径与数据保护需要共同设计。

如何判断应该使用哪个术语

如果问题是本机 PCIe 设备如何访问主机缓冲区,应讨论 DMA、DMA 地址、描述符和 IOMMU。如果问题是服务器之间如何低延迟传输到注册内存,应讨论 RDMA、RNIC、队列和网络承载。

仅有 10GbE、光纤或两台电脑不能证明 RDMA 已启用;需要硬件能力、驱动、操作系统接口和端到端配置共同支持。

常见问题

01RDMA 是否完全不使用 CPU?

不是。它显著减少数据复制和协议处理中的 CPU 工作,但连接管理、提交工作、完成处理和应用逻辑仍需要 CPU。

02所有高速以太网卡都支持 RDMA 吗?

不支持。链路速率不能证明 RDMA capability,必须核对适配器、驱动和操作系统公开能力。

03RDMA 会绕过 IOMMU 吗?

不应这样理解。RNIC 对本机内存的设备访问仍属于平台 DMA 安全模型,并需要正确映射和权限控制。

04SMB Direct 与普通 SMB 有什么关系?

SMB Direct 让 SMB 在可用时利用 RDMA 的低延迟、低 CPU 和高吞吐;常规协议协商和故障转移仍由 Windows 网络栈管理。

官方参考资料

  1. Microsoft:Windows Kernel-Mode DMA Library
  2. Microsoft:Windows Server RDMA 概览
  3. Microsoft:SMB Direct
  4. RFC Editor:RDMA Protocol Specification(RFC 5040)
HMA 安装支持