<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>KV Cache | KVCache.AI</title>
    <link>https://kvcache.ai/tag/kv-cache/</link>
      <atom:link href="https://kvcache.ai/tag/kv-cache/index.xml" rel="self" type="application/rss+xml" />
    <description>KV Cache</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Wed, 15 Jul 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://kvcache.ai/media/logo.svg</url>
      <title>KV Cache</title>
      <link>https://kvcache.ai/tag/kv-cache/</link>
    </image>
    
    <item>
      <title>Scaling KV Cache Beyond Memory with Mooncake SSD Offloading</title>
      <link>https://kvcache.ai/blog/scaling-kv-cache-beyond-memory/</link>
      <pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://kvcache.ai/blog/scaling-kv-cache-beyond-memory/</guid>
      <description>&lt;h2 id=&#34;ssd-offloading-becomes-necessary-practical-and-profitable&#34;&gt;SSD Offloading Becomes Necessary, Practical and Profitable&lt;/h2&gt;
&lt;p&gt;The rise of agentic workloads fundamentally changes the role of KV cache. Coding assistants, multi-turn reasoning, and tool-using agents repeatedly reuse long context prefixes while appending only a small number of new tokens at each interaction. Tool invocations can easily span tens or even hundreds of rounds, pushing context lengths to hundreds of thousands of tokens. This creates both a tremendous opportunity and a serious challenge: when KV cache is effectively retained, cache hit rates can exceed 95%; but once a cache miss occurs, the system may have to recompute hundreds of thousands of tokens, incurring substantial prefill overhead.&lt;/p&gt;
&lt;p&gt;However, the lifetimes of KV caches vary dramatically; some will be reused hours or even longer later. Retaining all KV caches in expensive HBM or DRAM is therefore both inefficient and economically unsustainable. To quantify this, we analyzed production traces from &lt;a href=&#34;https://github.com/alibaba-edu/qwen-bailian-usagetraces-anon&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Qwen-Bailian&lt;/a&gt;. This dataset consists of a two-hour sampled and anonymized KV cache trace from a single Qwen model-serving cluster on Aliyun Bailian. For our analysis, we select two representative traces: reasoning-intensive chat (thinking) and code generation (coder).&lt;/p&gt;
&lt;center&gt;
&lt;img src=&#34;kvcache-reuse-gap.png&#34;
     alt=&#34;KV block reuse temporal locality and lifetime distribution for coding and reasoning traces&#34;
     style=&#34;width:70%; max-width:1100px&#34;/&gt;
&lt;/center&gt;
&lt;p&gt;As shown in the figure, KV block reuse exhibits pronounced temporal-locality polarization, while block lifetimes span orders of magnitude. In coding scenarios, 69.2% of reused blocks are re-accessed within ten minutes, whereas cold reuse after more than 30 minutes accounts for only 10.3%. In reasoning scenarios, this skew is even more extreme: 83.0% of reused blocks exhibit short-cycle reuse, while only 5.0% fall into the cold-reuse category. These distributions show that KV cache access does not follow a simple monotonic decay. Instead, it forms a bimodal pattern where hot clusters coexist with cold tails. As a result, LRU or fixed-TTL policies may prematurely evict cold yet still valuable KV blocks, leading to catastrophic cache misses and massive prefill recomputation later.&lt;/p&gt;
&lt;p&gt;This naturally raises a question: can we use cheaper, more cost-effective SSDs to store these long-tail KV blocks? In our previous blog, &lt;a href=&#34;https://kvcache.ai/blog/calculate-kvcache-cache-budge/&#34;&gt;How Much KV Cache Budget Do We Need for LLM Serving?&lt;/a&gt;, we answered this question through a quantitative analysis of agentic workloads. We showed that the marginal benefit of provisioning additional DRAM capacity quickly diminishes, making a tiered storage hierarchy increasingly attractive. More importantly, because the vast majority of KV cache hits can already be served by a relatively small DRAM cache, only a tiny fraction of requests need to access the SSD tier. In other words, SSDs can dramatically expand KV cache capacity while imposing very little pressure on the read path.&lt;/p&gt;
&lt;p&gt;Even more appealingly, KV cache hit rate translates nonlinearly into prefill speedup: if the hit rate is $r$
, only $1-r$
 of prefill computation needs to be recomputed, yielding an ideal speedup of $\frac{1}{1-r}$
