Chapter02 - 互连网络原理与实践:一个简单的互连网络

互连网络原理与实践(Principles and Practices of Interconnection Networks)

第 2 章 一个简单的互连网络

本章考察一个简单互连网络的体系结构与设计,以提供一个全局视图。我们将考察尽可能简单的网络:一个采用丢弃式流量控制的蝶形网络。尽管得到的网络代价不菲,但它凸显了互连网络设计的许多关键方面。在后面的章节中,我们将学习如何构建更高效、更实用的网络。

2.1 网络规格与约束

与所有工程设计问题一样,网络设计从一组描述"我们想要构建什么"的规格 (specification)和一组限制潜在解范围的约束(constraint)开始。本章示例网络的规格汇总于表 2.1。这些规格包括网络的规模(64 端口)和每端口所需的带宽。如表所示,峰值带宽与平均带宽相等,这意味着输入端以 0.25 Gbyte/s 的速率连续注入消息。预期为随机流量(每个输入以相等概率发往每个输出),消息长度 4 至 64 字节。此外,服务质量和可靠性规格允许丢弃分组------即并非每个分组都必须成功递送到目的地。我们将看到,允许丢弃分组将简化流量控制的实现。当然,一份实际的规格书会长得多、具体得多。例如,QoS 规格会指明可以丢弃多大比例的分组以及在什么情况下丢弃。不过,这组规格已足以说明我们设计中的许多要点。

表 2.1 示例网络的规格。为简化设计,只给出部分可能的设计参数。

参数 取值
输入端口 64
输出端口 64
峰值带宽 0.25 Gbyte/s
平均带宽 0.25 Gbyte/s
消息延迟 100 ns
消息长度 4--64 字节
流量模式 随机
服务质量 允许丢弃
可靠性 允许丢弃

表 2.2 示例网络的约束。

参数 取值
端口宽度 2 比特
信号速率 1 GHz
每芯片信号数 150
芯片成本 $200
芯片引脚带宽 1 Gbit/s
每电路板信号数 750
电路板成本 $200
每电缆信号数 80
电缆成本 $50
电缆长度 1 Gbit/s 下 4 m

示例网络设计的约束如表 2.2 所示。这些约束规定每一级封装的容量与成本。我们的网络由芯片组成,芯片装配在电路板上,电路板再通过电缆互连。约束规定了每一级上可穿越模块接口的信号¹数量,以及每个模块的成本。对电缆,约束还规定了在不降低电缆带宽的前提下可传输的最长距离。²

¹ 注意,"信号"不一定等于"引脚"。例如,使用差分信号(每个信号需要两个引脚)是很常见的。

² 对给定类型的电缆,带宽乘距离平方 Bd2Bd^2Bd2 是常数,因此要让电缆传输距离加倍,带宽必须降为原来的四分之一,即 250 Mbits/s。

2.2 拓扑

为简单起见,我们的示例网络采用蝶形(butterfly)拓扑。从单个输入端口的视角看,蝶形网络像一棵树(见图 2.1)。树的每一级包含交换节点;与终端节点不同,交换节点不发送也不接收分组,只是传递分组。此外,如箭头所示,每条通道都是单向的,从输入节点流向输出节点(图中从左到右)。然而,选定蝶形并没有完成拓扑设计的全部工作,我们还必须决定网络的加速比 (speedup)、确定蝶形的基数(radix),并确定拓扑如何映射到各个封装层级。

图 2.1 一个 8 节点蝶形网络。数据从左侧的输入节点(圆圈)经过三级交换节点(矩形)流向右侧的输出节点(圆圈)。交换节点用其级号和地址标记。如箭头所示,所有通道都是单向的。

网络的加速比是网络总输入带宽与网络理想容量之比。容量定义为:在给定流量模式下,假设路由和流量控制都完美,网络能达到的最好吞吐率。按加速比 1 设计意味着输入的需求恰好与网络递送流量的理想能力相匹配。提供更大的加速比可以增大设计裕量,容忍实现中的非理想因素。从某种意义上说,加速比类似于土木工程师的结构安全系数概念。例如,安全系数为 4 的建筑按承受其规格 4 倍的应力来设计。

