test: added device filtering for complex server config#8
Draft
mpashkovskii wants to merge 4 commits into
Draft
Conversation
mpashkovskii
force-pushed
the
tests/verbs-ofi_rxd-mem-transfer
branch
from
April 23, 2026 18:36
7b7b810 to
58dc24b
Compare
mpashkovskii
force-pushed
the
tests/verbs-ofi_rxd-mem-transfer
branch
from
April 23, 2026 18:49
58dc24b to
1da0149
Compare
…ofi_rxd-mem-transfer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR is only for testing/verification on a specific cloud provider and server. It introduces
NIXL_LIBFABRIC_DEVICE_FILTERenvironment variable for explicit NIC selection, device deduplication, NUMA rail selection after filtering, and ensures GPU detection works for non-EFA providers.Problem
On the AMD MI300X server I used with many network interfaces (8× Broadcom bnxt_re 400G + 2× Mellanox mlx5 100G), the libfabric plugin had several issues preventing data transfers:
1. No way to select a specific NIC
On machines with 10+ RDMA-capable devices, there was no mechanism to select which NIC(s) to use. Our test environment has 8× Broadcom bnxt_re NICs (400G each) that have RDMA capability but no IP addresses assigned — we do not have the access to configure IPs on those interfaces. Only the 2× Mellanox mlx5 NICs have routable IPv4 addresses. Without filtering, the plugin would attempt to use all 10 devices, failing on the 8 that lack IP connectivity for RDMA CM address resolution.
6. Device deduplication was missing
fi_getinforeturns multiplefi_infoentries per device (one per capability combination). Without deduplication, the same device name appeared multiple times in the device list, leading to redundant rail creation attempts.7. NUMA rail selection assumed all topology devices had rails
buildNumaDataRails()iterated overtopology->getAllDevices()using indices as rail IDs. After device filtering, the topology still contained all devices but only filtered devices had rails, causing index mismatches and "no PCIe switches assigned" errors.Setup
Dockerfile:
docker-compose.yaml:
Testing
Tested on two AMD MI300X servers (8× GPUs each) connected via Mellanox ConnectX-6 Dx (
mlx5_1→ens51f1np1,10.162.224.0/20subnet) usingverbs;ofi_rxmwith native RDMA andFI_HMEMfor GPU memory.The machines have 8× Broadcom bnxt_re NICs (400G RoCE) with no IPv4 addresses assigned — only IPv6 link-local — and we do not have access to configure IPs on those interfaces. The 2× Mellanox mlx5 NICs are the only ones with routable addresses.
NIXL_LIBFABRIC_DEVICE_FILTERis used to selectmlx5_1explicitly, which is a workaround for this topology but demonstrates the filtering mechanism that would be needed on any heterogeneous multi-NIC system.Target (chi-mi300x-004):
target-rxm.log
Initiator (chi-mi300x-003):
initiator-rxm.log
Results:
Discovered 10 InfiniBand (verbs;ofi_rxm) devices, filtered to 1 viaDEVICE_FILTERFI_HMEMsupport detected:Using provider with FI_HMEM support for rail 0fabric_attr->name IB-0xfe80000000000000System runtime: ROCr for 8 AMD GPU(s)FI_HMEM:CreateBufferChunk on Rail 0 successfully created buffer chunk(32 MB, mr_key assigned)Target data verification passed (zeros found in last 4 tensors)Initiator final data verification passedDEVICE_FILTER