NOTE 本文基于 vLLM v0.27.1(tag
6e448d0, 2026-08-11)源码深度剖析。文中所有文件路径、类名和行号均以该版本为准;vLLM 迭代很快,阅读时请以你手上的版本对照。
1. LLM Serving 指标总览
LLM Serving 的性能不能只看单一指标,而应同时关注四个维度:
延迟:用户需要等待多久?
吞吐:系统单位时间处理多少请求和 Token?
效率:GPU、显存和资金利用得好不好?
服务质量:有多少请求满足 SLO?
mindmap
root((LLM Serving 指标体系))
延迟指标
TTFT
TPOT
ITL
E2E Latency
Queueing Time
吞吐指标
Output Tokens/s
Total Tokens/s
Requests/s
Goodput
资源效率
MFU
GPU 利用率
显存利用率
Cost per Token
服务质量
P50
P95
P99
SLO 达标率
指标说明
| 维度 | 指标 | 定义 | 主要反映 | 常见影响因素 | 使用注意 |
|---|---|---|---|---|---|
| 延迟 | TTFT Time To First Token |
请求到达至收到第一个输出 Token 的时间 | 首次响应速度 | 排队、Prompt 长度、Prefill、Prefix Cache、首 Token 生成 | 不等于 Prefill 时间,还包括排队和传输 |
| 延迟 | TPOT Time Per Output Token |
Decode 阶段平均生成一个输出 Token 的时间 | 平均生成速度 | Decode Batch、KV Cache 长度、显存带宽、Attention Kernel、量化 | 需明确是否包含首 Token |
| 延迟 | ITL Inter-Token Latency |
相邻两个输出 Token 到达客户端的时间间隔 | 流式输出的连续性和稳定性 | 调度抖动、Batch 变化、抢占、网络传输 | 应重点观察 P95/P99,而不只是平均值 |
| 延迟 | E2E Latency | 从请求发送至完整结果返回的总时间 | 完整请求体验 | 排队、Prefill、Decode、输出长度、网络 | 长输出场景下通常受 Decode 主导 |
| 延迟 | Queueing Time | 请求到达至开始执行前的等待时间 | 系统拥塞程度 | 并发量、Batch 容量、Admission Control、KV Cache 空间 | 高并发时可能成为 TTFT 的主要部分 |
| 吞吐 | Output Tokens/s | 单位时间生成的输出 Token 数 | Decode 吞吐 | Batch Size、显存带宽、Kernel、并行度 | 适合衡量在线生成能力 |
| 吞吐 | Total Tokens/s | 单位时间处理的输入与输出 Token 总数 | 端到端 Token 处理能力 | Prompt 长度、输出长度、Prefill 和 Decode 效率 | 必须说明是否包含输入 Token |
| 吞吐 | Requests/s | 单位时间完成的请求数 | 业务请求处理能力 | 请求长度、并发度、服务策略 | 不能脱离输入输出长度单独比较 |
| 吞吐 | Goodput | 单位时间内满足 SLO 的有效请求或 Token 数 | 满足服务质量后的有效吞吐 | 吞吐、尾延迟、调度、Admission Control | 比理论吞吐更接近实际服务价值 |
| 资源效率 | MFU Model FLOPs Utilization |
实际模型 FLOPs/s 与理论峰值 FLOPs/s 的比值 | 计算单元利用效率 | GEMM 规模、算子融合、Kernel 调度 | Decode 可能受显存带宽限制,MFU 低不一定代表低效 |
| 资源效率 | GPU 利用率 | GPU 活跃时间占比 | GPU 是否持续工作 | 计算、访存、通信、调度和 Kernel Launch | 需要结合 HBM 带宽和 Tokens/s 判断 |
| 资源效率 | 显存利用率 | 已使用显存与可用显存的比例 | 并发和上下文容量 | 权重、KV Cache、激活、通信 Buffer、运行时开销 | 显存不仅决定模型能否加载,也决定并发度 |
| 资源效率 | Cost per Token | 处理一个 Token 的综合成本 | 经济效率 | GPU 成本、吞吐、利用率、量化、SLO | 应明确按输入、输出还是有效 Token 计算 |
| 服务质量 | P50 | 50% 请求不超过该延迟 | 典型请求体验 | 常规负载 | 不能代表尾部请求 |
| 服务质量 | P95 | 95% 请求不超过该延迟 | 大多数用户体验 | 负载波动、请求长度、调度 | 常用于在线服务 SLO |
| 服务质量 | P99 | 99% 请求不超过该延迟 | 尾部请求体验 | 长请求、资源竞争、抢占、网络抖动 | 对多租户和交互式服务尤其重要 |
| 服务质量 | SLO 达标率 | 满足预设延迟或吞吐目标的请求比例 | 服务稳定性 | TTFT、ITL、E2E、排队和错误率 | Goodput 的计算基础之一 |
2. 指标常见误区与优化方向
LLM Serving 的各项指标并非相互独立。不同指标暴露的是不同阶段或不同资源的瓶颈,因此应根据指标异常选择优化方向,而不是笼统地追求 GPU 利用率或总吞吐。
2.1 常见误区
误区一:只看平均延迟
平均值可能掩盖严重的尾延迟问题。在线服务通常应同时报告:
平均值 + P50 + P95 + P99 + SLO 达标率
尤其是在动态批处理和多租户环境中,少量长请求可能显著拖高 P99。
误区二:将 TTFT 等同于 Prefill 时间
TTFT 通常还包括:
排队时间 + 调度等待 + Prefill + 首 Token 生成 + 网络传输
因此 TTFT 过高不一定意味着 Prefill Kernel 低效,也可能是请求在队列中等待过久。
误区三:只用 TPOT 衡量流式体验
TPOT 是平均值,而用户实际感受到的是每个 Token 的到达间隔。调度抖动、Batch 动态变化和通信阻塞可能导致平均 TPOT 正常,但 ITL 的 P95/P99 很差。
误区四:用 GPU 利用率判断系统是否高效
GPU 利用率较高,可能只是 GPU 在等待显存访问或通信;GPU 利用率较低,也可能是系统受限于显存带宽、请求不足或模型并行通信。因此需要结合以下指标共同判断:
- HBM 带宽利用率;
- Kernel 执行时间;
- MFU;
- Decode TPOT;
- GPU 间通信时间;
- 有效 Tokens/s。
误区五:只比较 Requests/s
不同测试的 Prompt 长度、Output 长度和请求分布不同,Requests/s 很难直接比较。更合理的报告方式是同时给出:
并发数、输入 Token 数、输出 Token 数、Output Tokens/s、
Total Tokens/s、TTFT、TPOT/ITL 和 P99
误区六:显存占用越高越好
提高 KV Cache 使用率有助于增加并发,但过度填充显存可能造成:
- 新请求无法接入;
- 长请求触发抢占;
- KV Cache 频繁换入换出;
- P99 延迟显著升高;
- 系统出现 OOM 风险。
因此,显存利用率应与并发度、KV Cache 命中率、抢占率和尾延迟联合分析。
2.2 指标与优化方向的对应关系
| 指标或现象 | 主要暴露的问题 | 重点优化方向 |
|---|---|---|
| TTFT 过高 | 排队时间长、Prefill 计算量大或首 Token 调度不及时 | 减少排队、优化 Prefill Kernel、使用 Prefix Cache、采用 Chunked Prefill、改进请求优先级 |
| ITL / TPOT 过高 | Decode 阶段访存效率低、KV Cache 访问开销大或 Batch 调度不合理 | 优化 Decode Kernel、改进 KV Cache 布局和访问、减少通信开销、优化 Continuous Batching |
| 吞吐不足 | 有效 Batch 太小、计算或显存带宽利用率低 | 增大有效 Batch、提高算力和带宽利用率、优化 Kernel、减少 CPU/GPU 调度开销 |
| P99 过高 | 长请求竞争、动态 Batch 抖动、资源争用或排队失控 | 控制长 Prefill、限制最大上下文、隔离不同长度请求、改进调度、增加限流和 Admission Control |
| KV Cache 不足 | 上下文过长、并发过高或 KV Cache 管理效率低 | 使用 PagedAttention、Prefix Cache、KV 量化、KV Cache 复用和抢占 |
| GPU 利用率低但 TTFT 高 | 请求排队、调度间隙或并发不足 | 优化请求准入、动态批处理、调度粒度和 CPU/GPU 协同 |
| GPU 利用率高但吞吐低 | 可能受显存带宽、Kernel 效率或通信瓶颈限制 | 优化内存访问、融合 Kernel、量化、减少同步和跨卡通信 |
| Prefill 很快但 Decode 很慢 | Decode 的小矩阵计算和 KV Cache 访存成为瓶颈 | 优化 Decode 专用 Kernel、改进 KV Cache 布局、调整 Decode Batch 和并行策略 |
| 吞吐高但 Goodput 低 | 系统牺牲延迟换取吞吐,导致大量请求违反 SLO | 引入 SLO-aware 调度、限制 Batch 上限、控制长请求、优化资源隔离 |
| P99 随并发快速恶化 | 系统接近饱和,排队和资源竞争出现非线性增长 | 设置并发上限、实施 Admission Control、区分请求优先级、扩展实例或进行负载分片 |
2.3 使用原则
指标分析应遵循以下顺序:
先确认指标口径
↓
区分 Prefill、Decode、排队和网络因素
↓
观察平均值与 P95/P99 的差异
↓
结合 GPU、显存、带宽和通信指标定位瓶颈
↓
选择与指标对应的优化方向
↓
用 Goodput 和 SLO 达标率验证优化是否有效
核心原则是:
不同指标对应不同瓶颈,不同瓶颈对应不同优化手段。
不能用提高吞吐的方法解决 TTFT,也不能用单纯增加 GPU 利用率的方法解决 P99 或 KV Cache 容量问题。
3. 本章小结
LLM Serving 的指标体系可以归纳为:
延迟:TTFT、TPOT、ITL、E2E
吞吐:Tokens/s、Requests/s、Goodput
效率:MFU、GPU 利用率、显存利用率、Cost per Token
质量:P50、P95、P99、SLO 达标率
其中最重要的区别是:
吞吐衡量系统处理了多少工作;
延迟衡量用户等待了多久;
Goodput 衡量系统在满足 SLO 的前提下完成了多少有效工作。