构成集群的一个元件,就是网络。它让节点之间互传数据,作为应用程序的一部分(即将提供有关并行应用程序工作原理的文章链接),它是读取和写入数据的工具,还能监控和控制集群。在开始讨论 HPCC(High Performance Computing and Communications,高性能计算与通信)网络之前,我们首先谈谈网络中需要传递哪类数据。因为 HPC 是非常注重性能的,所以人们一般会首先关注计算流量,这是作为计算应用程序的一部分在节点之间交换的数据。但除了计算流量以外,集群还有以下流量:

  • 存储流量
  • 管理流量
    • 主节点向计算节点发送的图像或数据包
    • IPMI 流量(只能是 TCP)
    • 监控流量(从客户端到主节点)
    • 报告流量(从客户端到主节点的报告数据)
    • ssh 流量 (TCP)
  • 任务调度流量(一般是 TCP)

可见由于其传输的所有流量,网络对于集群是相当重要的。拥有可以容纳所需流量——特别是管理流量——的适当的网络,对保证集群的正常运行和易于管理至关重要。考虑到这些要使用网络的功能,大多数 HPCC 系统配有两个网络:

1. 基于 TCP 的管理网络
2. 计算网络,可以是基于 TCP 或其它协议的,通常是 InfiniBand 或 Myrinet 10G 之类的高速网络

集群的一大特点就是它们非常灵活,可以适应各种条件或要求。例如,如果您喜欢,您可以只使用一个网络,但为了应付管理流量,该网络必须是基于 TCP 协议的;您也可以使用两个以上网络,一个用于管理、一个用于计算、另一个用于存储。由此可见网络的设计,作为集群最重要的构成特点之一,是非常灵活的。

我先前确实没有列出存储网络。大致说来,您可以根据情况在管理网络或计算网络上运行存储流量;也可以采用一个专用的存储网络。本文不探讨如何选择比较适合实际情况的方案。但如果 I/O 需求小,在管理网络上运行存储流量可能更好;如果 I/O 性能要求较大,则最好在计算网络上运行存储流量,但是必须确保网络上不会出现流量冲突。如果发生流量冲突或 1/O 量过大,则应使用专用存储网络。

我们再进一步了解管理网络网络和计算网络。

管理网络

该网络传输着由以下内容构成的管理流量:

  • 管理命令
  • IPMI 命令
  • 创建节点映像(推出图像或数据包)
  • 监控流量(监控集群的很多方面)
  • 报告流量(报告相关数据)
  • 有时包括 ssh 流量(根据具体配置而定)

此外,根据集群的大小和配置,管理网络可能还需有存储流量。

网络有多个选项,不但有网络硬件自身的选项,还有网络布局的选项和网络协议。因此,为了追求最佳性能和最佳性价比,在设计和选择网络时还是有相当大的灵活性。但是出于 IPMI 和映像流量考虑,管理网络主要还是基于 TCP 的。现在,集群差几乎都使用 GigE 作为管理网络,未来可能使用 10GigE,计划将存储流量放在管理网络上。

如果管理网络只承担管理流量,您可以调节网络拓扑以节省资金。总体上看,管理流量是很小的,只能使用相当小的数据包。人们一般的想法是使用不带全对分带宽的管理网络。对于多层网络来说,这样可以节省电缆和网络端口,允许您使用较小的交换机。这些方法也不会过度地影响管理流量的性能。

计算网络

计算网络的工作只有一个——传输计算流量。这是一个很简单的要求,但是计算流量的具体情况却要视具体应用程序而定,所以当有各种应用程序存在时,可能会增加选择计算网络的难度。

要选择一个适当的计算网络,您必须了解您的应用程序。明白它们要发送什么消息?消息有多大?时间间隔多久?属于什么性质(如全对全或点对点)?当同样的问题在更多核心上运行时,消息的大小会如何变化?应用程序发送了很多小消息是否代表时延是影响性能的重要因素,应用程序发送较大的信息是否可能代表带宽很重要?

