使用 wrk2 压测 TensorRT-LLM (trtllm-serve) 实战

使用 wrk2 压测 TensorRT-LLM (trtllm-serve) 实战记录

一、测试背景与目标

在完成 TensorRT-LLM 部署后,本次使用 wrk2trtllm-serve 服务进行恒定速率压测。wrk2 是 wrk 的改进版,支持通过 -R 参数指定恒定请求速率,并修正了“协调遗漏”问题,能更真实地反映用户等待体验。

核心目标

  1. 掌握 wrk2 的安装与基本用法。
  2. 编写 Lua 脚本以发送 POST 请求给 vLLM/TRT-LLM 的 OpenAI 兼容接口。
  3. 通过阶梯调整发送速率,定位 trtllm-serve 的性能拐点。
  4. 验证超时参数对压测结果的影响。

二、wrk2 安装与准备

2.1 安装 wrk2

# 从 GitHub 克隆源码并编译
git clone https://github.com/giltene/wrk2.git
cd wrk2
make

# 编译成功后,可执行文件在当前目录
./wrk --version

2.2 编写 Lua 压测脚本

创建一个 wrk2_post.lua 文件,用于发送 POST 请求:

-- wrk2_post.lua
wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"
wrk.body = [[
{
    "model": "/mnt/workspace/model/Qwen2.5-7B-Instruct",
    "messages": [
        {"role": "user", "content": "请用一句话介绍你自己。"}
    ],
    "max_tokens": 50,
    "stream": false
}
]]

三、压测执行与结果分析

3.1 测试一:-R 10(发送速率 10 req/s)

./wrk -t2 -c10 -d30s -R 10 --latency -s wrk2_post.lua http://localhost:8000/v1/chat/completions
指标 数值
实际吞吐 3.40 req/s
P50 延迟 15.61 秒
P99 延迟 20.32 秒
Timeout 错误 53

结论:发送速率远超服务端处理能力(约 4 req/s),导致请求严重堆积、大量超时。P50 延迟高达 15.6 秒,不可用。

3.2 测试二:-R 4(发送速率 4 req/s)

./wrk -t2 -c10 -d30s -R 4 --latency -s wrk2_post.lua http://localhost:8000/v1/chat/completions
指标 数值
实际吞吐 4.00 req/s
P50 延迟 1.48 秒
P99 延迟 2.80 秒
Timeout 错误 30

结论:发送速率匹配服务端处理能力后,延迟从 15.6 秒断崖式下降至 1.48 秒。剩余 30 个 timeout 是因为 wrk2 默认超时(2 秒)短于 P75 延迟(2.03 秒),属于误判。

3.3 测试三:-R 4 + 超时 5 秒

./wrk -t2 -c10 -d30s -R 4 --latency --timeout 5s -s wrk2_post.lua http://localhost:8000/v1/chat/completions
指标 数值
实际吞吐 4.00 req/s
P50 延迟 1.58 秒
P99 延迟 2.75 秒
Timeout 错误 0

结论:将超时设置为 5 秒后,所有 120 个请求全部成功,验证了系统在 4 req/s 负载下的稳定性。P50/P99 延迟稳定在 1.58s/2.75s,无长尾。

四、性能拐点定位

发送速率 (-R) 实际吞吐 (req/s) P50 延迟 P99 延迟 Timeout 错误 结论
10 3.40 15.61s 20.32s 53 严重过载,队列堆积
4 4.00 1.48s 2.80s 30(误判) 匹配点,延迟骤降
4(超时 5s) 4.00 1.58s 2.75s 0 最佳工作点,稳定无错误

核心结论

  • trtllm-serve--max_batch_size 4 配置下的实际处理能力约为 4 req/s
  • 发送速率超过此值时,延迟和错误率急剧上升。
  • wrk2 的默认超时(2 秒)可能严于服务端实际延迟,导致“假性超时”,建议根据 P90/P99 延迟设置合理的 --timeout

五、注意事项与踩坑记录

问题 原因 解决方案
-nan 出现在 Req/Sec 列 wrk2 恒定速率模式下的显示问题 忽略,看底部的 Requests/sec
大量 timeout 错误 wrk2 默认超时 2 秒过短 使用 --timeout 5s 或更高
Throughput MUST be specified wrk2 强制要求 -R 参数 必须指定 -R 速率
-R 参数含义混淆 -R 是所有线程的总速率 单线程速率 = -R / 线程数

六、总结

本次测试完整走通了 wrk2 对 trtllm-serve 的压测流程,并通过阶梯调整发送速率,精确定位了当前配置下的性能拐点(4 req/s)。测试数据表明:

  1. 性能拐点清晰:发送速率超过 4 req/s 后,系统从“稳定”迅速转为“过载”。
  2. 延迟分布健康:在最佳工作点(4 req/s)下,P50 延迟 1.58 秒,P99 延迟 2.75 秒,无长尾。
  3. 超时参数关键:wrk2 的 --timeout 必须大于服务的 P90/P99 延迟,否则会产生大量“假性超时”。

这些数据为后续调整 max_batch_size、优化显存配置或升级硬件提供了可靠的基准。


测试环境:ModelScope 免费实例(A10 22GB),TensorRT-LLM 1.2.1,Qwen2.5-7B-Instruct,wrk2。

posted @ 2026-09-22 10:00  xzy186  阅读(3)  评论(0)    收藏  举报