← 回總覽

深入解读 GPUDirect PCIe P2P 驱动代码:Mailbox 和 BAR1 的实现原理及对比

📅 2026-06-09 12:05 InfoQ 中文 软件编程 2 分鐘 1654 字 評分: 88
GPU 编程 NVIDIA 驱动 GPUDirect P2P PCIe 系统编程
📌 一句话摘要 本文深入解析 NVIDIA 开源驱动中 GPUDirect PCIe P2P 的实现,重点对比 Mailbox 与 BAR1 两种方案,并详细拆解社区 Patch 如何绕过原厂限制解锁部分 GPU 的 P2P 能力。 📝 详细摘要 文章以 tinygrad 等社区项目解锁部分 NVIDIA GPU 的 GPUDirect PCIe P2P 功能为契机,对 NVIDIA 开源 Linux 内核模块中 P2P 相关代码进行了深度剖析。内容首先介绍了 GPUDirect P2P 的背景与价值,随后详细拆解了社区 Patch 绕过原厂驱动的四个核心卡点(ReBAR 限制、HAL 架

📌 一句话摘要

本文深入解析 NVIDIA 开源驱动中 GPUDirect PCIe P2P 的实现,重点对比 Mailbox 与 BAR1 两种方案,并详细拆解社区 Patch 如何绕过原厂限制解锁部分 GPU 的 P2P 能力。

📝 详细摘要

文章以 tinygrad 等社区项目解锁部分 NVIDIA GPU 的 GPUDirect PCIe P2P 功能为契机,对 NVIDIA 开源 Linux 内核模块中 P2P 相关代码进行了深度剖析。内容首先介绍了 GPUDirect P2P 的背景与价值,随后详细拆解了社区 Patch 绕过原厂驱动的四个核心卡点(ReBAR 限制、HAL 架构锁、GMMU 孔径限制、SKU 锁)的具体代码修改。文章核心部分对比了基于 PCIe 的两种 P2P 方案:Mailbox P2P(依赖私有硬件机制,适用于旧架构)和 BAR1 P2P(基于标准 PCIe 协议和 ReBAR 技术,是本次解锁的重点)。对 BAR1 P2P 的实现,文章从能力检测、映射建立、数据传输到清理,结合驱动源码进行了全链路分析,并讨论了 PCIe 拓扑结构对 P2P 性能的影响。

💡 主要观点

- 社区通过修改 NVIDIA 开源驱动,绕过了原厂对部分 GPU 的 P2P 功能限制。 Patch 主要针对四个卡点:强制开启 ReBAR 检测、绑定 Hopper 架构的 BAR1 P2P HAL 实现、将 GMMU 页表的 PEER Aperture 替换为 SYS_NONCOH 以绕过硬件限制、以及绕过 SKU 锁并强制指定 P2P 类型为 BAR1。

BAR1 P2P 基于标准 PCIe 协议和 ReBAR 技术,不依赖 NVIDIA 私有硬件。 其核心是利用 ReBAR 将 GPU 的 BAR1 空间扩容至与显存等大,使其他 GPU 能通过 PCIe 总线地址直接访问对端显存,地址转换由 GMMU 和 IOMMU 协同完成。
Mailbox P2P 是 NVIDIA 的私有方案,依赖 Peer ID、HSHUB 和 WMB Tag 等硬件机制。 该方案通过 GPU 内部的专用寄存器进行握手,数据仍走标准 PCIe TLP,但路由和地址转换依赖私有硬件,适用于不支持 ReBAR 的旧架构。
PCIe 物理拓扑结构对 P2P 性能和连通性有决定性影响。 同 PCIe Switch 下性能最优(PIX),跨 CPU Socket(SYS)性能最差甚至不支持,中间层级(PHB)受 ACS 等固件配置影响。

💬 文章金句

- NVLink 的设计哲学是「连为一体」,从硬件层面抹平了设备界限;而 PCIe P2P 则更像是在主从架构下「为绕过 CPU 中转而打的补丁」。

  • 在 NVIDIA 的官方驱动中并未支持这些显卡的 GPUDirect PCIe P2P 功能,但从硬件设计而言,它们完全具备该能力。

📊 文章信息

AI 初评:88

来源:InfoQ 中文

作者:InfoQ 中文

分类:软件编程

语言:中文

阅读时间:49 分钟

字数:12022

标签: GPU 编程, NVIDIA 驱动, GPUDirect P2P, PCIe, 系统编程

阅读完整文章

查看原文 → 發佈: 2026-06-09 12:05:00 收錄: 2026-06-10 02:00:14

🤖 問 AI

針對這篇文章提問,AI 會根據文章內容回答。按 Ctrl+Enter 送出。