客户机参数
本页是 cosim 客户机驱动参数的唯一事实源:amdgpu 模块参数、VGA ROM 写入、内核命令行与 IP block mask 都在这里定义。其他章节只说明何时执行这些步骤并链接本页。
amdgpu modprobe 参数
六个参数缺一不可,完整命令为:
modprobe amdgpu ip_block_mask=0x67 ppfeaturemask=0 dpm=0 audio=0 ras_enable=0 discovery=2
参数 |
值 |
必需 |
作用 |
|---|---|---|---|
|
|
是 |
启用 common、GMC、IH、GFX、SDMA,禁用 PSP(bit 3)与 SMU(bit 4);掩码含义见下文 |
|
|
是 |
禁用全部 PowerPlay 特性;cosim 没有电源管理硬件 |
|
|
是 |
禁用动态电源管理 |
|
|
是 |
禁用 HDMI/DP 音频;cosim 没有音频硬件 |
|
|
是 |
禁用 RAS;避免精简 VBIOS(约 3 KB)下 |
|
|
是 |
从磁盘固件文件读取 IP discovery,而不是从 GPU ROM/寄存器读取 |
警告
使用 ip_block_mask=0x6f 会启用 PSP 固件加载并导致内核 panic;cosim 使用 0x67。
警告
ras_enable=0 是必需参数。缺少它时 amdgpu_ras_init 会在 atom_context 为空的情况下调用 amdgpu_atom_parse_data_header,触发空指针崩溃。
VGA ROM 写入
在 modprobe 之前,把 VBIOS 写入客户机物理地址 0xC0000:
dd if=/root/roms/mi300.rom of=/dev/mem bs=1k seek=768 count=128
参数 |
值 |
含义 |
|---|---|---|
|
|
客户机镜像内的 ROM 文件 |
|
|
物理内存设备 |
|
|
块大小 1024 字节 |
|
|
跳到 768 乘 1024,即物理地址 |
|
|
写入 128 乘 1024,即 128 KiB |
写入范围是 0xC0000 到 0xDFFFF,落在共享客户机内存中。gem5 的 AMDGPUDevice::readROM() 通过 system->getPhysMem() 从该地址读取 ROM,因此这一步必须在 modprobe 之前完成。amdgpu 驱动的五种 BIOS 发现方式在 cosim 下全部失败:
BIOS 发现方式 |
在 cosim 下失败的原因 |
|---|---|
|
QEMU Q35 没有 ACPI ATRM 方法 |
|
没有 ACPI VFCT 表 |
|
通过 SMU 寄存器读取,而 SMU 被 |
|
没有平台提供的 ROM |
|
在 cosim 下不可用 |
内核命令行
客户机内核使用以下命令行启动(记录在 vHost 的 cmdline 中):
console=ttyS0 root=/dev/vda1 rw nokaslr modprobe.blacklist=amdgpu
参数 |
作用 |
|---|---|
|
把内核控制台放到串口;115200 波特率可省略 |
|
root 文件系统所在的 virtio 磁盘分区 |
|
以读写方式挂载 root |
|
关闭内核地址随机化,便于按固定地址对照 gem5 侧行为 |
|
阻止内核或 udev 在 ROM 写入前自动加载驱动 |
modprobe.blacklist=amdgpu 只用于阻止自动加载;初始化服务会在写入 ROM 后删除该运行时黑名单,再执行带固定参数的 modprobe。
IP block mask
ip_block_mask 的位位置使用 IP discovery 的检测顺序索引,而不是 amd_shared.h 中 amd_ip_block_type 枚举值。驱动检查 (amdgpu_ip_block_mask & (1 << i)),其中 i 是检测顺序索引。MI300X 在 ROCm 7.0 DKMS 下的检测顺序为:
索引 |
IP block |
掩码位 |
在 |
|---|---|---|---|
0 |
|
|
是 |
1 |
|
|
是 |
2 |
|
|
是 |
3 |
|
|
否(禁用) |
4 |
|
|
否(禁用) |
5 |
|
|
是 |
6 |
|
|
是 |
7 |
|
|
否(非必需) |
8 |
|
|
否(非必需) |
0x67 的位布局:
0x67 = 0110_0111 (binary)
||||_||||
|||| |||+-- bit 0: soc15_common (enabled)
|||| ||+--- bit 1: gmc_v9_0 (enabled)
|||| |+---- bit 2: vega20_ih (enabled)
|||| +----- bit 3: psp (DISABLED)
|||+------- bit 4: smu (DISABLED)
||+-------- bit 5: gfx_v9_4_3 (enabled)
|+--------- bit 6: sdma_v4_4_2 (enabled)
+---------- bit 7: vcn_v4_0_3 (disabled)
掩码 |
二进制 |
启用的 IP 块 |
用途 |
|---|---|---|---|
|
|
common、GMC、IH、GFX、SDMA |
cosim 使用值 |
|
|
common、GMC、IH、PSP、GFX、SDMA |
错误值;启用 PSP 会导致内核 panic |
|
|
包含 PSP、SMU 在内的全部块 |
仅适用于真实硬件 |
初始化顺序
cosim-gpu-initialize.service 在客户机启动时执行一次 /usr/local/bin/cosim-gpu-initialize.sh,顺序如下:
步骤 |
动作 |
|---|---|
1 |
设置 |
2 |
把 |
3 |
把 |
4 |
删除内核命令行留下的运行时 |
5 |
执行带上述参数的 |
6 |
检查每个 AMD PCI 设备都有对应 DRM card,否则以非零状态退出 |
校验与来源
tests/test_modprobe_params.sh 检查镜像 recipe 中的 cosim_gpu_initialize.sh,要求每处 modprobe/insmod 都包含上述六个参数:
just check-modprobe-params
参数定义来源:
resources/images/recipes/ubuntu/24.04/x86_64/rocm/7.0/files/cosim_gpu_initialize.sh:客户机初始化脚本与默认参数。resources/images/recipes/ubuntu/24.04/x86_64/rocm/7.0/files/cosim-gpu-initialize.service:开机执行单元。resources/images/recipes/ubuntu/24.04/x86_64/rocm/7.0/provision.yml:ROM、discovery 固件与 DKMS 模块的安装位置。tests/test_modprobe_params.sh:参数集合的回归检查。
修改参数时同时更新客户机脚本、本页表格以及在该脚本上执行的检查。
相关页面
拓扑与 vHost 字段:拓扑 YAML schema
相关故障的处理:已知问题
客户机依赖文件与镜像内路径:产物、路径与源码地图
客户机驱动要求:客户机驱动要求
GPU 地址翻译:GPU 地址翻译