对蝶形网络而言,把网络中每条通道的带宽设计成与单个输入端口相同,加速比即为 1。要理解这一点,可以考虑随机流量下任一特定通道上的需求------把每个输入经该通道发送的流量份额相加,总需求总是恰好等于输入端口带宽。在我们的简单网络中,这对应于把通道带宽设计为 0.25 Gbyte/s。然而,鉴于后续设计选择将一切从简而不追求高效,我们选择加速比 8。这个加速比相当大(布鲁克林大桥的安全系数也不过 6!),但在本书的进程中,我们将很快学会如何降低加速比需求。

加速比的选择与封装约束一起决定了每个交换节点的输入输出数,即蝶形的基数。例如,图 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 个输出端口,蝶形网络需要 log⁡464=3\log_4 64 = 3log464=3 级交换节点。因此,我们的网络将是一个基数 4、3 级的蝶形,简记为 4 元 3 蝶(4-ary 3-fly)。该网络的完整拓扑如图 2.2 所示。这幅图乍看可能令人望而生畏,但它只是图 2.1 中小蝶形的扩展。连接输入 1 到全部 64 个输出的通道同样构成一棵树(图中加粗所示),只是现在树的度为 4------即我们网络的基数。

拓扑设计的最后一步是封装。我们已经做出了一个封装决策:每块芯片放一个交换节点。通过选择满足每芯片约束的网络基数,我们知道交换节点的封装符合设计约束。这些芯片必须安装到电路板上,而为了最小化成本,我们希望在一块电路板上安装尽可能多的交换芯片。但约束是不能超过进出一块电路板 750 个信号的最大引脚数。³ 这一约束由电路板一侧连接器上能布线的最大信号数决定------即连接器密度(信号数/米)乘以连接器长度(米)。

³ 在真实系统中,还会有电路板上信号密度的约束。

图 2.2 给出了交换节点在电路板之间的一种有效划分。8 块电路板各自的边界用虚线框表示。如图所示,网络的封装方式是:第一级交换放在 4 块电路板上,每板 4 片;后两级封装在另外 4 块板上,每板 8 片,连接成一个 16 端口蝶形网络。我们验证每块电路板满足引脚约束:每块板有 32 条各含 18 个信号的通道进出,总引脚数为 32 × 18 = 576

个信号,完全在 750 个信号的约束之内。细心的读者会注意到,第一级电路板上其实可以放 5 个路由器芯片(共 40 条通道、720 个信号),但这并不高效,因为仍然需要 4 块第一级电路板。同样,第二级电路板上也不能放 10 个路由器芯片,因为所需的 46 条通道(828 个信号)会超出电路板的引脚数。

图 2.2 我们的基数 4、3 级蝶形网络的拓扑与封装。通道为单向,数据从左(输入)向右(输出)流动。
图 2.3 我们的基数 4、3 级蝶形网络的板间布线。

最后,电路板之间的连接由电缆承载,如图 2.3 所示。图中每条粗灰线对应一条电缆,把四条 18 位通道从一块电路板送到另一块。8 块电路板用 16 条这样的电缆互连:第一级的每块板到第二、三级的每块板各一条。8 块电路板安排在同一个机箱内,这些电缆都远在最大长度限制之内。

退一步看,我们拓扑中的交换节点可以把任何输入连接到任何输出。第一级交换在存放其余各级的 4 块电路板之间选择;第二级交换在所选电路板上组成第三级的 4 片芯片中选择 1 片;最后,最后一级交换选择所需的输出端口。在网络中为分组选路时,我们正是利用这种分治结构。

2.3 路由

我们的简单蝶形网络采用目的标签路由(destination-tag routing)⁴:用目的地址的各位在网络的每一级选择输出端口。在我们的 64 节点网络中,目的地址为 6 比特。每级交换用 2 个地址比特在 4 个交换输出中选择 1 个,把分组引导到剩余节点中正确的四分之一。例如,考虑把分组从输入 12 路由到输出节点 35 = 100011₂。目的地址的最高双比特(10)选择交换节点 0.3 的第三个输出端口,把分组带到交换节点 1.11。然后,中间双比特(00)选择交换节点 1.11 的第一个输出端口。从交换节点 2.8,最低双比特(11)选择最后一个输出端口,把分组递送到输出端口 35。

⁴ 关于目的标签路由更完整的描述见 8.4.1 节。

请注意,这一系列交换输出选择与分组的输入端口完全无关。例如,从节点 51 路由到输出 35 遵循同样的选择序列:第一级选第三个交换端口,第二级选第一个端口,第三级选最后一个端口。因此,只需在每个分组中保存目的地址,就能实现该路由算法。