. As agentic workloads often operate in a high-hit-rate regime, even a small improvement in long-tail KV cache hits can translate into a disproportionately large gain in prefill performance.&lt;/p&gt;
&lt;h2 id=&#34;mooncake-solution-a-distributed-ssd-pool-for-kv-cache&#34;&gt;Mooncake Solution: A Distributed SSD Pool for KV Cache&lt;/h2&gt;
&lt;p&gt;Motivated by this observation, we built SSD offloading support directly into Mooncake Store. As shown in the figure below, Mooncake organizes local SSDs across serving nodes into a distributed KV cache pool, just as it already does for DRAM. DRAM remains the low-latency serving tier for hot data, while the larger, lower-cost SSD tier extends KV cache lifetime. A master coordinates the global metadata of all replicas across both tiers, allowing any compute node to transparently discover and reuse KV blocks stored on another node’s local SSD.&lt;/p&gt;
&lt;center&gt;
&lt;img src=&#34;store-arch.png&#34;
     alt=&#34;Mooncake Store architecture with DRAM and SSD tiered KV cache pool&#34;
     style=&#34;width:70%; max-width:1100px&#34;/&gt;
&lt;/center&gt;
&lt;h3 id=&#34;data-flow&#34;&gt;Data Flow&lt;/h3&gt;
&lt;p&gt;Mooncake keeps SSD access off the application’s critical write path and moves data asynchronously between the DRAM and SSD tiers. The complete flow consists of four operations: offloading KV blocks to SSD, loading them on demand, promoting frequently reused blocks back to DRAM, and recovering SSD metadata after restarts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Offloading:&lt;/strong&gt; SSD offloading is completely asynchronous and never blocks the application write path. Newly generated KV cache is first stored in DRAM and immediately becomes available for serving. Background heartbeat messages periodically synchronize with the master, which decides which objects should be offloaded based on the configured policy. The local node then batches the selected KV blocks and flushes them to its local SSD. Mooncake currently supports two offloading policies: eager offloading, which continuously flushes newly created KV cache in the background, and watermark-based eviction, which only starts offloading when DRAM utilization exceeds a configurable threshold.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Loading and Promotion:&lt;/strong&gt; When a requested KV block is no longer available in DRAM, the requester first queries the master for the location of its SSD replica. The target node reads the data from its local SSD into a temporary DRAM buffer, after which the requester pulls the data directly through RDMA or TCP. To avoid repeatedly paying SSD access latency, the master continuously tracks access patterns of SSD-resident objects. Frequently accessed KV blocks are proactively promoted back into DRAM, allowing subsequent requests to be served entirely from the memory tier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Metadata Recovery:&lt;/strong&gt; SSD-resident KV blocks persist across storage-service and master restarts, but their locations must be restored to the master before the blocks can be reused. Mooncake delegates this recovery process to individual storage nodes. When a node starts, it scans its local on-disk metadata and re-registers every valid object with the master, making the recovered SSD replicas globally discoverable once again.&lt;/p&gt;
&lt;h3 id=&#34;optimizing-the-ssd-data-path&#34;&gt;Optimizing the SSD Data Path&lt;/h3&gt;
&lt;p&gt;Simply adding an SSD tier is not enough. The storage stack itself must sustain high throughput under the highly concurrent access patterns of LLM serving. Mooncake therefore optimizes the entire SSD data path to minimize software overhead and keep modern NVMe devices fully utilized.&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;MOONCAKE_OFFLOAD_USE_URING&lt;/code&gt; is enabled, Mooncake switches from POSIX I/O to an io_uring-based implementation. Instead of sharing a global ring, each thread owns a private io_uring instance, eliminating lock contention and allowing I/O to scale with concurrency.&lt;/p&gt;
&lt;p&gt;This per-thread design also enables batching multiple read requests into a single submission, increasing queue depth and better utilizing NVMe parallelism. In addition, the staging buffer is registered as a fixed buffer with io_uring, avoiding repeated buffer registration on every I/O.&lt;/p&gt;
&lt;p&gt;Within the io_uring path, &lt;code&gt;O_DIRECT&lt;/code&gt; can optionally be enabled to bypass the page cache. Mooncake transparently handles unaligned requests with temporary aligned buffers, so users do not need to manage 4 KB alignment themselves.&lt;/p&gt;
&lt;h3 id=&#34;pluggable-storage-backends&#34;&gt;Pluggable Storage Backends&lt;/h3&gt;
&lt;p&gt;A storage backend defines how objects are organized on disk, including their layout, indexing, allocation, and eviction strategy. Since different workloads prioritize different trade-offs, such as throughput and eviction granularity, Mooncake Store provides a pluggable backend interface with three built-in implementations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BucketStorageBackend&lt;/strong&gt; (default) groups objects into buckets before flushing them to disk. Each bucket consists of a data file and a metadata index, written once the bucket reaches a size or key threshold. Fixed-size slots ensure sequential reads and writes, delivering higher SSD throughput. Bucket-level FIFO and LRU eviction policies are currently supported.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OffsetAllocatorStorageBackend&lt;/strong&gt; stores all objects in a single pre-allocated file. Like Mooncake&amp;rsquo;s DRAM storage, it uses an OffsetAllocator to manage space, enabling object-level allocation and eviction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FilePerKeyBackend&lt;/strong&gt; (demo) stores each object as an individual file under a two-level hash-sharded directory tree. While not designed for performance, it is useful for debugging and inspecting on-disk data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;benchmark-results&#34;&gt;Benchmark Results&lt;/h2&gt;
&lt;p&gt;We evaluate end-to-end performance on a single DGX node equipped with 8 × A100-SXM4-40GB GPUs and dual RDMA NICs. The evaluation compares four configurations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPU only:&lt;/strong&gt; KV cache is stored only in GPU memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HiCache L1 + L2:&lt;/strong&gt; KV cache is stored across both device and host memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HiCache L1 + L2 + Mooncake:&lt;/strong&gt; KV cache is stored across device memory, host memory, and Mooncake DRAM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HiCache L1 + L2 + Mooncake with SSD:&lt;/strong&gt; KV cache is stored across device memory, host memory, and Mooncake DRAM plus SSD.&lt;/li&gt;
&lt;/ul&gt;
&lt;center&gt;
&lt;img src=&#34;overall-perf.png&#34;
     alt=&#34;End-to-end TTFT and prefill throughput comparison across GPU-only, HiCache, Mooncake DRAM, and Mooncake with SSD&#34;
     style=&#34;width:70%; max-width:1100px&#34;/&gt;
