Repository navigation
[Feat] bench: report goodput and SLO attainment in bench_serving - #43967
Merged
Merged
Conversation
Add --goodput KEY:VALUE pairs (ttft, tpot, e2el, in milliseconds; the spelling vLLM's benchmark uses). A request is good if it succeeded and met every listed SLO. The run then reports request goodput (good requests per second), SLO attainment over all requests sent, and the attainment of each listed SLO, in the console output and in the result file. Without the flag the output and the result fields are unchanged.
bowenwan6
requested review from
JustinTong0323,
sogalin,
wisclmy0611 and
zijiexia
as code owners
October 13, 2026 02:45
bowenwan6
added a commit
to bowenwan6/sglang-vllm-profiler
that referenced
this pull request
Oct 13, 2026
…the JITServe paper PR-A is sgl-project/sglang#43967. PR-B is not opened: it is the paper's waiting_time parameter alone. BACKGROUND.md gains what the second reading of the paper text and the artifact source showed: waiting_time is per request, predicted-late requests are down-weighted rather than dropped, and the system reaches 96 to 98 percent of the baseline's throughput.
Collaborator
|
/tag-and-rerun-ci |
Collaborator
|
/rerun-failed-ci |
Collaborator
|
/rerun-failed-ci |
Collaborator
|
/rerun-failed-ci |
1 similar comment
Collaborator
|
/rerun-failed-ci |
5 tasks done
bowenwan6
added a commit
to bowenwan6/sglang-vllm-profiler
that referenced
this pull request
Oct 22, 2026
S1 (experiments/slo_sched): plan, JITServe and SGLang background, the client and runners, session reports P1-P5 and the texts of PR-A (sgl-project/sglang#43967, merged) and PR-C (sgl-project/sglang#45643, open); PR-B was measured and dropped. M12: revalidation of sgl-project/sglang#33726 at ccfda8dfd9 on 2x H200. plan.md gains a status table (section 0) and the outcomes of both tracks; the README tracks are brought up to date.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds vLLM's
--goodputoption tobench_serving: a run reports how many requests per second met their latency SLOs, and what share did.Motivation
bench_servingreports throughput and latency percentiles, but not how much of the load met a latency target; that has to be computed by hand from--output-details. Goodput, the load served within its SLOs, is the metric SLO-aware serving work optimises and reports (e.g. JITServe, NSDI '26), and vLLM's benchmark already has the option. #5495 proposed it for the oldbench_serving.pyand was closed as stale after a request to rebase.Modifications
--goodput KEY:VALUE ...with keysttft,tpot,e2elin milliseconds, e.g.--goodput ttft:2000 tpot:100. A request is good if it succeeded and met every listed SLO.python/sglang/benchmark/goodput.py;serving.pygains 40 lines of wiring.Accuracy Tests
No model or server code is touched. For the metric: unit cases with hand-computed values, and on a live server (
Qwen/Qwen3-8B, one H200) the printed values equal an independent recount of the per-request records in 8 runs over thesglang-oai-chatandsglangbackends.Not changed here: a streaming request that the server aborts inside a 200 response is still recorded as successful by the benchmark (#40881), so it can count as good.
Speed Tests and Profiling
No inference path is touched. An example of the output, a load sweep on this branch (ShareGPT,
--goodput ttft:2000 tpot:100 e2el:20000, 50 s of arrivals per row):Output throughput keeps rising while goodput peaks near 50 req/s. One run per row; just past the peak a 50-second run is noisy (repeated runs near 65 req/s ranged from 37 to 72 %). The block above is the 65.5 req/s row.
Checklist
CI States
Latest PR Test (Base): ✅ Run #39010444405
Latest PR Test (Extra): ❌ Run #39010444387
Latest PR Test (AMD ROCm 10): ❌ Run #39010444394