函数ibv_post_recv()返回-1,但根据文档,它应返回errno。
如何知道这种情况下的失败原因?
最诚挚的问候,
答案 0 :(得分:0)
返回-1 和设置errno。 函数返回时检查errno值。
答案 1 :(得分: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()
可能返回错误的唯一原因是:
接收队列已满
接收工作请求中的分散条目数无效