GeminiFS: A Companion File System for GPUs — Detailed Summary

Shi Qiu, Weinan Liu, Yifan Hu, Jianqin Yan, Zhirong Shen, Xin Yao, Renhai Chen, Gong Zhang, Yiming Zhang | NICE Lab, Xiamen University / Shanghai Jiao Tong University / Huawei Theory Lab | FAST '25 (23rd USENIX Conference on File and Storage Technologies), Feb 25-27 2025, Santa Clara, CA | USENIX, pp. 221-236 | Code: github.com/nicexlab/GeminiFS

Per-section summary organized by paper headings. Each section includes paragraph-level bullet points and exact quantitative results where the paper provides them.


Abstract


1. Introduction

Capacity-demand gap:

CPU-centric inefficiency and GPU-centric response:

The companion file system idea:

Workload characteristics exploited:

Contributions:


2. Background and Motivation

2.1 Storage Access of GPU Workloads

Table 1 — Storage access characteristics of GPU-accelerated ML workloads (selected rows):

Application Data Type Access Mode Data Size Retention
DNN Training-inputs Read only 10⁻¹–10³ TB Years
DNN Intermediate weights/activations Read & Write 10¹–10² TB Minutes
DNN Model weights Read & append-only seq. write 10⁻¹–10³ GB Years
GNN Adjacency matrix Read only 10²–10¹ ... Years
GNN Feature vectors Read & append-only 10³ GB–10¹ TB Years
GNN Intermediate data Read & Write 10³–10² ... Minutes
LLM Training-inputs Read only 10³ TB~ Years
LLM Intermediate weights/activations Read & Write 10¹–10³ TB Minutes
LLM KV-Cache Read & append-only 10⁵ TB–10¹ PB Years
LLM Model weights Read & append-only seq. write 10²–10¹ TB Years

2.2 Extending GPU Reach to Storage

2.2.1 CPU-Centric Storage Access

2.2.2 GPU-Centric Storage Access

2.3 Challenges


3. GeminiFS

3.1 CPU-Bypassing via Metadata Embedding

3.1.1 Selective Embedding of Metadata

3.1.2 Embedded Block Map

3.1.3 File Organization

3.2 CPU/GPU Shared NVMe Driver

3.3 GPU-Specific Page Cache

3.4 GPU Programming Model

Table 2 — CPU-side and GPU-side APIs of GeminiFS:

Type Interface
host int Geminifs_init(char *dev_path, char *GPU_ids, int Q_num)
host dev_fd G_open(char *path, uint16 flag, uint64_t cache_capacity, int page_size)
host int G_close(dev_fd fd)
device int G_read(dev_fd fd, void *buf, uint64_t offset, size_t nbyte)
device int G_write(dev_fd fd, void *buf, uint64_t offset, size_t nbyte)
device int G_sync(dev_fd fd)

4. Evaluation

System settings / implementation:

Baselines:

4.1 Comparison with SOTA Solutions

4.2 Performance of Page Cache

4.3 Performance Benefit for LLM Training

Table 3 — Storage access in GPT2-124M training:

Type File Size Access Mode
Model Weights 238 MB Read & Write
Checkpoint 713 MB/Step Append-only seq. write
Activation 57.96 GB Read & Write

5. Conclusion and Future Work


6. System Architecture (synthesized)

        HOST (CPU side)                         GPU side
+--------------------------------+   +---------------------------------+
| User: CPU Runtime              |   | GPU Applications                |
| Kernel:                        |   |   libGemini (POSIX-like API)    |
|   GVDK Helper  ----embeds----> |   |   Metadata/Mapping cache        |
|   Metadata / GVDK File         |   |   (Header + L1/L2 + clusters)   |
|   File System (EXT4)           |   |   GPU Storage Volume Layer      |
|   Block Layer                  |   |   GPU Page Cache (warp-level,   |
|   NVMe Control Block           |   |     constant-time container)    |
|   SNVMe: Admin QP + 64 I/O QPs |   |   I/O Queue Driver + 32 I/O QPs |
+--------------------------------+   +---------------------------------+
         |                                       |
   Mem -- CPU -------- PCIe Gen4 x16 ------- NVMe SSD (Optane 5800X)
                                                 ^
                                    Device DMA <-+-> GPU HBM (direct data plane)

Control plane: GPU I/O QPs set up in parallel with host via SNVMe.
Data plane:    NVMe DMAs directly to/from GPU HBM; CPU is off the I/O path.

System Category How GeminiFS positions
GPUfs / syscalls-for-GPUs CPU-centric POSIX-like Removes CPU bottleneck; 7.33× bandwidth, 79.6-90.9% lower latency
ActivePointers CPU-centric mmap over GPUfs Still CPU-orchestrated; GeminiFS bypasses CPU
Dragon CPU-centric (UVM page fault) CPU stays on path; GeminiFS does not
GDS / GPUDirect Storage CPU-centric, direct DMA data plane Still CPU-initiated, non-POSIX, 128 ops/batch cap; GeminiFS 6.2× bw at high parallelism, 17% of GDS latency at 1024 threads, file interface
BaM GPU-centric, raw block device No file system; GeminiFS reuses BaM's GPU I/O-queue driver but adds companion FS at only ~4.6% bw / ~4.8% latency cost
GMT GPU-centric, 3-tier (adds host mem) Extends BaM's hierarchy; GeminiFS focuses on file abstraction
SPDK / BlobFS User-level block stack/FS for CPUs Analog of BaM's problem; metadata isolation hinders sharing
DLRover-RM Fast async checkpoint baseline GeminiFS cuts runtime 12%, checkpoint write 75% vs it
XRP In-kernel eBPF storage functions Cited re: the raw-device abstraction problem

8. Limitations


9. Cross-Cutting Take-Aways

Take-away Evidence
CPU on the I/O path collapses under GPU parallelism GPUfs >190 µs at low threads, +250% at 1024; GDS stuck ~160 µs
GPU-direct file access nearly matches raw-device BaM GeminiFS within 4.6% bw / 4.8% latency of BaM
GPU parallelism saturates NVMe even at 4K GeminiFS hits NVMe peak at 1024 threads; 6.2× GDS at 128-512 threads
Prefetch is decisive for the page cache 30.2%/28% -> ~2.4×/2.34× of theoretical with prefetch
Warp-level + constant-time container scales the cache Page cache peaks ~650 GB/s (>640 GBps)
Larger pages reach peak page-cache bandwidth 4K->1024K: write 45.8->120.1 GB/s, read 48.4->121.4 GB/s
End-to-end LLM training benefits -25% runtime (HBM activations), -94.5% (offloaded) vs native