RDMA WRITE:ibv

我是一名在Mellanox Infiniband硬件上使用RDMA的Infiniband / RDMA新手。 我在这里使用了源代码。 程序乍一看运行非常正常:服务器使用RDMA_WRITE操作将一些字节写入客户端内存。 但是,后来我发现,写入完成结构(ibv_wc)指示的传输字节数与我放入ibv_send_wr结构中的数据量不匹配。 以下是rdma_write()中ibv_send_wr初始化的代码:

ctx->sge_list.addr = (uintptr_t)ctx->buf;
ctx->sge_list.length = ctx->size; //which is 65536
ctx->sge_list.lkey = ctx->mr->lkey;
ctx->wr.wr.rdma.remote_addr = data->remote_connection->vaddr;
ctx->wr.wr_id = RDMA_WRID;
ctx->wr.sg_list = &ctx->sge_list;
ctx->wr_num_sge = 1;
ctx->wr.opcode = IBV_WR_RDMA_WRITE;
ctx->wr.send_flags = IBV_SEND_SIGNALED;
ctx->wr.next = NULL;

然后在写入完成队列中写入完成条目后,我读取ibv_wc.byte_len。 它显示随机数字:32537,32743,32533。我假设传输成功,因为ibv_wc.status等于IBV_WC_SUCCESS。 我做错什么了吗?


根据RDMAMojo博客上的ibv_poll_cq()页面, byte_len字段仅对一小部分操作有效,因此在您对发送队列执行RDMA写入操作的情况下,该字段保持未初始化状态。

byte_len:传输的字节数。 与即时操作的传入发送或RDMA写入的接收队列相关。 该值不包括直接数据的长度(如果存在)。 在发送队列中与RDMA读取和原子操作相关。

链接地址: http://www.djcxy.com/p/64625.html

上一篇: RDMA WRITE: ibv

下一篇: How to use GPUDirect RDMA with Infiniband