了解您的应用程序可能是选择网络时最重要的步骤,接下来就要查看各种所谓的网络解决方案的微基准测试。您可能见过的典型基准有:

  • 时延(要注意这些数字,因为测量时延的办法有多种,供应商不一定会披露他们测量时延的方法。此外,在测量时有些时延数字并不包括两个节点、一个交换机和 MPI,所以其测量结果并非总是适用的。)
  • 带宽(通常看峰值带宽)
  • 峰值带宽的数据包大小
  • N/2(半峰宽最大带宽速度一半时的数据包大小——是在一个方向上可以使用整个网络速度的最小数据包大小,比其小的数据包无法获得完全网速,比其大的数据包可以获得完全网速。)
  • 消息速率(网络把消息传送到电缆上的速度。业界对此量度有争议,因为其与应用程序性能的关系尚不明确,此外,网络供应商的测量方式也不尽相同。)

微基准测试在预测应用程序性能方面非常有用。不过它们也有失手的时候。一般原则是尽可能对应用程序进行标准检查,而不依靠微基准检测。但如果做不到这点,则需了解微基准与应用性能的关联。

在开始讨论网络选项之前,我想要指出很重要的一点,即为应用程序选择网络。除了知道您的应用程序的性能(即它们的瓶颈在哪里)、查看微基准了解各种网络选项,还有一个极为重要的方面需要考虑,即您可能需要在一个任务中使用多少个节点?

在此补充解释。如果您的应用程序需要使用 InfiniBand 才能顺利扩展(比如说达到 64 个节点以上),但实际问题大小是您可以一次在 8 个节点上运行,那么您也许就不需要 InfiniBand。因为您只需要在一个小的节点子集上运行,也许 GigE 就能在 8 个节点上运行得很好了。如果您有一个 128 节点的设备,您想要同时运行 16 个任务(假设每个任务要 8 个节点),GigE 就够用了。虽然示例中的情况比较乐观,但是它确实向我们指出:除了观察应用程序的性能如何根据节点数量而扩展之外,还需要认清您的实际问题大小和您在一个任务中可能需要使用的节点数量。虽然我不是很挑剔的人,但不得不承认很多人确实忽略了这个简单的概念。

如前所述,计算网络硬件拥有多个选择:计算流量的主要选项有:

  • GigE
  • Myrinet 10G
  • InfiniBand
    • 单倍数据倍率——SDR
    • 双倍数据倍率——DDR
    • 四倍数据倍率——QDR
  • 10 GB 以太网

当然还有其他选项,但它们没有表中所列项常见。在本文中,我会将这些选项称为“网络硬件”。这个词泛指网络接口卡 (NIC)、连接线(电缆)和交换机。很多时候,也指控制软件。但是真正的网络协议可以单独考虑,因为对于 GigE 和 10GigE 来说,它们可以在 IP 层上使用其他协议,而不仅仅是 TCP。此外,如果是 Myrinet 10G,则有可能在相同硬件上运行 TCP 和 mx、Myrinet 协议。加上为 InfiniBand 提供的 Mellanox ConnectX HCA,还可以运行 TCP 协议。

这就是典型的“网络硬件”选项。但是,可以根据您的应用程序安排网络,从而提高性能,降低成本。这就是所谓的网络拓扑。下一章节讨论人们常用在管理网络和计算网路上使用的方法。

网络拓扑

人们对网络拓扑,尤其是针对 HPC 的网络拓扑的研究热情从未减退。虽然大家对网络拓扑毁誉参半,但是总的来说还是应该从一开始时就简化问题。

选择网络拓扑真的要看您的性能要求、愿意支付的价格,此外也许还要考虑一下网络的简单性和系统升级的能力。概括说来,网络拓扑的最佳起点就是被称为“胖树 (fat-tree)”的网络拓扑。这种网络,如果构建正确,可以允许所有节点享有 full bisectional(全对分)带宽。此外,当前使用的交换机可以为 GigE、InfiniBand 和 Myrinet 10G 构建相当大的网络(数千节点)。您可以使用多层(或层级)交换机来构建大型网络。唯一的要点是对于交换机层数大于 1 的 TCP 网络,您必须启用所谓的生成树协议。生成树对性能的影响巨大。

