首先,明确几个关键点:

  • 角色是由PCIe控制器的模式决定的:工作在RC模式的控制器充当"主机",工作在EP模式的控制器充当"设备"。

  • 一个CPU可以同时拥有多种模式的控制器

  • 连接必须在不同模式之间建立:RC模式必须连接到EP模式。


连接关系

典型的连接方式如下:

HOST CPU的 PCIe控制器1 (RC模式) <---> EP CPU的 PCIe1 (EP模式)

这就是主连接通道,也是控制通道。通过这条链路,HOST才能识别、配置和管理EP CPU。

如下图所示:

+-------------------------------------------------------------------+
|                            HOST SYSTEM                            |
|                                                                   |
|  +----------------------+          +----------------------+       |
|  |     HOST CPU         |          |       Memory         |       |
|  |                      |          |                      |       |
|  | +------------------+ |          +----------------------+       |
|  | | PCIe Controller0 | |                     ^                  |
|  | |    (RC Mode)     | |                     | (通过系统总线)     |
|  | +------------------+ |                     |                  |
|  |          |           |          +----------------------+       |
|  |          | (可能连接其他EP设备) |   Root Complex (RC)   |       |
|  |          |           |          |     (系统集成)        |       |
|  | +------------------+ |          +----------^-----------+       |
|  | | PCIe Controller1 | |                     |                  |
|  | |    (RC Mode)     |-+---------------------+                  |
|  | +------------------+ |       (通过系统总线)                   |
+-------------------------+-----------------------------------------+
                          |  (物理PCIe链路)
+-------------------------+-----------------------------------------+
|                            EP CPU                                |
|                                                                   |
|  +----------------------+          +----------------------+       |
|  |      EP CPU          |          |    Local Memory      |       |
|  |                      |          |     (如果独立)        |       |
|  | +------------------+ |          +----------------------+       |
|  | | PCIe Controller0 | |                     ^                  |
|  | |    (RC Mode)     | |                     | (通过内部总线)     |
|  | +------------------+ |                     |                  |
|  |          |           |          +----------v-----------+       |
|  |          | (连接EP本地的PCIe设备)|   On-Chip Network    |       |
|  |          |           |          |   (或互联结构)        |       |
|  | +------------------+ |          +----------^-----------+       |
|  | | PCIe Controller1 | |                     |                  |
|  | |    (EP Mode)     |-+---------------------+                  |
|  | +------------------+ |       (通过内部总线)                   |
+-------------------------+-----------------------------------------+

各组件的角色和功能

1. HOST CPU
  • 系统的主处理器,运行主操作系统(如Linux)。

  • 它的两个PCIe控制器都工作在RC模式,意味着它们都能作为系统的"根",去发现和管理下游的PCIe设备。

  • PCIe Controller1:用于连接EP CPU。在HOST看来,通过这个控制器连接的整个EP CPU就是一个复杂的PCIe端点设备

2. EP CPU
  • 它是一个受控的协处理器或加速器

  • 它运行自己的固件或轻量级OS,但其行为受HOST驱动控制。

  • PCIe Controller1 (EP模式)

    • 核心角色:这是它作为"设备"存在的身份标识。

    • 它向HOST暴露自己的PCIe配置空间,包含Vendor ID、Device ID、BAR等。

    • 通过BAR,HOST可以映射EP CPU的本地内存或寄存器,从而进行控制和数据交换。

    • 它可以使用DMA 直接读写HOST的系统内存。

    • 它可以使用MSI/MSI-X 中断向HOST发送通知。

  • PCIe Controller0 (RC模式)

    • 本地扩展角色:EP CPU可以利用这个控制器,在自己的"小系统"内连接其他PCIe设备(例如:本地NVMe SSD、高速网卡、或其他专用加速芯片)。

    • 对于HOST来说,这些设备通常是不可见的。HOST只能看到EP CPU这个整体,而EP CPU内部的PCIe拓扑是它自己的事。

    • EP CPU负责枚举和管理这些本地设备。


数据流和工作方式

1. 系统启动和枚举
  1. HOST系统启动,BIOS/UEFI开始枚举PCIe总线。

  2. HOST的PCIe Controller1发现了连接的EP CPU(因为EP CPU的PCIe1工作在EP模式,像一个设备)。

  3. HOST读取EP CPU的PCIe配置空间,加载对应的设备驱动程序。

2. HOST -> EP CPU 通信
  • MMIO (Memory Mapped I/O)

    • HOST驱动程序通过EP CPU的BAR,将EP的内存或寄存器映射到HOST的物理地址空间。

    • HOST CPU像读写普通内存一样,通过mov指令向这个地址写入命令或数据。

    • 这个写操作会通过HOST的PCIe Controller1 (RC)生成一个PCIe事务,发送给EP CPU的PCIe Controller1 (EP)。

    • EP CPU的控制器接收到事务后,将其转换成本地总线事务,写入指定的本地内存或寄存器中。

3. EP CPU -> HOST 通信
  • DMA

    • EP CPU需要将处理结果送回HOST。

    • HOST驱动程序会事先在HOST内存中分配好缓冲区,并将该缓冲区的总线地址(经过IOMMU转换)告诉EP CPU。

    • EP CPU通过其PCIe Controller1 (EP)发起一个DMA写请求,目标地址就是HOST提供的总线地址。

    • 这个请求上行到HOST的PCIe Controller1 (RC),RC通过系统总线将数据最终写入HOST内存。

  • 中断

    • 当DMA完成或需要通知HOST时,EP CPU通过其PCIe Controller1 (EP)发起一个MSI/MSI-X中断

    • HOST的RC收到中断后,会中断HOST CPU,使其执行相应的中断服务程序。

4. EP CPU的本地操作
  • EP CPU可以完全独立地使用其PCIe Controller0 (RC)来管理它自己的本地PCIe设备,这个过程对HOST是透明的。

总结

在这种配置下:

  • 物理连接HOST.RC1 <---> EP.EP1

  • 逻辑关系:HOST是,EP CPU是

  • 通信路径:这是唯一的控制与数据通道。所有HOST与EP CPU之间的交互(命令、数据、中断)都通过这条链路。

  • EP的本地独立性:EP CPU可以利用其另一个RC模式的控制器构建一个私有的、HOST无法直接访问的本地I/O子系统。

这种架构广泛应用于高性能计算、AI推理、智能网卡、存储控制器等领域,其中一个强大的通用CPU(HOST)负责管理任务调度和复杂操作系统,而一个或多个专用CPU(EP)负责执行计算密集型或延迟敏感型的特定工作负载。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