Skip to content
Make in India OEM · INR-transparent · Pan-India onsite SLATalk to sales: +91 720 794 8743Sign in

KV-Cache Reuse and TTFT: Why Inference Latency Gets Unstable at Scale

Concept Updated 18 Aug 2026 · 5 min read

Overview

Inference benchmarks usually quote a single latency number measured on an idle machine. Production behaves differently: as concurrency rises, time-to-first-token (TTFT) becomes unstable, and eventually requests start failing. The mechanism is the KV cache — the stored attention state that lets a model avoid recomputing the prompt on every token. When GPU memory runs short, that cache is evicted and must be recomputed, and latency falls off a cliff. This article explains the failure mode and what published aiDAPTIV+ figures show when the cache is retained instead.

KV-Cache Reuse and TTFT: Why Inference Latency Gets Unstable at Scale
What you’ll learn: what the KV cache holds and why it grows with concurrency, why average TTFT is a misleading benchmark, the published cold, warm and average TTFT comparison, why the cold prompt is slightly slower with caching, and how to plan capacity so latency stays predictable.

Key takeaways

  • Warm TTFT without cache reuse is variable — published at 190-340 ms as the cache is evicted and recomputed.
  • With KV prefix reuse it is stable at a published 78 ms, versus a 250 ms average — roughly 3.2x faster.
  • The cold prompt is marginally slower — 826 ms versus 769 ms — because the cache is filled once.
  • The real failure is not slowness but OOM — eviction and recompute lead to failed requests at scale.
  • Stability matters more than peak — an SLA is set by worst-case latency, not the best case.

What the KV cache actually is

When a transformer processes a prompt, it computes key and value tensors for every token in every attention layer. Retaining those in the KV cache means each new token attends to stored state instead of reprocessing the whole prompt. The cache is therefore what makes generation fast — and it is large. On a reference 8x RTX PRO 6000 Blackwell node (768 GB), weights load once and are sharded across the GPUs; the remaining memory holds the KV cache. That residual capacity, not the weights, determines how many concurrent requests the node can genuinely serve.

The eviction cliff

Cache size grows with both context length and concurrency. Add enough simultaneous sessions and the memory left after weights is exhausted. The server then evicts cache entries to make room — and any request whose entries were evicted must recompute its prompt from scratch on the next token. This is why warm TTFT is published as a range rather than a number: 190-340 ms, depending on whether that particular request’s cache survived. Push further and the behaviour degrades from variable to broken, with the source describing hits to OOM and failed requests.

The published comparison

Metric Without aiDAPTIV+ (GPU only) With aiDAPTIV+ (KV reuse)
TTFT, first / cold prompt 769 ms (KV computed) 826 ms (one-time cache fill)
TTFT, warm / typical 190-340 ms, variable 78 ms, stable
TTFT, average 250 ms 78 ms (~3.2x faster)
Behaviour at scale KV evicted, recompute, OOM risk KV retained, no recompute cliff
Throughput Limited by repeated KV computation Higher via efficient KV reuse

Why the cold prompt is slower — and why that is fine

Note the one row where caching loses: the first cold prompt is published at 826 ms versus 769 ms. Filling the cache costs a little extra on the very first pass. That is an honest trade and the right one, because the cold path happens once per prefix while the warm path happens on every subsequent request. Paying 57 ms once to make every following request stable at 78 ms instead of a variable 190-340 ms is straightforwardly worth it in any sustained workload.

Designing for stable latency

Three practical implications follow. First, benchmark under concurrency, not at idle — a single-user TTFT figure tells you almost nothing about production. Second, size for the KV cache, not just the weights: a model that fits in VRAM but leaves no headroom will serve very few concurrent users. Third, quote p95 or p99 rather than average, because a 250 ms average built from a 190-340 ms spread is a different service from a stable 78 ms. Where prompts share long common prefixes — a system prompt, a retrieved document set, a chat history — prefix reuse is especially valuable, which is why it pairs well with the retrieval patterns covered in our aiDAPTIV+ architecture explainer.

What this means for Indian deployments

Latency stability is a customer-experience and compliance issue as much as an engineering one. A citizen-facing service, a bank’s assistant or a hospital’s clinical tool cannot present a response time that swings by a factor of two depending on how busy the system is, and failed requests under load are worse still. Serving on-premises adds the data-residency benefit: prompts and retrieved context frequently contain personal data, and under the DPDP Act — penalties up to ₹250 crore per violation — keeping that content inside your own infrastructure avoids the transfer question entirely. Validate the numbers above against your own model and context length in a scoped proof-of-concept.

Frequently asked questions

What is time-to-first-token?

TTFT is the delay between submitting a prompt and receiving the first generated token. It is dominated by prompt processing, so it is highly sensitive to whether the KV cache for that prompt already exists or must be recomputed.

Why does TTFT get worse under load?

The KV cache grows with concurrency and context length. When memory runs out the server evicts cache entries, and affected requests must recompute their prompt — producing variable warm TTFT, published as 190-340 ms, and eventually OOM and failed requests.

How much faster is KV reuse?

The published comparison shows average TTFT falling from 250 ms to 78 ms, roughly 3.2x faster, with warm latency becoming stable at 78 ms rather than fluctuating between 190 and 340 ms.

Why is the first prompt slower with caching enabled?

Because the cache is filled once on the cold path — published at 826 ms versus 769 ms. That one-time cost buys stable, much faster warm responses on every subsequent request sharing the prefix.

How should I size a node for concurrency?

Weights load once and are sharded; everything left holds the KV cache. Size for that residual capacity at your target context length and concurrency, and measure p95/p99 latency under realistic load rather than average TTFT at idle.

Ready to deploy?

Talk to an RDP architect about power, cooling and lead time.

Request a Quote