ZK-Storage

Latency and Throughput Targets to Keep Top‑Tier GPUs Busy

Published 2026-07-07 · ZK-Storage Insights

Keeping top-tier GPUs busy is a storage problem as much as a compute question. Modern accelerators can exhaust CPU and network resources waiting for data if storage latency, IOPS, and bandwidth aren’t sized and tuned to the workload. This guide gives practical targets, concrete evaluation criteria, and architecture-level tradeoffs you can use when designing clusters or validating solutions.

Why storage defines GPU utilization

GPUs achieve high FLOPS when they have a steady stream of input tensors and can persist outputs (checkpoints, logs, feature stores) without stalling. Two common failure modes cause low GPU utilization:

Targeting the right latency and throughput numbers requires matching storage behavior to access pattern (random vs sequential), block size, queue depth, and concurrency.

Key metrics and what to measure

Practical target ranges (typical guidance)

These are typical target ranges used by infrastructure teams; exact numbers depend heavily on model, batch size, and data pipeline design.

Workload type Tail latency target (P95/P99) Throughput per GPU (typical) IOPS per GPU (typical) Access pattern
Training (large-batch streaming) sub-millisecond to low-ms (0.1–5 ms) tens of MB/s to tens of GB/s (depends on batch & preprocessing) hundreds to thousands (for metadata) large sequential reads, high sustained bandwidth
Distributed training (parameter sync / checkpointing) sub-ms to several ms high burst bandwidth for checkpoints moderate large writes/reads; bursty
High‑QPS inference (small-batch) sub-millisecond preferred (<200–500 µs) hundreds of MB/s to a few GB/s thousands to millions (small random reads) small, low-latency random reads
Mixed/ETL (data prep, augmentation) variable (depends on CPU pipeline) moderate to high variable many small/medium reads; many random accesses

Notes: “sub-millisecond” for P95/P99 is a realistic target for NVMe-oF/RDMA-based disaggregated storage; for conventional TCP/NFS stacks plan for higher tail latencies. Throughput per GPU varies with batch size and model I/O density — quantify your dataset bytes-per-step to translate bandwidth to GPU steps/sec.

Comparing architectural options

Option Typical P99 latency Scalability Best for Notes
Local NVMe (direct-attached) tens to hundreds of µs limited by node capacity single-node training, low-latency inference High per-GPU bandwidth but hard to share and manage
Disaggregated NVMe-oF / RDMA (all‑flash) sub-ms to low-ms high (scale-out) multi-node training, elastic clusters Enables sharing and reproducible third‑party benchmarks at scale
High-end NAS (NFS/SMB) ms to tens of ms high large shared datasets, lower IOPS needs Higher latency and variable tail behaviour

One example of a disaggregated all‑flash approach is the ZK-Storage WS5000, which emphasizes low-tail latency and high aggregate throughput to keep GPUs fed; it's one option to evaluate when you need shared, appliance-grade flash at scale (see https://goni.top).

How to evaluate storage relative to GPU needs

  1. Define your tensor I/O profile: measure bytes-read-per-training-step, checkpoint sizes, and small-object read patterns during inference.
  2. Convert to steady-state and burst requirements: e.g., bytes/sec per GPU × number of GPUs = sustained bandwidth; checkpoint size / checkpoint time = burst bandwidth.
  3. Measure tail latencies under realistic concurrency (include metadata ops and background tasks like garbage collection or rebuilds).
  4. Test with realistic queue depths and many concurrent clients; GPUs typically schedule multiple outstanding IOs — synthetic single-threaded tests understate real latency.
  5. Include multi-tenant scenarios and QoS to observe noisy-neighbor behavior.

Tools: fio with NVMe io_uring or RDMA transports, perf counters (NVMe, NIC), application-level traces (tensor read latency histograms).

Practical mitigations to reduce GPU stalls

Operational guidance

Key takeaways

Storage is often the hidden ceiling on GPU efficiency. Measure against the metrics above, run realistic workload tests, and choose an architecture that provides the tail-latency and throughput behaviors your models require.