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

网卡实例

网卡 DMA 如何工作:以 Intel X520 与 82599 为例

PCIe 网卡通过 DMA 在系统内存与网络端口之间移动数据,这是正常高速网络的基础。Intel X520 系列采用 82599 10GbE 控制器,其官方数据手册用发送与接收描述符队列说明了驱动、DMA 引擎和网卡之间的责任分工。

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

网卡 DMA 的边界

网卡不是拿到一个任意内存入口。驱动准备缓冲区和描述符,操作系统建立 DMA 映射,控制器只应处理队列中已授权的地址与长度。本站所说“无需 DMA 设备”是指无需额外专用 DMA 采集卡;X520 作为正常 PCIe 网卡仍使用标准 packet DMA,这不代表任意内存访问。

示例适配器Intel X520
控制器Intel 82599
主机接口PCIe
数据结构Tx / Rx 描述符

高速网卡为什么使用 DMA

如果 CPU 必须逐字节复制每个报文,网络吞吐和处理器占用都会受到限制。总线主控网卡可以依据驱动准备的描述符,直接读取待发送缓冲区或把接收数据写入已分配缓冲区。

CPU 仍负责建立队列、提交工作、处理中断或轮询完成状态,并在适当时机回收缓冲区。DMA 减少数据搬运,不等于系统软件退出控制。

发送路径:从描述符到链路

发送时,主机驱动准备报文缓冲区和描述符,在描述符中记录经 DMA API 映射后的地址、长度与必要控制信息,然后更新队列尾指针。

82599 的 DMA 引擎取得描述符和报文数据,完成被配置的校验和或分段等任务,把帧交给 MAC;完成后回写描述符状态并通知驱动,驱动才可释放相关缓冲区。

接收路径:先提供缓冲区,再接收报文

接收前,驱动先向队列提供可由设备写入的缓冲区。网卡收到帧后,根据接收描述符把数据写入对应内存,并更新完成状态。

驱动确认硬件已交还所有权并完成必要同步后,才能把数据提交给网络栈,再补充新的接收缓冲区。队列深度、所有权和错误处理共同决定稳定性。

Scatter/Gather 与硬件卸载

网络缓冲区可能由多个不连续物理片段组成。Windows NDIS Scatter/Gather DMA 让驱动通过系统接口取得有效片段列表,减少不必要的整包复制。

校验和、分段等卸载可以降低 CPU 工作量,但不会取消内存边界。描述符地址、长度、硬件能力和 DMA 映射仍必须一致。

兼容性与安全验证重点

验证 X520/82599 或其他网卡时,应使用适配器和操作系统厂商支持的驱动,记录 PCI ID、驱动与 NVM 版本,并覆盖高负载、重启、链路变化和错误恢复。

在支持 IOMMU 的平台上,还应核对 DMA Remapping 与 Kernel DMA Protection 状态。普通网卡的报文 DMA 不等于获得任意内存访问,也不应被描述为绕过平台保护的能力。

常见问题

01Intel X520 是否使用 DMA?

是。与其他高性能 PCIe 网卡一样,它使用描述符队列和 DMA 在已映射的主机缓冲区与控制器之间移动报文。

02普通网卡 DMA 是否等于 RDMA?

不等于。普通网卡内部使用 DMA 搬运本机报文;RDMA 还定义跨主机的远程内存操作、注册和保护语义。

03描述符中的地址是应用程序指针吗?

不是。它应是驱动通过操作系统 DMA 接口获得的设备地址,可能经过 IOMMU 转换。

04更换驱动或 NVM 后需要重新验证吗?

需要。队列、卸载、错误恢复和平台兼容行为都可能随版本变化。

官方参考资料

  1. Intel:82599 10GbE Controller 数据手册
  2. Intel:Ethernet Server Adapter X520 产品资料
  3. Microsoft:NDIS Scatter/Gather DMA
  4. Microsoft:为设备驱动启用 DMA Remapping
HMA 安装支持