
- What the diagram shows
- llm-d style weighted scoring with illustrative weights (prefix 3, queue 2, KV utilization 2). Pod A holds the prefix but is busy; pod B is nearly idle and wins, 3.9 to 3.7. Inputs (prefix, queue, KV) are A = (0.9, 0.2, 0.3) and B = (0.1, 0.9, 0.9). With prefix × 3, queue × 2 and KV utilization × 2, Pod A gets prefix 2.7 + queue 0.4 + KV 0.6 = 3.7. Pod B gets prefix 0.3 + queue 1.8 + KV 1.8 = 3.9 and wins. Raise the prefix weight to 4 and pod A wins, 4.6 to 4.0: the weights encode how much queueing a cache hit is worth.
The example shows the point of weighting. Cache affinity is worth a lot, and it still loses to a pod that can start the request now. Change the prefix weight to 4 and pod A wins, 4.6 to 4.0. Weights are therefore a product decision about how much queueing a cache hit is worth, and they should be tuned against measured TTFT, not guessed.
llm-d also offers a prefix-cache-affinity-filter that narrows candidates to "sticky" pods with high prefix scores, with a TTFT load gate that breaks stickiness when those pods become much slower than the rest.[13] That is the hot-key defense built into the filter stage.
Dynamo: one cost in blocks
Dynamo's router expresses everything in KV blocks and picks the lowest cost.[4] In its documented form:
Dynamo router cost.
adjusted prefill = max(0, active prefill blocks + incoming prompt blocks − overlap credit blocks). potential decode = active decode blocks + incoming blocks. cost = prefill load scale × adjusted prefill + potential decode + an optional per-request term.
The overlap credit is the part of the prompt a worker already holds, in device memory or in configured host, disk or shared tiers. The per-request term is off by default.
Worked example, 16-token blocks, prefill load scale 1.
A 4,096-token prompt is 256 blocks. Worker A holds 240 of them, but already has 400 prefill blocks and 1,800 decode blocks in flight: max(0, 400 + 256 − 240) + (1,800 + 256) = 416 + 2,056 = 2,472. Worker B holds none and has 1,200 decode blocks in flight: 256 + (1,200 + 256) = 1,712. Worker B wins.