为统一起见,所有交换节点都对目的地址字段的最高双比特进行操作。然后,在分组离开节点之前,地址字段左移两位,丢弃刚用过的比特,把下一个双比特暴露到最高位位置。例如,经第一级路由到节点 35 之后,原地址 100011₂ 被移位为 001100₂。这一约定使我们能在网络的每个位置使用相同的交换节点,无须特殊配置,也便于把网络扩展到更多节点------唯一的限制是地址字段的长度。

2.4 流量控制

我们网络的通道每周期传输 16 位宽的物理数字 (physical digit,phit)。然而,规格要求网络递送包含 32 到 512 比特数据的完整分组。因此,我们用一个简单的协议(如图 2.4 所示)把 phit 组装成分组。如图所示,每个分组由一个头部 phit 后跟零个或多个载荷 phit 组成。头部 phit 标志一个新分组的开始,并包含路由算法使用的目的地址。载荷 phit 保存分组的实际数据,分成 16 位的块。同一分组的各个 phit 必须连续,不得中断;但分组之间通道上可以传输任意数量的空 phit。为区分头部字与载荷字并标志分组结束,我们给每条通道附加一个 2 比特的类型字段。该字段把每个 16 位字描述为头部(H)、载荷(P)或空(N)字。分组可以是任意长度,但总是由单个 H 字后跟零个或多个 P 字、再跟零个或多个 N 字组成。用正则表达式记号,链路上流动的零个或多个分组可描述为 (HP∗N∗)∗(HP^*N^*)^*(HP∗N∗)∗。

图 2.4 我们简单网络的分组格式。竖直方向为时间(周期),水平方向为一条通道的 18 个信号。最左的信号含 phit 类型,其余 16 个信号含目的地址或数据;空 phit 中这些信号闲置不用。
表 2.3 示例网络的 phit 类型编码。

类型 编码
H 11
P 10
N 00

把 phit 组装成分组之后,就可以讨论流量控制的主要任务:把资源分配给分组。为简单起见,我们的蝶形网络采用丢弃式流量控制(dropping flow control)。当分组到达交换节点时,如果它需要的输出端口正被占用,该分组就被丢弃(抛弃)。这种流量控制假设某个更高层的端到端差错控制协议最终会重发被丢弃的分组。丢弃分组是最差的流量控制方法之一,因为它分组丢失率高,而且把通道带宽浪费在最终被丢弃的分组上。我们将在第 12 章看到,有好得多的流量控制机制。不过,对眼下的目的而言,丢弃式流量控制是理想的,因为它在概念上和实现上都极其简单。

2.5 路由器设计

蝶形网络中的每个交换节点都是一台路由器,能够在其输入上接收分组,根据路由算法确定目的地,然后把分组转发到相应的输出。到此为止我们做出的设计决策造就了一台非常简单的路由器。单台路由器的框图如图 2.5 所示。路由器的数据通路包括:四个 18 位输入寄存器、四个 18 位 4 选 1 多路选择器、四个移位器(用于移位头部 phit 的路由字段)和四个 18 位输出寄存器。数据通路共含 144 位寄存器和约 650 个门(以 2 输入 NAND 等效门计)。

图 2.5 简单网络路由器的框图。

phit 每个时钟周期到达输入寄存器,并被送到全部四个多路选择器。在每个多路选择器处,关联的分配器检查每个 phit 的类型以及每个头部 phit 的下一跳字段,并据此设置开关。来自所选输入的 phit 接着被送到移位器。在分配器的控制下,移位器把所有头部 phit 左移两位,丢弃当前路由字段,露出下一个路由字段;载荷 phit 原样通过。

路由器的控制完全在于与每个输出关联的四个分配器,它们控制多路选择器和移位器。顾名思义,每个分配器把一个输出端口分配给四个输入端口之一。其中一个分配器的原理图如图 2.6 所示。分配器由四个几乎相同的位片组成,每个位片分为三部分:译码(decode)、仲裁(arbitrate)和保持(hold)。在译码部分,每个输入 phit 的高四位被译码。每个译码器产生两个信号:若输入 i 上的 phit 是头部 phit 且路由字段的高两位与输出端口号匹配,则信号 requestᵢ 为真,表示该输入 phit 请求使用该输出端口来路由以这个头部 phit 开始的分组。译码器还产生信号 payloadᵢ,当输入 i 上的 phit 是载荷 phit 时为真。分配器的保持逻辑利用这个信号,在一个分组的持续时间内(只要所选输入端口上是载荷 phit)保持通道。