但正如我所提到的,解决网络拓扑问题的方法有很多。最常见的一种方法叫做超额配置。它用于网络拓扑设计,让每个节点无法获取全部网络带宽。

超额配置

网络拓扑设计中将出现的一个重要术语——“超额配置”(定义链接?)。一般说来要定义这个术语已经很难,更不用说进行网络计算了。但是,肥树设计的超额配置运算却相当简单。超额配置指的是在一个肥树设计中不同层级的网络带宽。如果进出网络层的网络带宽不同,则称该层或该连接发生了超额配置。它一般是指网络层的“输入”连接,通常是一个客户端,没有获得其与整个网络拓扑相连的全部带宽。

我知道让从没未见过超额配置的人弄懂什么是超额配置是非常困难的,让我给您举个示例帮助您理解吧。以下图 1 是总共带有 24 个端口的网络交换机(很惊人对吗?)。

 
图 1 – 24 端口交换机举例

端口可以直接连接集群的节点或网络结构中的其他交换机。我们一般从较低层级或位于交换机底部的客户端将“输入”放入交换机里,把输出或交换机的下一层写入交换机的顶部。如果要插入交换机的节点超过 24 个,则可以使用较大的交换机(应该不会太难)。您也可以用使用交换机的第二层。如果您使用交换机的第二层,则第一层交换机的网络流量必须在进入其他交换机或网络客户端之前,进入交换机第二层级(第二层)。情况如图 2 所示。

 
图 2 – 24 端口交换机 1:1 超额配置

简单地说,此配置就是从 12 个节点获得进入交换机的最大网速流量。为了让通过交换机的带宽相同,交换机外必须要有相同的网络流量。因此,您需要交换机提供 12 个端口以连接网络下一层。这就是所谓的 1:1 超额配置,也可能根本没有超额配置。进出交换机的流量相等。我也喜欢把 “1:1” 看作是“输入流量:输出流量。”所以我们可以把这个写作 16:16。(我女儿在学校刚刚学完了分数),用公分母或公分数处理后,可以写作 1:1。只要记住把这个写作“输入流量:输出流量。”我总是想起 Mr. Miyagi 在 Karate Kid(功夫梦)大喊 “Wax On,Wax Off” 以描述超额配置。但在超额配置问题上,他打的蜡比他从 Miyagi 的车上刮下来的更多(小心愤怒的 Okinawian 武术大师发飙)。

现在让我们看看 1:1 以外的超额配置,以下图 3 展示了 2:1 超额配置。

 
图 3 – 2:1 超额配置示例

图中有 16 个端口进入交换机,8 个端口进入下一个网络层。如果您愿意的话,您可以将其写作 “16:8”,但是使用强大的公分子处理后,也可以写作 “2:1”。所以该网络配置是 2:1 超额配置。用这个概念类推,我们还可以创造 3:1 超额配置的网络。图 4 显示了这一概念。

 
图 4 – 3:1 超额配置示例

使用我们的 wax-on 和 wax-off 理论,我们可以将其写作 18:6 或 3:1。记住,这意味着进入交换机的流量是离开交换机的流量的 3 倍。最后一个超额配置示例见下面图 5。

 
图 5 – 5:1 超额配置

在这个示例中,有 20 个端口进,4 个端口出。也就是说,可以记作 20:5 或 5:1。我的超额配置举例非常简单。

我还可以继续举 11:1,甚至 23:1 的示例,但是这种程度的超额配置显得有点复杂。不过,正如我会在下面谈到的,有时候我们会使用大超额配置的网络作为大型集群的管理网络,因为流量不够大,对于运行应用程序也不是非常必要。

在换话题之前,我想给出最后一个评价——有没有“超额配置网络”意义不大。这种情况可以写作 0.8:1,说它没有多大意义的原因是从交换机出来的流量比进入交换机的流量大。实际上,交换机的内部容量太大了。这就意味着我们在没有连接任何节点的网络硬件上浪费钱。此外,这也证明那些为了从交换机中推出流量而增添的网络硬件无助于提升性能,因为进入交换机的流量都很有限。

