The news. On August 24, 2026, a paper (arXiv 2608.23658) reported building a working elastic KV-cache allocator: it lends the idle prefill reserve to decode and returns it before the next prefill, without changing the attention kernels. A one-step-ahead scheduler toggles two physical CUDA memory handles behind one contiguous virtual address range per layer, decommitting the reserve during decode and recommitting it before prefill, which preserves CUDA graphs and prefix caching and avoids static overcommit. It works — no out-of-memory event occurred with the dynamic allocator, decommit completes in a few milliseconds and recommit in tens of milliseconds. Then the controlled live-load tests deliver the twist: simply lowering the chunked-prefill token limit recovers more KV capacity at almost the same latency, with median TTFT differing by about 1% between 8,192- and 32,768-token chunks, while the reclaimable reserve itself falls from 16% of KV at TP1 to 2.7% at TP4. Read the paper →

Picture an office floor. Most of it is open desks, and every conversation currently in progress needs a seat there — that is the whole business of the place. Off to one side is a meeting room, kept permanently empty. It is not wasted by accident: it exists so that whenever a large group arrives, there is somewhere to put them immediately, without asking anyone at a desk to stand up. The room is sized for the biggest group you allow through the door, and it sits empty every hour that no such group arrives.

That floor is a GPU, the desks are the KV cache, and the meeting room is the prefill reserve. An engine that runs chunked prefill promises that a prompt will be read in pieces no larger than some token limit, and it has to keep enough memory free to honour that promise at any moment. The reserve is therefore sized by a worst case that most steps never hit, and every byte of it is a byte the KV cache does not get — which, since KV capacity is what caps the number of live requests, converts directly into users you cannot serve.

The paper's answer is the folding partition wall. During a stretch of pure decode, when no prefill chunk is scheduled, the wall opens and the meeting room becomes desk space; before the next group arrives, it closes again. Doing this on a GPU is harder than it sounds, because the decode step has usually been captured as a CUDA graph, and a captured graph is welded to the exact addresses it was recorded with — move the memory and the recording breaks. So the allocator moves the storage without moving the address: it keeps one contiguous virtual address range per layer and toggles two physical CUDA memory handles behind it, decommitting the reserve during decode and recommitting it before prefill. This is the same trick PagedAttention plays on the KV cache — separate the address a kernel uses from the physical memory that backs it — pointed at the reserve instead, and the paper's result is that it works: attention kernels untouched, prefix caching intact, and no out-of-memory event in testing.

WITHOUT CHUNKINGWITH CHUNKINGt0t1t2t3t4t5t6t7t8t9Req APPDDDDReq BPPPPPPDD▲ Req A stalls (dark) while Req B prefills — TTFT increasest0t1t2t3t4t5t6t7t8t9Req APPDDDDDDDDReq BPPPPPPDD✓ Req A decodes every step — no stallingPrefill (P)Decode (D)Stalled

And then the measurements ruin it. The room can be reclaimed, but there was a second door all along: you can shrink the meeting room by lowering the largest meeting anyone is allowed to book. Halve the chunked-prefill token limit and the reserve you must hold shrinks with it — permanently, on every step, with no wall to fold and nothing to time. The paper reports that lowering the limit recovers more KV capacity than elastic reclamation does, and measures the latency difference at roughly 1% of median TTFT between an 8,192-token and a 32,768-token chunk. A scheduler constant, changed once at startup, beat a live memory-remapping mechanism at the mechanism's own job.

Worse for the clever version, the prize shrinks exactly where the deployments are. The paper reports the reclaimable reserve falling from 16% of KV at TP1 to 2.7% at TP4 — and the arithmetic behind that is not mysterious. The reserve is sized by one prefill chunk, a quantity fixed in tokens that does not grow when you add GPUs, while the KV pool on each GPU does grow once the model weights are split across four of them. In the office: four floors, each with its own small meeting room, each floor now mostly desks. Meanwhile the cost of the wall does not shrink — recommit still takes tens of milliseconds against a decommit of a few, so the scheduler must still look a step ahead and still be right about it, to win back a fraction that has quietly become rounding error.

Hold one number fixed and the two doors can be priced against each other. Take a GPU with a 40 GB KV pool (illustrative — the paper reports shares, not absolute pool sizes). At TP1, the reserve elastic reclamation can hand back is 16% of that, about 6.4 GB — but only while decode is running, and it must be surrendered again before the next prefill, with tens of milliseconds of recommit standing between the decision and the memory being usable. At TP4 the same mechanism, on the same 40 GB pool, returns 2.7%, about 1.1 GB — while the recommit bill stays exactly where it was. Now price the other door on the identical pool: cutting the chunk limit from 32,768 to 8,192 tokens shrinks the reserve you must hold in the first place, hands the difference to KV on every step rather than only during decode windows, needs no lookahead and no timing, and moves median TTFT by about 1%. What the paper measured is that the mechanism's prize shrinks as the model is sharded — 16% of KV at TP1 down to 2.7% at TP4 — while the chunk limit returns its memory on every step, and recovered more of it in their tests.

 Elastic KV-cache reclamationSmaller chunked-prefill limit
What it changestwo physical CUDA handles behind one virtual range per layerone scheduler constant: tokens per prefill chunk
When the memory is availableonly during decode windows, then returnedon every step, permanently
Memory recovered16% of KV at TP1, 2.7% at TP4more than elastic reclamation, per the paper’s live-load tests
Latency effectdecommit a few ms; recommit tens of ms, on the scheduler’s critical path~1% difference in median TTFT, 8,192 vs 32,768-token chunks
What it must not breakCUDA graphs and prefix caching — both preserved by the allocator; untouched by the chunk limit
Failure mode if mistimedrecommit arrives late, prefill waitsnone of this kind; the reserve is simply smaller

A negative result is worth more than it looks here, because the mechanism was not a strawman: it was built, it held, and it respected two constraints — CUDA graphs and prefix caching — that usually kill this class of idea outright. It lost anyway, to a constant. The transferable lesson is an ordering rule: before adding a mechanism that manages a resource dynamically, check what happens if you simply ask for less of that resource — and check it at the parallelism you actually deploy at, because a share measured at TP1 may be most of the argument, and most of the argument may not survive TP4.

Goes deeper in: LLM Serving → Prefill/Decode Disaggregation → Chunked Prefill

Related explainers

Frequently Asked Questions

Check what you knowMap your AI & GPU knowledge across every track — free, role-based