图 2.6 图 2.5 路由器的分配器。

分配器的第二级是一个四输入固定优先级仲裁器(arbiter)。⁵ 仲裁器接受四个请求信号,产生四个授权信号。如果输出端口可用(由信号 avail 指示),仲裁器把端口授予发出请求的第一个(最上面的)输入端口。某个授权信号有效会使相应的选择信号有效,从而选择多路选择器的相应输入送到输出。若任一授权信号有效,表明正有一个头部通过多路选择器,于是 shift 信号有效,使移位器移位路由字段。

⁵ 实践中绝不会在这种应用中使用固定优先级仲裁器,因为它导致极不公平的路由器,用在网络中可能引发活锁或饿死问题。第 18、19 章将考察更好的仲裁与分配方法。

分配器的最后一级在一个分组的持续时间内保持输出端口到输入端口的分配。信号 lastᵢ 表示上一周期选择了输入端口 i。如果该端口本周期承载载荷 phit,则该载荷属于同一分组,于是通过使 holdᵢ 有效来保持通道。该信号使 selectᵢ 有效并使 avail 无效,阻止仲裁器把端口分配给新的头部。

本书将经常使用 Verilog 寄存器传输级(RTL)模型来描述硬件。Verilog 模型是对模块的文本描述,说明其输入、输出和内部功能。图 2.7 给出了图 2.6 分配器的 Verilog 描述。模块声明在一段注释之后开始:给出模块名 alloc,并声明其八个输入输出。接下来五行按位宽和维度声明这些输入输出,然后声明内部连线和寄存器。真正的逻辑从十条 assign 语句开始,它们描述分配器的组合逻辑,与图 2.6 的原理图完全对应。最后,always 语句定义了保存状态 last3:0 的触发器。

图 2.7 分配器的 Verilog 代码。

verilog 复制代码
// allocator: assigns output port to input port based on type
//   of input phit and current field of routing header
// once assigned, holds a port for the duration of a packet
//   (as long as payload phits are on input).
// uses fixed priority arbitration (r0 is highest).
module alloc(clk, thisPort, r0, r1, r2, r3, select, shift) ;
  input clk ;              // chip clock
  input [1:0] thisPort ;   // identifies this output port
  input [3:0] r0,r1,r2,r3 ;// top four bits of each input phit
  output [3:0] select ;    // radial select to multiplexer
  output shift ;           // directs shifter to discard upper two bits
  wire [3:0] grant, select, head, payload, match, request, hold ;
  wire [2:0] pass ;
  reg [3:0] last ;
  wire avail ;
  assign head    = {r3[3:2]==3,r2[3:2]==3,r1[3:2]==3,r0[3:2]==3} ;
  assign payload = {r3[3:2]==2,r2[3:2]==2,r1[3:2]==2,r0[3:2]==2} ;
  assign match   = {r3[1:0]==thisPort,r2[1:0]==thisPort,
                    r1[1:0]==thisPort,r0[1:0]==thisPort} ;
  assign request = head&match ;
  assign pass    = {pass[1:0],avail}&~request[2:0] ;
  assign grant   = request&{pass,avail} ;
  assign hold    = last&payload ;
  assign select  = grant|hold ;
  assign avail   = ~(|hold) ;
  assign shift   = |grant ;
  always @(posedge clk) last = select ;
endmodule

除了作为描述具体硬件的便捷文本方式,Verilog 还可用作仿真输入语言和综合输入语言。因此,以这种方式描述硬件之后,我们可以仿真它以验证操作正确,然后综合出门级设计,在 ASIC 或 FPGA 上实现。供读者参考,整个路由器的 Verilog 描述在图 2.8 中给出。为简洁起见,多路选择器和移位器模块的描述从略。

图 2.8 路由器的 Verilog 代码(原文代码从略,内容为:模块 simple_router,含四个 18 位输入寄存器、四个分配器实例 a0--a3、四个 4 选 1 多路选择器、四个移位器以及输出寄存器)。

2.6 性能分析

我们用三个指标来评判互连网络:成本、延迟和吞吐率。延迟和吞吐率都是性能指标:延迟是分组穿越网络所需的时间,吞吐率是网络每秒能从输入运输到输出的比特数。对我们这个采用丢弃式流量控制的示例网络,这些性能指标深受分组被丢弃概率的影响。

