一个进程中可以创建多个 PD,各个 PD 所容纳的资源彼此隔离,无法一起使用。MR(Memory Registration):RDMA 中对内存保护的一种措施,只有将要操作的内存注册到 MR 中,这段内存才能被 RDMA 使用。MR包括了 PD、lkey、rkey、地址、长度、权限这几个属性。PD 是这个 MR 所属的保护域,其他保护域的上下文是不...
8.保护域(PD) 保护域是一种集合,它的内部元素只能与集合内部的其它元素相互作用。这些元素可以是AH、QP、MR、和SRQ。保护域用于QP与内存注册和内存窗口相关联,这是一种授权和管理网络适配器对主机系统内存的访问。PD也用于将给予不可靠数据报(UD)的QP关联到地址处理(AH),这是一种对UD目的端的访问控制。 5.4典...
PD(Protection Domain):在 RDMA 中,PD 是一个容纳了各种资源的“容器”,类似一个租户 ID,将这些资源纳入自己的保护范围内,避免他们被未经授权的访问。一个进程中可以创建多个 PD,各个 PD 所容纳的资源彼此隔离,无法一起使用。 MR(Memory Registration):RDMA 中对内存保护的一种措施,只有将要操作的内存注册到 MR...
应用程序在启动之后会调用一系列的Verbs, 首先会做一些准备工作,比如分配PD、注册MR、创建CQ及QP,这些都是标准的Verbs提供的一些功能,应用程序只需要调用即可. 在此之后,为了向对方发送数据,我们需要知道对方的一些信息,比如对方的GID、对方的QPN number、对方的buffer地址等信息,在这一步对于RoCE类型的网卡来说,它可...
// 注册MR,使用前需先申请内存struct ibv_mr *ibv_reg_mr(struct ibv_pd *pd, void *addr, size_t length, enum ibv_access_flags access)// 数据请求发送接口int ibv_post_send(struct ibv_qp *qp, struct ibv_send_wr *wr, struct ibv_send_wr **bad_wr)Rust提供了以上内存安全问题的高效解决...
除了上述中的 MR 和 MW,RDMA 中的内存管理还和 Protect Domain(简称 PD) 和 Queue Pair (简称 QP) 相关,这里不详细阐述这两个概念。下图详细介绍了,这些概念之间的依赖关系:现有的 RDMA 开发接口,即 InfiniBand Verbs 接口(简称 IBV 接口)并没有显式地展现这种依赖关系,但在实际使用中,任何不按...
struct ibv_mr { struct ibv_context *context; struct ibv_pd *pd; void *addr; size_t length; uint32_t handle; uint32_t lkey; uint32_t rkey; }; RDMA硬件不断地从工作队列(WQ)中去取工作请求(WR)来执行,执行完了就给完成队列(CQ)中放置工作完成通知(WC)。这个WC意思就是Work Completion。表...
struct ibv_mr *ibv_reg_mr(struct ibv_pd *pd, ...); manual page 正如前面提过的,内存区域不一定要在创建保护域后立即注册。由于队列对也注册到保护域,因此创建保护域是早期初始化步骤。 代码语言:javascript 代码运行次数:0 运行 AI代码解释
ibv_mr *mr; struct ibv_send_wr wr, *bad_wr; struct ibv_sge sge; char *buffer; int size = 4096; // 初始化RDMA环境 context = ibv_open_device(NULL); if (!context) { fprintf(stderr, "Could not open device "); return EXIT_FAILURE; } pd = ibv_alloc_pd(context); if (!pd) ...
图1 没有PD概念时的RDMA资源 由于MR和QP之间并没有绑定关系,这就意味着一旦某个远端的QP与本端的一个QP建立了连接,具备了通信的条件,那么理论上远端节点只要知道VA和R_key(甚至可以靠不断的猜测直到得到一对有效的值),就可以访问本端节点某个MR的内容。