Prhub

#21624 [HiCache] fix: Clone host indices to avoid memory leak

原始 PR 作者 alphabetc1 合并时间 2026-04-02 08:42 文件变更 2 提交数 10 评论 5 代码增减 +3 / -3

执行摘要

修复 HiCache 中 host indices 未克隆导致的内存泄漏问题。

根据Issue #19332,当启用L3 KV缓存(HiCache)时,SGLang在TCP环境下显示内存使用持续增加,甚至导致OOM。PR body指出,HiCache存储alloc()视图时保留了旧host-pool backing storage的引用,导致内存泄漏,复现步骤显示内存从77g增长到102g。

建议工程师阅读此PR以理解内存泄漏的根本原因和修复方法,特别是在缓存和长期引用场景中。对于维护HiCache或类似系统的开发者,这是一个值得关注的内存管理案例。

讨论亮点

Review中只有gemini-code-assist[bot]的评论,指出克隆host indices以防止共享引用副作用,xiezhq-hermann批准了变更。Issue评论中,dcosmos确认修复有效。没有争议点,讨论简洁。

实现拆解

实现方案是在两个HiCache相关文件的备份函数中,将host indices克隆后再存储到节点中。具体修改:在hi_mamba_radix_cache.py的write_backupmamba_backup_commit函数中,添加.clone();在hiradix_cache.py的write_backup函数中同样添加.clone()。这确保节点持有独立副本,避免共享引用导致的泄漏。

文件 模块 状态 重要度
python/sglang/srt/mem_cache/hi_mamba_radix_cache.py 缓存子系统 modified 8.0
python/sglang/srt/mem_cache/hiradix_cache.py 缓存子系统 modified 8.0

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

关键符号

write_backup mamba_backup_commit

评论区精华

克隆 host indices 以避免内存泄漏 正确性

gemini-code-assist[bot] 指出克隆防止共享引用副作用,避免内存泄漏。

结论:变更被批准,修复有效,无争议。 · 已解决

风险与影响

主要风险是.clone()可能引入额外的内存分配和拷贝开销,轻微影响性能,但权衡修复内存泄漏是合理的。变更仅涉及两处代码,回归风险低,但需在部署后监控内存使用和性能。

该修复直接影响启用HiCache的用户,消除内存泄漏,提升系统稳定性和可靠性,减少OOM风险。对性能影响可能微小,但改善了长时间运行工作负载的资源管理。影响范围限于使用分层缓存的场景。

内存泄漏修复 克隆性能开销

关联 Issue

#19332 [Bug] SGLang shows increasing memory usage (or a memory leak) when the L3 KV cache is enabled in a TCP environment

完整报告

执行摘要

本PR修复了SGLang中HiCache模块的内存泄漏问题,通过克隆host indices避免长期引用旧存储。变更仅涉及两处代码修改,但显著提升了系统在启用分层缓存时的稳定性和资源管理能力。

功能与动机

动机:根据Issue #19332,当启用L3 KV缓存(HiCache)时,SGLang在TCP环境下显示内存使用持续增加,甚至导致OOM。根本原因是HiCache在存储alloc()视图时,保留了旧host-pool backing storage的引用,导致内存泄漏。PR body中提供了复现步骤,显示内存从77g增长到102g。

实现拆解

核心修改点

  • 文件 python/sglang/srt/mem_cache/hi_mamba_radix_cache.py
    • write_backup函数中,将node.host_value = host_indices改为node.host_value = host_indices.clone()
    • mamba_backup_commit函数中,同样添加.clone()
  • 文件 python/sglang/srt/mem_cache/hiradix_cache.py
    • write_backup函数中,将node.host_value = host_indices改为node.host_value = host_indices.clone()

关键逻辑:通过克隆host indices,确保缓存节点持有独立副本,避免共享引用导致的长期内存占用。

评论区精华

review讨论

  • gemini-code-assist[bot]评论:"克隆host indices以防止共享引用副作用。"
  • xiezhq-hermann批准变更。

Issue反馈:dcosmos确认修复有效,解决了#19332中的问题。

风险与影响

风险分析

  • 性能开销.clone()可能引入额外内存分配和拷贝,轻微影响性能,但权衡修复内存泄漏是必要的。
  • 回归风险:变更范围小,回归风险低,但建议部署后监控内存使用。

影响评估

  • 用户影响:修复了启用HiCache时的内存泄漏,提升系统稳定性,减少OOM发生。
  • 系统影响:改善资源管理,适用于长时间运行的高并发工作负载。

关联脉络

相关PR

  • PR #21884:移除HiRadixCache中的TTL硬钉功能,同样涉及缓存管理优化。
  • PR #21764:修复HiCache缓存命中统计,属于同一功能线的改进。

演进趋势:近期HiCache相关PR频繁,显示团队在持续优化缓存性能和可靠性,本PR是解决内存泄漏的关键一环。

参与讨论