我们的分析从网络的一个简单模型开始,针对被丢弃分组由网络重发的情形(见图 2.9)。首先,由于网络输入输出之间的对称性以及随机流量模式,只需考虑来自单个输入的分组。如图 2.9 所示,分组以速率 λ 注入网络。λ 不用比特每秒表示,而是对 2 Gbytes/s 的通道带宽归一化,因此 λ = 1 对应于以通道允许的最大速率注入分组。分组进入网络之前,先与经网络重发的分组合并,这两个速率之和 p0p_0p0 是注入网络第一级的分组总速率。在第一级,分组可能发生冲突,较小比例的分组 p1p_1p1 将不被丢弃地通过。速率之差 p0−p1p_0 - p_1p0−p1 代表被丢弃的分组。若被丢弃的分组要重发,这些分组流回输入端重新注入。类似地,第二级输出速率 p2p_2p2 和第三级输出速率 p3p_3p3 将因更多冲突和丢弃而继续下降。

图 2.9 采用丢弃式流量控制并重新注入被丢弃分组的 3 级蝶形网络的简单解析模型。λ 为注入速率,p0p_0p0 至 p3p_3p3 为各级输出速率,pi−pi+1p_i - p_{i+1}pi−pi+1 为各级丢弃的速率。

这些输出速率可以从网络输入端开始、向输出端迭代计算。我们蝶形网络的一级由 4×4 交叉开关构成,并且由对称性,开关每个输入的到达分组速率相等。因此,对网络的第 i+1 级,交叉开关每个端口的输入速率为 pip_ipi。由于速率已归一化,它们也可以解释为任一特定周期内分组到达某输入的概率。于是,分组离开某一特定输出的概率 pi+1p_{i+1}pi+1 等于 1 减去"没有分组想要该输出"的概率。由于流量模式是随机的,每个输入以概率 pi/4p_i/4pi/4 想要某个输出,因此没有输入想要某一特定输出的概率为

(1−pi4)4(2.1)\left(1 - \frac{p_i}{4}\right)^4 \tag{2.1}(1−4pi)4(2.1)

因此,第 i+1 级的输出速率 pi+1p_{i+1}pi+1 为

pi+1=1−(1−pi4)4(2.2)p_{i+1} = 1 - \left(1 - \frac{p_i}{4}\right)^4 \tag{2.2}pi+1=1−(1−4pi)4(2.2)

对网络的 n = 3 级各应用一次式 (2.2),并暂时忽略重发的分组(p0=λp_0 = \lambdap0=λ),可以算出:当输入占空因数 λ = 0.125(对应加速比 8)时,三级交换输出处的占空因数分别为 0.119、0.114 和 0.109。也就是说,当网络输入端的提供流量为链路容量的 0.125 时,网络的接受流量(即吞吐率)只有 0.109,其余的 0.016(分组的 12.6%)因网络中的冲突而被丢弃。

一旦被丢弃的分组重新注入网络,就会出现一种有趣的动态:重发被丢弃的分组会提高网络的有效输入速率 p0p_0p0,这又会增加被丢弃分组的数量,如此循环。如果这一反馈回路稳定下来,使网络能够支撑最终的输入速率(p0≤1p_0 \le 1p0≤1),那么注入网络的流量将等于流出的流量(p3=λp_3 = \lambdap3=λ)。

图 2.10 画出了示例网络中提供流量与吞吐率的关系。两个轴都对网络的理想容量归一化。可以看到,负载很低时几乎所有流量都能通过网络,吞吐率等于提供流量。然而,随着提供流量增加,丢弃很快成为主要因素;如果分组不重发,网络吞吐率会远低于提供流量。最终吞吐率饱和,渐近线为 43.2%。无论向网络提供多少流量,也不管分组是否重发,吞吐率都无法超过通道容量的 43.2%。注意,我们也可以让本网络以低至 2.5 的加速比运行,等效于把最大注入速率限制在 0.4;不过,我们将会看到,原先选择的加速比 8 在延迟方面有好处。此外,我们的网络达不到其容量的一半,这正是丢弃式流量控制在实践中几乎从不被采用的主要原因。在第 12 章,我们将看到如何构建能让网络在通道容量 90% 以上运行而不饱和的流量控制机制。

