Quantifying Performance Gains of GPUDirect Storage — Detailed Summary

Devasena Inupakutika, Bridget Davis, Qirui Yang, Daniel Kim (Samsung, San Diego) · David Akopian (UTSA, San Antonio) | 2022 IEEE International Conference on Networking, Architecture and Storage (NAS) | DOI: 10.1109/NAS55553.2022.9925516

Per-section summary organized by the paper's headings. Each section includes paragraph-level bullet points and exact quantitative results where the paper provides them. Figures 4 and 5 (the core results) are bar charts with no in-text numeric tables, so figure-derived numbers below are the magnitudes the authors state in prose plus chart-axis values.


Abstract


I. Introduction

Data-growth motivation:

The CPU bounce-buffer problem:

Path to direct access:

This paper's scope:

Contributions (stated):

  1. Establish a baseline level of GDS performance and report comparative analyses.
  2. Study the impact of GDS on synthetic and real AI/ML workloads.
  3. Analyze system resource consumption: device IO operations, CPU utilization, latency, and throughput.
  4. Investigate workloads with local direct-attached storage using the EXT4 local file system and Weka distributed file system as remote storage.

Paper organization: Section II — GDS technology, related work, GDS software stack; Section III — testbed (local and remote), workloads, metrics; Section IV — evaluation with synthetic and real AI/ML workloads; Section V — discussion and system implications; Section VI — conclusions and future work.


II. Background

II.A. GPUDirect Storage

Why the CPU is a bottleneck:

GDS as the P2P answer:

II.C. GPUDirect Storage Architecture Layout


III. Experimental Testbed

III.A. Local Storage Testbed Configuration

III.B. Remote Storage Testbed Configuration

TABLE I — GPU Machine Software and Hardware Configuration

Component Details
GPU 8x Nvidia Tesla V100S, 32 GB
CPU Intel Xeon Platinum 8268, 2.9 GHz, 2 Sockets, 48 (24x2) total cores, 768 GB system memory
Drive Samsung PM9A3 (3.49 TiB) x 4 drives per host; PCI Express Gen4 x4 interface U.2
Ubuntu 20.04 focal
FIO Version 3.26-59
IOEngine libcufile
cuda_io=cufile Performs I/O directly between a GDS filesystem and GPU buffers, avoiding bounce buffers; Path 1→2 from Fig 1(b)
cuda_io=posix Performs I/O with RAM buffer, uses cudaMemcpy to transfer between RAM and GPUs; Path 1→2→3→4 from Fig 1(a)

TABLE II — Remote Storage Testbed Configuration

Component Details
Remote Storage Weka Cluster Nodes 6 target hosts (15 cores each): Dual Intel Xeon E5-2640 v3 CPU @2.6 GHz; 1 client: Dual Intel Xeon 8268 CPU @2.9 GHz (Table I)
Drives on Nodes Samsung PM9A3 (3.49 TiB) x4 drives per host; PCI Express Gen4 x4 interface U.2
Weka FS Version 3.12.0
Total Weka Cluster capacity 37.72 TiB, of which 21.72 TiB unallocated: 16 TiB

III.C. Workloads and Benchmarking Utilities

III.C.1. Microbenchmarks: Synthetic Random Read IO workloads

III.C.2. Real-world Deep Learning workloads

TABLE III — Workload Descriptions

Workload Application Type Description
Synthetic Random Read 4K 100% random read Small 1 TB read IOs
ResNet50 v1.5 Training Image Classification Distributed multi-GPUs training

III.D. Performance Metrics

III.E. Precondition


IV. Results and Analysis

IV.A. Performance on the Local Direct-Attached Storage

IV.A.1. GDS performance for Random Read workload (Fig. 4 (a)–(d)):

IV.A.2. GDS performance for ResNet50 training (Fig. 4 (e)–(h)):

IV.B. Performance on Weka Remote Storage

IV.B.1. GDS performance for Random Read workload (Fig. 5 (a)–(d)):

IV.B.2. GDS performance for ResNet50 training (Fig. 5 (e)–(h)):


V. Discussion and System Implications


