我是一个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。我做错什么了吗?
谢谢哈盖!现在我只是检查返回值是否正确。它对我来说非常合适。 –