RDMA-Toy-1 PingPong和概念梳理

概念对齐

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 实现必须匹配

阅读更多

RDMA-Toy-0 环境简单搭建

RXE 是 Linux 上的“软件 RoCE v2 驱动”(内核模块 rdma_rxe),让普通以太网接口具备 RDMA 能力(走内核网络栈)。RoCE v2 将 RDMA 负载封装在 UDP/IPv4 或 UDP/IPv6 中,默认目的端口 4791。设备/驱动通常把到 4791 的流量识别为 RoCE。本文旨在用同一台主机、不依赖硬件 RNIC,搭出一套可复现且稳定的 RDMA 实验环境:rping、perftest均可跑通。

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×