news 2026/9/18 1:48:40

Switchyard长上下文压测指南:8K/32K输入下TTFT与内存表现怎么测?完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Switchyard长上下文压测指南:8K/32K输入下TTFT与内存表现怎么测?完整教程

Switchyard长上下文压测指南:8K/32K输入下TTFT与内存表现怎么测?完整教程

【免费下载链接】SwitchyardSwitchyard lets LLM applications route traffic across models and providers while preserving native OpenAI and Anthropic API compatibility - enabling flexible model selection, benchmarking, and cost/performance optimization.项目地址: https://gitcode.com/GitHub_Trending/switch/Switchyard

Switchyard(README.md)是一个 LLM 流量路由器,它能在不改一行业务代码的前提下,把每次 LLM 调用路由到"刚好能完成任务的最便宜模型",同时保持原生 OpenAI 与 Anthropic API 兼容。对于长上下文场景,Switchyard 内置了专用压测工具 switchyard-soak,可对 8K、32K 乃至逼近模型上下文窗口的请求做持续施压,帮你提前看清TTFT(首 token 延迟)内存(RSS)的真实表现。下面这篇教程带你从零跑通长上下文压测,并学会看懂结果。

为什么长上下文压测很重要 📏

长 prompt 是 LLM 网关最容易"翻车"的场景:

  • TTFT 随输入长度上升:8K → 32K → 接近窗口上限,首 token 延迟会逐级抬升,必须确认抬升幅度在业务可接受范围内;
  • 内存持续增长:长请求会放大请求内存和路由状态占用,泄漏或无界增长往往只在长时间压测中暴露;
  • 上下文溢出回退:当上游因超过窗口拒绝请求时,Switchyard 会按配置顺序尝试同一路由上的其余目标(详见 docs/operations/context_window.md),这条链路是否可靠需要在压测中验证。

Switchyard 的官方操作手册把长上下文压测定位为"TTFT、内存、以及上下文相关路由故障"的核心检查项:docs/operations/soak_test.md。

内置的 long-context 压测场景 🔍

压测场景的源码在 crates/switchyard-soak/src/scenarios/long_context.rs 中,逻辑非常直白:

输入档位生成规则作用
8K固定 8,192 token中长输入基线
32K固定 32,000 token长输入主压力点
90% 窗口配置上下文窗口 × 9/10逼近溢出边界的压力点

每个会话末尾都会追加一句"用一句话总结最后的标记",把输出限制在 64 token 以内,确保测量焦点集中在输入侧(TTFT 与内存),而不是解码吞吐。场景通过--context-window-tokens(默认 32,768)控制窗口上限,超出窗口的档位会被自动剔除,避免无效请求污染数据。

该场景的通过标准写在源码注释里:"TTFT 随输入长度上升,但没有路由错误、没有内存增长"——这正是我们压测时要核对的两件事。

一键启动本地压测:最快配置方法 🚀

本地压测不需要任何厂商 API Key、不产生推理费用,推荐新手从这条路径开始。

第 1 步:构建服务端与压测器

cargo build --release -p switchyard-server -p switchyard-soak \ --bins --example switchyard-soak-mock

第 2 步:运行本地压测脚本

python3.12 scripts/run_local_soak_test.py \ --duration 10s \ --concurrency 4 \ --request-count 100

这个脚本(scripts/run_local_soak_test.py)会自动拉起一个"请求感知"的本地 mock 后端和 Switchyard 服务器,先对每条路由发一条常规请求做连通性检查,再依次让 oha 和 NVIDIA AIPerf 回放压测会话。本地后端的时序是确定性的:首个 token 前固定延迟 40 ms,token 间隔 1 ms,因此TTFT、ITL(token 间隔延迟)、吞吐都可复现对比

本地测试使用的路由配置见 scripts/local_soak_test.toml,其中同时配置了nooprandompassthroughllm_classifierstage_router五种路由算法——同一个 8K/32K 负载会分别穿过每条路由,方便你横向对比不同路由策略下的 TTFT 差异。

💡 提示:--prompt-bytes可调大短请求与共享前缀场景的输入体积,给请求内存和 prefix 缓存施加更大压力;--concurrency控制同时在途请求数,建议先用 4 起步。

对比各路由算法的 TTFT 开销 📊

如果想知道"经过 Switchyard 路由比直连后端多花了多少时间",用基准脚本 scripts/benchmark_routing_algorithms.py:

python3.12 scripts/benchmark_routing_algorithms.py \ --base-url http://127.0.0.1:4000 \ --direct-base-url http://127.0.0.1:8100 \ --direct-model mock/weak \ --model noop=switchyard/noop \ --model random=switchyard/random \ --model llm_classifier=switchyard/classifier \ --concurrency 100 \ --request-count 1000 \ --scenario-set standard

