我正在尝试创建一个 QueuePair ,我必须通过设置 的字段并将其提供给 create 函数ibv_create_qp()
来描述队列对的大小。struct ibv_qp_cap
我的问题是与max_send_wr
可以发布到该特定队列对的发送队列的未完成工作请求的最大数量相对应的字段。
根据各种 Web 资源 [1,2],您应该将此特定字段设置在 [0 ... dev_cap.max_qp_wr] 范围内的某个位置,并设置为max_qp_wr
支持的任何发送或接收队列上未完成的工作请求的最大数量RDMA 设备(您可以通过使用 查询您的设备来获取信息ibv_devinfo -v
)。在尝试创建 QueuePair 时,当我将字段设置为可能的最大值(max_qp_wr,我的设备为 32K)时,ibv_create_qp()
函数失败并出现ENOMEM
错误。通过反复试验,我发现如果我将其降低到 8K,它就可以正常工作。
因此,我很想知道是否有一种确定性的方法来计算max_send_wr
RDMA 设备的值,而无需进行反复试验?此外,根据一些 [1],对于特定的 RDMA 设备,发送或接收队列可能还有其他考虑因素,以防止使用最大值创建 QP。这些 RDMA 设备特定的考虑因素是什么,它们如何影响最大值的计算?
[1] https://www.rdmamojo.com/2012/12/21/ibv_create_qp/
[2] https://linux-rdma.vger.kernel.narkive.com/rkR0gUjT/rdma-create-qp-and-max-send-wr