当前位置: 首页 > news >正文

节点内 cuda GPU 之间 P2P IPC 通信的硬件机制参考

        硬件层面深入分析 CPU、GPU 和 PCIe Root Complex 在 IPC 通信中的具体参与过程。

1. 硬件架构概览

1.1 典型的单节点多 GPU 系统架构

CPU (Root Complex)||--- PCIe Switch --- GPU0 (Device 0)|               ||               --- GPU1 (Device 1) ||--- Memory Controller --- System Memory (DDR)

1.2 IPC 通信涉及的硬件组件

  • CPU 协调控制、页表管理、MMIO 配置;

  • GPU 执行计算、访问显存、DMA 传输;

  • PCIe Root Complex 是拓扑中心、地址转换、路由;

  • System Memory 用来存储页表、IPC 元数据、同步变量;

2. IPC 通信的硬件详细流程

2.1 阶段一,内存注册和句柄创建

硬件参与情况

// 软件调用
cudaMalloc(&dev_ptr, size);
cudaIpcGetMemHandle(&handle, dev_ptr);

硬件执行路径

CPU 执行 cudaMalloc:1. CPU 通过 PCIe Config Space 访问 GPU 的 MMIO 寄存器2. GPU 内存控制器在显存中分配物理页面3. GPU 将分配的物理地址通过 PCIe 返回给 CPU4. CPU 在进程页表中建立 GPU 内存映射CPU 执行 cudaIpcGetMemHandle:1. CPU 查询 GPU 内存的物理地址信息2. GPU 通过 PCIe 返回内存区域的物理属性3. CPU 构建包含物理地址、GPU ID 等信息的 IPC 句柄

2.2 阶段二,IPC 内存映射

硬件参与情况

cudaIpcOpenMemHandle(&mapped_ptr, peer_handle, cudaIpcMemLazyEnablePeers);

详细的硬件交互

步骤 1: 地址解析和验证
CPU 动作:- 解析 IPC 句柄中的物理地址信息- 通过 PCIe 配置空间验证目标 GPU 的可访问性- 检查内存区域的属性和权限PCIe Root Complex 参与:- 处理 CPU 对 GPU 配置空间的访问请求- 在 PCIe 地址域中进行地址路由
步骤 2: IOMMU/SMMU 页表更新
CPU 动作:- 在 IOMMU 页表中创建新的映射条目- 将远程 GPU 内存的物理地址映射到当前进程的 I/O 虚拟地址IOMMU 硬件参与:- 存储 GPU 内存到 CPU 虚拟地址的转换表- 在后续 DMA 传输时执行地址转换- 提供内存保护和隔离
步骤 3: GPU 内存管理单元配置
CPU 通过 PCIe 配置 GPU MMU:- 设置 GPU 页表,允许对等访问- 配置 GPU 的 PCIe Base Address Registers (BARs)- 建立 GPU 间的地址转换规则GPU 硬件参与:- GPU MMU 处理来自其他 GPU 的访问请求- PCIe 接口处理传入的 TLP (Transaction Layer Packet)

2.3 阶段三:数据传输的硬件路径

情况 A: 通过 PCIe Switch 的直接传输
GPU0 → GPU1 数据传输:GPU0 动作:1. GPU0 DMA 引擎发起 PCIe 写事务2. 源地址: GPU0 本地显存物理地址3. 目标地址: GPU1 映射的 I/O 虚拟地址PCIe Switch 参与:1. 接收来自 GPU0 的 TLP 数据包2. 根据地址路由到正确的端口3. 可能的地址转换 (如果使用 ACS)4. 将数据包转发到 GPU1GPU1 动作:1. PCIe 端点接收写入请求2. GPU1 内存控制器将数据写入显存3. 完成事务确认返回给 GPU0
情况 B: 通过 Root Complex 的间接传输
当无法直接 P2P 时:GPU0 → System Memory → GPU1:第一步: GPU0 到系统内存1. GPU0 DMA 写数据到系统内存2. PCIe Root Complex 处理地址转换3. 内存控制器将数据写入 DDR第二步: 系统内存到 GPU1  1. GPU1 DMA 从系统内存读取数据2. 相同的硬件路径反向进行

3. 硬件资源的具体使用

3.1 PCIe 配置空间访问

// CPU 通过 PCIe 配置空间管理 GPU
struct pci_config_space {uint16_t vendor_id;uint16_t device_id;uint32_t bar0;      // MMIO 寄存器基地址uint32_t bar1;      // 显存映射区域// ... 其他配置寄存器
};// CPU 通过 IO 端口或 MMIO 访问配置空间
void configure_gpu_p2p(int gpu0, int gpu1) {// 1. 启用 PCIe 设备的 Bus Masteringpci_enable_bus_master(gpu0);pci_enable_bus_master(gpu1);// 2. 配置 PCIe Base Address Registerssetup_gpu_bars(gpu0);setup_gpu_bars(gpu1);// 3. 启用 PCIe 设备的 Memory Space 访问pci_enable_memory_space(gpu0);pci_enable_memory_space(gpu1);
}

3.2 IOMMU 页表条目

IOMMU 页表条目包含:
- 客户虚拟地址 (GPA): GPU 物理地址
- 主机物理地址 (HPA): 系统物理地址  
- 权限位: 读/写权限
- 缓存属性: 可缓存性设置在 IPC 映射时:
CPU 虚拟地址 → IOMMU 转换 → GPU 物理地址

