You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently I'm able to get the RDMA Write-Only operation to work, but not the RDMA Fetch&Add operation. I have used ibv_modify_qp() on the server to modify the access properties of the queue pairs to support atomic operations. And have used ibv_post_send on the client to construct and send Fetch&Add operations, but only receive NAK messages from the server.Here is some code I wrote, hope that you can help me find some problems.
This is the C++ code of executing Fetch&Add operation in client:
staticintperform_rdma_fetch_and_add(structibv_qp *qp, structibv_mr *mr, uint64_t compare_add_value, uint64_t remote_addr, uint32_t rkey) {
structibv_send_wr send_wr = {};
structibv_send_wr *bad_wr;
structibv_sge atomic_sge = {};
// (Not use in fetch&add operation) The address of the buffer to read from or write to
atomic_sge.addr = (uint64_t)mr->addr;
// (Atomic operations operate on 8-byte values) The length of the buffer in bytes
atomic_sge.length = sizeof(uint64_t);
// (Not use in fetch&add operation) The Local key of the Memory Region that this memory buffer was registered with
atomic_sge.lkey = mr->lkey;
memset(&send_wr, 0, sizeof(send_wr));
// send_wr.wr_id = 0; // Optional, can be used for tracking purposes
send_wr.num_sge = 1;
send_wr.sg_list = &atomic_sge;
send_wr.opcode = IBV_WR_ATOMIC_FETCH_AND_ADD;
send_wr.send_flags = IBV_SEND_SIGNALED; // Optionally, set the signaled flag to receive a completion notification
send_wr.wr.atomic.remote_addr = remote_addr;
send_wr.wr.atomic.rkey = rkey;
send_wr.wr.atomic.compare_add = compare_add_value;
int ret = ibv_post_send(qp, &send_wr, &bad_wr);
if (ret) {
perror("ibv_post_send for RDMA Fetch&Add");
return -1;
}
return0;
}
This is the capture of the Fetch&Add packet from the client
This is the capture of the NAK packet from the server
The text was updated successfully, but these errors were encountered:
Currently I'm able to get the RDMA Write-Only operation to work, but not the RDMA Fetch&Add operation. I have used
ibv_modify_qp()
on the server to modify the access properties of the queue pairs to support atomic operations. And have usedibv_post_send
on the client to construct and send Fetch&Add operations, but only receive NAK messages from the server.Here is some code I wrote, hope that you can help me find some problems.This is the C++ code of executing Fetch&Add operation in client:
This is the capture of the Fetch&Add packet from the client
This is the capture of the NAK packet from the server
The text was updated successfully, but these errors were encountered: