Prhub

#35931 [Bugfix][LMCache][KVConnector] fix potential memory leak in LMCache multiprocess mode

原始 PR 作者 royyhuang 合并时间 2026-03-08 05:52 文件变更 1 提交数 10 评论 7 代码增减 +28 / -0

执行摘要

修复 LMCache 多进程模式下因未释放查找锁导致的内存泄漏问题。

修复 LMCache 多进程模式下潜在的内存泄漏。PR body 指出,当 vLLM 计算自身而非从 LMCache 检索的块时,查找锁未被释放,这些泄露的锁阻止 LMCache 驱逐陈旧条目,导致内存无限增长,影响系统稳定性。

建议团队阅读此 PR 以理解 LMCache 锁管理机制和并发处理。变更虽直接,但涉及关键内存安全,值得在类似上下文中参考。注意 maobaolong 提出的未解决问题,可能需要后续调查。

讨论亮点

Review 中,ApostaC 建议修正拼写错误和优化日志消息,作者已修复。maobaolong 提出一个问题:'Is there a change that the prefix chunk could be evicted, then the following chunks become orphans?',但未进一步讨论或解决,表明可能存在未解决的疑虑。

实现拆解

实现集中在 vllm/distributed/kv_transfer/kv_connector/v1/lmcache_mp_connector.py 文件的 update_state_after_alloc 函数中。新增逻辑检查 tracker.num_lmcache_hit_blocks;如果无检索需要(condition=False),释放所有锁定块;否则,释放 vLLM 计算的块的锁。边界不对齐问题通过 free_lookup_locks 函数内的 floor division 处理,确保锁正确释放。

文件 模块 状态 重要度
vllm/distributed/kv_transfer/kv_connector/v1/lmcache_mp_connector.py 分布式 KV 传输 / KV 连接器 / v1 modified 7.0

关键符号

update_state_after_alloc free_lookup_locks

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

评论区精华

拼写错误修正 style

ApostaC 指出 'Bounday' 应为 'Boundary',建议修正拼写错误。

结论:作者已修复拼写错误。 · 已解决

日志消息优化 style

ApostaC 建议改进日志消息为 'Free locks of tokens %d-%d since it is cached by vLLM.'。

结论:作者采纳并修改了日志消息。 · 已解决

前缀块驱逐风险 正确性

maobaolong 提出前缀块被驱逐后后续块可能成为孤儿的问题,质疑缓存一致性。

结论:未进一步讨论或解决,状态未定。 · unresolved

风险与影响

主要风险在于锁释放逻辑的正确性:如果 free_end 计算错误或 free_lookup_locks 函数处理不当,可能导致数据竞争或锁未释放,引发新问题。此外,maobaolong 的问题暗示潜在缓存一致性风险,需要进一步验证。

此修复直接影响使用 LMCache 多进程模式的用户,防止内存泄漏,提升系统稳定性和性能。由于 LMCache 用于 KV 缓存卸载,修复可避免内存耗尽和系统崩溃,对生产环境有显著正面影响。

内存泄漏修复 锁管理 潜在缓存一致性风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论