Skip to content

rdmaproxy: Adding support for Google NICs with netlink-based device discovery and generic driver - #14119

Merged
copybara-service[bot] merged 3 commits into
masterfrom
test/cl962956856
Aug 14, 2026
Merged

rdmaproxy: Adding support for Google NICs with netlink-based device discovery and generic driver#14119
copybara-service[bot] merged 3 commits into
masterfrom
test/cl962956856

Conversation

@copybara-service

Copy link
Copy Markdown

rdmaproxy: Adding support for Google NICs with netlink-based device discovery and generic driver

Addresses #13686.

This PR adds support for Google NICs using the RDMA-Falcon stack. It adds two main features:

  • A new RDMA_NETLINK protocol
  • A generic no-op driver plugin to rdmaproxy

In libibverbs, in the function ibv_get_device_list, uses netlink to discover
devices available on a machine. If netlink is not supported, it will scan the
sysfs tree and collect information about devices there as a fallback. In the
second phase of device discovery, any devices are matched with a known driver.
If a device was found through netlink, a driver is automatically matched, while
devices found with sysfs will have to be matched to a driver through a known
vendor PCI ID table. Google's custom rNICs are not in the rdma-core table, and
so device discovery does not work with the current form of rdmaproxy out of the
box.

All information required by the protocol is gathered during the RDMA sysfs
snapshot collection, before chroot. Then any netlink messages produced by a
guest process will be served using the data collected in the snapshot, so the
sentry never has to make a real netlink request to the kernel.

A generic plugin is needed because in iRDMA, CQ and QPs are actually implemented
as MRs, which already get handled correctly by rdmaproxy core. Furthermore, these
MRs are indexed by virtual addresses, so a guest VA is never dereferenced in kernel
space for CQ/QP operations. Therefore a specialized driver plugin to rdmaproxy is not
required.

Since we still have to register a driver-plugin for each device at registration
time, we instead register a generic plugin which does nothing. We only register
the generic plugin for an allow-list of drivers such as idpf or ice, which are
all managed by the irdma subsystem.

Tested with successful completion of ib_write_bw, ibv_rc_pingpong between two h4d
GCE VMs that achieves parity with un-sandboxed bandwidth rates.

FUTURE_COPYBARA_INTEGRATE_REVIEW=#14021 from TheCoolDinosuar:rdma-proxy 863a49d

Libibverbs, in the function ibv_get_device_list, uses netlink to discover
devices available on a machine. If netlink is not supported, it will scan the
sysfs tree and collect information about devices there as a fallback. In the
second phase of device discovery, any devices are matched with a known driver.
If a device was found through netlink, a driver is automatically matched, while
devices found with sysfs will have to be matched to a driver through a known
vendor PCI ID table. Google's custom rNICs are not in the rdma-core table, and
so device discovery does not work with the current form of rdmaproxy out of the
box.

All information required by the protocol is gathered during the RDMA sysfs
snapshot collection, before chroot. Then any netlink messages produced by a
guest process will be served using the data collected in the snapshot, so the
sentry never has to make a real netlink request to the kernel.

We also add "resource" to the list of pciAttrNames because pcilib needs it to
be exposed to consider a device non-corrupt.
…lugin.

We create a new generic plugin for rdmaproxy. Such a plugin is needed because
in iRDMA, CQ and QPs are actually implemented as MRs, which already get handled
correctly by rdmaproxy core. Furthermore, these MRs are indexed by virtual
addresses, so a guest VA is never dereferenced in kernel space for CQ/QP
operations. Therefore a specialized driver plugin to rdmaproxy is not required.
Since we still have to register a driver-plugin for each device at registration
time, we instead register a generic plugin which does nothing. We only register
the generic plugin for an allow-list of drivers such as idpf or ice, which are
all managed by the irdma subsystem.
@copybara-service copybara-service Bot added the exported Issue was exported automatically label Aug 13, 2026
@copybara-service
copybara-service Bot force-pushed the test/cl962956856 branch 2 times, most recently from 0b8cd6b to cee1372 Compare August 14, 2026 18:26
@copybara-service
copybara-service Bot merged commit 32d6f00 into master Aug 14, 2026
5 of 7 checks passed
@copybara-service
copybara-service Bot deleted the test/cl962956856 branch August 14, 2026 19:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

exported Issue was exported automatically

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants