Build1 publisher2 min readPublished
A three-part source walkthrough traces vLLM V1 from generate() to the CUDA boundary. The useful finding is structural: the scheduler that spends your token and KV-block budgets runs in a different process from the one you are timing.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Follow the return path first, because that is where the timers usually sit. Submission runs LLM.generate(prompts) into LLMEngine.add_request(), through EngineCoreClient, onto an IPC input queue that terminates at scheduler.add_request() inside the child process [7]. On the way out, LLMEngine.step() retrieves output EngineCore has already produced via get_output(), detokenizes it, and assembles RequestOutput for the caller, rather than telling the GPU to perform a step [5][8].
That is two crossings of the process boundary per request, one each way [9]. A wall-clock number taken around generate() therefore contains queue wait, whatever the scheduler decided to admit, and detokenization in your own process. The reasons behind that admission decision are not part of this account.
The reclamation side is where the accounting bites. Stage three, update_from_output(), updates request state and releases the KV blocks of finished requests before writing EngineCoreOutputs to the output queue [4]. Only then can the next schedule() admit waiting work [10]. Admission is downstream of completion, inside the same loop, at step granularity. A request that keeps generating keeps its blocks, and the budget those blocks represent is not available to anything queued behind it.
Part one carries no timings. The author describes it as a source-code walkthrough of vLLM 0.22's V1 execution path from the public entry point to the CUDA boundary, not an API tutorial [11], and the kernel material is held back for the two later parts on CUDA kernels with paged attention and on FlashAttention from PyTorch to Triton [12]. This walkthrough does not rank scheduler overhead against kernel time, and any claim about that ordering does not draw on this article. What it does fix is which layer holds the decisions. The walkthrough names its own durable subjects as continuous batching, token budgets, paged KV allocation, and the separation between scheduling and execution [13]. It also states the gap it was written to close: the virtual-memory analogy for PagedAttention does not tell you how a request is admitted, how variable-length requests become a flat token batch, or what the page table looks like at the kernel boundary [14].
Read that as a scoping claim rather than a performance one. The paths a serving team can actually change without writing CUDA are the budget schedule() spends and the block supply update_from_output() returns to it. Both sit behind the IPC boundary, in a loop the caller does not drive [2]. When latency degrades and no kernel changed, those are the two quantities that did.
Ranked by verification strength, evidence, and original report placement.
The article follows one offline inference request through vLLM V1: from LLM.generate() and inter-process communication to scheduling, input flattening, GPU model execution, paged KV-cache access, sampling, and resource reclamation.
In vLLM V1, EngineCore runs continuously in a child process; requests enter and leave the active set between steps, and the caller does not drive GPU execution one token at a time. In this configuration vLLM 0.22 separates the caller-facing engine from EngineCore with a process boundary.
EngineCore.step() has three core stages: scheduler.schedule() spends token and KV-cache budgets to produce SchedulerOutput; model_executor.execute_model() runs the GPU forward pass and sampling to produce sampled tokens; scheduler.update_from_output() updates state.
scheduler.update_from_output() updates request state and releases finished KV blocks, then places EngineCoreOutputs on the IPC output queue.
Calling LLMEngine.step() does not tell the GPU to perform one step; it retrieves already-produced output through get_output(), then detokenizes and assembles the user-facing result.
The source references were verified against vLLM 0.22.0 and this English edition was checked on September 3, 2026; the article notes vLLM evolves quickly, so some filenames and call boundaries will move.
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Checkable against public source, unverified by anyone else
Every statement that carries weight here points at something a reader can open: entrypoints/llm.py, LLMEngine.from_engine_args, EngineCore.step and its three stages, all pinned to vLLM 0.22.0. That is unusually specific for a walkthrough, and it means a wrong reading could be caught. Against it: one author, no second pair of eyes, no execution trace, and a version pin whose shelf life the author himself flags.
No deployment or usage facts reported
A walkthrough of how an engine works is not a report of anyone running it. This reporting contains no release, no benchmark, no deployment and no usage disclosure, so there is nothing here to measure uptake against.
Claims sit slightly below what the code reading supports
The framing is modest to a fault: the author calls the version pin fragile, declines the tutorial register, and presents the process split as one detail rather than a discovery. The operational consequence he has actually earned — that timing LLMEngine.step() measures the consuming process, not the forward pass — is stated once and left there.
Author building a series audience, no commercial stake visible
The clearest interest at work is a writer's: the post is labelled article 1 of 3 and points forward to two unpublished parts, which rewards attention. No vendor, employer, or product is being sold, and vLLM is not the author's project as far as this reporting shows.
Internally consistent single account of public code
Confidence rests on the subject being open source: a claim about what schedule() spends and what update_from_output() frees can be checked by anyone with the tree, and the diagrams and prose agree with each other. It stays short of high because the account comes from a single author and publisher, and without runtime evidence the structural reading remains untested.
build
A twelvefold longer prompt costs this RTX 3090 only 12 percent of its decode throughput1 publisher
build
Dual 3090s, no NVLink: the serving stack broke long before the model did1 publisher
build
Intel puts its Arc GPU operating knowledge inside the coding agent already installed1 publisher
build
Shadow engines cut LLM restart from 283 seconds to 7.3, and change what headroom is for1 publisher
Publishers with included, body-backed reporting in this cluster.
1 article · September 7, 2026