feat(starry): add qperf runtime and app wrappers#1151
Conversation
7896715 to
f5bc5f6
Compare
There was a problem hiding this comment.
PR #1151 审查报告
概述
本 PR 将 #1093(app wrapper)和 #1095(perf runtime)合并为一个 PR。主要修改:
- App wrappers:
apps/OScope-harness/、apps/qperf/、apps/common/prebuild-harness-kit.sh— thin entrypoint,prebuild.sh固定 clone 外部 harness kit(commit 762c2272) - Perf CLI 扩展 (mod.rs): 30+ 新 ArgsPerf 字段(case, markers, callchain, flamegraph, host-metrics 等),强类型枚举
- Perf runtime 重写 (perf.rs, +2206/-138): workload windowing、QMP 优雅关机、zig cross-cc fallback、分阶段 flamegraph、report postprocess、host 指标采集
- Futex 测试: riscv64 跳过 T6 FUTEX_PRIVATE_FLAG(已知 SMP QEMU 挂起,见 #1093)
实现分析
代码结构良好,错误处理完善。ScopedEnvVar RAII 正确恢复环境变量。unsafe 块均有 SAFETY 注释。外部依赖通过 git commit pin + 校验。无 [patch.crates-io]。
本地验证
- bash -n shell 语法 ✅
- python3 -m py_compile ✅
- git diff --check ✅
- rustfmt --edition 2024 --check mod.rs ✅
- rustfmt --edition 2024 --check perf.rs ✅
- cargo check (axbuild) ✅
CI 分析
CI run #5393 总状态 failure。成功: formatting、sync-lint、starry loongarch64/aarch64 qemu、axvisor boards、axvisor aarch64/x86_64。Cancelled: arceos tests (3)、starry riscv64 qemu、axvisor riscv64 qemu。所有 cancelled job 在 10:08 同时被终止 — workflow 级级联超时,非 PR 相关失败。
⚠️ 阻塞:与 dev 合并冲突(3 个文件)
apps/OScope-harness/README.md— add/add 冲突。dev 已合并 app-only README,本 PR 是合并版应保留 PR 版本apps/OScope-harness/scripts/qperf-smoke.sh— 同理test-suit/starryos/normal/qemu-smp4/test-futex-clone-thread/c/src/main.c— 两边都有 riscv64 T6 skip,dev 多了 #1093 引用,保留 dev 版本
已本地完成冲突 dry-run 验证(无标记残留、shell 语法 OK、diff check OK),但无法 push 到 fork(环境无凭据)。
请 merge 最新 dev 解决冲突后 push。 解决后无其他阻塞问题。
重复/重叠分析
Powered by mimo-v2.5-pro
| ## CLI | ||
|
|
||
| From the TGOSKits repository root: | ||
|
|
There was a problem hiding this comment.
此文件与 dev 存在 add/add 冲突。dev 已合并 app-only 版本 README。本 PR 是合并版,应保留本 PR 版本。请 merge 最新 dev 解决。
| if ! grep -q "pub case:" "$workspace/scripts/axbuild/src/starry/mod.rs" 2>/dev/null; then | ||
| cat >&2 <<'EOF' | ||
| error: qperf smoke requires the enhanced Starry qperf runtime. | ||
|
|
There was a problem hiding this comment.
此文件与 dev 存在 add/add 冲突。dev 的错误信息引用 runtime companion,本 PR 是合并版应保留。请 merge 最新 dev 时取 PR 版本。
| { | ||
| #if defined(__riscv) | ||
| /* | ||
| * The explicit FUTEX_PRIVATE_FLAG subtest currently hangs on Starry |
There was a problem hiding this comment.
dev 在此处已补充 Follow-up context: #1093 引用。合并时请保留 dev 版本以保留 issue 追溯。
ZR233
left a comment
There was a problem hiding this comment.
这次 PR 把 qperf/OScope-harness 作为薄 app wrapper 接入,并把 Starry qperf runtime 扩展到 cargo xtask starry perf,包括 --case、shell workload、marker/window、report postprocess 和外部 harness kit 固定 commit 管理。整体方向是在仓库内保留入口与 xtask 集成,把 qperf/harness 实现放在 pinned external checkout。
当前 head f5bc5f69827d074cd7ed91bb2037181a909b8535 还不能合入,主要有两个阻塞点:
- PR 文档明确要求
apps/OScope-harness/scripts/qperf-smoke.sh boot可作为 qperf smoke,但我在当前 head 本地运行该命令时,外部 harness checkout 成功拉到762c22725024a065e85b26e0b01121eccea651c0后,执行cargo xtask starry perf --timeout 20 --case boot直接失败:StarryOS qperf riscv64 build requires riscv64-linux-musl-gcc in PATH; install a riscv64 musl C compiler or install zig...。这说明新增 app/tool workflow 还缺少可复现的准备说明、preflight,或默认可运行路径。按项目 review 规则,app/tool wrapper 不能只靠--help/语法检查证明可用,文档中的 runtime smoke 需要在当前 head 上跑到成功 marker 或给出受控 fallback。 - 当前 PR
mergeStateStatus=DIRTY,和最新 dev 已有冲突。因为上面的 runtime smoke 仍阻塞,我没有做冲突修复;请先 rebase/merge 最新 dev 后再重新验证。
本地验证:
cargo fmt --check:通过git diff --check origin/dev...HEAD:通过bash -n apps/OScope-harness/prebuild.sh apps/qperf/prebuild.sh apps/OScope-harness/scripts/qperf-smoke.sh apps/common/prebuild-harness-kit.sh:通过python3 -m py_compile apps/OScope-harness/harness.py apps/OScope-harness/mcp_server.py:通过cargo xtask starry perf --help:通过,能看到新增--case/marker/workload 参数apps/OScope-harness/scripts/qperf-smoke.sh boot:失败,缺少riscv64-linux-musl-gcc且本机没有zigfallback,未进入 QEMU/未生成 qperf report
CI 状态:当前 head formatting、sync-lint、clippy 已通过;Starry x86_64 QEMU 失败在 test-mt-execve pending-signal exec case,和本 PR 的 qperf runtime/app wrapper 没有直接文件或语义关联;riscv Starry QEMU 日志显示 context canceled,看起来是 fail-fast 级联。因为 PR 自身文档 smoke 已本地失败,本次 request changes 不依赖这些广义 CI 失败。
重复/重叠检查:PR body 说明本 PR 合并了 #1093/#1095 的 app wrapper 和 runtime scope;open PR 检索中 #1039/#990 是较早 qperf/harness 相关工作,当前 #1151 是合并版/替代方向,不是 dev 上已有功能。请在后续更新中继续保持和这些旧 PR 的关系说明清晰。
| ## qperf Smoke | ||
|
|
||
| ```bash | ||
| apps/OScope-harness/scripts/qperf-smoke.sh boot |
There was a problem hiding this comment.
这个文档化 smoke 在当前 head 上还不能作为可复现验证。我本地运行 apps/OScope-harness/scripts/qperf-smoke.sh boot 时,pinned harness checkout 成功后进入 cargo xtask starry perf --timeout 20 --case boot,但立即失败于缺少 riscv64-linux-musl-gcc,且本机没有 zig fallback:StarryOS qperf riscv64 build requires ...。新增 app/tool workflow 需要把必需 host 依赖写进文档并提供 preflight,或调整默认 smoke 到 CI/普通开发环境可运行的路径;否则这个 PR 只证明了 wrapper 存在,不能证明 qperf smoke 可用。
Summary
apps/qperfandapps/OScope-harnessas thin TGOSKits app entrypoints that fetch the fixed external harness kit commit inprebuild.shcargo xtask starry perf, including--case, shell-init/workload marker options, report postprocess validation, qperf report outputs, callchain/flamegraph options, and read-onlyTGOSKIT_HARNESS_KIT_DIRvalidationtarget/tgoskit-harness-kit/<commit>FUTEX_PRIVATE_FLAGsubtest skip for the known Starry SMP QEMU hangRelationship to existing PRs
This is the combined runtime+app version requested after review of #1093/#1095. It folds the app wrapper scope from #1093 and the runtime scope from #1095 into one PR so
perf-profileandqperf-smoke.sh bootno longer depend on a separate companion PR.Validation
bash -n apps/OScope-harness/prebuild.sh apps/qperf/prebuild.sh apps/OScope-harness/scripts/qperf-smoke.sh apps/common/prebuild-harness-kit.shpython3 -m py_compile apps/OScope-harness/harness.py apps/OScope-harness/mcp_server.pygit diff --checkgit diff --cached --checkRUSTUP_TOOLCHAIN=stable rustfmt --edition 2024 --check scripts/axbuild/src/starry/mod.rs scripts/axbuild/src/starry/perf.rsRUSTUP_TOOLCHAIN=stable cargo check --manifest-path scripts/axbuild/Cargo.tomlRUSTUP_TOOLCHAIN=stable cargo xtask starry perf --helpNote: stable rustfmt reports warnings for nightly-only rustfmt.toml options, but the formatting check exits successfully.