- A Simple Interconnection Network 一个简单的互连网络
- 2.1 网络规范和约束
- 2.2 拓扑
- 2.3 路由
- 2.4 流量控制
- 2.5 路由器设计
- 性能分析
A Simple Interconnection Network 一个简单的互连网络
我们将研究简单互连网络的架构和设计,以提供全局视图。我们将研究最简单的网络:具有下降流量控制的蝶形网络。尽管最终的网络成本高昂,但它强调了互连网络设计的许多关键方面。在后面的章节中,我们将学习如何创建更高效、更实用的网络。
2.1 网络规范和约束
与所有工程设计问题一样,网络设计从一组描述我们希望构建的规范和一组限制潜在解决方案范围的约束开始。
表 2.1 总结了本章示例网络的规格。这些规格包括网络的大小(64 个端口)和每个端口所需的带宽。如表中所示,峰值和平均带宽相等,这意味着输入以 0.25 GB/s 的速率连续注入消息。
这些规格包括网络的大小(64 个端口)和每个端口所需的带宽。如表中所示,峰值和平均带宽相等,这意味着输入以 0.25 GB/s 的速率连续注入消息。
随机流量,其中每个输入以相同的概率发送到每个输出,预计消息大小为 4 到 64 字节。
此外,服务质量和可靠性规范允许丢弃数据包。也就是说,并非每个数据包都需要成功传送到目的地。正如我们将看到的,丢弃数据包的能力将简化我们的流量控制实现。
我们的示例网络设计的约束如表 2.2 所示。这些约束指定了每个包装级别的容量和成本。我们的网络由组装在电路板上的芯片组成,电路板上又通过电缆连接。这些约束指定了可以通过每个级别的模块接口传递的信号数量1,以及每个模块的成本。对于电缆,约束还指定了在不减少电缆带宽的情况下可以通过的最长距离。
2.2 拓扑
我们的示例网络具有蝶形拓扑。从单个输入端口的角度来看,蝴蝶看起来像一棵树。 (参见图 2.1。)树的每一层都包含交换节点,与终端节点不同,交换节点不发送或接收数据包,而仅传递数据包。此外,每个通道都是单向的,如箭头所示,从输入流向输出节点(图中从左到右)。
我们还必须决定网络的加速,确定蝴蝶的基数,并确定如何将拓扑映射到封装级别。网络的加速比是网络总输入带宽与网络理想容量的比率。容量被定义为假设完美的路由和流量控制,网络在给定流量模式下可以实现的最佳吞吐量。加速比为 1 的设计意味着输入的需求与网络传输流量的理想能力完全匹配。提供更多的加速可以增加设计的余量,并允许实现中的非理想情况。
对于蝶形网络,将每个网络通道的大小设置为与单个输入端口具有相同的带宽,可实现 1 的加速。要看到这一点,请考虑随机流量下对任何特定通道的需求 - 将每个输入的流量比例相加通过该通道发送的请求始终等于输入端口带宽。
在设计的网络中相当于设计带宽为 0.25 GB/s 的通道。我们选择加速比为8。对加速比的选择以及封装限制决定了每个开关节点的输入和输出数量,称为蝶形基数。例如,图2.1中的蝶形设计的基数为2。每个开关节点都在单个芯片上实现,因此通道总数(输入和输出)乘以通道宽度不得超过每个芯片的信号150的限制。
为了实现 8 的加速,我们需要 8 × 0.25 = 2 Gbytes/s 的网络通道带宽,这需要 16 个信号,每个信号以 1 Gbit/s 的速度运行。考虑到 2 个额外的开销信号,通道有 18 个信号宽,我们只能在芯片上安装 150/18 ≈ 8 个通道。因此,我们选择基 4 蝶形,每个开关节点有 4 个输入通道和 4 个输出通道,总共 8 个通道。
为了将每个输入端口连接到所有 64 个输出端口,我们的蝶形需要 log4 64 = 3 级或级的开关节点。因此,我们的网络将是一个基数 4、3 级蝶形网络,或简称为 4 元 3-fly。该网络的完整拓扑如图 2.2 所示。
设计拓扑的最后一步是对其进行封装。我们已经做出了一项封装决定,即为每个芯片放置一个交换节点。通过选择网络基数以满足每个芯片的限制,我们知道开关节点是在我们的设计限制内封装的。这些芯片必须安装在电路板上,并且为了最小化成本,我们希望在电路板上安装尽可能多的开关芯片。
2.3 路由
我们简单的蝴蝶网络采用目的地标签路由destination-tag routing,其中目的地地址的位用于选择网络每一级的输出端口。在我们的 64 节点网络中,目标地址是 6 位。每级交换机使用 2 个地址位来选择 4 个交换机输出中的 1 个,将数据包定向到剩余节点的适当四分之一。例如,考虑将数据包从输入 12 路由到输出节点 35 = 100011。请注意,交换机输出选择的顺序完全独立于数据包的输入端口。例如,从节点 51 到输出 35 的路由遵循相同的选择顺序。
2.4 流量控制
网络的通道每个周期传输 16 位宽的物理数字或 phits 数据。但是,我们指定网络必须传送包含 32 到 512 位数据的整个数据包。因此,我们使用一个简单的协议,如图 2.4 所示,将 phits 组装成数据包。如图所示,每个数据包都包含一个标头 phit,后跟零个或多个有效负载 phit。标头 phit 表示新数据包的开始,并且还包含我们的路由算法使用的目标地址。有效负载 phits 保存数据包的实际数据,分为 16 位块。给定数据包的 phits 必须是连续的、无中断的。
该字段描述了每个16位字是标头(H)、有效载荷(P)还是空(N)字。数据包的长度可以是任意的,但始终由一个H字后跟零个或多个P字,然后依次跟随零个或多个N字组成。使用正则表达式表示,流经链接的零个或多个数据包可以描述为(H P ∗N ∗)∗。
主要的流量控制工作:为数据包分配资源。为简单起见,我们的蝴蝶网络使用丢弃流量控制。如果数据包到达交换机时所需的输出端口正在使用中,那么数据包将被丢弃(丢弃)。流量控制假定某种高级别的端到端错误控制协议最终会重新发送丢弃的数据包。丢弃数据包是最糟糕的流量控制方法之一,因为它具有较高的数据包丢失率,并且会浪费通道带宽,因为最终会丢弃这些数据包。
2.5 路由器设计
我们的蝶形网络中的每个交换节点都是一个路由器,能够在其输入上接收数据包,根据路由算法确定其目的地,然后将数据包转发到适当的输出。
单个路由器的框图如图2.5所示。路由器的数据路径由四个 18 位输入寄存器、四个 18 位 4:1 多路复用器、四个移位器(用于移位标头 phits 的路由字段)和四个 18 位输出寄存器组成。
Phits 在每个时钟周期到达输入寄存器,并路由到所有四个多路复用器。在每个复用器处,相关的分配器检查每个 phit 的类型和每个头 phit 的下一跳字段,并相应地设置开关。来自所选输入的Phits接下来被路由到移位器。在分配器的控制下,移位器将所有头位向左移动两位,以丢弃当前路由字段并暴露下一个路由字段。顾名思义,每个分配器将一个输出端口分配给四个输入端口之一。
分配器的第二级是一个四输入固定优先级仲裁器。仲裁器接受四个请求信号并生成四个授权信号。
我们经常使用 Verilog 寄存器传输语言(RTL)模型来描述硬件。 Verilog 模型是模块的文本描述,描述其输入、输出和内部功能。
性能分析
我们通过三个指标来衡量一个互连网络:成本、延迟和吞吐量。延迟和吞吐量都是性能指标:延迟是数据包遍历网络所需的时间,吞吐量是网络每秒从输入到输出可以传输的位数。
如图2.9所示,数据包以λ的速率注入网络。不是用每秒位数来表示 λ,而是将其标准化为 2 GB/s 的通道带宽,因此 λ = 1 对应于以通道允许的最大速率注入数据包。在数据包进入网络之前,它们会与通过网络重新发送的数据包合并。这两个速率 p0 的总和就是注入网络第一阶段的数据包的总速率。在第一阶段,可能会发生一些数据包冲突,并且一小部分数据包 p1 将通过而不被丢弃。速率 p0 - p1 的差异表示已丢弃的数据包。如果要重新发送丢弃的数据包,这些数据包将流回输入并重新注入。类似地,第二阶段p2和第三阶段p3的输出速率将由于更多的冲突和丢包而继续下降。
因此,对于网络的第i+1阶段,交换机的每个端口的输入速率为pi。由于速率已经被归一化,它们也可以解释为在任何特定周期内到达输入端口的数据包的概率。然后,离开特定输出端口的数据包的概率pi+1等于不希望该输出端口的数据包的概率的补。由于流量模式是随机的,每个输入将以pi/4的概率希望一个输出,因此没有任何输入希望到达特定输出的概率就是(1 - pi/4)^4。(2.1) 因此,第i+1阶段的输出速率pi+1为pi+1 = 1 - (1 - pi/4)^4。(2.2) 应用方程2.2 n = 3次,分别用于网络的每个阶段,并瞬时忽略重新发送的数据包(p0 = λ),我们计算得到,在输入占空比为λ = 0.125(对应于速度增益为8)的情况下,三个交换阶段的输出占空比分别为0.119、0.114和0.109。也就是说,以0.125的流量占链路容量作为网络输入,网络的接受流量或吞吐量仅为0.109。其余的0.016(12.6%的数据包)由于网络中的冲突而被丢弃。
图2.10绘制了我们示例网络的提供流量和吞吐量之间的关系。两个轴都归一化到网络的理想容量。我们可以看到,在负载非常低时,几乎所有的流量都通过了网络,吞吐量等于提供的流量。然而,随着提供的流量的增加,丢弃很快就成为一个主要因素,如果不重新发送数据包,网络的吞吐量将远低于提供的流量。最终,吞吐量达到饱和,达到43.2%的渐近值。无论提供给网络多少流量,我们都无法实现超过43.2%的通道容量的吞吐量,无论数据包是否被重新发送。请注意,我们可以将该网络的速度增益设置为低至2.5,从而将最大注入速率限制为0.4。然而,最初选择速度增益为8将在延迟方面带来好处,我们将在之后看到。此外,我们的网络实际上只实现了不到一半的容量,这也是为什么几乎从不在实践中使用丢弃流控制的主要原因。在第12章中,我们将看到如何构建流量控制机制,使我们能够在不饱和的情况下使网络的运行速率超过90%的通道容量。
图2.11还显示了另一个延迟曲线,它包含了队列时间的模型。随着吞吐量接近饱和,延迟增长到无穷大的形状,在互连网络中更为典型。
请务必记住,公式 2.3 和图 2.11 给出了数据包的平均延迟。对于许多应用程序,我们不仅对平均延迟感兴趣,而且对延迟的概率分布感兴趣。特别是,我们可能会担心最坏情况下的延迟或延迟的变化(有时称为抖动)。
对于蝶形网络来说,这是最好的情况。正如我们将看到的,对于某些流量模式(例如位反转)6,网络的性能比此处描述的要差得多。蝶形网络对不良流量模式的敏感性很大程度上是由于从网络的每个输入到每个输出只有一条路径。我们将看到具有路径多样性的网络在困难的负载下表现得更好。