报告会产出report.mdreport.csvreport.json和一张routing-overhead.svg热力图:每个"路由 × 工作负载"单元格的TTFT 变化(毫秒)输出 token 吞吐变化一目了然,红色表示比直连慢,蓝色表示更快。由于 8K/32K 场景就在standard场景集里,长上下文的路由开销会直接出现在对比表中。

48 小时发布级压测:内存表现怎么卡? 🧠

短跑用于发现配置问题,长跑才暴露内存问题。发布前的标准动作是 48 小时浸泡测试(完整流程见 docs/operations/soak_test.md):

./target/release/switchyard-soak \ --base-url http://127.0.0.1:4000 \ --model RELEASE_MODEL_ID \ --duration 48h \ --concurrency 16 \ --server-pid "$SOAK_SERVER_PID" \ --max-rss-growth-mib 512

关键参数解释:

参数含义
--server-pid采样本地switchyard-server进程的 RSS 与 CPU
--max-rss-growth-mib 512末次 RSS 比首次增长超过 512 MiB 即判失败
--max-error-rate允许的最大推理错误率,默认 0(一个都不能挂)
--report-interval每间隔采样一次健康、/metrics、RSS、CPU 与延迟分位

压测器自身也做了有界设计,长时间跑不会撑爆本机:延迟采样用 10 万容量的蓄水池抽样(crates/switchyard-soak/src/stats.rs),错误明细最多记录 1 万条,所以测试进程自身的内存和磁盘占用是有界的,观测到的内存增长来自被测服务端而非压测器。

如何读懂结果:intervals.csv 是你的核心仪表盘 📈

每次运行都会在soak-results/<时间戳>/下生成四个文件(写盘逻辑见 crates/switchyard-soak/src/report.rs):

  • intervals.csv:每个采样间隔一行,15 个字段,含latency_p50/p95/p99_msrss_mibcpu_percent、健康检查与服务端计数器;
  • errors.jsonl:最多 1 万条失败明细;
  • config.json/summary.json:测试输入与最终通过/失败结论。

验收时重点核对(对照 docs/operations/soak_test.md 的 Review the results 一节):

  1. TTFT 曲线:p95/p99 随时间是否稳定,8K/32K 档位抬升是否符合预期;
  2. RSS 曲线:是否持续爬升。要对比"前几小时"和"最后几小时",而不是只看全程均值;
  3. 错误率:8K/32K 请求不应出现路由错误,出现context_length_exceeded时检查回退目标是否生效;
  4. 通过门槛:只有时长跑满、错误率在预算内、每次健康检查通过、RSS 增长不超限,命令才返回 0。

常见问题速查 ✅

  • 想测接近真实窗口溢出?--context-window-tokens设为模型真实窗口,90% 档会贴边施压;溢出后的回退行为说明在 docs/operations/context_window.md。
  • 只想跑长上下文场景?--scenario long-context单独选中,避免其他场景干扰。
  • 需要真实模型数据?本地 mock 保证确定性,但容量结论要对真实模型部署复跑一遍——真实 token 化与提供方排队会带来差异。
  • 结果里的 cpu_percent 是瞬时值吗?不是,它是进程的生命周期平均 CPU,应理解为长跑均值而非尖峰探测。

总结

Switchyard 把"8K/32K 长上下文压测"做成了开箱即用的场景与门禁:long-context场景固定三档输入长度,本地 mock 后端让 TTFT 测量零成本且可复现,48 小时浸泡测试用--max-rss-growth-mib硬性卡住内存增长。按本文的三步走——本地短跑 → 路由开销对比 → 发布级长跑——你就能在上线前自信地回答:这个路由网关在长输入下 TTFT 是否达标、内存是否稳定。🚀

【免费下载链接】SwitchyardSwitchyard lets LLM applications route traffic across models and providers while preserving native OpenAI and Anthropic API compatibility - enabling flexible model selection, benchmarking, and cost/performance optimization.项目地址: https://gitcode.com/GitHub_Trending/switch/Switchyard

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 1:47:11

LoadRunner性能测试报告导出、解读与批量生成

简介&#xff1a;这份LoadRunner性能测试报告面向软件测试初学者、高校课程实验学生及需要撰写性能测试文档的测试人员&#xff0c;围绕HP Web Tours订票系统展开完整的性能测试实践。资源以单份doc文档交付&#xff0c;压缩包大小约677KB&#xff0c;内含1个Word文件&#xff…

作者头像 李华
网站建设 2026/9/18 1:40:22

用LED驱动入门Linux设备开发:从字符设备到GPIO与设备树实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 1:39:37

TeXLive2020安装避坑:报错、镜像源与宏包配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华