Prhub

#25707 Log per-request time stats in a dedicated tail step

原始 PR 作者 fzyzcjy 合并时间 2026-05-19 09:16 文件变更 1 提交数 1 评论 1 代码增减 +9 / -7

执行摘要

提取时间日志记录为私有方法

从 PR body 可知,提取辅助方法是为了降低 _stream_output_generation 的复杂度,避免将 rank-zero 和时间统计配置等逻辑耦合在累加器(_GenerationStreamAccumulator)中,同时作为重构链的一环(refactor chain ID: extract-maybe-log-time-stats)。

这是一个小范围重构,属于代码清理,值得合并但不需精读。

讨论亮点

无 review 讨论,PR 由作者自行合并。

实现拆解

  1. _stream_output_generation 方法中,将之前内联的条件判断和 req.log_time_stats() 调用替换为 self._maybe_log_time_stats(req=req)
  2. 新增 _maybe_log_time_stats(self, *, req: Req) -> None 私有方法,内部保留原始的条件逻辑(req.finished()self.ps.attn_tp_rank == 0self.server_args.enable_request_time_stats_logging)。
  3. 该方法位于 SchedulerOutputStreamer 类中而非 _GenerationStreamAccumulator,因为条件涉及流管理器的属性(self.psself.server_args),累加器不应感知这些。
  4. to_payload 仍为 NotImplementedError 存根,等待后续 PR 接入。
文件 模块 状态 重要度
python/sglang/srt/managers/scheduler_components/output_streamer.py 调度器 modified 5.76

关键符号

_maybe_log_time_stats

关键源码片段

python/sglang/srt/managers/scheduler_components/output_streamer.py core-logic

唯一变更文件,提取 `_maybe_log_time_stats` 私有方法并替换调用点。

# 新增的 _maybe_log_time_stats 方法,内部持有原始条件逻辑
def _maybe_log_time_stats(self, *, req: Req) -> None:
    # 仅在请求完成、attn_tp_rank == 0 且配置启用时才落日志
    if (
        req.finished()
        and self.ps.attn_tp_rank == 0
        and self.server_args.enable_request_time_stats_logging
    ):
        req.log_time_stats()# 调用点替换:for 循环中
for req in reqs:
    if req is skip_req:
        continue
    if req.finished() and req.finished_output:
        continue
    acc.accept(req=req)
    self._maybe_log_time_stats(req=req) # 由原来 10 行内联替换为单行

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

变更范围极小(16 行 diff),逻辑完全等价,不引入新功能或性能风险。唯一潜在风险是 _maybe_log_time_stats 被其他代码意外调用(但为私有方法),或重构链后续变更与本变更冲突。

仅限于 _stream_output_generation 方法内部,无外部行为变化。影响面小,仅对后续重构链有积极影响。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论