3.3 GPU 内存管理单元

GPU MMU 负责:
- 处理 GPU 发起的 PCIe 事务地址转换
- 管理 GPU 本地页表
- 处理 TLB 缓存和缺页异常
- 配合 IOMMU 完成端到端地址转换

4. 性能瓶颈分析

4.1 PCIe 带宽利用

理想 IPC 传输路径:
GPU0 → PCIe Switch → GPU1↓        ↓          ↓x16      Switch     x16PCIe 4.0  带宽      PCIe 4.032 GB/s   无瓶颈    32 GB/s非理想路径 (通过 Root Complex):
GPU0 → Root Complex → System Memory → Root Complex → GPU1↓         ↓            ↓            ↓         ↓32 GB/s   共享带宽      DDR4        共享带宽   32 GB/s~25 GB/s

4.2 延迟组成

// IPC 传输延迟分解
struct ipc_latency_breakdown {uint64_t software_setup;    // 软件初始化时间: 10-50μsuint64_t pcie_config;       // PCIe 配置延迟: 1-5μsuint64_t iommu_walk;        // IOMMU 页表遍历: 0.1-1μsuint64_t data_transfer;     // 实际数据传输: 取决于大小uint64_t synchronization;   // 同步开销: 1-10μs
};

5. 硬件优化技术

5.1 PCIe ACS (Access Control Services)

ACS 在 PCIe Switch 中提供:
- 直接 P2P 路由,避免经过 Root Complex
- 基于地址的包路由
- 增强的隔离和安全性

5.2 ATS (Address Translation Services)

ATS 优化 IOMMU 使用:
- GPU 可以缓存 IOMMU 转换结果
- 减少 IOMMU 页表遍历次数
- 降低 PCIe 事务的延迟

5.3 PASID (Process Address Space ID)

PASID 支持:
- 每个进程独立的 GPU 地址空间
- 精细化的内存保护和隔离
- 更高效的上下文切换

6. 实际硬件诊断

6.1 检查 PCIe 拓扑

# 查看 PCIe 设备拓扑
lspci -tv# 检查 PCIe 链接速度和宽度
lspci -v | grep -A 10 "VGA compatible controller"# 检查 IOMMU 支持
dmesg | grep -i iommu

6.2 监控硬件性能

# 监控 PCIe 带宽
nvidia-smi dmon# 检查系统内存带宽
sudo perf stat -e memory/bytes-read/,memory/bytes-written/

总结

在 IPC 通信中,硬件组件的分工:

  • CPU 是 协调者,通过 PCIe 配置空间管理 GPU,更新 IOMMU 页表;

  • GPU 是具体执行者,执行 DMA 传输,处理内存访问请求;

  • PCIe Root Complex 则扮演了交通枢纽,路由 PCIe 事务,执行地址转换;

  • PCIe Switch 起到本地交换机的作用,在 GPU 间直接路由数据包;

  • IOMMU 起到了安全网关的作用,提供地址转换和内存保护;

        这种硬件协作使得即使在没有直接 P2P 连接的情况下,也能实现相对高效的 GPU 间数据传输,虽然比真正的 P2P Direct 多了些中间环节的开销。  

http://www.dtcms.com/a/605495.html

相关文章:

  • 基于ThinkPHP实现动态ZIP压缩包的生成
  • 一个网站里面只放一个图片怎么做展示商品的网站怎么做
  • vivo国产数据库技术储备,突破大规模数据的存储与性能瓶颈
  • LLM之Agent(二十八)|AI音视频转笔记方法揭秘
  • 在Electron应用中控制剪贴板操-复制粘贴
  • IOS如何免费申请开发者证书(uniapp开发)
  • 网站里的动效怎么做国家重点项目建设网站
  • 《MySQL进阶(十一):集群架构与实践专题(一)》
  • github修改用户名和密码
  • 【数据结构入门手札】数据结构基础:从数据到抽象数据类型
  • Redis 大 Key 深度解析:危害、检测与治理实践
  • 最新电子商务购物商城系统源码 三端/H5+微信+安卓
  • MathPrompter:大幅提升大模型数学推理能力的创新方法
  • 如何在团队士气低落时重建信任与动力
  • SAP FICO应收毛利表分享
  • php音乐外链网站源码石家庄自助建站软件
  • Modbus RTU 转 Modbus TCP:借助数据采集提升罗克韦尔PLC工艺参数反馈实时性案例
  • 上海网站推广排名公司甘肃交通建设监理公司网站
  • 【服务器】查看IIS上某个网站的当前连接数
  • 【JavaEE初阶】IP协议-IP地址不够用了咋办?
  • 天洑受邀参加汽车零部件及智能制造产业产学研对接暨江苏省清华大学校友会
  • 内网对抗-隧道技术篇防火墙组策略HTTP反向SSH转发出网穿透CrossC2解决方案
  • vue3搭建项目yarn+vue3+webpack+less+element-plus
  • DVWA 靶场搭建流程
  • 迎接智能自动化:基于Dify工作流打造自主决策测试智能体
  • 如何建一个手机网站运城网址
  • 网站快照优化怎么做旅游网站功能简介
  • 线性代数 - 二阶矩阵的行列式、向量叉积(Cross product)的模长与平行四边形面积的关系
  • 【开题答辩全过程】以 基于 Spark 的音乐数据分析项目为例,包含答辩的问题和答案
  • 【云运维】Kubernetes安装(基于 Docker + Calico)