Windyland 内核崩坏

RDMA 编程速记

RDMA 有 QP (Queue Pair)

RDMA 有 PD (protective domain)

RDMA 有 CQ (Completion Queue)

RDMA 有 msg_mr (Message Manager)

为啥以太网网就没?

别问我,自己看api

man 7 rdma_cm

rdma 的man文档里面有不少关于rdma api 的介绍

客户端

同步api:

异步api:

合并api:

服务端

Message Operation

RDMA 数据结构

下面是在 rdma/rdma_cma.h 中定义的数据结构

  • struct rdma_cm_id
  • struct rdma_conn_param
  • enum rdma_cm_event_type
  • enum rdma_port_space
  • struct rdma_addrinfo
  • struct rdma_route
  • struct rdma_ib_addr

IB Verbs

RDMA Verbs下面就是IB的实现

IB 一共有3种连接方式:

  • Unreliable Datagram (UD)
  • Unreliable Connected (UC)
  • Reliable Connected (RC)

可以在 rdma_create_id 时候指定

IB 一共支持常见的OP Code, 有Send、Recv、RDMA READ、 RDMA Write 还有其它。

OPCODE IBV_QPT_UD IBV_QPT_UC IBV_QPT_RC
IBV_WR_SEND X X X
IBV_WR_SEND_WITH_IMM X X X
IBV_WR_RDMA_WRITE   X X
IBV_WR_RDMA_WRITE_WITH_IMM   X X
IBV_WR_RDMA_READ     X
IBV_WR_ATOMIC_CMP_AND_SWP     X
IBV_WR_ATOMIC_FETCH_AND_ADD     X

IB Device API

IB Polling API

IB 数据结构

下面是在 infiniband/verbs.h 中定义的数据结构

  • struct ibv_device IB Device
  • struct ibv_context: IB Context
  • struct ibv_pd: IB Protection Domain
  • struct ibv_mr: IB MR
  • struct ibv_comp_channel: IB Completion Channel
  • struct ibv_cq: IB Completion Queue
  • struct ibv_srq: IB Shared Completion Queu
  • struct ibv_qp: IB Queue Pair
  • struct ibv_qp_init_attr create qp 需要用到
  • struct ibv_send_wr post send 需要用到
  • struct ibv_recv_wr post recv 需要用到

例子

其它讨论