VI. Conclusions and Future Work

Future work:


Consolidated Headline Quantitative Results

Metric Local DAS (single NVMe, EXT4) Weka Remote (6 nodes, 24 PM9A3)
Throughput gain (GDS vs CPU-GPU) +14% (medium-to-high transfer) ~2.8x at 4K block; up to 11 GiB/s read
Peak IOPS ~800K out-of-box (≈900K theoretical PM9A3) >740K to single client (4-core mount)
Latency reduction (GDS) -14% overall; >~1000 µs lower at ≥16K (training) -45% overall; 88%/49% lower at 32K/256K; 256 µs at 4K
CPU utilization reduction -12% overall; -18% at 32K–256K (2 cores) -18–21% at ≥32K (2–3x); training -39–45% at batch≥32
ResNet50 training throughput gain +1–4% (batch 4–16); +12–15% (batch≥32) +2–8% (batch≤16); +12–15% (batch≥32)
ResNet50 CPU core savings 5–10 cores (batch 4–32); ~15 cores (batch≥64) 5–10 cores (batch 4–32); ~15 cores (batch≥64)
GPU utilization No noticeable improvement Comparable to CPU-GPU
Preconditioning baseline (PM9A3) 3.365 GB/s seq write; 199K IOPS random write (same drives)

Named Methods, Tools, and Systems

Item Role in paper
NVIDIA GPUDirect Storage (GDS) [4] Core technology under test; direct storage→GPU path via cuFile
cuFile API / libcufile.so User-space API; cuFileRead(fh, d_buf, size, 0, 0) replaces pread+cudaMemcpy
nvidia-fs.ko Kernel driver on top of Linux VFS enabling GPU memory buffers
GPUDirect RDMA [8] Precursor; NIC↔︎GPU DMA via BAR addressing; GDS extends it
GDSIO NVIDIA in-house benchmark (ships with CUDA 11.4) using libcufile engine
FIO 3.26-59 IO test tool for preconditioning and synthetic workloads
DALI pipeline NVIDIA data-loading library; reduces DNN data-prep stalls [20]
WekaFS 3.12.0 Software-defined distributed parallel FS (POSIX/NFS/S3/SMB/GDS); user-space container; DPDK networking
Samsung PM9A3 [5] NVMe Gen4 SSD (3.49 TiB, U.2); ~900K IOPS theoretical
ResNet50 v1.5 + ImageNet ILSVRC12 (~150 GB) Real DL training workload
Compatibility (POSIX) mode cuFile fallback using CPU bounce buffers when FS unsupported

Data-Path Architecture (Fig. 1)

WITHOUT GDS (Fig. 1a, cuda_io=posix, path 1→2→3→4)
  NVMe SSD --1--> CPU --2--> RAM (bounce buffer / page cache)
                   |                  |
                   +--3--> CPU -------+
                              |
                              4
                              v
                            GPU            (cudaMemcpy HostToDevice)

WITH GDS (Fig. 1b, cuda_io=cufile, path 1→2)
  NVMe SSD --1--> PCIe Switch --2--> GPU memory
                  (direct DMA; "No bounce buffers needed")
GDS SOFTWARE STACK (Fig. 2)
  Applications on CPU
        |
  cuFile API / libcufile.so
        |
  CUDA
========== kernel boundary ==========
  nvidia-fs.ko kernel driver
        |
  Virtual File System (VFS)
        |
  Filesystem driver | Block IO driver | Storage driver   ==>  [Proprietary
        |                                                       Distributed FS]
  Storage (SSDs) DMA engine  <-------------------------------------+

Limitations (stated and implied)


Open Problems / Future Directions

  1. Develop a methodology to tune application-specific optimal GDS configurations (parameters such as IO threads, client-mount cores, block size, queue depth).
  2. Extend evaluation to MLPerf benchmark models beyond ResNet50.
  3. Quantify GDS on other HPC workloads beyond DL training and synthetic random read.
  4. Evaluate GDS over additional remote storage backends (Lustre, NFS, S3 on WekaFS) to generalize the IO-path findings.