0

函数 ibv_post_recv() 返回 -1,但根据文档,它应该返回 errno。

在这种情况下如何知道失败的原因?

此致,

4

2 回答 2

0

您使用的是什么低级硬件驱动程序?什么版本?我猜它是 libmlx4 (Mellanox ConnectX/ConnectX-2/ConnectX-3)。

如果是这样,版本 >= libmlx4 1.0.2 实际上已经修复了这个问题——ibv_post_send() 将返回错误代码而不是 -1。

在任何情况下(这实际上并不是非常依赖于低级驱动程序——我认为 libmthca、libcxgb4 等几乎相同),ibv_post_send()可能会立即返回错误的原因是:

  • 发送队列已满(即发布的未收集完成的发送数量>= 发送队列的大小)。

  • 发送 WR 中的操作码无效

  • 收集条目数无效(创建发送队列时指定的 <= 0 或 > max gs 条目)

  • 内联数据大于发送队列的最大内联数据

编辑:我看到我读的问题太快而且很困惑ibv_post_recv(),而且ibv_post_send(). 答案ibv_post_recv()几乎相同,只是简单一点。ibv_post_recv()基本上可能返回错误的唯一原因是:

  • 接收队列已满

  • 接收工作请求中的分散条目数无效

于 2013-05-15T13:37:54.823 回答
0

它返回 -1设置 errno。函数返回时检查 errno 值。

于 2013-05-14T18:34:55.717 回答