--- name: ci-perf-analysis description: 定位 GEM5 性能 CI 的归档与分数,比较 run 的 benchmark 表现并用 stats 分析变化。 --- # CI 性能分析 ## 概览 这个 skill 处理以下链路: 1. 从 CI run 的所有 jobs 中定位真实性能归档目录和 `score.txt`。 2. 用本地 `gem5_data_proc/run.py` 生成 CSV、weighted CSV 和 score CSV。 3. 对比 benchmark 级变化;必要时再下钻 `stats.txt`。 ## 1. 定位归档 优先使用仓库内脚本: ```bash python3 .agents/skills/ci-perf-analysis/scripts/ci_perf_info.py \ https://github.com/OpenXiangShan/GEM5/actions/runs/ ``` 脚本会遍历 run 的 jobs,并兼容当前和旧版 workflow 的归档日志格式。输出包括: - `job_id` 和 `job_name` - `archive_path` - `spec_all` - 本地可访问时的 `score.txt` 尾部 不要默认取第一个 job,也不要从日志中的示例文本推断归档位置。 非默认仓库可使用 `--repo `。 ## 2. 选择 gem5_data_proc 路径优先级: 1. 用户明确给出的路径 2. 环境变量 `GEM5_DATA_PROC_HOME` 3. 本机常见默认值 `/nfs/home/yanyue/workspace/gem5_data_proc` ```bash export GEM5_DATA_PROC_HOME="${GEM5_DATA_PROC_HOME:-/nfs/home/yanyue/workspace/gem5_data_proc}" test -f "$GEM5_DATA_PROC_HOME/run.py" ``` 若以上路径均不可用,先说明缺失并征得用户同意,再安装或 clone;不要把个人 home 路径当成所有机器的前提。 ## 3. 处理归档 始终使用步骤 1 返回的完整 ``,不要手写固定的 benchmark 套件目录: ```bash python3 "$GEM5_DATA_PROC_HOME/run.py" \ --out-dir /tmp/gem5_proc_runA \ --tag runA ``` 常用输出: - `.csv`:原始 point 或 benchmark 聚合结果 - `-weighted.csv`:按权重聚合的 benchmark 统计 - `-score.csv`:score、time 和 coverage 若 `run.py` 在个别 point 上报数据处理异常,但已生成 `score.txt` 或部分 CSV,要明确标注数据缺口;不要把部分输出说成完整成功。 ## 4. 比较两个 run ```bash python3 .agents/skills/ci-perf-analysis/scripts/ci_perf_info.py python3 .agents/skills/ci-perf-analysis/scripts/ci_perf_info.py python3 "$GEM5_DATA_PROC_HOME/run.py" \ --out-dir /tmp/gem5_proc_A --tag A python3 "$GEM5_DATA_PROC_HOME/run.py" \ --out-dir /tmp/gem5_proc_B --tag B ``` 分析顺序: 1. 固定 commit、workflow、配置和 workload 口径。 2. 比较总 score、time 和 coverage。 3. 按 benchmark 的 score/time delta 排序。 4. 从 weighted CSV 查看前端、后端、内存和分支等指标。 5. 只对重点 benchmark 下钻 `/spec_all//m5out/stats.txt`。 ## 输出要求 回答优先给出: 1. run、commit、配置和 workload 差异 2. 总分变化 3. 主要收益和回退 benchmark 4. 相关 stats 证据 5. 根因判断与未决风险 区分事实、推断和数据缺口。尤其不要把“run 已创建”写成“性能 CI 已通过”。 ## 资源 - `scripts/ci_perf_info.py`:从 run URL 或 ID 定位归档路径并打印 score 尾部。