Rust 工作区
本页说明启动器的 crate 划分、模块职责、公开接口和扩展点,供修改启动器或接入新设备模型时参考。
工作区结构
工作区包含 cosim-topology、cosim-runtime和 cosim-cli三个 crate。cosim-cli依赖另外两个 crate,cosim-runtime依赖 cosim-topology,依赖方向决定了“文档解析不接触主机,执行逻辑才接触主机”的分层。
flowchart TD
C[cosim-cli] --> T[cosim-topology]
C --> R[cosim-runtime]
R --> T
模块职责
路径 |
职责 |
|---|---|
|
Clap 子命令、信号升级、标准输入生命线、事件输出和 verdict 行。 |
|
解码后的输入类型、校验后的类型( |
|
导入、合并键、模板继承、工作区相对资源路径、数量展开和校验。 |
|
|
|
给定 |
|
|
|
会话资源、节点类型状态、依赖租约、就绪探测和 verdict。 |
|
进程组、文件和锁的所有者、镜像创建与 overlay、异常退出后的 |
公开接口
cosim-topology公开load、graph和schema;校验后的类型根据DeviceContext和VhostContext渲染启动参数。cosim-runtime公开plan、run、clean、check_assets、RunOptions、Shutdown和Event。Plan记录程序、参数、环境、依赖、就绪探测、共享内存区域、磁盘目标和锁文件路径,cosim run --dry-run打印的就是它。
扩展点:适配器与命令模板
设备适配器由
Adapter枚举表达:gem5-mi300x运行一个进程内一个 GPU,qemu-device导出 QEMU 功能设备,模板适配器按 YAML 渲染命令。就绪条件由
Probe表达:日志标记、Unix socket 存在和 QMP 协商;适配器按顺序返回这些探测。vHost kind 通过 YAML
command模板渲染 QEMU 参数;kinds中role: device的 kind 提供argv或command,并需要ready_log。runtime.argv或runtime.command可以替换任何设备适配器生成的命令,但必须自己保证就绪探测和资源约定。gem5-mi300x要求config、恰好一个大小为 2 的幂的vram区域,以及匹配 MI300X 的 PCI 元数据;num_compute_units的范围是 1 到 1024,默认 40。qemu-device要求args.device.driver,id默认为device0,不接受私有内存区域,并需要runtime.binary。
接入新模型的步骤
在
resources/devices/中添加模板,声明kind、config或runtime、内存区域和 PCI 元数据。选择内置适配器,或在
kinds中声明role: device的模板 kind 并提供命令与ready_log。在
resources/machines/中添加引用该模板的机器样例,并运行cosim validate与cosim run --dry-run检查渲染结果。如果模型需要新的就绪方式或参数语义,修改
crates/cosim-topology/src/adapter/并补充 Rust 测试。
依赖与安全规则
YAML 语法与合并键由
serde_yaml_ng处理,Serde 负责类型反序列化。MiniJinja 渲染参数模板,Schemars 生成 JSON Schema,
parse-size解析大小表达式。Tokio 在单个线程上运行会话,
futures-util并发推进各进程节点,nix提供进程组信号、页大小和文件系统统计接口。项目的 Rust crate 从工作区继承
unsafe_code = "forbid";设备模型通过适配器边界接入,不在启动器内直接操作模型内部状态。检查命令:
just check-cosim运行格式、clippy 和单元测试,just test-cosim-integration运行真实进程与磁盘的集成测试。
源码与依据
三个 crate 的清单与依赖:
crates/cosim-cli/Cargo.toml、crates/cosim-runtime/Cargo.toml、crates/cosim-topology/Cargo.toml。适配器实现:
crates/cosim-topology/src/adapter/gem5.rs、qemu_device.rs、template.rs。运行库导出:
crates/cosim-runtime/src/lib.rs。Rust 规范:
docs/zh/contributing/rust_guidelines.rst。
相关页面
YAML 加载与计划:适配器在计划生成阶段的作用。
设备适配器:设备适配器契约的唯一事实源。
组件与职责:组件与职责的系统视图。
Rust 规范:Rust 代码与提交规范。