网络协议

HPCC 网络中一个经常被人忽略的主题就是网络协议。虽然它不像 Myrinet 10G 和 Infiniband 是高速网络最引人注意的主题,但却是基于 IP 网络的一个非常有趣的主题。

在经典 GigE 网络中,TCP 就是在 IP 层网络上部运行的协议。但与 Myrinet 10G 和 InfiniBand(100 微秒是较老的 NIC 的典型指标,现在已不常见)等高速网络相比,GigE 大致有 29-100 微秒的相当高的时延。此时延部分是协议本身造成的。为了提高时延,人们投入了大量的努力创建在 IP 网络上运行的非 TCP 协议。我知道的这类主要协议有:

这些协议包通常配有所需驱动器(若有)和允许编译 MPI 代码、在 IP 网络上使用新协议的 MPI 执行。GAMMA 在 GigE 网络上的时延在 9 微秒左右;OpenMX 在 10GigE NIC 上的时延是 6.5 微秒,在 GigE NIC 上约 10-15 微秒。

本文不讨论各种网络协议的利弊,但是可以考虑使用其他协议。但是在此做一个免责声明,戴尔不支持 IP 网络上 TCP 以外的任何协议。

经验法则 

集群设计/布局的一大难点就是网络。以下经验法则可能有助于您解决这个问题。

经验法则 1:采用简单设计

我觉得此法则在集群设计每个方面都很适用,包括网络。采用简单网络可支持集群快速构建和调试(若必要)。也可以根据配置简化电缆布线。此外,虽然并非每次都奏效,但是简单的网络容易升级。

但是,和所有规则一样,这条规则也有需要被打破的时候:)。在有些情况下,一个复杂的网络比简单的网络更好,不过它价格也更高。一个更复杂的网络可能更难部署、调试和管理。但是如果性能上的好处胜过复杂性带来的不利因素,也可以考虑采用更复杂的网络。不过这种情况比较少。

经验法则 2:节点数超过 16-32 的集群应使用高速网络。

记住,使用 4 核处理器,一个 16 节点集群实际上有 128 个核心,而一个 32 节点集群实际上有 256 个核心。这个核心数量比较大,尤其是对单个任务来说(某个应用程序运行一次)。因为很多应用程序需要低时延网络和/或带宽大、易扩展的网络,对于有一定规模的系统来说,一个高性能网络是必要的。

但是,和法则 1 一样,这条法则也是可以打破的。还有一些应用程序既可以在单个节点上运行,又可以在多个节点上运行。所以,在 16-32 节点或更大的集群上运行的这些应用程序在一个简单的 GigE 网络也可以运行得很好。

不过,作为一条经验法则,对规模超过 16-32 个节点的集群来说,使用诸如 Myrinet 10G 或 Infiniband 等高速网络是一个很好的起步点。但这还仅仅只是一个起步点。

经验法则 3:网络升级设计(若可能)

人们总爱谈论用更快的处理器或更大的内存来给集群升级,但老实说,这种想法很少能实现。但是可以按照合理的规则,通过增加更多节点来升级。因此,当您在设计一个集群网络时,建议您做好计划,在集群原始大小基础上扩大 10%和至少增添 2 个节点。

通常情况下,您都可以设计出非常容易扩展的网络。中央或核心交换机常常是由一个机箱构成的,机箱上带有实现“线卡”互连的背板。线卡上有很多接口,可以插入网线(在此插入图片)。这里有一个小诀窍,就是选择一个核心交换机或至少带一个空插座供线卡使用的交换机。这样,当您需要或想要增添节点时,只需增添一个线卡,将其插入新节点即可。

对于多层交换机来说,可以将网络设计成可以在较低层级(1 层)增添交换机,然后将其插入核心网络,或者将其直接插入核心交换机中。

有疑虑时……

恭喜您能坚持看到这里。这时,您可能在想:“网络设计太复杂了。”从某种程度上看您是对的。对于一个刚开始接触 HPCC 的人来说,设计网络是很恐怖的事。所以我想告诉您几条基本规则或针对各种规模的集群的选项。把这些想成是集群设计的“小抄”吧。

