Skip to content

feat: add --rdma=cpu|gpu flag, bump minio-go to v7.2.0#491

Draft
harshavardhana wants to merge 1 commit into
minio:masterfrom
harshavardhana:add-rdma-flag
Draft

feat: add --rdma=cpu|gpu flag, bump minio-go to v7.2.0#491
harshavardhana wants to merge 1 commit into
minio:masterfrom
harshavardhana:add-rdma-flag

Conversation

@harshavardhana

Copy link
Copy Markdown
Member

Summary

  • Bump github.com/minio/minio-go/v7 from v7.1.0 to v7.2.0 (adds
    S3-over-RDMA dispatch via Options.EnableRDMA and
    {Put,Get}ObjectOptions.RDMABuffer).
  • New --rdma string flag on the I/O commands (visible on
    warp put / warp get / anything inheriting ioFlags).
    • --rdma=cpu allocates a per-op host buffer.
    • --rdma=gpu allocates a CUDA device buffer (requires
      -tags=rdma build, links libcudart).
    • Empty (default) disables RDMA — current HTTP path is unchanged.
  • Per-op buffer management factored into pkg/bench/rdmabuf.go. GPU
    helpers are gated by the existing rdma build tag
    (rdmabuf_rdma.go vs rdmabuf_stub.go); no separate cuda tag.

Motivation

Enables warp-driven validation of MinIO AIStor's GPU-Direct RDMA
S3 path end-to-end (both host-pinned and GPU memory), against a
cluster running the matching libp2p_rdma.so internode credit
fix that landed alongside.

How to test

# HTTP (unchanged default behaviour)
go build .
./warp put --host h1:9000 --access-key K --secret-key S --obj.size 4MiB

# RDMA over host memory
go build .
./warp put --host h1:9000 ... --rdma=cpu      # errors with the stub
                                              # if not built with -tags=rdma
go build -tags=rdma .
./warp put --host h1:9000 ... --rdma=cpu

# GPU-Direct RDMA (needs CUDA + libminiocpp on link path)
go build -tags=rdma .
./warp put --host h1:9000 ... --rdma=gpu
./warp get --host h1:9000 ... --rdma=gpu

Types of changes

  • New feature (non-breaking change which adds functionality)

Checklist

  • go build ./... passes (default build path)
  • go build -tags=rdma . documented (requires libcudart +
    libminiocpp.so on the link path)
  • No change to default (HTTP) PUT/GET paths
  • minio-go bumped to v7.2.0 via go mod tidy

@harshavardhana harshavardhana marked this pull request as draft May 29, 2026 06:13
@klauspost

Copy link
Copy Markdown
Collaborator

#490 fixes lint/vuln

Bumps github.com/minio/minio-go/v7 from v7.1.0 to v7.2.0 which adds
S3-over-RDMA dispatch via Options.EnableRDMA and {Put,Get}Object
Options.RDMABuffer.

--rdma is a string flag accepting "cpu" or "gpu"; empty disables.
The per-op buffer alloc is factored into pkg/bench/rdmabuf.go and
the GPU path is gated behind the rdma build tag — no separate cuda
tag.

  go build .              # default; --rdma=gpu surfaces a clear
                          # "requires -tags=rdma" error via the stub.
  go build -tags=rdma .   # both --rdma=cpu and --rdma=gpu work
                          # (libcudart + libminiocpp on the link path)

For PUT the generator output is staged into the host buffer (CPU
mode) or into a CUDA device buffer via cudaMemcpy H2D (GPU mode).
For GET the server RDMA-writes into a per-op CPU or GPU sink buffer;
Stat() carries the transferred byte count for verification.

Default HTTP PUT/GET paths are unchanged.
Comment thread pkg/bench/rdmabuf_rdma.go
"unsafe"
)

// allocRDMAGPU allocates a CUDA device buffer of size bytes. The

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const HasRDMA = true - so you can easily gate it for non-builds.

I assume we'll need a special release for this version once ready.

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