fi_verbs(7)
π
fi_verbs(7) β The Verbs Fabric Provider, but make it group-chat πΈ
Okay bestie, this is the fi_verbs manual page from Libfabric v2.5.1, and itβs lowkey iconic because it lets OFI apps run over verbs hardware. Letβs get into it π
π NAME π
fi_verbs β The Verbs Fabric Provider
π¦ OVERVIEW π¦
The verbs provider lets applications that use OFI run over any verbs hardware β think Infiniband, iWarp, etc. It uses the Linux Verbs API for network transport and translates OFI calls into the appropriate verbs API calls. It uses librdmacm for communication management and libibverbs for other control and data transfer operations. No cap, thatβs the whole vibe π«Ά
π REQUIREMENTS π
To successfully build and install the verbs provider as part of libfabric, it needs these packages:
libibverbslibibverbs-devellibrdmacmlibrdmacm-devel
You may also want to look into any OS-specific instructions for enabling RDMA. For example, RHEL has instructions in their documentation for enabling RDMA π
The IPoIB interface should be configured with a valid IP address. This is a requirement from librdmacm β fr fr, donβt skip it.
π₯ SUPPORTED FEATURES π₯
The verbs provider supports a subset of OFI features.
Endpoint types
FI_EP_MSG, FI_EP_DGRAM (beta), FI_EP_RDM.
FI_EP_RDM is supported via OFI RxM and RxD utility providers which are layered on top of verbs. To the app, the provider name string would appear as verbs;ofi_rxm or verbs;ofi_rxd. Please refer to the man pages for RxM (fi_rxm.7) and RxD (fi_rxd.7) to know about the capabilities and limitations for the FI_EP_RDM endpoint π¦
Endpoint capabilities and features
MSG endpoints
FI_MSG, FI_RMA, FI_ATOMIC and shared receive contexts β¨
DGRAM endpoints
FI_MSG
Modes
Verbs provider requires applications to support the following modes:
FI_EP_MSG endpoint type
FI_MR_LOCALmr mode.FI_RX_CQ_DATAfor applications that want to use RMA. Applications must take responsibility of posting receives for any incoming CQ data.
Addressing Formats
Supported addressing formats include:
- MSG and RDM (internal - deprecated) EPs support:
FI_SOCKADDR,FI_SOCKADDR_IN,FI_SOCKADDR_IN6,FI_SOCKADDR_IB,FI_SOCKADDR_IP - DGRAM supports:
FI_ADDR_IB_UD
Progress
Verbs provider supports FI_PROGRESS_AUTO: asynchronous operations make forward progress automatically π«
Operation flags
Verbs provider supports FI_INJECT, FI_COMPLETION, FI_REMOTE_CQ_DATA, FI_TRANSMIT_COMPLETE.
Msg Ordering
Verbs provider supports the following message ordering:
- Read after Read
- Read after Write
- Read after Send
- Write after Write
- Write after Send
- Send after Write
- Send after Send
Fork
Verbs provider does not provide fork safety by default. Fork safety can be requested by setting IBV_FORK_SAFE, or RDMAV_FORK_SAFE. If the system configuration supports the use of huge pages, it is recommended to set RDMAV_HUGEPAGES_SAFE. See ibv_fork_init(3) for additional details π§
Memory Registration Cache
The verbs provider uses the common memory registration cache functionality thatβs part of libfabric utility code. This speeds up memory registration calls from applications by caching registrations of frequently used memory regions. Please refer to fi_mr(3): Memory Registration Cache section for more details π
π LIMITATIONS π
Memory Regions
Only FI_MR_BASIC mode is supported. Adding regions via s/g list is supported only up to a s/g list size of 1. No support for binding memory regions to a counter. Thatβs the limit, bestie.
Wait objects
Only FI_WAIT_FD wait object is supported only for FI_EP_MSG endpoint type. Wait sets are not supported.
Resource Management
Application has to make sure CQs are not overrun as this cannot be detected by the provider. So likeβ¦ keep an eye on that π
Unsupported Features
The following features are not supported in the verbs provider:
Unsupported Capabilities
FI_NAMED_RX_CTX, FI_DIRECTED_RECV, FI_TRIGGER, FI_RMA_EVENT
Other unsupported features
Scalable endpoints, FABRIC_DIRECT
Unsupported features specific to MSG endpoints
- Counters,
FI_SOURCE,FI_TAGGED,FI_PEEK,FI_CLAIM,fi_cancel,fi_ep_alias, shared TX context,cq_readfromoperations. - Completion flags are not reported if a request posted to an endpoint completes in error.
Fork
The support for fork in the provider has the following limitations:
- Fabric resources like endpoint, CQ, EQ, etc. should not be used in the forked process.
- The memory registered using
fi_mr_reghas to be page aligned sinceibv_reg_mrmarks the entire page that a memory region belongs to as not to be re-mapped when the process is forked (MADV_DONTFORK).
XRC Transport
The XRC transport is intended to be used when layered with the RXM provider and requires the use of shared receive contexts. See fi_rxm(7). To enable XRC, the following environment variables must usually be set: FI_VERBS_PREFER_XRC and FI_OFI_RXM_USE_SRX.
Atomics
Mellanox hardware has limited support for atomics on little-endian machines as the result buffer will be delivered back to the caller in big-endian, requiring the caller to handle the conversion back into little-endian for use. This limitation is exposed in OFI as well, which uses the verbs atomic support directly. Use of atomics on Mellanox cards on little-endian machines is allowed, but users should make note of this verbs limitation and do any conversion necessary π₯
π RUNTIME PARAMETERS π
The verbs provider checks for the following environment variables.
Common variables:
FI_VERBS_TX_SIZEβ Default maximum tx context size (default: 384)FI_VERBS_RX_SIZEβ Default maximum rx context size (default: 384)FI_VERBS_TX_IOV_LIMITβ Default maximum tx iov_limit (default: 4). Note: RDM (internal - deprecated) EP type supports only1FI_VERBS_RX_IOV_LIMITβ Default maximum rx iov_limit (default: 4). Note: RDM (internal - deprecated) EP type supports only1FI_VERBS_INLINE_SIZEβ Maximum inline size for the verbs device. Actual inline size returned may be different depending on device capability. This value will be returned byfi_infoas the inject size for the application to use. Set to0for the maximum device inline size to be used. (default: 256).FI_VERBS_MIN_RNR_TIMERβ Set min_rnr_timer QP attribute (0 - 31) (default: 12)FI_VERBS_CQREAD_BUNCH_SIZEβ The number of entries to be read from the verbs completion queue at a time (default: 8).FI_VERBS_PREFER_XRCβ Prioritize XRC transportfi_infobefore RC transportfi_info(default: 0, RCfi_infowill be before XRCfi_info)FI_VERBS_GID_IDXβ The GID index to use (default: 0)FI_VERBS_DEVICE_NAMEβ Specify a specific verbs device to use by nameFI_VERBS_USE_DMABUFβ If supported, try to useibv_reg_dmabuf_mrfirst to register dmabuf-based buffers. Set it tonoto always useibv_reg_mr, which can be helpful for testing the functionality of thedmabuf_peer_memhooking provider and the corresponding kernel driver. (default: yes)
Variables specific to MSG endpoints
FI_VERBS_IFACEβ The prefix or the full name of the network interface associated with the verbs device (default: ib)
Variables specific to DGRAM endpoints
FI_VERBS_DGRAM_USE_NAME_SERVERβ The option that enables/disables OFI Name Server thread. The NS thread is used to resolve IP-addresses to provider specific addresses (default: 1, ifOMPI_COMM_WORLD_RANKandPMI_RANKenvironment variables arenβt defined)FI_VERBS_NAME_SERVER_PORTβ The port on which Name Server thread listens incoming connections and requests (default: 5678)
Environment variables notes
The fi_info utility would give the up-to-date information on environment variables: fi_info -p verbs -e β
π΅οΈ Troubleshooting / Known issues π΅οΈ
fi_getinfo returns -FI_ENODATA
- Set
FI_LOG_LEVEL=infoorFI_LOG_LEVEL=debug(if debug build of libfabric is available) and check if there are any errors because of incorrect input parameters tofi_getinfo. - Check if
fi_info -p verbsis successful. If that fails, the following checklist may help in ensuring that the RDMA verbs stack is functional:- If libfabric was compiled, check if verbs provider was built. Building verbs provider would be skipped if its dependencies (listed in requirements) arenβt available on the system.
- Verify verbs device is functional:
- Does
ibv_rc_pingpong(available in libibverbs) test work?- Does
ibv_devinfo(available in libibverbs) show the device withPORT_ACTIVEstatus?- Check if Subnet Manager (SM) is running on the switch or on one of the nodes in the cluster.
- Is the cable connected?
- Does
- Does
- Verify
librdmacmis functional:- Does
ucmatosetest (available in librdmacm) work? - Is the IPoIB interface (e.g.
ib0) up and configured with a valid IP address?
- Does
Other issues
When running an app over verbs provider with Valgrind, there may be reports of memory leak in functions from dependent libraries (e.g. libibverbs, librdmacm). These leaks are safe to ignore π«Ά
The provider protects CQ overruns that may happen because more TX operations were posted to endpoints than CQ size. On the receive side, it isnβt expected to overrun the CQ. In case it happens, the application developer should take care not to post excess receives without draining the CQ. CQ overruns can make the MSG endpoints unusable π
π SEE ALSO π
π AUTHORS π
OpenFabrics.
Okay bye bestie, thatβs the whole page π source/version: Libfabric Programmerβs Manual, Libfabric v2.5.1 Β· date: 2025-07-30 π
π¦ where this page comes from
- centos-stream 10: libfabric-devel 2.5.1-1.el10 Β· BSD-2-Clause OR GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms