mirror of
https://github.com/deepseek-ai/3FS.git
synced 2026-11-05 00:47:47 +00:00
[PR #407] feat(gdr): GPU Direct RDMA (GDR) support for direct storage-to-GPU transfers. #420
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
deepseek-ai/3FS#420
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/deepseek-ai/3FS/pull/407
Author: @SimonCqk
Created: 4/2/2026
Status: 🔄 Open
Base:
main← Head:features/gdr-integration📝 Commits (4)
81ee9c6feat(gdr): Add GPU Direct RDMA (GDR) support for direct storage-to-GPU transfers36c7c67Enable GDR main path0ea5a9cRefine GDR ownership and data pathce56194Simplify GDR memory registration path📊 Changes
54 files changed (+5475 additions, -242 deletions)
View changed files
📝
.github/workflows/build.yml(+26 -1)📝
CMakeLists.txt(+1 -0)📝
cmake/CLangFormat.cmake(+2 -2)➕
cmake/Cuda.cmake(+89 -0)➕
docs/gdr-integration.md(+637 -0)📝
src/client/storage/CMakeLists.txt(+4 -0)📝
src/client/storage/StorageClient.cc(+116 -0)📝
src/client/storage/StorageClient.h(+90 -7)📝
src/client/storage/StorageClientImpl.cc(+90 -20)📝
src/client/storage/StorageClientImpl.h(+4 -0)📝
src/common/CMakeLists.txt(+10 -0)➕
src/common/cuda/CudaMemory.cc(+254 -0)➕
src/common/cuda/CudaMemory.h(+50 -0)📝
src/common/net/ib/RDMABuf.cc(+41 -2)📝
src/common/net/ib/RDMABuf.h(+88 -16)📝
src/fbs/storage/Common.h(+1 -0)📝
src/fuse/CMakeLists.txt(+3 -0)📝
src/fuse/FuseClients.cc(+27 -38)📝
src/fuse/FuseClients.h(+11 -0)📝
src/fuse/FuseOps.cc(+14 -15)...and 34 more files
📄 Description
See design doc plan: #402
Changes:
Add GPU Direct RDMA (GDR) support to 3FS usrbio, enabling direct data transfers between storage and GPU vRAM without host memory bounce buffers.
API
_deviceAPI variants:hf3fs_iovcreate_device,hf3fs_iovopen_device,hf3fs_iovwrap_deviceiovcreate_devicealways available with transparent host fallback;iovopen_device/iovwrap_devicerequire
HF3FS_GDR_ENABLEDhf3fs_iovsync(iov, direction)for GPU↔NIC coherency fencinghf3fs_gdr_available(),hf3fs_gdr_device_count(),hf3fs_iov_mem_type()RDMA Layer
RDMABufAcceleratorfor GPU memory RDMA registration vianvidia_peermemRDMABufUnifiedas polymorphic host/GPU RDMA buffer abstractionAcceleratorMemoryRegionCachefor MR caching with per-device evictionAcceleratorMemoryBridgefor cross-process CUDA IPC import/exportIBSocket::RDMAReqBatch::add()andCallContext::RDMATransmission::add()overloads forRDMABufUnifiedStorageClient
IOBufferwrapsRDMABufUnifiedinstead of plainRDMABufregisterGpuIOBuffer()with fallback toRDMABuf::createFromUserBufferFuse Daemon
IovTableparses.gdr.d{N}symlink keys andgdr://v1/device/{id}/size/{size}/ipc/{hex}URIsGpuShmBuf/GpuShmBufForIOfor daemon-side imported GPU buffer managementIoBufForIO=std::variant<ShmBufForIO, GpuShmBufForIO>withstd::visitdispatch inIoRing::process()lookupBufstwo-phase locking:shmLockthengpuShmLock(never nested)Build & Infra
cmake/Cuda.cmakefor CUDA toolkit detection andHF3FS_GDR_ENABLEDflagDocs
docs/gdr-integration.md: user-facing guide with prerequisites, API reference, 3 complete usageexamples, runtime behavior, and known limitations
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.