RDMA WRITE:ibv_wc.byte_len与我尝试编写的内容不匹配

时间:2015-10-01 19:56:33

标签: infiniband rdma mellanox

我是在Mellanox Infiniband硬件上玩RDMA的Infiniband / RDMA新手。我使用了源代码here。该程序初看起来非常正常:服务器使用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。我做错了吗?

1 个答案:

答案 0 :(得分:0)

根据ibv_poll_cq()博客的RDMAMojo页面,byte_len字段仅对一小部分操作有效,因此在您进行RDMA写操作时,它不会被初始化发送队列。

  

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