# PR #21754 完整报告

- 仓库：`sgl-project/sglang`
- 标题：Enable evict swa with piecewise cuda graph
- 合并时间：2026-03-31 20:07
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/21754

---

## 执行摘要
本 PR 通过移除调度中 evict 滑动窗口注意力与分段 CUDA 图的互斥限制，实现了解码吞吐量约 7.5% 的提升，变更简单但效果显著，影响核心调度路径。

## 功能与动机
动机是关闭 issue 17839，因为滑动窗口注意力的数据竞争问题已在 PR 20369 中修复。移除限制后，允许在 piecewise CUDA graph 启用时执行 evict 逻辑，从而优化资源利用和性能。PR body 中提供了基准测试数据：使用 pcg 时输出吞吐量 10074.560 token/s，不使用时为 9368.207 token/s，显示明显性能提升。

## 实现拆解
仅修改了文件 `python/sglang/srt/managers/schedule_batch.py` 中的 `maybe_evict_swa` 方法。具体删除了以下条件判断块：

```python
if (
    self.forward_mode.is_decode()
    and not server_args.disable_piecewise_cuda_graph
    and not self.tree_cache.is_chunk_cache()
):
    return

```

删除后，在解码模式下，无论 piecewise CUDA graph 是否启用，都会继续执行 evict 滑动窗口注意力的逻辑，优化内存管理和性能。

## 评论区精华
review 过程中无实质性技术讨论，仅有自动化工具评论指出变更简单直接。变更被快速接受，无争议或设计权衡，表明团队对前期修复（PR 20369）的信任。

## 风险与影响
风险较低，但需确保 PR 20369 的修复完全解决了数据竞争问题，否则可能引入回归。变更在核心调度路径上，如果 evict 逻辑有缺陷，可能影响解码稳定性。已通过 CI 测试覆盖，包括多 GPU 模型测试（如 test_gpt_oss_4gpu.py 和 test_mimo_models.py），但建议在真实生产负载下进一步验证。影响范围限于使用 piecewise CUDA graph 和滑动窗口注意力的解码场景，对用户透明且性能提升明显，有助于提升系统整体吞吐。

## 关联脉络
本 PR 基于 PR 20369 的数据竞争修复，允许移除限制。从历史 PR 看，PR 21299 涉及调度管理器的重构，PR 20864 展示类似性能优化策略，表明团队持续关注调度性能和资源管理优化，形成一条从 bugfix 到性能调优的演进脉络。