&lt;/center&gt;
&lt;p&gt;As shown in the figure above, SSD offloading significantly reduces TTFT while improving prefill throughput.&lt;/p&gt;
&lt;center&gt;
&lt;img src=&#34;per-turn-perf.png&#34;
     alt=&#34;Per-turn TTFT and KV cache hit rate with and without Mooncake SSD offloading&#34;
     style=&#34;width:70%; max-width:1100px&#34;/&gt;
&lt;/center&gt;
&lt;p&gt;To understand where these gains come from, we break down TTFT and KV cache hit rate by conversation round, with the output length fixed to one token to isolate prefill latency. During the first six rounds, the memory pool is sufficient for both configurations, and they achieve nearly identical hit rates above 80%. The difference emerges once memory is exhausted. Starting from round 7, Mooncake without SSD must evict KV cache, causing the hit rate to collapse from 83% to 36% and TTFT to increase from 6 s to 16 s. With SSD offloading, evicted KV blocks remain available on NVMe, keeping the hit rate above 84% through round 8 and limiting TTFT to 9.4 s.&lt;/p&gt;
&lt;h2 id=&#34;ongoing-work&#34;&gt;Ongoing Work&lt;/h2&gt;
&lt;p&gt;Mooncake&amp;rsquo;s SSD offloading support is only the first step toward a fully tiered KV cache architecture. We are actively exploring three major extensions:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GPU Direct Storage (GDS).&lt;/strong&gt; Currently, SSD offloading still stages data through DRAM when moving KV cache between SSDs and GPU memory. GDS removes this intermediate hop, enabling KV cache to be transferred directly between NVMe SSDs and GPU HBM. This reduces both data movement overhead and end-to-end latency.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Distributed Storage Backends.&lt;/strong&gt; While local NVMe pooling is easy to deploy and operate, many users already have mature distributed storage systems they prefer to reuse. To support both models, Mooncake is introducing a pluggable backend interface for distributed storage systems, with 3FS planned as the first integration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NVMe-oF Integration.&lt;/strong&gt; While the current SSD tier is built on local NVMe devices, we are also exploring NVMe over Fabrics (NVMe-oF) to extend the same abstraction across remote storage. By integrating NVMe-oF with Mooncake&amp;rsquo;s Transfer Engine, remote NVMe devices can be accessed with the same high-performance data path as local SSDs, enabling storage resources to be pooled across machines without sacrificing efficiency.&lt;/p&gt;
&lt;h2 id=&#34;acknowledgment&#34;&gt;Acknowledgment&lt;/h2&gt;
&lt;p&gt;We would like to thank everyone in the community who has contributed to or supported this work. In particular, we are grateful to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Approaching.AI: Jiahao Lu, Zuoyuan Zhang, Chizheng Fang, Ke Yang&lt;/li&gt;
&lt;li&gt;Ant Group: Xinjie Zhu, Yongke Zhao, Yue Wan, Tingwei Huang&lt;/li&gt;
&lt;li&gt;NVIDIA: Mahesh Bapatu&lt;/li&gt;
&lt;li&gt;Alibaba Cloud: Xinpeng Zhao, Bo Gao, Xuchun Shang, Teng Ma&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;related-links&#34;&gt;Related Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Mooncake project: &lt;a href=&#34;https://github.com/kvcache-ai/Mooncake&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/kvcache-ai/Mooncake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href=&#34;https://kvcache-ai.github.io/Mooncake/design/ssd-offload.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://kvcache-ai.github.io/Mooncake/design/ssd-offload.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Usage: &lt;a href=&#34;https://kvcache-ai.github.io/Mooncake/deployment/ssd-offload.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://kvcache-ai.github.io/Mooncake/deployment/ssd-offload.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>How Much KV Cache Budget Do We Need for LLM Serving?</title>
      <link>https://kvcache.ai/blog/calculate-kvcache-cache-budge/</link>
      <pubDate>Fri, 26 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://kvcache.ai/blog/calculate-kvcache-cache-budge/</guid>
      <description>&lt;p&gt;In LLM inference clusters, the storage budget for the KV Cache directly affects the KV Cache hit rate and prefill throughput. If the cache is configured too small, reusable KV entries will be evicted too early. If it is configured too large, valuable storage resources will be wasted. Therefore, the key question in KV Cache capacity planning is: &lt;strong&gt;given a specific workload and model configuration, how much cache space should be allocated to achieve a sufficiently high hit rate and reasonable marginal returns?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To address this, we have released the &lt;strong&gt;KVCache Hit Rate Simulator&lt;/strong&gt;, a tool for simulating KV Cache hit rates. Based on request traces and model parameters, it can calculate the KV Cache hit rate under different KV Cache capacities and further estimate the prefill performance improvement brought by KV Cache reuse. In this article, we will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Introduce how to use this tool to properly configure and optimize KV Cache storage capacity in online inference clusters.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Share some observations and insights from our analysis.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tool: &lt;a href=&#34;https://kvcache.ai/tools/kv-cache-hit-rate-simulator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://kvcache.ai/tools/kv-cache-hit-rate-simulator/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;step-1-parameter-configuration&#34;&gt;Step 1: Parameter Configuration&lt;/h2&gt;
&lt;p&gt;The KV Cache hit rate is highly dependent on reuse patterns across requests. Therefore, the first step is to prepare a trace that can represent your online workload. You can use your own local trace or directly select one of the built-in traces provided by the tool.&lt;/p&gt;
&lt;center&gt;
&lt;img src=&#34;trace-selection.PNG&#34;
     alt=&#34;KV Cache Hit Rate Simulator trace and model selection&#34;
     style=&#34;width:70%; max-width:1100px&#34;/&gt;
&lt;/center&gt;
&lt;p&gt;We have prepared several types of traces in advance, such as Tool Agent, Coding Agent, and RAG. We recommend choosing the trace type that most closely matches your online business scenario.&lt;/p&gt;
&lt;p&gt;For local traces, data security is usually the primary concern. KVCache Hit Rate Simulator does not upload user data. Trace parsing and hit-rate simulation are both performed locally in the browser. Since the tool itself is open source, users can also deploy it directly in their own environment to further satisfy internal data security and compliance requirements.&lt;/p&gt;
&lt;p&gt;In addition, different models have different KV Cache sizes. Therefore, when running the simulation, you also need to select the corresponding model and precision.&lt;/p&gt;
&lt;h2 id=&#34;step-2-data-analysis&#34;&gt;Step 2: Data Analysis&lt;/h2&gt;
&lt;p&gt;After the parameters are selected, the tool automatically calculates the relevant metrics. The first thing to examine is the figure showing how the KV Cache hit rate changes as the KV Cache capacity increases.&lt;/p&gt;
&lt;center&gt;
&lt;img src=&#34;kvcache-hit-rate-fig.PNG&#34;
     alt=&#34;KV Cache hit rate versus cache capacity under different eviction algorithms&#34;
     style=&#34;width:70%; max-width:1100px&#34;/&gt;
