AI Infra Interviews logo
Networking, Interconnects & Storage / 09
mediumNewNVIDIAWEKA

When does GPUDirect Storage actually help, and when is it just a more complicated read?

Reading straight from NVMe into GPU memory skips a copy through host memory, which is worth a lot for one workload and nothing for another. The bandwidth arithmetic for both paths, the two cases where the bounce is the bottleneck, and the far more common case where the CPU has to touch the data anyway.

Updated Sep 2026 · Grounded in real AI infrastructure interview loops and written to a senior-engineer editorial bar, with every number worked and every diagram hand-built.

TL;DR: The ordinary path reads from storage into host memory, then copies host memory to the GPU: two transfers, a host buffer, and CPU cycles spent on the copy. GPUDirect Storage lets the drive or the network storage client write into GPU memory directly, so there is one transfer and no host buffer. The gain is real when the storage can deliver more than the host path can absorb: eight local NVMe drives at about 7 GB/s each is 56 GB/s aggregate, while a bounce through host memory adds a copy at roughly 25 GB/s of effective PCIe throughput plus the host memory bandwidth to perform it. Checkpoint loading is the clearest winner, since the bytes go straight into the tensors that will hold them. Training data loading usually is not, because the CPU has to decompress, tokenize, augment or collate before the GPU can use anything, and once the CPU touches the data the bounce was going to happen regardless. Ask what the CPU does to the bytes between the drive and the GPU: if the answer is nothing, this pays.

How to approach it

Describe both paths and count the transfers, because the argument is entirely about how many times the data crosses PCIe and who copies it. Then give the two cases where it pays and the one where it does not, with the test that separates them in a sentence. Close with the practical requirements, since this needs support from the filesystem as well as the driver and fails back silently when it is missing.

A strong answer

A typical situation: a team enables GPUDirect Storage for their training data loader, measures no improvement, and concludes the feature does not work. It works. Their loader reads compressed shards, decompresses them on the CPU, tokenizes and collates, so the bytes were always going to pass through host memory and the only thing removed was a copy that was never the bottleneck.

The two paths, counted:

ordinary path
  drive -> host memory        one PCIe crossing, plus filesystem and page-cache work
  host memory -> GPU memory   a second PCIe crossing, from a pinned buffer
  the CPU issues and often performs part of the copy, and host memory bandwidth carries the
  data twice: once in, once out

GPUDirect path
  drive -> GPU memory         one PCIe crossing, the storage device or client writing into a
                              registered GPU buffer, with the CPU issuing the request only

bandwidth available on each side of the question:
  8 local NVMe drives at about 7 GB/s each          = 56 GB/s aggregate
  a PCIe Gen5 x16 link, realized                    = about 25 to 50 GB/s
  host memory bandwidth spent on a bounce copy      = 2 x the data volume
sanity: when the storage side can deliver more than the bounce path can absorb, the bounce is
        the limit and removing it is the whole win. When the storage side is slower than the
        bounce, removing the bounce changes nothing measurable

Where it pays:

CaseWhyRough effect
Checkpoint loading and restoreThe bytes go straight into parameter tensors with no transformationLoading 1.1 TB of training state at 56 GB/s rather than being capped near 25 GB/s: about 20 s instead of 45 s
Pre-decoded, pre-tokenized data read as raw arraysNothing on the CPU touches the bytesRemoves a copy and the host memory traffic that goes with it
Very large sequential reads by a GPU-side consumerThe GPU is the only consumer and the transform is a kernelSame as above
Inference weight loading on a cold startSame shape as checkpoint loadingShortens the cold start, which the autoscaler is waiting on

Where it does not:

any pipeline with a CPU-side transform between storage and the GPU:
  decompression (gzip, zstd), image decode, on-the-fly tokenization, augmentation, collation
  the data has to be in host memory for the CPU to touch it, so the bounce is not removable
  and GPUDirect can only apply to a stage that does not exist

small random reads:
  the win is per transfer and the cost is per transfer too; at 4 KB reads the file system and
  request overhead dominate and the copy is noise

when the storage is the bottleneck:
  a network filesystem delivering 5 GB/s to the node is nowhere near the bounce path's limit,
  so the bounce is free capacity and removing it changes nothing

Checkpoint I/O covers the load path in detail; Data Loading Pipelines for Training covers the case where the CPU work is the real constraint, which is the more common situation by a wide margin.

The one-sentence test to apply in an interview: what does the CPU do to these bytes between the drive and the GPU? If the answer is nothing at all, GPUDirect Storage removes a copy that was costing real bandwidth. If the answer names any transform, the bounce is structural and the feature addresses a cost that is not the problem.

The requirements, because this is where it silently does not engage:

software     a filesystem and client that implement the cuFile interface, a driver with the
             peer-memory path enabled, and an application that uses the cuFile API rather than
             ordinary reads. An ordinary read into a GPU pointer does not become direct by itself
hardware     the drive or network adapter and the GPU should be on the same PCIe root for the
             direct path to be worth taking, which is the same locality requirement GPUDirect
             RDMA has
failure mode it falls back to the ordinary path with no error, so the way to confirm it engaged
             is the counters the cuFile layer exposes, not the absence of a complaint

GPUDirect RDMA and GPUDirect Storage covers both members of the family and the shared locality requirement.

