概念对齐
verbs 是 RDMA 的底层编程接口,目的是通过一组 ibv_* 调用把用户读写任务(WR)提交到队列(QP),网卡按这些请求在不经过内核协议栈的前提下执行 SEND/RECV、RDMA READ/WRITE、原子操作 等动作,并把结果以完成事件(CQE)的形式回报给应用。
▸ 类比:BSD sockets 是用 TCP/UDP 传字节的系统调用集合,verbs 是用 RDMA 传内存的系统调用集合。sockets 交给内核协议栈;verbs 交给 RNIC 的硬件队列。
InfiniBand verbs 规范定义 HCA 能执行的动作(post、poll、create、modify等),因此在 Linux 用户态库中呈现为一组 ibv_* API。而不同厂商通过 provider(如 libmlx5、librxe)实现背后的具体硬件/软件行为,但对应用暴露统一的 verbs 抽象。
- 用户态库:libibverbs(rdma-core)+ 各 provider(libmlx5, librxe)。
- 字符设备:/dev/infiniband/uverbsX、rdma_cm 等承接与内核的 ioctl/事件通道。
这也是为什么混装发行版包与第三方 OFED 会报错“符号找不到”,因为应用链接的 lib 库与内核驱动/provider 实现必须匹配。