&lt;/center&gt;
&lt;p&gt;First, look at the upper bound of the KV Cache hit rate. The horizontal line of &lt;strong&gt;“ceiling”&lt;/strong&gt; in the figure represents the theoretically maximum hit rate that the workload can achieve under the assumption of unlimited KV Cache capacity. In other words, it is the theoretical upper bound of the hit rate.&lt;/p&gt;
&lt;p&gt;Next, focus on the actual hit rates under different cache budgets. Under the same cache capacity, different cache eviction algorithms may have a significant impact on the hit rate. Since most inference systems currently use the LRU algorithm, &lt;strong&gt;we can mainly focus on the line corresponding to LRU&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Note: For LRU algorithms based on prefix reuse, eviction naturally starts from the leaf nodes of the radix tree.&lt;/p&gt;
&lt;p&gt;In general, we want the hit rate to be as close as possible to the theoretical upper bound. However, when the hit rate approaches this upper bound, the marginal benefit of further increasing KV Cache capacity drops rapidly. Therefore, we need to make a trade-off between storage capacity and compute efficiency.&lt;/p&gt;
&lt;p&gt;When making this trade-off, the hit-rate curve alone can be misleading. The same absolute increase in hit rate can translate into very different performance gains depending on the hit-rate range. This is particularly important for today’s agentic workloads, which often have very high KV Cache hit-rate ceilings, typically above 90%.&lt;/p&gt;
&lt;p&gt;In the high-hit-rate range, each additional percentage point becomes increasingly valuable. For example, increasing the hit rate from 50% to 55% yields roughly a 10% prefill speedup, while increasing it from 90% to 95% can nearly double prefill performance.&lt;/p&gt;
&lt;p&gt;Therefore, when deciding whether to further increase KV Cache capacity, we should look beyond the percentage-point improvement in hit rate. The key question is whether the resulting prefill speedup is still growing meaningfully. This is where the second figure becomes useful: it shows how the ideal prefill speedup changes as the KV Cache capacity increases.&lt;/p&gt;
&lt;center&gt;
&lt;img src=&#34;throughput-speedup.PNG&#34;
     alt=&#34;Ideal prefill speedup versus KV Cache capacity&#34;
     style=&#34;width:70%; max-width:1100px&#34;/&gt;