图 2.10 我们简单网络的吞吐率随提供流量(注入速率)变化的曲线。图中同时给出了分组被丢弃且不重发(drop)和重发(reinject)时的吞吐率。

在以上关于吞吐率的讨论中,我们把提供流量和吞吐率都表示为通道容量的分数。全书都遵循这一约定,因为它比用比特每秒表示这些数字能提供多得多的洞察。例如,说网络在容量的 24% 处饱和,比说它在 480 Mbytes/s 处饱和,能让人对流量控制方法的相对性能有更深刻的认识。在下面的讨论中,我们用类似方式把延迟归一化。

分组的延迟由它成功穿越网络之前必须重传的次数决定。网络中没有其他分组时,分组的头部用 6 个时钟周期穿越网络------在三级中的每一级都要经过两个触发器寄存器。为清晰起见,我们把这 6 周期延迟称为相对延迟 1.0,并把更高负载下的网络延迟相对这个数值表示。本节只关心头部延迟;分组的总延迟还包括一项串行化项,等于分组长度除以通道带宽 L/b,反映分组尾部追上头部所需的时间。

随着负载增加,比例为 pDp_DpD 的分组被丢弃,必须重传:

PD=p0−p3p0P_D = \frac{p_0 - p_3}{p_0}PD=p0p0−p3

这些重传分组中同样的比例再次被丢弃、必须第二次重传,依此类推。我们把每种情形的延迟按该情形的概率加权求和,得到分组的平均延迟。假设(不现实地)源端能立即发现分组被丢弃并在 6 个周期后重传,那么被丢弃 i 次的分组延迟为 i+1。分组恰好被丢弃 i 次的概率是 PDi(1−PD)P_D^i(1-P_D)PDi(1−PD)。对加权延迟求和,得到平均延迟:

T=∑i=0∞(i+1)PDi(1−PD)=11−PD=p0p3(2.3)T = \sum_{i=0}^{\infty}(i+1)P_D^i(1-P_D) = \frac{1}{1-P_D} = \frac{p_0}{p_3} \tag{2.3}T=i=0∑∞(i+1)PDi(1−PD)=1−PD1=p3p0(2.3)

该延迟作为提供流量的函数画在图 2.11 中。网络无负载时,延迟从 1(6 个时钟周期)开始。随着吞吐率增加,一些分组被丢弃,平均延迟上升,在吞吐率约 0.39 处翻倍。最后,网络在吞吐率 0.43 处达到饱和,此时无论延迟多大都无法实现更高的吞吐率。

图 2.11 我们简单网络的相对延迟随提供流量(注入速率)变化的曲线。实线为正文介绍的简单模型,虚线加入了额外的排队延迟。

对中等负载,式 (2.3) 给出了合理的延迟模型;但当网络接近饱和时,"分组可以立即重发"的假设就值得怀疑了。这是因为重发分组与新注入分组同时进入网络的概率越来越大。在真实实现中,一个分组必须等另一个先走,从而产生额外的排队延迟。图 2.11 还画出了另一条计入排队时间模型的延迟曲线。这条曲线的形状------延迟随吞吐率趋近饱和而趋向无穷------在互连网络中更为典型。练习 2.9 将把这两条曲线与仿真结果比较。

需要牢记,式 (2.3) 和图 2.11 给出的是分组的平均延迟。对许多应用,我们不仅关心平均延迟,还关心延迟的概率分布。特别是,我们可能关心最坏情况延迟或延迟的波动(有时称为抖动,jitter)。例如,在视频回放系统中,回放前保存分组所需的缓冲器大小由抖动决定,而不是由平均延迟决定。对我们的示例网络,分组以相对延迟 i 被接收的概率为

P(T=i)=PD(i−1)(1−PD)P(T = i) = P_D^{(i-1)}(1 - P_D)P(T=i)=PD(i−1)(1−PD)

这种延迟的指数分布导致最大延迟无穷大,因此抖动也无穷大。更现实的做法是用给定比例(例如 99%)分组所达到的延迟上界来表示抖动。

上述性能指标都是针对均匀随机流量的。对蝶形网络而言,这是最好的情形。我们将看到,对某些流量模式(如位反转⁶),网络的性能远差于此处所述。蝶形网络对恶劣流量模式的敏感性,很大程度上源于网络中每个输入到每个输出只有一条路径。我们将看到,具有路径多样性的网络在困难负载下表现好得多。

