Skip to content

fuse: add GPU Direct Storage (GDS) support - #198

Open
cding-ddn wants to merge 2 commits into
redfs-ubuntu-noble-6.8.0-58.60from
ubuntu-noble-6.8.0-58.60-gds
Open

fuse: add GPU Direct Storage (GDS) support#198
cding-ddn wants to merge 2 commits into
redfs-ubuntu-noble-6.8.0-58.60from
ubuntu-noble-6.8.0-58.60-gds

Conversation

@cding-ddn

Copy link
Copy Markdown
Collaborator

Integrate with nvidia-fs to pass GPU buffer RDMA information to the filesystem server for direct GPU-to-storage transfers via NVIDIA GDS.

@cding-ddn
cding-ddn force-pushed the ubuntu-noble-6.8.0-58.60-gds branch 2 times, most recently from 4bff1d7 to fcdff22 Compare August 19, 2026 08:16
@cding-ddn cding-ddn changed the title redfs: add GPU Direct Storage (GDS) support fuse: add GPU Direct Storage (GDS) support Aug 19, 2026
@hbirth

hbirth commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

LGTM
But this is going to be a lot of fun with iomap in newer kernels ... unless you want to do this exclusively for DIO

@cding-ddn could you add a bit more information about how this is supposed to be working (conceptual part and what it is good for) in the commit message?

If I understand correctly we use the fuse just as a trigger interface for redfs to interact with the real data via the nvidia interface? ... so basically an external 'has pages'.

Integrate with nvidia-fs to pass GPU buffer RDMA information to the
filesystem server for direct GPU-to-storage transfers via NVIDIA GDS.
GDS transfers data between GPU memory and storage through RDMA without
CPU bounce buffers. This reduces host-memory use, latency, and CPU
overhead for GPU workloads.

- Negotiate GDS capability during filesystem initialization.
- Obtain GPU RDMA information from nvidia-fs.
- Pass that RDMA information to the server in read and write
  request extensions.
Extensions were copied via the payload buffer, sharing the same buffer
as the page payload. This caused an OOPS when the combined size of
extensions and write I/O exceeded fuse_max_write for fuse over uring.
The old kernel code had no such issue because its extensions were used
by FUSE requests without page payloads.

Since fuse_uring_req_header is page-aligned, the solution is to add a
dedicated 512-byte ext_in[] buffer for extensions (referred to as
"new extension" in the code).

Additionally, fix the GDS read/write code to skip page copy and handle
GDS read replies correctly.
@cding-ddn
cding-ddn force-pushed the ubuntu-noble-6.8.0-58.60-gds branch from 56b584f to 484a26f Compare August 31, 2026 09:18
@cding-ddn

Copy link
Copy Markdown
Collaborator Author

LGTM But this is going to be a lot of fun with iomap in newer kernels ... unless you want to do this exclusively for DIO

@cding-ddn could you add a bit more information about how this is supposed to be working (conceptual part and what it is good for) in the commit message?

Done, reworded the commit message

If I understand correctly we use the fuse just as a trigger interface for redfs to interact with the real data via the nvidia interface? ... so basically an external 'has pages'.
Yes, an external 'has pages'. The storage server will do RDMA data transfer directly to the GPU memory

@hbirth

hbirth commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

If you could do the commits with 'git commit -s' to have the 'Signed-Off:' bit ... everything is fine ... code is the same anyway

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants