Skip to content
Xinyuanyi

Insights

Local NVMe or an NVMe-oF Array for KV Cache?

Published

Question

Should KV cache be kept on a local NVMe drive in the server or on an external NVMe-oF all-flash array?

Short answer

Both avoid full recompute, but under heavy concurrent read-back the external array is faster: measured on a 480B model at TP=8, FX100 delivers 29–40% more throughput and 26–32% lower TTFT at p50 than a single local NVMe driveR2. An external array also lets several inference instances share one cacheR3.

How the comparison was set up

The local setup is one NVMe drive (PCIe Gen4, 2 TB). The external setup is the FX100 all-flash NVMe-oF array: a 4-drive RAID0 pool (14 TB, XFS) reached over RoCEv2 on one 100 GbE portR2.

Note that this is not a like-for-like drive count; the baseline is a single drive. If your servers already have a local multi-drive array, the gap will differ from the one here and has to be measured on your own configuration.

Readings at each concurrency level

The model is Qwen3-Coder-480B-FP8 on 8 × AMD MI308X under a long-context cold-recovery load. The value left of each arrow is the single local NVMe drive; the value on the right is FX100.

  • Concurrency 8: TTFT at p50 10.17 s → 7.53 s; throughput 43.9 → 56.6 tok/s (+29%)R2.
  • Concurrency 16: TTFT at p50 17.31 s → 11.85 s; throughput 53.6 → 74.9 tok/s (+40%)R2.
  • Concurrency 32: TTFT at p50 35.73 s → 26.35 s; throughput 53.9 → 71.6 tok/s (+33%)R2.

Why going over the network is faster

Intuition says a local drive sits closer to the GPU. But time to first token is not decided by the small extra protocol latency; it is decided by whether data can be returned to GPU memory fast enough under concurrent read-back. A multi-drive all-flash pool on an RDMA network offers more concurrent read bandwidth than one local drive.

Software matters too: the LMCache parallel-read patch raises single-GPU cold-read bandwidth from 0.98 GB/s to 5.23 GB/sR1. Without it, a serial read path holds back even a fast drive.

Two things an external array adds

One is sharing. Cache on a local drive is usable only by that server; cache in an external pool can be read by a session scheduled onto any instance. Cross-instance hot sharing through the fs:// shared pool has been verifiedR3.

The other is sizing. The production basis is one FX100 per 8 inference nodes, grounded in the measured anchor that 100 GbE sustains KV read-back for 8 nodesR1R2R3.

When a local drive is enough

For a single server with modest concurrency and sessions that never migrate between instances, a local NVMe drive already captures the largest gain, which is not recomputing. The advantage of an external array appears when concurrent read-back pressure is high or several instances need to share a cache.

Related test reports

External references

  1. 01
    NVM Express Specifications · NVM Express, Inc.

    The official specifications of NVMe and NVMe over Fabrics

  2. 02
    RFC 5040: A Remote Direct Memory Access Protocol Specification · IETF

    The normative definition of the RDMA protocol

  3. 03
    LMCache (GitHub repository) · LMCache Project

    LMCache source code, architecture and storage backends

Further reading

What Is KV Cache Tiering and When Does It Help?

KV cache tiering keeps the KV cache that overflows GPU memory in host RAM and external flash, then reads it back instead of recomputing. Structure, gains and limits.

SourceR2R3R8

All articles

Test jointly first, decide afterwards

Test jointly first, decide afterwards

Every engagement starts with a gated joint test of about 10 weeks. Four gates are passed in sequence; if one is missed, the project stops there, so you never pay for a benefit that was not demonstrated.

Contact
Wang Limin
Phone
+86 131 6181 8898
Email
mingxin@agentmail.to

The inbox is monitored and triaged by AI around the clock