&lt;/center&gt;
&lt;p&gt;The prefill speedup is directly calculated from the KV Cache hit rate. Intuitively, if the hit rate is $r$
, then only $1-r$
 of the prefill computation needs to be recomputed. Therefore, the ideal prefill speedup is: $\frac{1}{1-r}$
.&lt;/p&gt;
&lt;p&gt;That is, in the ideal case, prefill can be accelerated to $\frac{1}{1-r}$
 times the speed of full recomputation.&lt;/p&gt;
&lt;p&gt;In the figure above, the trace is Weka Claude Code and the model is GLM-5.1. When the KV Cache budget is 512 GB, 1 TB, 2 TB, and 4 TB, the ideal speedup is 6.3x, 7.9x, 8.7x, and 9.0x, respectively. Therefore, it is reasonable to consider configuring the KV Cache capacity at 2 TB. At this point, the system has already achieved performance gains close to the maximum, while avoiding the low marginal returns caused by further capacity expansion. Overall, this offers the best cost-effectiveness.&lt;/p&gt;
&lt;h2 id=&#34;some-insights&#34;&gt;Some Insights&lt;/h2&gt;
&lt;p&gt;The cost-effectiveness of KV Cache storage capacity, namely the prefill speedup contributed by each GB of storage, typically decreases gradually as capacity increases. Once the marginal benefit of additional storage falls below a certain level, it may be worth introducing cheaper storage media and building a tiered cache.&lt;/p&gt;
&lt;p&gt;Using the figure above as an example, when the KV Cache budget is 512 GB and 2 TB, the ideal speedup is 6.3x and 8.7x, respectively, corresponding to hit rates of 84.2% and 88.5%. In this case, a two-tier cache strategy with 512 GB of DRAM and 2 TB of SSD can be considered. Assuming that each tier independently uses the LRU algorithm, the two tiers follow a write-through policy, and Get operations first check for hits in DRAM, then the 512 GB DRAM tier can provide a 6.3x performance improvement, while the 2 TB SSD tier contributes the remaining 2.4x speedup.&lt;/p&gt;
&lt;p&gt;More interestingly, the hit rates above show that among the 88.5% of KV cache hit, about 95.1% can be satisfied directly by DRAM, while only about 4.9% need to fall back to the SSD tier. In other words, although SSD access is slower, the SSD tier carries very little read-path pressure. This makes SSD an attractive option for cost-effectively expanding KV Cache capacity in such scenarios.&lt;/p&gt;
&lt;p&gt;It is also important to note that the analysis above assumes each KV Cache entry is stored only once globally. If duplicate copies exist across the system, the required KV Cache capacity should be increased accordingly.&lt;/p&gt;
&lt;p&gt;This is also where our open-source project Mooncake becomes relevant. Mooncake is a distributed caching system designed around KV Cache. With Mooncake Store, each KV Cache entry only needs to be stored once globally, which can significantly reduce redundancy. As a result, the capacity analysis above, which assumes a single global copy of each KV Cache entry, better reflects what can be achieved in a real deployment.&lt;/p&gt;
&lt;p&gt;Mooncake Store also supports two-tier caching with DRAM and SSD. In addition, the local SSD on each node can be shared across the entire inference cluster, allowing KV Cache capacity to be expanded at a lower cost while enabling large-scale KV Cache reuse for high-hit-rate agentic workloads.&lt;/p&gt;
&lt;h2 id=&#34;related-links&#34;&gt;Related Links&lt;/h2&gt;
&lt;p&gt;Use the simulator online: &lt;a href=&#34;https://kvcache.ai/tools/kv-cache-hit-rate-simulator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://kvcache.ai/tools/kv-cache-hit-rate-simulator/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Deploy the simulator locally: &lt;a href=&#34;https://github.com/kvcache-ai/kvcache-blog&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/kvcache-ai/kvcache-blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Try Mooncake: &lt;a href=&#34;https://github.com/kvcache-ai/Mooncake&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/kvcache-ai/Mooncake&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
