Prhub

#22274 [AMD] CI Job Monitor: fix queue time, utilization, and summary metrics

sgl-project/sglang · 作者 bingxche · 合并时间 2026-04-17 13:03

分析状态 已生成
文件变更 1提交数 5 · 评论 7
代码增减 +286 / -91
ci bugfix amd

执行摘要

修复 CI 任务监控脚本中的队列时间、利用率和摘要指标计算错误。

根据PR body,GitHub Actions在任务进入队列时设置started_at,而不是当runner真正开始处理时。对于没有runner的任务,started_at ≈ created_at,导致队列时间计算错误,需要使用runner_name作为判断任务是否被runner拾取的可靠信号以修正监控指标。

对于负责CI基础设施或监控的工程师,值得精读以了解如何正确处理GitHub Actions API数据并优化监控脚本;重点关注使用runner_name作为状态区分器的设计决策和参数化时间窗口的可配置性改进。

讨论亮点

Review中gemini-code-assist[bot]建议预编译runner标签正则表达式以优化性能,并参数化利用率快照窗口以使用CLI参数而非硬编码值。作者采纳了这些建议,在最终提交中实现了_RUNNER_LABEL_ALT_RE和修改analyze_utilization_snapshots函数签名,体现了对代码效率和可配置性的关注。

实现拆解

  1. 修复队列时间计算:在scripts/ci/utils/query_job_status.py中,修改_queue_time_secondscalculate_queue_time函数,使用runner_name区分任务状态——有runner时计算started_at - created_at,无runner且状态为queued/waiting时计算report_time - created_at并标记为“queuing”,其他情况跳过,确保队列时间准确反映实际等待。
  2. 修正利用率快照:更新analyze_utilization_snapshots函数,添加hours参数以尊重CLI的--hours参数,避免硬编码24小时窗口,并修复无runner完成任务的计数逻辑,防止产生虚假队列分钟数。
  3. 完善摘要表格:在摘要报告函数中添加“Skipped”列,并计数neutralstale结论,解决Total ≠ sum of columns的错误。
  4. 性能优化:预编译runner标签正则表达式_RUNNER_LABEL_ALT_RE,避免在排序操作中重复编译,提升脚本效率。
  5. 配套调整:在fetch_all_jobs_snapshot函数中添加无标签任务的排除跟踪,确保数据收集完整性。
文件 模块 状态 重要度
scripts/ci/utils/query_job_status.py CI 脚本 modified 6.94

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

_runner_label_sort_key _queue_time_seconds analyze_busy_periods analyze_queue_distribution analyze_utilization_snapshots _count_at_time

评论区精华

预编译正则表达式优化性能 性能

gemini-code-assist[bot] 建议预编译 runner 标签正则表达式,避免在排序操作中重复编译以提升效率。

结论:作者采纳,在模块级别添加了预编译的 `_RUNNER_LABEL_ALT_RE` 正则表达式。 · 已解决

参数化利用率快照窗口提升可配置性 设计

review 反馈指出 `analyze_utilization_snapshots` 函数硬编码 24 小时窗口,应使用 CLI 参数 `--hours` 来匹配用户指定时间范围。

结论:作者修改函数签名,添加 `hours` 参数,确保利用率快照尊重用户输入。 · 已解决

风险与影响

风险较低,主要影响CI监控脚本的数据准确性,不涉及核心业务逻辑或生产代码。如果计算错误持续,可能导致团队基于不准确队列时间和利用率数据的决策偏差,但无安全、性能回归或兼容性问题。脚本变更仅限于AMD CI监控流程,影响范围可控。

对CI监控系统有直接改进,提升队列时间、利用率和摘要指标的报告准确性,帮助团队更好地理解CI资源使用情况和瓶颈。影响范围仅限于使用该监控脚本的AMD CI流程,对用户和系统其他部分无影响。

监控数据准确性

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

  • 一句话:修复CI任务监控脚本中的队列时间、利用率和摘要指标计算错误。
  • 推荐动作:对于负责CI基础设施或监控的工程师,值得精读以了解如何正确处理GitHub Actions API数据并优化监控脚本;重点关注使用runner_name作为状态区分器的设计决策和参数化时间窗口的可配置性改进。

功能与动机

根据PR body,GitHub Actions在任务进入队列时设置started_at,而不是当runner真正开始处理时。对于没有runner的任务,started_at ≈ created_at,导致队列时间计算错误,需要使用runner_name作为判断任务是否被runner拾取的可靠信号以修正监控指标。

实现拆解

  1. 修复队列时间计算:在scripts/ci/utils/query_job_status.py中,修改_queue_time_secondscalculate_queue_time函数,使用runner_name区分任务状态——有runner时计算started_at - created_at,无runner且状态为queued/waiting时计算report_time - created_at并标记为“queuing”,其他情况跳过,确保队列时间准确反映实际等待。
  2. 修正利用率快照:更新analyze_utilization_snapshots函数,添加hours参数以尊重CLI的--hours参数,避免硬编码24小时窗口,并修复无runner完成任务的计数逻辑,防止产生虚假队列分钟数。
  3. 完善摘要表格:在摘要报告函数中添加“Skipped”列,并计数neutralstale结论,解决Total ≠ sum of columns的错误。
  4. 性能优化:预编译runner标签正则表达式_RUNNER_LABEL_ALT_RE,避免在排序操作中重复编译,提升脚本效率。
  5. 配套调整:在fetch_all_jobs_snapshot函数中添加无标签任务的排除跟踪,确保数据收集完整性。

关键文件:

  • scripts/ci/utils/query_job_status.py(模块 CI脚本;类别 infra;类型 infrastructure;符号 _runner_label_sort_key, _queue_time_seconds, analyze_busy_periods, analyze_queue_distribution): 唯一变更文件,包含所有修复逻辑,涉及队列时间计算、利用率快照和摘要指标的核心函数。

关键符号:_runner_label_sort_key, _queue_time_seconds, analyze_busy_periods, analyze_queue_distribution, analyze_utilization_snapshots, _count_at_time

评论区精华

Review中gemini-code-assist[bot]建议预编译runner标签正则表达式以优化性能,并参数化利用率快照窗口以使用CLI参数而非硬编码值。作者采纳了这些建议,在最终提交中实现了_RUNNER_LABEL_ALT_RE和修改analyze_utilization_snapshots函数签名,体现了对代码效率和可配置性的关注。

  • 预编译正则表达式优化性能 (performance): 作者采纳,在模块级别添加了预编译的_RUNNER_LABEL_ALT_RE正则表达式。
  • 参数化利用率快照窗口提升可配置性 (design): 作者修改函数签名,添加hours参数,确保利用率快照尊重用户输入。

风险与影响

  • 风险:风险较低,主要影响CI监控脚本的数据准确性,不涉及核心业务逻辑或生产代码。如果计算错误持续,可能导致团队基于不准确队列时间和利用率数据的决策偏差,但无安全、性能回归或兼容性问题。脚本变更仅限于AMD CI监控流程,影响范围可控。
  • 影响:对CI监控系统有直接改进,提升队列时间、利用率和摘要指标的报告准确性,帮助团队更好地理解CI资源使用情况和瓶颈。影响范围仅限于使用该监控脚本的AMD CI流程,对用户和系统其他部分无影响。
  • 风险标记:监控数据准确性

关联脉络

  • PR #22948 [AMD] Qwen3.5 MXFP4 breaks after shared expert fusion is enabled: 同为AMD相关的bugfix PR,涉及特定硬件环境的修复,但领域不同(模型vs CI监控)。

参与讨论