RDMA Networking
Alluxio supports several high-speed network technologies commonly deployed in AI and HPC clusters. This page covers configuration and performance guidance for each supported option.
Native RDMA over InfiniBand or RoCE
✅ Supported
Zero-copy data transfer, bypasses kernel network stack entirely
IPoIB (IP over InfiniBand)
✅ Supported
Standard TCP/IP over IB hardware
AWS EFA
Not supported
iWARP
Not supported
Native RDMA
Note: This feature is experimental since AI-3.9-16.0.0.
Overview
Native RDMA bypasses the kernel network stack and enables zero-copy data transfer between Alluxio workers and clients. Compared to IPoIB (which carries TCP/IP over InfiniBand hardware), it delivers significantly lower latency and higher throughput for cached reads.
Scope
Read I/O only; write paths continue to use TCP.
InfiniBand and RoCE only; AWS EFA and iWARP are not supported.
Recommended for
Clusters where workers and clients are connected via InfiniBand or RoCE
Latency-sensitive workloads (e.g., model loading, inference serving)
Maximizing Alluxio cache read throughput
Prerequisites
Hardware
InfiniBand or RoCE-capable NICs (e.g., Mellanox/NVIDIA ConnectX-4 or later)
InfiniBand fabric or RoCE-enabled Ethernet switches
RDMA NICs installed on all worker nodes and all client/FUSE nodes in the data path
AWS EFA and iWARP adapters are not supported for native RDMA
Software
Linux OS with RDMA kernel modules loaded (kernel 5.0+ recommended)
MLNX OFED ≥ 25.10 (or DOCA-OFED) or upstream
rdma-core≥ 35OpenUCX 1.20 or higher installed on all nodes, with an identical UCX version across all worker and client nodes
JUCX (Java bindings for UCX) — bundled with Alluxio
Environment Verification
Before enabling Alluxio native RDMA, verify that the RDMA environment is correctly configured.
Verify RDMA devices and port status
Expected output (key fields):
Verify:
stateisPORT_ACTIVElink_layerisInfiniBand(native IB) orEthernet(IB NIC in Ethernet mode using RoCE)
If ibv_devinfo is not found, install rdma-core or MLNX_OFED drivers.
Install and verify UCX
Alluxio uses OpenUCX for native RDMA transport. Install UCX 1.20 or later on all worker and client nodes.
Via package manager (Ubuntu/Debian):
Via package manager (RHEL/CentOS):
Or build from source for the latest version:
Configure flags explained:
--with-verbs
Enable InfiniBand Verbs transport (required for RDMA data transfer)
--with-rdmacm
Enable RDMA Connection Manager (required for connection establishment)
Verify installation:
Expected output: UCX version 1.20 or later.
Verify that RDMA transports are available:
Expected output: one or more transport devices listed. If none appear, the RDMA development libraries were not found during UCX build — reinstall libibverbs-dev and librdmacm-dev, then rebuild UCX.
For more installation options, see the OpenUCX documentation.
Verify bRPC environment (recommended)
bRPC provides RDMA-accelerated metadata RPCs and is recommended for best performance in RDMA environments. Verify the bRPC native library is available:
Expected output: one or more libbrpc*.so files. If not found, install the bRPC native library separately. Native RDMA data transfer (UCX) works without bRPC, but metadata RPCs will fall back to gRPC over TCP.
Quick Start
This section provides the minimum steps to enable native RDMA. See Configuration for advanced tuning.
Add the following to alluxio-site.properties on all worker and client nodes:
Restart all worker and client processes. Verify the worker RDMA service is running:
Important: When
alluxio.network.rdma.data.enabled=true, clients use RDMA exclusively for data reads — there is no automatic fallback to TCP. If a worker's RDMA port is unreachable, the read operation fails (or retries on other replica workers if available).
Configuration
Data Acceleration
alluxio.network.rdma.data.enabled
false
Enables RDMA data transfer on workers and clients
alluxio.network.rdma.data.bind.device
(unset)
RDMA Verbs device name(s) for the data plane (e.g., mlx5_0:1). Device names are obtained via ibv_devinfo (format: device_name:port_number). Multiple devices can be comma-separated (e.g., mlx5_0:1,mlx5_1:1). If a single device is specified, Alluxio auto-resolves the RDMA listener address from that NIC. If unset, UCX auto-selects all available RDMA devices.
alluxio.network.rdma.data.bind.host
0.0.0.0
Bind host/IP for the worker RDMA data listener. This is mainly used when bind address auto-resolution from alluxio.network.rdma.data.bind.device is not desired or when multiple RDMA devices are configured.
alluxio.network.rdma.data.hostname
(unset)
Hostname or IP that clients use to connect to the worker RDMA data service. If unset, the worker's general hostname is used.
alluxio.network.rdma.data.port
59999
Port for the worker RDMA data service.
In most single-NIC deployments, the defaults work without extra address configuration. For multi-NIC environments, set
alluxio.network.rdma.data.hostnameto the client-reachable IP, usealluxio.network.rdma.data.bind.deviceto pin the RDMA NIC, and overridealluxio.network.rdma.data.bind.hostif you do not want the bind address inferred from a single RDMA device.
Buffer Pool
Native RDMA data transfer uses a registered memory buffer pool. Tune these settings when workloads need higher RDMA concurrency, larger prefetch capacity, or lower first-read latency.
alluxio.network.rdma.data.buffer.pool.initial.size
256MB
Initial size budget of the RDMA registered buffer pool at startup.
alluxio.network.rdma.data.buffer.pool.prewarm.size
256MB
Amount of RDMA registered buffer pool memory to pre-warm in the 4MB chunk bucket at startup. This must not exceed alluxio.network.rdma.data.buffer.pool.initial.size.
alluxio.network.rdma.data.buffer.pool.max.size
8GB
Maximum size of the RDMA registered buffer pool. The pool does not expand beyond this limit, and RDMA prefetching stops when the pool is full.
RDMA Prefetcher
The RDMA prefetcher reuses the legacy async prefetcher configuration keys. These properties have the same sequential-read semantics as the standard client-side async prefetcher, but RDMA uses them to control RDMA chunk prefetching instead of TCP-based async prefetch reads.
For the general async prefetch behavior, see File Reading.
The following properties are the recommended RDMA prefetcher tunables. Other inherited async prefetcher properties are not recommended for customization unless advised by Alluxio support.
alluxio.user.position.reader.streaming.async.prefetch.max.part.number
8
Maximum number of RDMA chunks to prefetch ahead for each stream. This is shared with the legacy async prefetcher.
alluxio.user.position.reader.streaming.async.prefetch.file.length.threshold
0
If a file length is less than or equal to this value, the RDMA prefetcher attempts to prefetch the whole file immediately. Values less than or equal to 0 disable this small-file behavior.
Recommended tuning:
For large-file reads, if client and worker memory resources are sufficient, set
alluxio.user.position.reader.streaming.async.prefetch.max.part.number=16and increasealluxio.network.rdma.data.buffer.pool.max.size=16GBaccordingly.For small-file reads through FUSE, enable
alluxio.fuse.open.read.status.cache.enabled=trueto reduce repeated read-only open metadata RPCs, and setalluxio.user.position.reader.streaming.async.prefetch.file.length.thresholdto the largest file size you want RDMA to prefetch immediately.
Metadata Acceleration
alluxio.network.rdma.metadata.enabled
false
Enables the experimental worker RDMA metadata path. When disabled, workers do not start the metadata transport server and clients use the existing RPC path.
alluxio.network.rdma.metadata.port
29995
Port for the worker RDMA metadata service.
alluxio.network.rdma.metadata.device
(unset)
RDMA device used by the metadata service. When unset, the metadata transport chooses its default active device.
alluxio.network.rdma.metadata.ib.port
1
InfiniBand port used by the metadata service.
alluxio.network.rdma.metadata.gid.index
-1
GID index used by the metadata service. Negative means the metadata transport chooses its default GID.
The worker RDMA metadata service uses the worker host/bind host for endpoint addressing.
alluxio.network.rdma.metadata.portcontrols the service port, whilealluxio.network.rdma.metadata.*controls which RDMA device/port/GID the native metadata transport uses.
Diagnostics
alluxio.network.rdma.data.trace.enabled
false
Enable detailed per-operation RDMA data transport trace statistics in logs.
alluxio.network.rdma.data.trace.print.interval.ms
20s
Interval for printing RDMA data transport trace statistics when tracing is enabled.
Benchmark
Alluxio provides an RDMA benchmark CLI command to verify connectivity and measure raw performance before running production workloads.
Command Help
Available flags:
--mode
(auto-inferred)
Benchmark mode: server or client (auto-inferred from --remote-ip)
--local-ip
(auto-detected)
Local IP address
--local-port
20600
Local port
--delay-us
0
Simulated server-side processing delay in microseconds
--remote-ip
-
Remote IP address (client mode only, required)
--remote-port
20600
Remote port (client mode only)
--case
all
Test case: basic, latency, stress, stress-write, stress-read, all
--duration
10
Benchmark duration in seconds
--numjobs
-1
Number of concurrent threads (-1 for auto-adjustment based on payload size)
--iodepth
-1
Max in-flight operations per thread (-1 for auto-adjustment based on payload size)
Start Server
Start the benchmark server on one node:
Example output:
Run Latency Test
Start the client on another RDMA-connected node and run a latency test:
Example output:
Run Stress Read Test
Run a stress read test with custom concurrency parameters:
Example output:
Troubleshooting
No RDMA devices found
If the directory is empty:
Verify the NIC is physically installed:
lspci | grep -i mellanoxVerify RDMA kernel modules are loaded:
lsmod | grep ib_coreInstall or reinstall the MLNX_OFED driver
RDMA port not in ACTIVE state
Check physical cable connections
Verify switch configuration
Run
ibstatfor detailed adapter and port status
UCX initialization failure
Verify UCX is installed:
ucx_info -vCheck if
UCX_NET_DEVICESis set to the correct device (e.g.,mlx5_0:1)Ensure
LD_LIBRARY_PATHincludes the UCX library path
RDMA operation timeouts
Increase
alluxio.network.rdma.data.operation.timeout.ms(e.g.,60s)Check network health via
ibstat, verify port state is ACTIVEVerify the worker RDMA port is reachable from client nodes
Buffer pool exhaustion
If frequent allocation failures occur, increase
alluxio.network.rdma.data.buffer.pool.max.sizeIf first-read latency spikes are observed, increase
alluxio.network.rdma.data.buffer.pool.initial.size
RDMA port busy after restart
The RDMA connection manager port may remain busy for up to 10 seconds after process exit. The server retries automatically with 1-second backoff.
If the port remains stuck, verify no other process is using it:
Client RDMA reads fail
RDMA does not fall back to TCP. Ensure all target workers have
alluxio.network.rdma.data.enabled=trueand the RDMA port is reachable.Check client logs for RDMA connection errors.
IPoIB
Overview
InfiniBand (IB) is a high-bandwidth, low-latency interconnect commonly deployed in AI training clusters. Alluxio supports IP over InfiniBand (IPoIB), which runs the standard TCP/IP stack over IB hardware. Because Alluxio communicates over standard TCP/IP sockets, no code changes or special drivers are required — you only need to load the IPoIB kernel module and bind Alluxio services to the IB network interface.
Applies to: NICs configured with InfiniBand link layer (verified via
ibstat | grep "Link layer"). If your ConnectX adapter is running in Ethernet link layer mode, it operates as a standard high-speed Ethernet NIC — Alluxio works with it natively with no IPoIB configuration needed.
IPoIB vs. Native RDMA
Protocol
TCP/IP over IB hardware
Bypass kernel, zero-copy direct memory access
Alluxio support
✅ Fully supported
✅ Fully supported
Typical throughput
100–400 Gbps (hardware-dependent)
Lower latency, similar peak bandwidth
Prerequisites
Hardware
Mellanox/NVIDIA ConnectX-4 or later network adapter
InfiniBand switch fabric
Software
Load the IPoIB kernel module and verify that the IB drivers and interfaces are active:
MTU Configuration
IPoIB operates in one of two transport modes that determine the maximum supported MTU:
Datagram (UD)
2,044 bytes
Cloud-managed IB (Azure HPC, AWS EFA)
Connected (RC)
65,520 bytes
On-premises InfiniBand fabrics
Check the current mode before setting MTU:
If mode is datagram (common on cloud IPoIB), the hardware limit is 2,044 bytes. Setting MTU to 9000 will fail with RTNETLINK answers: Invalid argument — this is expected, not an error. Alluxio works correctly at MTU 2,044.
If mode is connected (typical on-premises), set MTU to 9000 for maximum throughput:
To persist the MTU setting across reboots, add it to your network configuration (e.g., /etc/network/interfaces or a systemd-networkd unit file).
Binding Alluxio to the IB Interface
The hot data path in Alluxio runs between workers and FUSE / client nodes — this is where IB bandwidth matters. The coordinator handles background tasks (metadata operations, background jobs) and is not on the data-serving critical path, so it does not need to run on IB-equipped hardware.
For general NIC binding configuration, see Cluster Management. The steps below extend that guidance specifically for IPoIB deployments.
IPoIB can be exposed to pods through:
NVIDIA Network Operator: Automates MLNX_OFED driver deployment and SR-IOV device plugin configuration
Multus CNI: Attaches a secondary IB network interface to Alluxio pods
SR-IOV Device Plugin: Exposes IB Virtual Functions (VFs) as pod resources
Refer to NVIDIA Network Operator documentation and Multus CNI for setup instructions. Once the IB interface is available inside the pod, apply the same alluxio-site.properties settings from the Bare-Metal tab.
Worker Configuration
Add the following to alluxio-site.properties on each worker node. Replace ib0 with your actual IB interface name (check with ip addr show):
Verify after starting the worker:
FUSE / Client Configuration
For nodes running Alluxio FUSE or direct client access, bind the data channel to the IB interface:
For FUSE mount options and prerequisites (including allow_other configuration), see POSIX API (FUSE).
Coordinator Configuration
The coordinator does not need to run on IB-equipped hardware. Set alluxio.coordinator.hostname to the coordinator node's reachable IP address (typically its Ethernet interface):
Verify End-to-End Connectivity
After starting all services, confirm that worker–client data traffic flows over the IB interface:
Reference Performance
The following results are from an example test environment using IPoIB with Alluxio running on bare metal.
Test Environment
Network
2 × 200 Gbps IPoIB (bonded), measured throughput: 360 Gbps
NIC
Mellanox ConnectX-7 (IB link layer, 200 Gbps)
Cache disk
RAID0, 2 × NVMe, read/write: ~12 GB/s
UFS
Object storage via 100 Gbps dedicated line
Deployment
Bare metal, FUSE and worker co-located
Network Layer (iperf3)
Single IB port
180 Gb/s
Bonded (2 × 200 Gbps IPoIB)
360 Gbps
Alluxio Read Throughput (Hot Read, Large Files, 32 Concurrent)
1 FUSE + 1 worker, 1 × NVMe
6.3 GB/s
1 FUSE + 1 worker, RAID0 2 × NVMe
12.5 GB/s
3 FUSE + 3 workers, RAID0 2 × NVMe
36.6 GB/s
Observation: With 3 workers and RAID0 NVMe cache, Alluxio hot read throughput approaches the raw disk bandwidth ceiling (~36 GB/s vs. 36 GB/s theoretical RAID0 maximum), confirming that the IPoIB network is not the bottleneck at this scale.
Troubleshooting
Worker not binding to IB interface
Run
ip addr show ib0to confirm the interface has an IP address assigned.Verify that
alluxio.worker.rpc.bind.devicematches the exact interface name (case-sensitive).Check
alluxio-worker.logforbinderrors.
Workers serve data over Ethernet instead of IB
Verify that
alluxio.worker.data.bind.device=ib0is set on each worker node and that the worker process was restarted after the change.Verify that
alluxio.user.network.data.bind.device=ib0is set on the FUSE / client node.
ip link set ib0 mtu 9000 fails with RTNETLINK answers: Invalid argument
Your IPoIB interface is in datagram mode, which caps MTU at 2,044 bytes. This is common on cloud-managed InfiniBand (Azure HPC, AWS EFA). Alluxio works correctly at the default MTU — no action needed. See MTU Configuration.
Low throughput despite IPoIB
Run
iperf3 -c <other node ib0 IP>between nodes to establish a network-layer baseline.Check
cat /sys/class/net/ib0/mode— datagram mode (MTU 2,044) will limit peak throughput compared to connected mode (MTU 9,000).Confirm all services are communicating over the IB interface:
ss -tnp | grep <ib0 IP>.
IB interface missing after reboot
MTU and bonding settings may not have been persisted. Add them to the system network configuration.
Verify MLNX_OFED drivers load on boot:
lsmod | grep ib_core
Last updated