1-16 节点:

对于这种规模的集群,您可以使用一个 TCP 网络(GigE 或 10GigE)充当管理网络和计算网络。通常您会发现一个 24 端口的 GigE 交换机就完全够用了。

如果您觉得这个规模的集群需要 2 个网络,我还是推荐您使用 2 个 GigE 网络(一个 GigE 用于管理,一个 10GigE 用于计算)。可以每个网络使用一个 24 端口交换机或使用一个较大的、可以应付两个网络的 48 端口交换机。我个人推荐使用 2 个交换机,因为这样可以轻松调试网络。无论如何,对于如此规模的集群,我不建议您对任何一个网络进行超额配置,因为这样省不了多少钱(超额配置一般都是为了省钱)。

因为现在 GigE 的价格是非常低廉的,包括非管理型小交换机也是如此,我建议您使用 2 个网络,一个管理用 GigE 网络,一个计算用 GigE 网络。提醒一句——交换机的性能良莠不齐。要找信誉好的(用 google 搜索关于交换机的信息)、每个端口缓存量或总缓存量较大的交换机。

有时您也可以使用一个 Infiniband 网络作为计算网络。有的 SDR IB(单倍数据率 InfiniBand)交换机(插入链接)并不昂贵,在小型集群方面具有极大的优势。如果您这样做,我建议您使用一个全带宽 TCP 网络(GigE 或 10GigE)作为管理网络,并使用一个全带宽 IB 网络作为计算网络。

32-128 节点:

这个范围的节点数可算是过渡。您会发现在这个数量范围的节点上,很多应用程序都能在 GigE 上运行得很好,但是也有些应用程序需要 InfiniBand 才能很好地扩展。无论是 TCP 还是 InfiniBand,要实现顺利扩展,都需要一个专门的计算网络。所以对于节点数量在这个范围的集群,我建议最低配置要包括一个基于 TCP 的管理网络和一个计算网络。管理网络非常容易。对于这种规模,您可以非常轻松地使用一个全截面网络,不管是一个 32 节点的 GigE 交换机,甚至是一个 128 节点的 GigE 交换机,您都可以非常轻松地使用全截面网络。对于节点数大于 32 的集群,您可以使用 3 个 48 端口 GigE 交换机,并通过如下面图 6 所示的 10GigE 上行链路将其中两个连接到第三台交换机上。

 
图 6 – 128 端口 GigE 配置(超额配置)

如果 48 端口的中央交换机拥有如图 6 所示的足够多的 10GigE 端口,这个配置也允许您通过 10GigE 上行链路连接头节点。注意左右两边的交换机是 43:10 或 4.3:1 超额配置的。中央交换机有点难定义。我认为它是 53:20 超额配置 (2.6:1)。这种不确定性来自从左右交换机和主节点引出的 10GigE 链路。52 来自于 40 个 GigE 节点而 10GigE 链路来自主节点。这是对从节点进入交换机的流量的描述。还有两条 10GigE 链路从中央交换机连接至邻近的交换机,这占据其中的 20。因此,可以将其写作 52:20 或 2.6:1。

这种超额配置法有时能帮您省钱,因为无需使用大交换机或很多电缆。但这是以减少带宽,而且可能增加时延作为代价的。大多数时候,这对管理网络都不成问题,但是如果您使用一个基于 TCP 的计算 网络,我建议您使用全对分带宽网络而不是超额配置的网络。有些可以轻松扩展至超过 128 个节点的大型 GigE 交换机价格并不太贵。即使是在 10GigE 的情况下,由于时延问题(使用 TCP 交换机的两个层就意味着您必须在交换机中使用生成树,这样会大大增加时延),我还是建议使用完全对分带宽网络。

如果您正在使用 InfiniBand,那么这里有几家供应商提供的 48、96 和 144 端口交换机。有 144 个端口,日后就可以轻松向 128 节点集群增添节点了。不过,我认为大家忽略了对 InfiniBand 网络进行超额配置的可能性。

