这篇文章讨论了up/down InfiniBand路由算法。这个帖子还是比较基础的。但是,读者应该对网络有很好的理解,并且熟悉InfiniBand的概念。
多个InfiniBand路由引擎可以在网络上进行配置,例如Min Hop、Up Down、Down Up、Fat Tree等(请参阅opensm)。在Clos/fat tree网络中,最常用的InfiniBand路由算法是Up/Down(UpDn)和Fat Tree。
注意:这包括使用主交换机和1U交换机构建的树形结构。物理交换机外壳的两个级别代表了3个交换机ASIC层,因为每个主交换机包含2个ASIC层。
与大多数InfiniBand路由算法一样,UpDn使用可用于任何两个端点之间的最短路径。它可以路由连接了InfiniBand交换机和HCAs的任何集合。与MinHop不同的是,UpDn可以保证在fabric中不存在信用环路。UpDn从由交换机ASIC组成的“root”或顶层fabric的列表开始。此列表由子网管理器(SM)标志--root_guid_file 设置。这是一个简单的文本文件,每个全局唯一ID(GUID)的root ASIC都有一行。虽然UpDn具有自动发现root ASIC的选项,但强烈建议提供一个root_guid_file 。如果更换了root 交换机ASIC或拓扑扩展,必须更新root_guid_file ,并且每个SM必须具有GUID file的相同副本。
UpDn算法从root 交换机ASIC开始,我们将其称为距离0 (zero)。然后,该算法查找距离root 交换机一跳(one link)的每个交换机ASIC。这些ASIC可以被视为距离1,因为它们距离root 交换机一跳。然后,该算法发现距离root 交换机两跳的所有交换机ASIC,这些可以视为距离2。这个过程一直持续,直到每个交换机ASIC都被分配到距离root的距离。以下图示例显示了带有分配距离的3层fabric。

这个过程生成了一个广度优先生成树(BFSP),类似于以太网中使用的生成树协议(STP)的方法。与STP不同,UpDn允许多个root,努力为每一对终端节点之间提供尽可能多的路径。然后,UpDn算法找到每一对终端节点之间的所有可能的最短路径。接下来,UpDn丢弃包含从距离N ASIC到距离N+1 ASIC的跳,然后再跳回距离N的任何路径。换句话说,它丢弃了任何向“下”(远离roots)然后“up”(朝向roots)的路径。合法路径可以up、down、or up and then down,或保持在同一级别,但不能down然后up。通过丢弃这些路径并不在交换机中进行配置,UpDn确保了路由中没有逻辑环路和可能导致流量停滞的信用环路。
以下图示例显示了允许和不允许的路径示例:

注意:节点E和F之间的两条潜在路径长度相同(跳数相同),但只有一条遵守了UpDn规则。不允许的路径包含一个DnUp段。
UpDn(和Fat Tree)路由拓扑的信用环路自由特性对于可靠的网络运行至关重要。
然而,由于某些潜在路径被丢弃,存在一种情况,即一对终端节点可能会断开连接,无法相互通信。
在opensm配置文件中将calculate_missing_routes选项设置为TRUE(默认值)将以信用环路自由的方式使用UPDN和Fat Tree路由,保证了fabric中所有终端之间的连通性。
例如,考虑一个不同的fabric,其中有节点连接在leaf交换机的“above”(节点G、H和J)。连接到L1交换机(A、B、C等)的节点具有与节点G、H和J之间的合法UpDn路径。节点G和H之间存在合法的UpDn路径。然而,G和J之间不存在合法路径,这些节点将无法相互通信。将calculate_missing_routes设置为TRUE将为所有终端提供信用环路自由的路由。

可能存在一些节点不需要相互通信的情况(例如,不相互通信的存储节点)。然而,这种情况比较罕见。对于Clos-5三层fabric,最佳实践是不将节点连接到L2交换机。
注意:上述图表同样适用于两种不同情况:一个由3层1U交换机构建的fabric,以及一个使用两个主交换机和位于它们下方的1U交换机的fabric。在后一种情况下,节点E、F和G代表连接到主交换机leaf子模块的节点。
在将逻辑路径分配给物理链路时,UpDn算法尝试将相同数量的路径映射到每个链路,以最大化可用带宽的利用。这种平衡是静态完成的,没有关于实际工作负载和流量模式的了解。路径平衡决策是在每个交换机上本地制定的,不假设任何关于物理拓扑的内容。由此产生的路径分配可能对典型的Clos/Fat Tree工作负载不是最佳的。
MinHop和UpDn路由引擎都提供了一个名为“scatter-ports”的路由选项。它指示路由算法将路径对链路的本地分配随机化,这通常会导致更好的链路利用率。scatter-ports选项需要一个整数参数,用于生成随机数的种子。建议使用质数作为种子;种子为零将关闭随机化。
注意:scatter-ports配置仅在运行在主机(或UFM)上的SM上可用,如果SM运行在交换机上,则不支持该配置。