Prhub

#7125 [Feature] Config eviction_duration

PaddlePaddle/FastDeploy · 作者 mouxinqq · 合并时间 2026-04-01 16:46

分析状态 已生成
文件变更 8提交数 4 · 评论 4
代码增减 +427 / -5
Feature Scheduler KVCache

执行摘要

新增 radix tree 缓存驱逐时间可配置性,默认值改为 30 分钟并扩展 token counter 到 mixed worker。

根据PR body描述“更新radix tree默认驱逐时间,新增用户可配置驱逐时间,并新增mixed也可用token counter”,以及fastdeploy-bot的review评论“原默认驱逐时间(5分钟)过短,导致缓存命中率较低”,主要动机是解决默认驱逐时间过短导致的缓存命中率低问题,并通过可配置性增强系统灵活性。

建议技术管理者和工程师精读此PR,重点关注缓存策略的设计决策(如默认值选择)、配置传递机制以及token counter扩展的实现,这些对理解调度优化和系统可配置性有参考价值。

讨论亮点

review中主要讨论点来自fastdeploy-bot,指出文档默认值标注为5分钟与代码默认值30分钟不一致,可能导致用户混淆。bot建议统一默认值为30分钟或修正文档,但未明确结论;PR最终被合并,暗示作者已解决不一致问题。讨论聚焦于配置正确性和文档一致性。

实现拆解

实现方案分为四个模块:1. 配置模块:在config.go中新增EvictionDurationMins字段并设置默认值30分钟。2. 缓存模块:在prefill_cache_aware.go中修改newRadixPrefixCache函数,传入evictionDuration参数。3. 调度模块:在handler.go中传递配置并扩展token counter逻辑,支持mixed worker。4. 文档与测试:更新router.md文档添加配置说明,并在completions_test.go中添加大量单元测试确保功能正确性。

文件 模块 状态 重要度
fastdeploy/golang_router/internal/config/config.go 配置模块 modified 7.0
fastdeploy/golang_router/internal/scheduler/handler/prefill_cache_aware.go 调度模块 modified 8.0
fastdeploy/golang_router/internal/scheduler/handler/handler.go 调度模块 modified 7.0
fastdeploy/golang_router/internal/gateway/completions_test.go 测试模块 modified 6.0

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

关键符号

Load SelectWorker newRadixPrefixCache

评论区精华

默认值不一致问题 正确性

fastdeploy-bot 指出文档中标注默认值为 5 分钟,而代码中设置为 30 分钟,可能导致用户混淆和配置错误。

结论:作者可能在后继提交中统一了默认值,PR 最终被合并,但未明确说明最终决策。 · 已解决

风险与影响

技术风险包括:1. 配置默认值变更(从5分钟到30分钟)可能影响现有系统缓存行为,需评估兼容性。2. 延长驱逐时间可能增加内存使用,需监控性能。3. 新增配置项若未正确传递或使用,可能导致功能失效;测试覆盖较全面,降低了回归风险。

影响范围:1. 用户端:支持自定义驱逐时间,可优化缓存策略,提升使用灵活性。2. 系统端:提高缓存命中率可能提升整体性能,但需注意内存管理。3. 团队端:新增配置项需更新文档和维护,测试增强有助于代码质量。

配置默认值变更 兼容性影响 测试覆盖新增

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本PR新增了radix tree缓存驱逐时间的可配置性,将默认值从5分钟调整为30分钟以提升缓存命中率,并扩展token counter至mixed worker类型。变更涉及配置管理、缓存核心实现和测试覆盖,对调度性能有积极影响,需关注默认值变更的兼容性风险。

功能与动机

主要动机是解决默认驱逐时间过短导致的缓存命中率低问题。PR body指出“更新radix tree默认驱逐时间,新增用户可配置驱逐时间”,fastdeploy-bot在review中补充“原默认驱逐时间(5分钟)过短,导致缓存命中率较低”。通过支持用户自定义,增强系统灵活性和性能优化能力。

实现拆解

实现分为以下关键模块:

  1. 配置模块 (config.go): 新增EvictionDurationMins字段,默认值设为30分钟,在Load函数中初始化。
  2. 缓存模块 (prefill_cache_aware.go): 修改newRadixPrefixCache函数,传入evictionDuration参数,移除硬编码的5分钟默认值。
  3. 调度模块 (handler.go): 传递配置并扩展SelectWorker函数,使token counter逻辑支持mixed worker类型。
  4. 文档与测试: 更新router.md文档添加配置项说明;在completions_test.go中添加大量单元测试,模拟超时和挂起场景,确保功能稳健性。

评论区精华

review讨论由fastdeploy-bot主导,重点指出配置不一致问题:

“文档注释标注 default: 5,但代码中 config.go 的默认值已改为 30 分钟。”

bot建议统一默认值为30分钟或修正文档,但未明确结论;PR最终被合并,暗示作者已解决此问题,强调了配置正确性的重要性。

风险与影响

  • 风险: 默认值变更可能影响现有系统缓存行为,需评估向后兼容性;延长驱逐时间可能增加内存使用,需监控性能;新增配置项若传递错误可能导致功能失效。
  • 影响: 用户可自定义驱逐时间以优化缓存策略,系统缓存命中率提升可能改善性能,团队需维护新增配置和测试覆盖。

关联脉络

本PR与近期历史PR共同构成调度和缓存优化脉络:

  • PR 7001(调度优化)和PR 7107(KVCache管理)均涉及类似模块,显示团队持续改进调度策略和缓存效率。
  • PR 6680(调度性能优化)与本PR的token counter扩展相辅相成,共同提升系统响应能力。
    这些关联表明FastDeploy在在线服务路由和调度方面进行系统性增强。

参与讨论