6

我刚刚开始熟悉 infiniband,我想了解可用于解决 infiniband 节点的方法。

基于代码的示例来自:RDMA read and write with IB verbs I can address individual nodes by IP or hostname using IPoIB.

另一种方法是直接使用端口 GUID 地址。但看起来你必须查找这些,并且更类似于以太网 MAC 寻址。

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

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

4

1 回答 1

8

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

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

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

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

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

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

你不能,也没有:(如果你浏览了你链接到的那个博客上的早期帖子,你会发现你需要:

  • 确定队列对的地址。
  • 将地址传递给另一个节点(通过一些带外机制)。

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

于 2012-12-08T23:28:51.847 回答