2015-10-01 115 views
0

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

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。我做错什么了吗?

回答

0

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

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

+0

谢谢哈盖!现在我只是检查返回值是否正确。它对我来说非常合适。 –

相关问题