⁶ 在位反转(bit-reversal)流量模式中,二进制地址为 {bn−1,bn−2,...,b0}\{b_{n-1}, b_{n-2}, \ldots, b_0\}{bn−1,bn−2,...,b0} 的节点向地址为 {b0,b1,...,bn−1}\{b_0, b_1, \ldots, b_{n-1}\}{b0,b1,...,bn−1} 的节点发送分组。

2.7 习题

2.1 简单网络的成本。 用表 2.1 和表 2.2 中的数据计算我们简单网络的成本。

2.2 计入功耗约束。 把每块电路板的芯片数限制为六片,以确保能向这些芯片供给足够的功率并妥善散热。给出一个除原有约束外还满足这一新约束的封装方案。该封装方案的成本是多少?

2.3 公平的分配器。 修改图 2.7 中分配器的 Verilog 代码,实现一种更公平的仲裁。通过仿真验证你的新分配器并描述你的设计。

2.4 提高路由器的度。 如果把简单路由器扩展为 5×5 而非 4×4 开关,就可以用它实现二维网格或环面网络。描述如何扩展路由器和分组格式以增加一个输入端口和一个输出端口。

2.5 减少同一分组的多次丢弃。 修改 Verilog 代码,给重传的分组以优先级。也就是说,如果两个头部 phit 在蝶形网络的同一交换节点同时请求同一输出,分配器应总是先把资源给重传的分组。在 phit 头部中加入一个优先级字段来携带这一信息,并假设分组重新注入时该字段已被正确设置。

2.6 多次丢弃与平均延迟。 引入诸如习题 2.5 中那种减少分组多次丢弃的方案,能降低平均分组延迟吗?解释为什么能或为什么不能。

2.7 更大的蝶形对丢弃的影响。 如果给示例蝶形网络增加更多级(并相应增加节点数),被丢弃分组的比例会增加吗?如果改为增大交换节点的度,丢弃比例会如何变化?只考虑丢弃概率,增加节点时扩大交换节点的度与增加级数,哪种更高效?

2.8 现实的丢弃延迟。 在真实网络中,被丢弃分组的重传通常有显著延迟:首先要留出确认到达源端的时间,然后还要留出超时以容忍确认的延迟。修改式 (2.3) 以反映这一延迟。

2.9 仿真。 编写一个模拟示例网络的简单计算机程序。用该程序以实验方式确定网络延迟随提供流量的变化。你的结果与式 (2.3) 和图 2.11 的解析结果相比如何?同时与排队模型给出的相对延迟比较:

T=T02+p0p3(T02+p02(1−p0))T = \frac{T_0}{2} + \frac{p_0}{p_3}\left(\frac{T_0}{2} + \frac{p_0}{2(1-p_0)}\right)T=2T0+p3p0(2T0+2(1−p0)p0)

其中 T0T_0T0 是零负载延迟------即从不被网络丢弃的分组的延迟。

2.10 仿真。 给习题 2.9 的模拟器增加超时机制,并与习题 2.8 建立的模型的结果比较。评述任何主要差异。


相关推荐
数智化管理手记1 小时前
应收应付资金占用过高怎么办?应收应付搭配账龄分析怎么做
大数据·网络·数据库·人工智能·数据挖掘
ICT系统集成阿祥1 小时前
公司搬迁同网段并行割接方案|新旧场地同时办公,不用改终端 IP
网络·架构·迁移·割接
treesforest1 小时前
你以为只是一串数字?你的IP地址,正在悄悄暴露这些信息
网络·网络协议·tcp/ip·网络安全·ip归属地查询·ip风控
emfuture1 小时前
工业自动化现场四大典型故障复盘:从环境适配到边缘智能的工程实践
运维·网络·自动化
思茂信息2 小时前
CST 辐射边界反射过高优化方法
网络·emc·emi·cst·仿真软件·电磁仿真
奥莱维2 小时前
经济型酒店智能客控轻量化方案
大数据·网络·人工智能
电商API_180079052472 小时前
导购比价小程序场景|京东联盟商品详情对接方案|多规格图文拉取技术实操
网络·小程序·网络爬虫
拾光Ծ3 小时前
【Linux网络】网络通信实战:UDP & TCP Socket编程实现Echo Server
linux·网络·网络协议·tcp/ip·udp·线程池
灯澜忆梦5 小时前
GO_网络编程---网络协议
网络·网络协议·golang