WHERE THE COPY SAVING LANDS checkpoint restore 141 GB, sequential, GPU-destined real training data read 64 KB/s of token ids nothing Compute the required rate before buying anything. For text it is four orders of magnitude below the tier. Ours helped on checkpoint restore and did nothing measurable on training reads, exactly as predicted.

The reversal condition: on a node whose storage is remote and modest, or whose pipeline is CPU-transform-heavy, this is complexity without benefit and the engineering time belongs in the data pipeline instead. The reversal in the other direction is worth naming too: as data formats move toward pre-tokenized, pre-decoded shards specifically so the CPU has nothing to do, the case for the direct path strengthens, and the two decisions are usually made together rather than separately.

What interviewers probe next

  • "Does this help the checkpoint write path as well?" Yes, symmetrically, and writes are the more common bottleneck since they are bursty. The same locality and filesystem requirements apply.
  • "How do you verify it engaged?" Through the cuFile counters and by watching host memory traffic, which drops to near zero for the transfer when the path is direct.
  • "What about page cache?" The direct path bypasses it, which is what you want for data read once and a loss for data read repeatedly. A small dataset re-read every epoch may be better served from the page cache.
  • "Is this related to GPUDirect RDMA?" The same idea applied to storage rather than the network, with the same requirement that the device and GPU share a PCIe root.

Common mistakes

  • Enabling it for a loader that decompresses or tokenizes on the CPU, where the bounce cannot be removed.
  • Expecting ordinary file reads into a GPU buffer to take the direct path without the cuFile interface.
  • Measuring no change and concluding it is broken, rather than that the bounce was not the limit.
  • Using it for small random reads, where per-transfer overhead dominates the copy it saves.

Key takeaways

  • Ordinary path: two PCIe crossings and a host buffer. Direct path: one crossing, no host memory involved.
  • Eight NVMe drives deliver about 56 GB/s while a bounce path realizes about 25 GB/s, so the bounce is the limit exactly when the storage is fast.
  • Checkpoint and weight loading are the clear wins; anything with a CPU-side transform is not.
  • The test: if the CPU touches the bytes between the drive and the GPU, this addresses the wrong cost.
That one was free — and so are 10 answers per topic without an account. Signing in doubles that to 20, opens the Plus lessons in the courses, and remembers which topics you keep getting wrong.no card · Google sign-in · nothing to cancel
HOW DID IT GO?
0
READING SIGNED OUT

Signing in doubles your free answers, from 10 to 20 per topic, and the site starts remembering you: mastery per topic, bookmarks, and a next-focus recommendation. Free, no card.

Sign in free

The concepts behind this question

Ranked by how closely each one overlaps this question's topic, so the first card is the thing to read if the answer above moved too fast.

Advanced
🔌 Networking & Storage🔒 Premium
GPUDirect RDMA and GPUDirect StorageBy default a byte leaving a GPU for the network or the disk makes a detour through host memory, crossing PCIe twice and costing a CPU copy. GPUDirect RDMA lets the NIC read and write GPU memory directly, and GPUDirect Storage does the same for NVMe. The win is not raw bandwidth (PCIe is the ceiling either way) but the halving of PCIe traffic and the removal of the host as a bottleneck, which is what makes collectives run at NIC rate and checkpoints run at drive rate. When it is silently off, everything still works, at half speed.
Advanced
🔌 Networking & Storage🔒 Premium
Data Loading Pipelines for TrainingThe dataloader is the only part of a training job that runs on the CPU, the disk and the network at once, and it is the part most often found starving the GPUs. A pipeline that keeps 1,024 accelerators fed has to read sharded files sequentially, decode and tokenize in parallel workers, prefetch several batches ahead, pin memory for the PCIe copy, and do it deterministically enough to resume mid-epoch. The symptom of failure is a GPU at 30% utilization with nothing wrong on the GPU.
Advanced
🧩 GPU & Accelerator Architecture🔒 Premium
NVLink, NVSwitch and PCIeInside a node, GPUs talk over NVLink at 900 GB/s per H100 through an NVSwitch fabric that gives all eight cards full bandwidth to each other; to the host and to anything outside the node they talk over PCIe at 64 GB/s or a 400 Gb/s NIC at 50 GB/s. That fifteen-fold gap is why tensor parallelism stays inside the eight-GPU domain, why NVL72 changes the serving math for MoE, and why the question "how many GPUs share an NVLink domain?" is the first thing to ask about any cluster.
Foundational
🖧 Hardware & Cluster Build-Out
SXM, PCIe and Rack-Scale Form FactorsThe same silicon ships in three shapes and the shape decides the deployment. An SXM module is soldered to a baseboard with a full NVLink mesh and needs 700 to 1,400 W of direct power and usually liquid cooling. A PCIe card slots into a standard server, draws through the slot and a cable, and has no NVLink. A rack-scale system like GB300 NVL72 makes the whole rack one NVLink domain and stops being a server at all. Choosing between them fixes your power, cooling, cabling and scheduling story.
UP NEXT ON YOUR JOURNEY
FEDITOR'S NOTE

Scored on the two-path bandwidth arithmetic, on identifying checkpoint loading and pre-decoded data as the cases that benefit, and on knowing that any CPU-side transform removes the benefit entirely.

DISCUSSION · 0

No comments yet — be the first to share your approach.