WR(Worker Request)的处理:在传输过程中,确认接收端已经将 WR(Worker Request)从 Receive Queue 中取走后,才可继续发送,否则即使做到了协商 QP 大小,仍然存在 RNR 的风险。2. 主动确认(ACK)连接事件RDMA 连接的建立通常通过 rdma_cm 库完成,这一过程由事件驱动,经由多个事件后完成连接建立。在建立连接...
根据手册的定义,我们解析一下上面日志中的 WQE:可以看到,和我们软件填的 ibv_send_wr 是相似的。注意到一个细节,我们填的 wr_id 没有出现在 WQE 中,实际上这个 wr_id 是存在 rdma-core 里的。因为 WQE 是按序处理的,收到 CQE 的时候可以找到当初提交的 ibv_send_wr。Doorbell 通知网卡 post_send_...
当用户需要在发送端产生一个完成事件时,就需要设置 IBV_SEND_SIGNALED 这一个flag。对于向HCA下发的每一个Work Request,用户需要指定一个ID(wr_id),当操作完成时,HCA会产生一个完成事件(Completion Event),完成事件中包括这个ID帮助用户识别具体完成的操作。 BTH (Base Transport Header) 了解了RC服务类型和RDMA ...
struct ibv_send_wr { uint64_t wr_id; struct ibv_send_wr *next; struct ibv_sge *sg_list; int num_sge; enum ibv_wr_opcode opcode; unsigned int send_flags; /* When opcode is *_WITH_IMM: Immediate data in network byte order. * When opcode is *_INV: Stores the rkey to invalidate...
向一个QP下发一个Send WR,参数wr是一个结构体,包含了WR的所有信息。包括wr_id、sge数量、操作码(SEND/WRITE/READ等以及更细分的类型)。 WR的结构会根据服务类型和操作类型有所差异,比如RC服务的WRITE和READ操作的WR会包含远端内存地址和R_Key,UD服务类型会包含AH,远端QPN和Q_Key等。
sw_cq_sel) | FIELD_PREP(IRDMA_CQ_DBSA_ARM_NEXT_SE, arm_next_se) | FIELD_PREP(IRDMA_CQ_DBSA_ARM_NEXT, arm_next); set_64bit_val(cq->shadow_area, 32, temp_val); udma_to_device_barrier(); /* make sure WQE is populated before valid bit is set */ db_wr32(cq->cq_id, cq...
uint64_t wr_id; struct ibv_recv_wr *next; struct ibv_sge *sg_list; int num_sge; }; RDMA是一种异步传输机制。因此我们可以一次性在工作队列里放置好多个发送或接收WQE。HCA将尽可能快地按顺序处理这些WQE。当一个WQE被处理了,那么数据就被搬运了。一旦传输完成,HCA就创建一个完成队列元素(CQE)并放置...
结构ibv_recv_wr 用来描述 RR。 struct ibv_recv_wr { uint64_t wr_id; struct ibv_recv_wr *next; struct ibv_sge *sg_list; int num_sge; }; Queue Pairs RDMA提供了基于消息队列的点对点通信,每个应用都可以直接获取自己的消息,无需操作系统和协议栈的介入。消息服务建立在通信双方本端和远端应用之间...
uint16_tslid; uint8_tsl; uint8_tdlid_path_bits; }; wr_id 由产生 Work Completion 的 Request 决定 status 是操作的状态,通常为 IBV_WC_SUCCESS 表示 Work Completion 成功完成,其他还有一些错误信息 opcode 表示当前的 Work Competition 是怎么产生的 ...
ibv_wc 是 CQE 的抽象,通过 wr_id 和 ibv_send_wr 对应起来 把rdma-core 的 debug 打开,可以看到这样的两条日志: dumpwqeat0x7fc59b3570000000000a00115003000000080000000000000000c000000000000000000000000000022a00008a0b00007fc59a5b2000mlx5_get_next_cqe:565:dumpcqeforcqn0x4c2:000000000000000000000000000000000000000...