组件与职责
系统由 Rust launcher、host QEMU、设备模型进程(gem5 或 QEMU)、vfio-user 连接和共享内存池组成。本页说明每部分的职责与边界。
总览
flowchart LR
Y[拓扑 YAML] --> L[cosim launcher]
L --> H[Host QEMU]
L --> G[gem5 MI300X 设备进程]
L --> Q[QEMU 设备进程]
H <-->|vfio-user| G
H <-->|vfio-user| Q
H --- P[机器内存池]
G --- P
Q --- P
H --> Guest[Linux 客户机与 ROCm]
launcher 读取拓扑与 vHost,生成执行计划并监督进程;模拟器只在计划给出的 路径、参数与内存区域上运行。
组件职责
组件 |
进程或库 |
职责 |
|---|---|---|
|
用户进程 |
加载、校验、规划、运行与清理会话;不参与仿真计算 |
|
Rust 库 |
YAML 解析与校验、模板展开、内存布局、启动参数渲染 |
|
Rust 库 |
执行计划、会话资源、就绪探测、租约、verdict 与清理 |
Host QEMU |
host 进程 |
运行客户机 CPU、内存与 PCIe,提供 QMP 与串口;功能仿真 |
gem5 MI300X |
设备进程 |
MI300X 性能模型,作为 vfio-user 服务端;性能仿真 |
QEMU 设备进程 |
设备进程 |
通过 |
vfio-user |
Unix socket 协议 |
QEMU host 与设备模型之间的桥 |
共享内存池 |
文件 |
客户机内存与设备区域,供 QEMU 与设备模型共同映射 |
QEMU:功能仿真
QEMU 在本系统中承担两个角色,二者都是功能仿真,不提供微架构时序:
vhost:host QEMU 用 Q35 或 virt 机器、KVM 或 TCG 运行客户机 Linux, 完成 PCIe 枚举,加载 amdgpu 驱动,并提供 QMP 与串口用于控制和观察。
device model:设备 QEMU 进程使用
-machine x-remote与-object x-vfio-user-server,把edu这类 PCI 设备导出为 vfio-user 服务端。模型保证寄存器与中断行为正确,不建模时序。
QEMU 不模拟 GPU 性能;MI300X 的时序由 gem5 提供。两类设备可以在同一台机器
中组合,机器目录中的 mixed-models 就是这种组合。
gem5:性能仿真
gem5 运行 MI300X 设备模型,通过 MI300XVfioUser 暴露配置空间、BAR、
DMA 映射与中断。模型覆盖:
PM4 命令处理器与 SDMA 引擎;
Shader 与 Compute Unit、Ruby 内存层次;
中断处理器与 GPU 地址翻译(GART、MMHUB、用户上下文);
GPU 命令队列、完成标记与 DMA 的数据通路。
联合仿真配置使用 StubWorkload,只执行设备模型。YAML 适配器为每个 gem5
进程启动一个 GPU;gem5 配置自身支持的进程内多 GPU 模式不由 YAML 路径使用。
vfio-user:两者之间的桥
host QEMU 使用内置的 vfio-user-pci 客户端,设备侧由 gem5 的
MI300XVfioUser(libvfio-user)或 QEMU 的 x-vfio-user-server 提供
服务端。协议走 Unix socket,支持 PCI 配置空间、MMIO、DMA 映射与中断。
细节见 vfio-user 通信接口。
支撑设施
源码入口
路径 |
内容 |
|---|---|
|
YAML 类型、校验、布局与适配器 |
|
计划、会话、探测、资源与清理 |
|
MI300X 对象、池与 vfio-user 参数 |
|
PM4、SDMA、中断、GPU VM 与 vfio-user 服务端 |
|
QEMU device server 接口 |
|
镜像配方,以及并列的 vHost、设备、机器和集群配置目录 |