I have two ConnectX-6 Dx NICs in my server running Ubuntu 22.04.
Is there any way to transmit packets directly from one port to another between these two NICs without CPU involvement?
I couldn’t find any documentation on how to use PeerDirect between two ConnectX-6 NICs.
Yes—but not in the way “NIC-to-NIC packet transfer without CPU” is usually imagined. ConnectX-6 Dx supports CPU-bypass data movement, but it relies on RDMA / GPUDirect / PeerDirect-style mechanisms, not a generic NIC-to-NIC forwarding path.
CPU bypass via RDMA (NIC ↔ memory / NIC ↔ NIC logically)
ConnectX-6 Dx provides RDMA & RDMA over Converged Ethernet (RoCE).
RDMA enables direct memory access between endpoints without CPU involvement, minimizing latency and CPU load.
Practically:
NIC A can place data directly into memory on Host B (or GPU memory with GPUDirect).
The CPUs orchestrate setup (queue pairs, memory registration), but data path is CPU-bypassed.
According to your answer:
CPU bypass appears to only work between two hosts. There seems to be no way to implement CPU-bypass packet forwarding between two NICs within a single endpoint.
Did I get it right?