c++ - Infiniband 寻址 - 无 IBoIP 的主机名到 IB 地址

标签 c++ linux infiniband

我刚刚开始熟悉 infiniband,我想了解您可以用来寻址 infiniband 节点的方法。

基于代码的示例来自:RDMA read and write with IB verbs 我可以使用 IPoIB 通过 IP 或主机名寻址单个节点。

另一种方法是直接使用端口 GUID 地址。但看起来您必须查找它们并且更类似于以太网 mac 寻址。

然后是一个叫做 LID 地址的东西,一个由结构管理器分配的 16 位本地地址。我如何在运行时使用和确定 LID 地址?例如,我运行 ibaddr 并获得 GID fe80::1a:4bff:ff0c:34e5 LID start 0x6 end 0x6

基本上,如果您不使用 IPoIB,您如何将主机名转换为地址或类似名称?是否有主机文件或类似文件?

最佳答案

您列出的各种寻址方法之间存在基本区别:

  1. 用纯 IB 动词称呼
  2. 使用某种抽象级别进行寻址

当数据包被“注入(inject)”到 IB 结构中时,它仅通过 LID 进行路由,LID 是数据包本地路由 header 的一部分。 LID 是 Local ID,16 位,由 OpenSM 分配(也有 GID 和 Global Routing Header 的情况,但让我们把这种情况放在一边 - 它不会使解释更容易,而且你显然不需要这个点)。

这意味着,如果您使用纯 IB 动词编写应用程序,则需要通过 LID 对端点进行寻址。 您可以使用 ibv_query_port() 获取本地端口的 LID - 它是端口属性字段的一部分。

但是您不必自己做所有脏活累活——您可以使用抽象库,例如 librdmacm(RDMA 连接管理器)在端点之间创建连接(“端点”是指 RC QP),然后使用实际发送/接收数据的纯动词。

Basically, if you're not using IPoIB how do you convert host names to addresses or similar? Is there a hosts file or some equivalent?

你不能,也没有 :( 如果你通过 earlier post在您链接到的那个博客上,您看到您需要:

  • 确定队列对的地址。
  • 将地址传达给其他节点(通过某种带外机制)。

这里的关键项是“带外”。 例如,MPI 通过 SSH 交换所有这些地址(顺便说一句,SSH 也可以在 IPoIB 上运行),并且一旦交换了此信息并且所有 QP 都已连接,数据就开始通过这些 RC QP 流动。

关于c++ - Infiniband 寻址 - 无 IBoIP 的主机名到 IB 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13753332/

相关文章:

c++ - 具有不同接口(interface)的策略类

c++ - 如何使用 Qt/c++ 为所有 UNIX 操作系统创建托盘图标?

c++ - 如何将字符串/数字排序添加到 QSortFilterProxyModel 派生类

c++ - 字符编码困惑!

linux - apache 无法读取文档根目录中的 755 文件夹

infiniband - InfiniBand 中的门铃是什么?

tensorflow - Distributed TensorFlow是否支持InfiniBand互联 "out of the box"

c++:多态+多重继承顺序。继承顺序重要吗?

c++ - 如何从 C 执行命令并终止它