You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found while staging the first clock-pinned parity measurement. This is our defect, in our server, and it biases our own benchmark in our favour.
Mechanism
include/vllm/entrypoints/openai/serving_utils.h:39-41 — VT_SERVER_SSE_PING_S defaults to 15 seconds, <=0 disables.
src/vllm/entrypoints/openai/serving_completion.cppCompletionSseStream::WaitOutput waits on engine_.get_output_for(request_, ping_s * 1000) and, on timeout, routes through AssignSseWaitResult, which emits kSsePingFrame (":\n\n") as a standalone comment frame instead of a data frame.
So any request that stays silent longer than 15s — precisely the slowest requests — has a comment frame injected into its stream. If the timing client does not treat a bare SSE comment as a no-op, those requests are mishandled or dropped, and the affected population is exactly the tail of the latency distribution.
Removing the tail flatters us: it raises median throughput and lowers p90/p99 TTFT/ITL for our arm only. The oracle arm is unaffected, because vLLM does not emit these frames.
Impact on recorded numbers
Reported as making c16 unquotable as a parity point in the in-flight clock-pinned series; a ping-disabled c16 re-measure is staged.
Any historical grid at a concurrency/workload where a request could go >15s silent is suspect for the same reason. Long-prefill and high-concurrency points are the most exposed.
Not yet established
Whether the pinned vllm bench serve client drops, mis-times, or correctly ignores the comment frame. The root-cause above is from our source; the client-side half is inferred and should be confirmed against vllm bench serve's SSE parsing before quoting a size for the bias.
The magnitude. The staged ping-disabled re-measure will size it.
Suggested handling
The keepalive itself is legitimate (it exists for long-prefill TTFT). The bug is that a measurement path inherits it silently. Options, cheapest first:
Disable pings in the benchmark recipe (VT_SERVER_SSE_PING_S=0) and record that in the manifest, so a gate cannot inherit the flattering behaviour by default.
Found while staging the first clock-pinned parity measurement. This is our defect, in our server, and it biases our own benchmark in our favour.
Mechanism
include/vllm/entrypoints/openai/serving_utils.h:39-41—VT_SERVER_SSE_PING_Sdefaults to 15 seconds,<=0disables.src/vllm/entrypoints/openai/serving_completion.cppCompletionSseStream::WaitOutputwaits onengine_.get_output_for(request_, ping_s * 1000)and, on timeout, routes throughAssignSseWaitResult, which emitskSsePingFrame(":\n\n") as a standalone comment frame instead of a data frame.So any request that stays silent longer than 15s — precisely the slowest requests — has a comment frame injected into its stream. If the timing client does not treat a bare SSE comment as a no-op, those requests are mishandled or dropped, and the affected population is exactly the tail of the latency distribution.
Removing the tail flatters us: it raises median throughput and lowers p90/p99 TTFT/ITL for our arm only. The oracle arm is unaffected, because vLLM does not emit these frames.
Impact on recorded numbers
Not yet established
vllm bench serveclient drops, mis-times, or correctly ignores the comment frame. The root-cause above is from our source; the client-side half is inferred and should be confirmed againstvllm bench serve's SSE parsing before quoting a size for the bias.Suggested handling
The keepalive itself is legitimate (it exists for long-prefill TTFT). The bug is that a measurement path inherits it silently. Options, cheapest first:
VT_SERVER_SSE_PING_S=0) and record that in the manifest, so a gate cannot inherit the flattering behaviour by default.Related: #543 (clock state unrecorded), #520 (harness enforced the rollback), #414 (
--language-model-onlywithheld from the oracle).FOLLOWING_AGENTS_PROTOCOL