为了进行有效的超额配置,您需要两层交换机。最小的 DDR IB 交换机有 24 个端口。在 64 节点、2:1 超额配置的情况下,交换机首层上要有 4 个 24 端口的交换机:计算节点到每个交换机,16 个端口(有时将交换机首层称为“树叶交换机”)每个交换机有 8 个上行链路接到下一层交换机上。然后,您需要每个核心交换机至少有 32 个端口 (4 x 8 = 32)。可能更简单的做法是使用 2 个 24 端口核心交换机,所以每个第二层交换机就有 4 组上行链路(每个交换机一个),实际上每组有 8 个链路。以下图 7 展示了这种情况。

 
图 7——64 节点 IB 网络,2:1 超额配置

对于多少了解 IB 交换机的人,我建议每个 IB 端口接 4X 链路。

现在有一个关于 64 节点配置的有趣问题,那就是使用 5 个交换机与使用一个至少带 64 端口的交换机哪个更便宜?说实话,我也不知道。64 端口交换机选项没有进行超额配置 (1:1),所以可以为节点提供更好的带宽。但如果这个 64 端口交换机死机,就会导致您失去整个网络,而在超额配置的 5 个 24 端口交换机配置中,如果您失去首层交换机,则只有 16 个节点无法访问。如果失去第二层交换机,您还可以访问所有节点,只不过超额配置程度更高而已(变成 4:1)

128 节点的情况更为复杂。如果我们在第一层使用 24 端口交换机(16 个端口给节点,8 个端口给上行链路),那么这一层就有 8 个 24 端口交换机。也就是说我们有 64 个端口可以上连第二层 (8 x 8 = 64)。所以您也可以用一个 64 端口交换机,或使用一个 96 端口交换机,从而留出扩展空间(增加节点)。或者,您也可以用 4 个 24 端口交换机创建第二层交换机,每个交换机有从每个第一层交换机出来的两个上行链路。所以,每个第二层交换机需要至少 16 个端口(2 x 8 = 16 口)。以下图 8 展示了这种配置。


 
图 8 – 128 节点集群,带 24 端口 IB 交换机

我只显示了一层交换机到一个二层交换机的链路,因为画出所有链路的集群会导致信息太过混杂,让人无法看清配置。如您所见,这有点涉及到 IB 网络,因为交换机大小不一,还有可能需要超额配置。

129-512 个节点:
集群变大并不意味着网络会变得更复杂。这个范围节点数的集群肯定需要一个基于 TCP 的网络。您可以使用 GigE 或 Infiniband 作为计算网络,最好用全截面带宽(规则总有例外)。最可能对这种集群使用 GigE 的情况是应用程序高度并行(即,在单节点上运行),但对只能在一些节点上运行的应用程序来说也是这样(也许 4 个或更少)。

当前最大的 DDR IB 交换机有 288 个端口。比这更大的集群必须使用 2 层交换机。配置网络使用我前面提过的基本原则。例如,对于 1:1 超额配置(即非超额配置),您必须要为节点提供 144 个端口,并为下一层交换机提供 144 个端口。幸运的是,很多 IB 交换机能够在交换机之间使用“更肥的”网络链路(12X 链路),这样做可以把交换机间链路缩小 3 倍 (12X / 4X = 3)。

节点数在这个范围内的集群的最复杂因素是存储。对于这个规模的集群,您可能会考虑某种分布式并行存储。现在问题变成了,要在管理网络还是计算网络上运行存储流量?如果在管理网络上运行存储流量,您应当让该网络具备完全对分带宽或使用 10GigE,或可能对管理网络进行超额配置。若要在计算网络上运行存储流量,就要确保计算流量之间没有冲突。此外还要记住您可以随时对计算网络进行超额配置。

结束语

从这篇文章的长度和对选项的讨论您可以发现,我们涉及了一些网络构建问题。您可以把这个当做一个问题看待,也可以像我那样,把它做为集群的一个特点来看。如此大的灵活度意味着您可以根据成本、要求的性能、升级能力或调试/管理的简易性来设计网络。