[RDMA] UD模式下ibv_post_send返回ENOMEM,但sq并沒有滿
[RDMA] UD模式下ibv_post_send返回ENOMEM,但sq并沒有滿
我創建了一個RDMA的UD qp,其max_send_wr和max_recv_wr都是32。在實際使用中,我保證最多只有16個已發送但對端未接受到的消息。然而,在我發送32個消息后,ibv_post_send報錯,返回了ENOMEM。網上說這通常是由于sq滿了。但我之前發送的32個消息明明已經發送成功了,對端已經收到了,理論上sq應該是空的,為什么會告訴我滿了呢?
原因可能在于我的所有消息都是send_flags=0,即沒有IBV_SEND_SIGNALED標記。在我為消息加入IBV_SEND_SIGNALED標記后,ibv_post_send就不再報錯了。難道是因為沒有IBV_SEND_SIGNALED就不會清空sq?總之,我選擇在發送的消息中,每隔幾個就加入一個IBV_SEND_SIGNALED。這樣就沒有再報錯了。
| 歡迎來原網站坐坐! >原文鏈接<

浙公網安備 33010602011771號