Skip to content

[Feat] bench: report goodput and SLO attainment in bench_serving - #43967

Merged
JustinTong0323 merged 7 commits into
sgl-project:mainfrom
bowenwan6:pr/bench-goodput
Oct 18, 2026
Merged

JustinTong0323 merged 7 commits into
sgl-project:mainfrom
bowenwan6:pr/bench-goodput

Conversation

@bowenwan6

@bowenwan6 bowenwan6 commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Adds vLLM's --goodput option to bench_serving: a run reports how many requests per second met their latency SLOs, and what share did.

Motivation

bench_serving reports 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 old bench_serving.py and was closed as stale after a request to rebase.

Modifications

  • --goodput KEY:VALUE ... with keys ttft, tpot, e2el in milliseconds, e.g. --goodput ttft:2000 tpot:100. A request is good if it succeeded and met every listed SLO.
  • The run prints, and writes to the result file, request goodput (good requests per second), SLO attainment (good / sent) and the attainment of each SLO alone. Without the flag the output is unchanged.
  • The scoring is a new module, python/sglang/benchmark/goodput.py; serving.py gains 40 lines of wiring.
  • A docs section and two unit cases.
---------------------Goodput----------------------
SLOs (ms):                               ttft:2000 tpot:100 e2el:20000
Request goodput (req/s):                 28.37
SLO attainment (%):                      63.48
TTFT SLO attainment (%):                 100.00
TPOT SLO attainment (%):                 86.72
E2EL SLO attainment (%):                 76.49

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 the sglang-oai-chat and sglang backends.

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):

request rate (req/s) output tok/s goodput (req/s) SLO attainment
20.5 3684 18.89 100.0 %
32.8 5516 28.74 99.8 %
40.9 6488 33.20 99.6 %
51.2 7480 35.55 93.0 %
65.5 8785 28.37 63.5 %
81.9 9688 9.23 18.8 %

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

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.
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Oct 13, 2026
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.

@JustinTong0323 JustinTong0323 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@JustinTong0323

Copy link
Copy Markdown
Collaborator

/tag-and-rerun-ci

@github-actions github-actions Bot added the run-ci CI: run the baseline test suite on this PR label Oct 13, 2026
@JustinTong0323

Copy link
Copy Markdown
Collaborator

/rerun-failed-ci

@JustinTong0323 JustinTong0323 changed the title feat(bench): report goodput and SLO attainment in bench_serving [Feat] bench: report goodput and SLO attainment in bench_serving Oct 16, 2026
@JustinTong0323

Copy link
Copy Markdown
Collaborator

/rerun-failed-ci

@JustinTong0323

Copy link
Copy Markdown
Collaborator

/rerun-failed-ci

1 similar comment
@JustinTong0323

Copy link
Copy Markdown
Collaborator

/rerun-failed-ci

@JustinTong0323
JustinTong0323 merged commit 3671503 into sgl-project:main Oct 18, 2026
389 of 437 checks passed
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation run-ci CI: run the baseline test suite on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants