Prhub

#27554 [UnifiedTree]: Support hicache metrics

原始 PR 作者 hzh0425 合并时间 2026-06-08 20:18 文件变更 1 提交数 3 评论 3 代码增减 +22 / -2

执行摘要

UnifiedTree 支持 HiCache 指标收集

为 UnifiedRadixCache 的 HiCache 路径添加可观测性指标,帮助监控和调试 KV 缓存加载性能。PR body 中展示了新增的 Prometheus 指标示例,包括 load_back_tokens_totalload_back_duration_seconds_count

值得精读 load_back 方法的埋点方式,可作为其他关键路径添加可观测性的参考。但需注意 get_global_server_args() 的潜在异常,建议后续修复。

讨论亮点

Gemini Code Assist 机器人建议将 get_global_server_args() 调用包在 try-except 中,以防止在单元测试等未初始化全局参数的场景下抛出 ValueError。该建议未在后续提交中处理,PR 已合并。

实现拆解

  1. 导入扩展:在 python/sglang/srt/mem_cache/unified_radix_cache.py 中新增 STAT_LOGGER_ROLE_STORAGEresolve_collector_class 的导入,为后续动态解析收集器类做准备。
  2. load_back 方法埋点:在 load_back 方法开始处记录 start_time = time.perf_counter(),在成功加载后调用 self.metrics_collector.observe_load_back_duration(...)self.metrics_collector.increment_load_back_num_tokens(...),分别记录耗时和 token 数。
  3. 收集器初始化优化:在 _apply_storage_runtime_config 中,当 storage_metrics_collector 为 None 时,原直接实例化 StorageMetricsCollector,现改为通过 resolve_collector_class 动态解析类,并传入全局 server args 和 STAT_LOGGER_ROLE_STORAGE,支持不同后端可插拔。
文件 模块 状态 重要度
python/sglang/srt/mem_cache/unified_radix_cache.py 缓存层 modified 6.51

关键符号

load_back _apply_storage_runtime_config

关键源码片段

python/sglang/srt/mem_cache/unified_radix_cache.py dependency-wiring

核心变更文件:添加 load_back 指标埋点、优化存储指标收集器初始化方式。

# python/sglang/srt/mem_cache/unified_radix_cache.py
# 新增指标收集埋点和动态收集器解析def load_back(self, best_match_node: UnifiedTreeNode, mem_quota=None, req=None) -> bool:
    if self.cache_controller is None:
        return False
​
    start_time = time.perf_counter() # 记录开始时间
​
    # ... 构建 KV transfer 和锁逻辑 ...
​
    # 执行加载
    device_indices = self.cache_controller.load(
        host_indices=kv_xfer.host_indices,
        node_id=best_match_node.id,
        extra_pools=aux_xfers or None,
    )
​
    # ... 清理和释放锁 ...
​
    # 上报指标:如果 metrics_collector 已配置
    if self.metrics_collector is not None:
        self.metrics_collector.observe_load_back_duration(
            time.perf_counter() - start_time
        )
        self.metrics_collector.increment_load_back_num_tokens(len(device_indices))
    return Truedef _apply_storage_runtime_config(self, labels):
    # ... 其他配置 ...
    existing_collector = self.storage_metrics_collector
    if existing_collector is None:
        from sglang.srt.server_args import get_global_server_args
        # 动态解析收集器类,支持可插拔后端
        storage_cls = resolve_collector_class(
            get_global_server_args(),
            STAT_LOGGER_ROLE_STORAGE,
            StorageMetricsCollector,
        )
        self.storage_metrics_collector = storage_cls(labels=labels)
    # ... 后续逻辑 ...

评论区精华

get_global_server_args 异常保护 other

Gemini Code Assist 机器人建议对 get_global_server_args() 调用添加 try-except 保护,防止在未初始化时抛出 ValueError。

结论:未采纳该建议,PR 已合并。 · 未解决

风险与影响

  1. 运行时异常风险get_global_server_args() 在未初始化时抛出 ValueError,可能导致存储运行时配置失败。虽然 resolve_collector_class 设计上能处理 None,但当前代码未保护调用,存在一定风险。
  2. 性能开销time.perf_counter() 调用在每次 load_back 时执行,但开销极低,可忽略。
  1. 用户:新增 HiCache 路径的可观测性指标,帮助监控 KV 缓存加载性能。
  2. 系统:仅修改 unified_radix_cache.py 一个文件,影响范围小,且新功能默认不启用(需要配置 metrics collector)。
  3. 团队:为后续指标后端扩展奠定基础,降低耦合。
缺少异常保护 核心路径变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论