我刚刚开始熟悉 infiniband,我想了解可用于解决 infiniband 节点的方法。
基于代码的示例来自:RDMA 使用 IB 动词进行读写 http://thegeekinthecorner.wordpress.com/2010/09/28/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,如何将主机名转换为地址或类似名称?是否有主机文件或类似文件?
您列出的各种寻址方法之间存在基本区别:
- 用纯 IB 动词称呼
- 以某种抽象级别进行寻址
当数据包被“注入”到 IB 结构时,它仅通过 LID 进行路由,LID 是数据包本地路由标头的一部分。 LID 是本地 ID,16 位,由 OpenSM 分配(还有 GID 和全局路由头的情况,但让我们把这种情况放在一边 - 它不会让解释变得更容易,而且你显然不需要这个观点)。
这意味着,如果您使用纯 IB 动词编写应用程序,则需要通过 LID 来寻址端点。
您可以使用 ibv_query_port() 获取本地端口的 LID - 它是端口属性字段的一部分。
但您不必自己完成所有脏活 - 您可以使用 librdmacm(RDMA 连接管理器)等抽象库来创建端点之间的连接(“端点”我指的是 RC QP),然后使用纯动词来创建端点之间的连接。实际上发送/接收您的数据。
基本上,如果您不使用 IPoIB,如何将主机名转换为
地址或类似地址?是否有主机文件或类似文件?
你不能,而且没有:(
如果您经过较早的帖子 http://thegeekinthecorner.wordpress.com/2010/08/13/building-an-rdma-capable-application-with-ib-verbs-part-1-basics/在您链接到的博客上,您发现您需要:
- 确定队列对的地址。
- 将地址传送给其他节点(通过某种带外机制)。
这里的关键项目是“带外”。
例如,MPI 通过 SSH 交换所有这些地址(顺便说一句,SSH 也可以在 IPoIB 上运行),一旦交换了此信息并且所有 QP 都已连接,数据就开始通过这些 RC QP 流动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)