Evidence ledger
One row per claim in The token stream stays up and the answers get worse: who published it, what grade it carries, when it was written, when the link was last checked, and the quote or figure it rests on. Nothing in the guide is cited from memory, so anything not in this table is not in the guide.
Every source behind the field guide, one row per claim. Every URL was fetched on the check date; nothing here is cited from memory. Where an artefact supports several claims it gets several rows, so a citation can never cover something its source did not say.
Tiers follow the skill's hierarchy: postmortem and source and adr are the layers ordinary
search does not surface, blog and casestudy are practitioner accounts, paper is measured
and reviewed, vendor is documentation or marketing and is capped and labelled.
Checked: 2026-08-28.
Postmortems
| # | Org | Title | Tier | Published | URL | Claim taken | Supporting quote or figure |
|---|---|---|---|---|---|---|---|
| 1 | Anthropic | A postmortem of three recent issues | postmortem | 2025-09-17 | https://www.anthropic.com/engineering/a-postmortem-of-three-recent-issues | A routing bug can degrade output quality without degrading availability | "Some Sonnet 4 requests were misrouted to servers configured for the upcoming 1M token context window." |
| 2 | Anthropic | A postmortem of three recent issues | postmortem | 2025-09-17 | https://www.anthropic.com/engineering/a-postmortem-of-three-recent-issues | Blast radius of a load-balancing change, quantified | "At the worst impacted hour on August 31, 16% of Sonnet 4 requests were affected." and "Approximately 30% of Claude Code users who made requests during this period had at least one message routed to the wrong server type" |
| 3 | Anthropic | A postmortem of three recent issues | postmortem | 2025-09-17 | https://www.anthropic.com/engineering/a-postmortem-of-three-recent-issues | Standard evals do not catch silent quality regressions | "The evaluations we ran simply didn't capture the degradation users were reporting, in part because Claude often recovers well from isolated mistakes." and "We relied too heavily on noisy evaluations." |
| 4 | Anthropic | A postmortem of three recent issues | postmortem | 2025-09-17 | https://www.anthropic.com/engineering/a-postmortem-of-three-recent-issues | Serving the same model on several accelerator families is a correctness surface | "This change inadvertently triggered a latent bug in the XLA:TPU compiler." and "Operations that should have agreed on the highest probability token were running at different precision levels" |
| 5 | Anthropic | A postmortem of three recent issues | postmortem | 2025-09-17 | https://www.anthropic.com/engineering/a-postmortem-of-three-recent-issues | Privacy controls that block engineers from user traffic lengthen inference incidents | "This protects user privacy but prevents engineers from examining the problematic interactions needed to identify or reproduce bugs." |
| 6 | OpenAI | December 11, 2024 incident postmortem | postmortem | 2024-12-13 | https://status.openai.com/incidents/ctrsv3lwd797 | The control plane, not the GPUs, took the inference service down | The telemetry service caused "every node in each cluster to execute resource-intensive Kubernetes API operations whose cost scaled with the size" of infrastructure, which "overwhelmed the Kubernetes API servers, taking down the Kubernetes control plane in most of our large clusters." |
| 7 | OpenAI | December 11, 2024 incident postmortem | postmortem | 2024-12-13 | https://status.openai.com/incidents/ctrsv3lwd797 | Caching delayed detection until the rollout was fleet-wide | "DNS caching made the issue far less visible until the rollouts had begun fleet-wide." |
| 8 | OpenAI | December 11, 2024 incident postmortem | postmortem | 2024-12-13 | https://status.openai.com/incidents/ctrsv3lwd797 | The data plane survives without the control plane only until it needs discovery | "The Kubernetes data plane can operate largely independently of the control plane, but DNS relies on the control plane – services don't know how to contact one another" |
| 9 | OpenAI | December 11, 2024 incident postmortem | postmortem | 2024-12-13 | https://status.openai.com/incidents/ctrsv3lwd797 | Recovery was blocked by the failure itself; duration 3:16pm–7:38pm PST | "remediation was very slow because of the locked out effect" |
| 10 | Google Cloud | Incident report, multiple products, 12 June 2025 | postmortem | 2025-06-13 | https://status.cloud.google.com/incidents/ow5i3PPK96RduMcb1SsW | A quota-policy code path took Vertex AI inference down globally | The new Service Control feature "did not have appropriate error handling nor was it feature flag protected"; affected products include "Vertex AI Online Prediction" |
| 11 | Google Cloud | Incident report, multiple products, 12 June 2025 | postmortem | 2025-06-13 | https://status.cloud.google.com/incidents/ow5i3PPK96RduMcb1SsW | Global metadata replication turns a regional bad record into a global outage | The policy change was "inserted into the regional Spanner tables" and this "metadata was replicated globally within seconds." |
| 12 | Google Cloud | Incident report, multiple products, 12 June 2025 | postmortem | 2025-06-13 | https://status.cloud.google.com/incidents/ow5i3PPK96RduMcb1SsW | Recovery re-broke the dependency; missing backoff extended it to ~2h40m in us-central1 | "As Service Control tasks restarted, it created a herd effect on the underlying infrastructure it depends on (i.e. that Spanner table), overloading the infrastructure. Service Control did not have the appropriate randomized exponential backoff implemented." |
Source code, issues and pull requests
| # | Org | Title | Tier | Published | URL | Claim taken | Supporting quote or figure |
|---|---|---|---|---|---|---|---|
| 13 | vLLM project | PR #26504, eagle_dynamic adaptive speculative decoding |
source | opened 2025-10-09, closed 2026-06-24 | https://github.com/vllm-project/vllm/pull/26504 | Adaptive speculation is repeatedly proposed and repeatedly does not land | Closed by maintainer @hmellor: "Closing as stale". The PR "monitors the historical acceptance rate for each request" and "dynamically increases or decreases k". |
| 14 | vLLM project | PR #26504 review thread | source | 2025-10 to 2026-07 | https://github.com/vllm-project/vllm/pull/26504 | Acceptance rate is the wrong control signal; goodput is the argued alternative | Reviewer @KookiesNKareem noted the acceptance-threshold signal "struggled on this workload" and that measured goodput may be more effective. |
| 15 | vLLM project | RFC #36923, KV push from prefill to decode | source | 2026-03-12 | https://github.com/vllm-project/vllm/issues/36923 | Pull-based KV transfer serialises decode behind prefill | "D must wait for P to finish before it can begin transferring KV data, adding latency to the critical path." |
| 16 | vLLM project | RFC #36923, measured push-based improvement | source | 2026-03-12 | https://github.com/vllm-project/vllm/issues/36923 | Push-based transfer measurably cuts tail TTFT | "with 512 input tokens and 128 output tokens, P99 TTFT improved from 1,125.98ms to 302.37ms" on AWS P5en and Trn2; 1.2x to 3.0x across shapes. |
| 17 | vLLM project | RFC #19038, prefill-only optimisations | source | 2025-06-02 | https://github.com/vllm-project/vllm/issues/19038 | A prefill-only node can hold KV in CPU memory and buy context length | "As there is no decoding steps in prefill nodes, we can directly store the generated KV caches to CPU instead of GPU." Claimed ~7x context length on A100 40GB with DeepSeek-R1-Distill-Qwen-32B-FP8. |
Architecture decision records and design docs
| # | Org | Title | Tier | Published | URL | Claim taken | Supporting quote or figure |
|---|---|---|---|---|---|---|---|
| 18 | vLLM project | RFC #10818, disaggregated prefilling roadmap | adr | 2024-12-02 | https://github.com/vllm-project/vllm/issues/10818 | The project chose a KV-cache-store design over direct peer-to-peer transfer | "We now go for KVCache-store-based design. If you prefer direct P2P please raise concerns in vLLM #feat-prefill-disaggregation channel" |
| 19 | vLLM project | RFC #5557, disaggregated prefilling via KV cache transfer | adr | 2024-06-14 | https://github.com/vllm-project/vllm/issues/5557 | KV transfer was designed around the prefix-cache hash from the start | The KV database uses "the hash (generated in automatic prefix caching) as the key, the corresponding KV cache tensor as the value." |
| 20 | vLLM project | RFC #5557, second use case | adr | 2024-06-14 | https://github.com/vllm-project/vllm/issues/5557 | Long-document reuse, not just disaggregation, motivated the KV store | "the GPU memory + CPU memory may not be enough to store the KV cache of all documents" |
Papers
| # | Org | Title | Tier | Published | URL | Claim taken | Supporting quote or figure |
|---|---|---|---|---|---|---|---|
| 21 | Moonshot AI / Tsinghua | Mooncake: a KVCache-centric disaggregated architecture for LLM serving | paper | 2024-06-24 | https://arxiv.org/html/2407.00079v1 | Prefill/decode disaggregation plus a KV pool over spare CPU, DRAM and SSD | "It features a KVCache-centric disaggregated architecture that separates the prefill and decoding clusters" and "leverages the underutilized CPU, DRAM, and SSD resources of the GPU cluster" |
| 22 | Moonshot AI / Tsinghua | Mooncake, early rejection | paper | 2024-06-24 | https://arxiv.org/html/2407.00079v1 | Naive overload rejection makes prefill and decode oscillate out of phase | "This delay causes fluctuations and phase staggering between the loads on prefill and decoding instances." Fixed with "Early Rejection Based on Prediction". |
| 23 | Moonshot AI / Tsinghua | Mooncake, cache reuse ceiling | paper | 2024-06-24 | https://arxiv.org/html/2407.00079v1 | Real chat traffic has a hard ceiling on KV reuse | "up to only 50% of the KVCache can be reused in our current workloads" |
| 24 | Moonshot AI / Tsinghua | Mooncake, measured gains and rejections | paper | 2024-06-24 | https://arxiv.org/html/2407.00079v1 | Measured production gain and the residual rejection rate under 2x replay | "115% and 107% more requests" on A800 and H800 clusters; under 2x replay of 23,000 real traces, baseline rejected 4,183 requests against 3,589 with prediction-based rejection. |
| 25 | Microsoft | Enhancing reliability in AI inference services: an empirical study on real production incidents | paper | 2025-10-17 | https://arxiv.org/abs/2511.07424 | The measured failure distribution of a hyperscale inference service | 156 high-severity incidents, Apr–Jun 2025: "Inference engine failures: ~60%" dominated by timeouts (~40%) and resource exhaustion (~29%); infrastructure ~20%; model configuration ~16%; operational ~4%. |
| 26 | Microsoft | Enhancing reliability in AI inference services | paper | 2025-10-17 | https://arxiv.org/abs/2511.07424 | Most incidents are detected automatically but only half are actioned | "115 were auto-detected (≈74%)"; mitigation mix: hotfix 28%, capacity increase 10%, node rebalancing 9%, traffic routing 4%, monitor-only 48%. |
| 27 | Microsoft | Enhancing reliability in AI inference services | paper | 2025-10-17 | https://arxiv.org/abs/2511.07424 | Connection liveness is a measured, cheap mitigation for streaming timeouts | "Normalized HTTP 408 rate...declined from 2.72% to 0.47%" |
| 28 | Microsoft Research / Georgia Tech | Taming throughput-latency tradeoff in LLM inference with Sarathi-Serve | paper | 2024-03-04 | https://arxiv.org/abs/2403.02310 | Chunked prefill is the single-pool alternative to disaggregation | "Sarathi-Serve introduces chunked-prefills which splits a prefill request into near equal sized chunks and creates stall-free schedules that adds new requests in a batch without pausing ongoing decodes." |
| 29 | Microsoft Research / Georgia Tech | Sarathi-Serve, measured capacity | paper | 2024-03-04 | https://arxiv.org/abs/2403.02310 | Chunked prefill alone buys multiples of serving capacity under SLO | "For Mistral-7B on single A100 GPUs, we achieve 2.6x higher serving capacity"; "up to 3.7x" for Yi-34B on two A100s; "up to 5.6x" for Falcon-180B. |
Talks
| # | Org | Title | Tier | Published | URL | Claim taken | Supporting quote or figure |
|---|---|---|---|---|---|---|---|
| 30 | Meta | Ye (Charlotte) Qi, Scaling large language model serving infrastructure at Meta, QCon San Francisco | talk | 2025-05-29 | https://www.infoq.com/presentations/llm-meta/ | Disaggregation is not free; it buys phase isolation with network latency | "very common to add another 50 to 100 milliseconds to your TTFT if you are doing disagg" and "you have to transfer hundreds of megabytes of KV cache" |
| 31 | Meta | Ye (Charlotte) Qi, QCon San Francisco | talk | 2025-05-29 | https://www.infoq.com/presentations/llm-meta/ | Tiered KV caching across HBM, DRAM and flash, and its measured payoff | "common system prompt might get cached in the HBM. The active user's chat history...can sit in DRAM. Chat history from less engaging users can be offloaded to flash." and "very common for us to see over 50% of reduction for both latency and capacity." |
| 32 | Meta | Ye (Charlotte) Qi, QCon San Francisco | talk | 2025-05-29 | https://www.infoq.com/presentations/llm-meta/ | Blast radius grows superlinearly with the size of a distributed inference group | "40 GPUs in one partition will take down your entire process group...3% random failures for your GPU cards, the blast radius will exponentially grow." |
| 33 | Meta | Ye (Charlotte) Qi, QCon San Francisco | talk | 2025-05-29 | https://www.infoq.com/presentations/llm-meta/ | There is no good autoscaling signal for LLM serving | "The right throughput metric is extremely tricky to find, because the bottleneck depends on your workload. QPS obviously does not work. Tokens per second works under a lot of caveats." |
| 34 | Meta | Ye (Charlotte) Qi, QCon San Francisco | talk | 2025-05-29 | https://www.infoq.com/presentations/llm-meta/ | Corroborates Anthropic: inference bugs present as plausible output, not as errors | "Inference bugs can manifest as subtle performance degradation, because LLMs are probabilistic models...you have something horribly wrong, but the result comes out still decently correct." |
Production case studies and engineering blogs
| # | Org | Title | Tier | Published | URL | Claim taken | Supporting quote or figure |
|---|---|---|---|---|---|---|---|
| 35 | DeepSeek | DeepSeek-V3/R1 inference system overview | casestudy | 2025-02-28 | https://github.com/deepseek-ai/open-infra-index/blob/main/202502OpenSourceWeek/day_6_one_more_thing_deepseekV3R1_inference_system_overview.md | Asymmetric expert-parallel sizing between the two phases | Prefill "Routed Expert EP32, MLA/Shared Expert DP32" over 4 nodes; decode "Routed Expert EP144, MLA/Shared Expert DP144" over 18 nodes. |
| 36 | DeepSeek | DeepSeek-V3/R1 inference system overview | casestudy | 2025-02-28 | https://github.com/deepseek-ai/open-infra-index/blob/main/202502OpenSourceWeek/day_6_one_more_thing_deepseekV3R1_inference_system_overview.md | Published cost base and the theoretical margin on it | "226.75 nodes (each node contains 8 H800 GPUs)" average occupancy at "\(2 per hour" per GPU, "\)87,072" daily cost, "$562,027" theoretical daily revenue, "545%" cost profit margin. |
| 37 | DeepSeek | DeepSeek-V3/R1 inference system overview | casestudy | 2025-02-28 | https://github.com/deepseek-ai/open-infra-index/blob/main/202502OpenSourceWeek/day_6_one_more_thing_deepseekV3R1_inference_system_overview.md | The prefix cache hit rate on real traffic, at scale | 24h: input "608B, of which 342B tokens (56.3%) hit the on-disk KV cache"; output "168B"; "20–22 tokens per second" average output speed. |
| 38 | LMSYS / SGLang | Deploying DeepSeek with PD disaggregation and large-scale expert parallelism on 96 H100 GPUs | blog | 2025-05-05 | https://www.lmsys.org/blog/2025-05-05-large-scale-ep/ | An independent reproduction of the published architecture, with cost | 12 nodes × 8 H100; 52.3k input tok/s and 22.3k output tok/s per node; "$0.20 per 1M output tokens". |
| 39 | LMSYS / SGLang | Same | blog | 2025-05-05 | https://www.lmsys.org/blog/2025-05-05-large-scale-ep/ | Expert parallelism creates load imbalance that worsens with scale | "EP often leads to uneven workload distribution across GPUs"; the balancer "requires production data" and "may not reflect real-world variability". |
| 40 | llm-d (IBM, Red Hat, Google, Alibaba, DaoCloud) | KV-cache wins you can see | blog | 2025-09-24 | https://llm-d.ai/blog/kvcache-wins-you-can-see | Cache-aware routing dominates load-aware routing on a shared-prefix workload | P90 TTFT: precise 0.542s, approximate 31.083s, random 92.551s; throughput 8,730 vs 6,944.4 vs 4,428.7 tok/s. Setup: Qwen-32B on 8 pods × 2 H100. |
| 41 | llm-d | KV-cache wins you can see | blog | 2025-09-24 | https://llm-d.ai/blog/kvcache-wins-you-can-see | Prefix routing does not transfer to RAG | "While Retrieval-Augmented Generation also relies on large prefixes, reusing the KVs is more challenging. The exact documents and their order often change between queries, breaking simple prefix patterns." |
| 42 | Red Hat / IBM | Master KV cache aware routing with llm-d | blog | 2025-10-07 | https://developers.redhat.com/articles/2025/10/07/master-kv-cache-aware-routing-llm-d-efficient-ai-inference | How the router actually decides, and its measured hit rate | "A kvblock.Scorer ranks each pod based on consecutive matching blocks from the start of the prompt"; cache hit rate 87.4% (4,176 of 4,776), 99.92% of traffic to the primary pod, TTFT 340ms cached vs 2,850ms cold. |
| 43 | Anyscale | Ray Serve LLM: wide-EP and disaggregated serving with vLLM | blog | 2025-11-26 | https://www.anyscale.com/blog/ray-serve-llm-anyscale-apis-wide-ep-disaggregated-serving-vllm | Disaggregation breaks the replica as a unit of deployment | "engine replicas are no longer independent in optimal serving patterns"; the orchestrator "must coordinate data parallel attention, expert parallel routing, and disaggregated prefill/decode execution across potentially heterogeneous hardware." Measured "2.4k tps/H200 on Nebius with Infiniband". |
| 44 | Character.AI | Optimizing AI inference at Character.AI | blog | 2024-06-20 | https://blog.character.ai/optimizing-ai-inference-at-character-ai/ | Serving economics at conversational scale | "Character.AI serves around 20,000 queries per second"; "reduced our serving costs by at least 33X" since late 2022; "13.5 times less" than the most efficient leading commercial APIs. |
Vendor material (documentation and marketing, capped and labelled)
| # | Org | Title | Tier | Published | URL | Claim taken | Supporting quote or figure |
|---|---|---|---|---|---|---|---|
| 45 | vLLM project | Disaggregated prefilling (experimental), official docs | vendor | checked 2026-08-28 | https://docs.vllm.ai/en/latest/features/disagg_prefill/ | The implementers say plainly what the feature does not do | "Disaggregated prefill DOES NOT improve throughput." It is for "Tuning time-to-first-token (TTFT) and inter-token-latency (ITL) separately" and to "control tail ITL". Marked "experimental and subject to change". |
| 46 | NVIDIA | Perplexity AI serves 400 million search queries a month using the NVIDIA inference stack | vendor | 2024-12-05 | https://developer.nvidia.com/blog/spotlight-perplexity-ai-serves-400-million-search-queries-a-month-using-nvidia-inference-stack/ | Small-model insourcing is where the published savings are | "more than 435 million queries each month"; "more than 20 AI models simultaneously"; "approximately $1 million in annual savings" on the Related-Questions feature; "a front-end scheduler built in-house that routes traffic to the appropriate pod based on their load and usage". |
| 47 | Google Cloud | GKE Inference Gateway prefix caching accelerates AI inference | vendor | 2026-06-10 | https://cloud.google.com/blog/products/containers-kubernetes/gke-inference-gateway-prefix-caching-accelerates-ai-inference | A commissioned benchmark of prefix-aware routing; treat as a claim, not a measurement | Principled Technologies benchmark, Llama 3.1 8B on 8× A100 40GB: mean TTFT 188.36 ms vs 2624.73 ms ("92.8% less TTFT"), throughput 7,169.21 vs 6,042.05 output tok/s, ITL 30.20 ms vs 81.03 ms. |
Gaps in the record
Recorded here because a named gap is more useful to an architect than a confident synthesis built on nothing.
- Conference talks are largely unverifiable by machine. Talks on this topic exist in quantity — Ray Summit, KubeCon, GTC — but the substance sits in video, and two attempts to fetch talk pages (USENIX FAST '25 and a YouTube session page) returned 403 or a shell with no content. One talk with a published transcript is cited here (row 30–34). Anything else in this layer was left out rather than cited from a summary of a summary.
- Nobody has published a failure account of disaggregated serving itself. There are design documents, benchmarks and vendor pages in quantity, and no public postmortem of a prefill/decode split failing in production. The closest published material is the operational warning in row 43 and the blast-radius arithmetic in row 32.
- Prefix-cache hit rates are published by exactly two production systems at scale (rows 23 and 37), and they agree at roughly half. Every other hit-rate figure available is a benchmark on a workload chosen by the party publishing it.
- No independent measurement of prefix-aware routing exists. Rows 40, 42 and 47 are all produced by parties who build the router being measured.
Addendum
| # | Org | Title | Tier | Published | URL | Claim taken | Supporting quote or figure |
|---|---|---|---|---|---|---|---|
| 48 | AIBrix Team | AIBrix: towards scalable, cost-effective large language model inference infrastructure | paper | 2025-02-22 | https://arxiv.org/abs/2504.03648 | Cache locality and load belong in one scoring function, not two competing routers | Components include "prefix-aware, load-aware routing", a "distributed KV cache", "LLM-specific autoscalers" and an "SLO-driven GPU optimizer"; claims "50% increase in throughput" and "70% reduction in inference latency". |