一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于减少跳数的优化的自适应路由的制作方法

2021-12-08 02:27:00 来源:中国专利 TAG:

用于减少跳数的优化的自适应路由
1.政府权利声明
2.本文所述的发明是按照下述一项或多项合同在美国政府的支持下完成的。美国政府对本发明享有一定的权利。
[0003][0004]
相关申请的交叉引用
[0005]
本技术要求于2019年5月23日提交的名称为“network switch[网络交换机]”的美国临时专利申请号62/852273、2019年5月23日提交的名称为“network interface controller[网络接口控制器]”的美国临时专利申请号62/852203、2019年5月23日提交的名称为“network computer system[网络计算机系统]”的美国临时专利申请号62/852289的权益,所述美国临时专利申请的公开内容出于所有目的而通过引用以其全文并入本文。


背景技术:

[0006]
随着支持网络的设备和应用变得越来越普遍,各种类型的流量以及不断增加的网络负载继续要求底层网络架构提供更高的性能。例如,诸如高性能计算(hpc)、流媒体和物联网(iot)等应用可以生成具有鲜明特征的不同类型的流量。因此,除了诸如带宽和延迟等常规网络性能指标之外,网络架构师还继续面临诸如可扩展性、多功能性和效率等挑战。
附图说明
[0007]
参照以下附图根据一个或多个不同的实施例详细地描述本公开。附图仅被提供用于说明性目的,并且仅描绘典型实施例或示例实施例。
[0008]
图1图示了可以在其中实施各种实施例的示例网络。
[0009]
图2a图示了根据各种实施例的示例交换机。
[0010]
图2b图示了根据各种实施例的在流通道上下文中操作的示例交换机。
[0011]
图2c图示了根据各种实施例的在交换机上维护流状态信息的示例。
[0012]
图3a图示了根据各种实施例的在示例交叉开关交换机(crossbar switch)内实施的交叉开关。
[0013]
图3b图示了根据各种实施例的与图2的示例边缘交换系统的端口相对应的示例瓦片(tile)矩阵。
[0014]
图3c图示了根据各种实施例的构成图3b的瓦片矩阵的示例瓦片。
[0015]
图3d图示了根据各种实施例的示例年龄队列实施方式。
[0016]
图4a和图4b是在图2的示例边缘交换系统的每个端口处实施的示例frf部件的框图。
[0017]
图5图示了根据各种实施例的路由选择的示例。
[0018]
图6图示了根据各种实施例的局部和全局负载值更新和使用的示例。
[0019]
图7a图示了基于平均负载的路由的示例。
[0020]
图7b图示了根据各种实施例的基于相邻交换机负载的自适应路由的示例。
[0021]
图8图示了根据一个实施例的能够执行用于基于负载的自适应路由的指令的示例计算部件。
[0022]
图9是其中可以实施本文描述的各种实施例的示例计算部件。
[0023]
附图并非是穷举的,并且不将本公开限制于所公开的精确形式。
具体实施方式
[0024]
本公开描述了可以容纳百亿亿次级计算的系统和方法,例如,以百亿亿次级速度执行如模拟、数据分析、人工智能工作负载等数据密集型任务。特别地,提供了hpc网络或互连结构,其可以是以太网兼容的,能够连接到第三方数据存储装置,并且可以使用具有极高带宽(例如,每个具有例如支持以非常低的直径(例如,仅三个网络跃点)创建大型网络的64个200gbps的端口的交换机近似12.8tb/s/dir)的交换机部件来构建。此外,可以通过新颖的拥塞控制机制、自适应路由、以及允许在带宽整形、优先级、以及路由策略方面具有灵活性的流量分类的使用来实现低时延。
[0025]
使用自适应路由技术,将修改后的路由方法结合到网络中,其中,最小路由在整个路径上进一步分类为首选最小路由和正常最小路由。其中,首选路由是首选更直接的最小路由的路由,导致到目的地的跳数更少。
[0026]
图1示出了包括多个交换机的示例网络100,所述示例网络也可以被称为“交换机结构”。如图1中所图示的,网络100可以包括交换机102、104、106、108以及110。每个交换机可以在交换机结构100内具有唯一的地址或id。各种类型的设备和网络可以耦接到交换机结构。例如,存储阵列112可以经由交换机110耦接到交换机结构100;基于无限带宽(ib)的hpc网络114可以经由交换机108耦接到交换机结构100;多个终端主机(如主机116)可以经由交换机104耦接到交换机结构100;并且ip/以太网网络118可以经由交换机102耦接到交换机结构100。例如,如交换机102等交换机可以通过如网络接口卡(nic)、交换机、路由器或网关等以太网设备来接收802.3帧(包括封装的ip有效载荷)。专门为网络100格式化的ipv4或ipv6包、帧等也可以被接收、通过交换机结构100传输到另一个交换机(例如,交换机110)。因此,网络100能够同时处置多种类型的流量。通常,交换机可以具有边缘端口和结构
端口。边缘端口可以耦接到在结构外部的设备。结构端口可以经由结构链路耦接到结构内的另一个交换机。
[0027]
通常,流量可以经由边缘交换机的入口端口注入交换机结构100,并且经由另一个(或相同)边缘交换机的出口端口离开交换机结构100。入口边缘交换机可以将已注入的数据包分为流,这些流可以通过流id进行标识。流的概念不限于特定的协议或层(如开放系统接口(osi)参考模型中的第2层或第3层)。例如,流可以映射到具有特定源以太网地址的流量、源ip地址与目的地ip地址之间的流量、对应于tcp或udp端口/ip 5元组(源和目的地ip地址、源和目的地tcp或udp端口号、以及ip协议号)的流量、或由在终端主机上运行的进程或线程产生的流量。换句话说,流可以被配置为映射到任何物理或逻辑实体之间的数据。该映射的配置可以远程完成或在入口边缘交换机上本地完成。
[0028]
在接收到已注入数据包之后,入口边缘交换机可以为该流指派流id。该流id可以被包括在特殊的报头中,入口边缘交换机可以使用该报头来封装已注入包。此外,入口边缘交换机还可以检查已注入包的原始报头字段以确定适当的出口边缘交换机地址,并将该地址作为目的地地址包括在封装报头中。应注意,流id可以是特定于链路的本地有效值,并且该值可以仅对于交换机上的特定输入端口是唯一的。当包转发到下一跳交换机时,包进入另一条链路,并且流id可以相应地更新。由于流的包要经过多条链路和交换机,因此与该流相对应的流id可以形成唯一的链。即,在每个交换机处,在包离开交换机之前,包的流id可以更新为传出链路所使用的流id。流id之间的这种从上游到下游的一对一映射可以在入口边缘交换机处开始并在出口边缘交换机处结束。因为流id只需要在传入链路内是唯一的,所以交换机可以容纳大量的流。例如,如果流id为11位长,则一个输入端口最多可以支持2048个流。此外,用于映射到流的匹配模式(包的一个或多个报头字段)可以包括更多个位。例如,32位长的匹配模式(其可以包括包报头中的多个字段)可以映射最多2^32个不同的报头字段模式。如果结构有n个入口边缘端口,总共可以支持n*2^32个可识别流。
[0029]
交换机可以为每个流指派单独的专用输入队列。该配置允许交换机监测和管理各个流的拥塞程度,并防止在将共享缓冲区用于多个流时可能发生的队头阻塞。当包被传送到目的地出口交换机时,出口交换机可以生成确认(ack),并在上行方向沿着相同的数据路径将该确认发送回入口边缘交换机。由于该ack包经过相同的数据路径,因此该路径上的交换机可以通过监测未完成的、未确认的数据量来获得与对应流的传送相关联的状态信息。然后可以使用该状态信息来执行特定于流的流量管理,以确保整个网络的健康和对流的公平处理。如下文更详细解释的,这种逐流排队与特定于流的传送确认相结合可以使交换机结构实施有效、快速和准确的拥塞控制。进而,交换机结构可以以显著提高的网络利用率来传送流量,而不会出现拥塞。
[0030]
可以基于需求动态或“即时”地建立和释放流。具体地,当数据包到达交换机并且先前没有向该包指派流id时,可以由入口边缘交换机建立流(例如,确立流id到包报头的映射)。当该包穿过网络时,可以沿着包所经过的每个交换机指派流id,并且可以确立从入口到出口的流id链。属于同一流的后续包可以沿数据路径使用相同的流id。当包被传送到目的地出口交换机并且数据路径上的交换机接收到ack包时,每个交换机可以更新其关于该流的未完成的、未确认的数据量的状态信息。对于该流,当交换机的输入队列为空并且没有更多未确认的数据时,交换机可以释放流id(即,释放该流通道)并将流id重新用于其他流。
这种数据驱动的动态流建立和拆除机制可以消除集中流管理的需要,并允许网络快速响应流量模式变化。
[0031]
应注意,本文描述的网络架构与通常使用openflow协议的软件定义网络(sdn)不同。在sdn中,由中央网络控制器来配置交换机,并且基于第2层(数据链路层,如以太网)、第3层(网络层,如ip)或第4层(传输层,如tcp或udp)报头中的一个或多个字段来转发包。在sdn中,这种报头字段查找在网络中的每个交换机处执行,并且不存在如在本文所述的网络中所做的基于流id的快速转发。此外,由于openflow报头字段查找是使用三元内容可寻址存储器(tcam)完成的,因此这种查找的成本可能很高。而且,由于报头字段映射配置是由中央控制器完成的,每个映射关系的建立和拆除相对较慢,可能需要大量的控制流量。因此,sdn网络对各种网络情况(如拥塞)的响应可能较慢。相比之下,在本文描述的网络中,可以基于流量需求动态地建立和拆除流;并且包可以通过固定长度的流id转发。换句话说,流通道可以是数据驱动的,并以分布式方式进行管理(即,建立、监测和拆除),而无需中央控制器的干预。此外,基于流id的转发可以减少所使用的tcam空间量,并且因此可以容纳更多个流。
[0032]
参考图1所示的示例,假设存储阵列112要使用tcp/ip向主机116发送数据。在操作期间,存储阵列112可以发送第一个包,所述第一个包具有主机116的ip地址作为目的地地址以及在tcp报头中指定的预定tcp端口。当该包到达交换机110时,交换机110的输入端口处的包处理器可以识别该包的tcp/ip 5元组。交换机110的包处理器还可以确定该5元组当前未映射到任何流id,并且可以向该5元组分配新的流id。此外,交换机110可以基于目的地(即,主机116的)ip地址来确定该包的出口交换机,即,交换机104(假设交换机110知道主机116耦接到交换机104)。随后,交换机110可以用指示新指派的流id和交换机104的结构地址的结构报头来封装所接收的包。交换机110然后可以基于结构转发表来调度要向交换机104转发的封装包,所述结构转发表可以由结构100中的所有交换机使用诸如链路状态或距离向量等路由算法来计算。
[0033]
应注意,当接收到第一个包时,上述操作可以基本上以线路速度执行,几乎没有缓冲和延迟。在第一个包被处理并被调度进行传输之后,来自相同流的后续包可以被交换机110更快地处理,因为使用了相同的流id。另外,流通道的设计可以使得流通道的分配、匹配和解除分配可以具有基本相同的成本。例如,可以在几乎每个时钟周期中同时执行流通道的基于查找匹配的条件分配和另一个流通道的单独、独立的解除分配。这意味着生成和控制流通道几乎不会为包的常规转发增加附加开销。另一方面,拥塞控制机制可以将一些应用的性能提高三个数量级以上。
[0034]
在数据路径上的每个交换机(包括交换机110、106和104)处,可以为该流提供专用输入缓冲区,并且可以跟踪已传输但未确认的数据量。当第一个包到达交换机104时,交换机104可以确定所述包的结构报头中的目的地结构地址与其自己的地址相匹配。作为响应,交换机104可以根据结构报头对包进行解封装,并将解封装的包转发到主机116。此外,交换机104可以生成ack包并将该ack包发送回交换机110。当该ack包经过相同的数据路径时,交换机106和110可以各自针对该流的未确认的数据更新其自己的状态信息。
[0035]
通常,网络内的拥塞会导致网络缓冲区被填充。当网络缓冲区已满时,理想情况下,试图通过缓冲区的流量应当减慢或停止。否则,缓冲区可能会溢出,并且包可能会被丢
弃。在常规网络中,通常在边缘处端对端地进行拥塞控制。网络的核被认为仅用作“笨水管”,其主要目的是转发流量。这样的网络设计通常对拥塞的响应缓慢,因为通常无法快速将拥塞信息发送到边缘设备,并且所产生的边缘设备所采取的动作并不总是能够有效地消除拥塞。这种缓慢的响应进而限制了网络的利用率,因为为了保持网络畅通无阻,网络运营商通常需要限制注入网络中的流量总量。此外,端对端拥塞控制通常只有在网络尚未拥塞的情况下才有效。一旦网络严重拥塞,端对端拥塞控制将不起作用,因为拥塞通知消息本身可能拥塞(除非使用与数据面网络不同的单独控制面网络来发送拥塞控制消息)。
[0036]
相比之下,流通道可以防止这种拥塞在交换机结构内增长。当流正在经历一定程度的拥塞时,流通道机制可以识别这种情况,并且作为响应,可以减慢或停止同一流的新包进入结构。进而,这些新包可以缓冲在边缘端口上的流通道队列中,并且仅当同一流的包在目的地边缘端口处离开结构时才被允许进入结构。该过程可以将结构内该流的总缓冲要求限制为不会导致结构缓冲区变得太满的量。
[0037]
通过流通道,交换机能够获得关于结构内未完成的在途中的数据量的相当准确的状态信息。可以针对入口边缘端口上的所有流汇总该状态信息。这意味着可以知道通过入口边缘端口注入的数据总量。因此,流通道机制可以对结构中的数据总量设置限制。当所有边缘端口都应用该限制动作时,可以很好地控制整个结构中的包数据总量,这进而可以防止整个结构饱和。流通道还可以减慢结构内的单个拥塞流的进度,而不会减慢其他流。该特征可以使包远离拥塞热点,同时防止缓冲区变满并确保为无关流量提供空闲缓冲区空间。
[0038]
通常,流通道可以为跨交换机结构的每个通信会话定义一条路径。属于每个流的路径和数据量可以在与交换机结构的每条链路相关联的一组动态连接流表中描述。在每个入口端口、边缘和结构上,可以定义一组流通道队列。每个流通道可以有一个队列。当包到达时,它们可以被指派到边缘端口上的流通道,或者已经被链路伙伴的出口结构端口在结构入口端口上指派到流通道。流通道信息可以用于将包引导到适当的流通道队列中。
[0039]
图2a图示了可以用于创建交换机结构(例如,图1的交换机结构100)的示例交换机202(其可以是交换机102、104、106、108以及110中的任何一个或多个交换机的实施例)。在该示例中,交换机202可以包括多个通信端口,如端口220。每个端口可以包括发射器和接收器。交换机202还可以包括处理器204、存储设备206和流通道交换逻辑块208。流通道交换模块208可以耦接到所有通信端口并且可以进一步包括交叉开关交换机210、efct逻辑块212、ifct逻辑块214和ofct逻辑块216。
[0040]
交叉开关交换机210包括交叉开关,所述交叉开关可以被配置为在通信端口之间转发数据包和控制包(如ack包)。efct逻辑块212可以处理从边缘链路接收的包并且基于包中的一个或多个报头字段来将所接收的包映射到相应的流。另外,efct逻辑块212可以组装fgfc以太网帧,所述fgfc以太网帧可以传送到终端主机以控制由各个进程或线程注入的数据量。ifct逻辑块214可以包括ifct,并且响应于控制包(如端点拥塞通知ack和基于结构链路信用的流控制ack)来执行各种流控制方法。ofct逻辑块216可以包括存储ofct的存储器单元,并且与另一个交换机的ifct逻辑块通信以在包被转发到下一跳交换机时更新包的流id。
[0041]
在一个实施例中,交换机202是可以提供64个网络端口的专用集成电路(asic),所述网络端口可以以100gbps或200gbps运行,从而实现12.8tbps的聚合吞吐量。每个网络边
缘端口可能能够支持ieee 802.3以太网和基于优化ip的协议以及门户(portal)(一种支持更高速率的小型消息的增强的帧格式)。以太网帧可以基于其l2地址进行桥接,也可以基于其l3(ipv4/ipv6)地址进行路由。优化的ip帧可以仅具有l3(ipv4/ipv6)报头,并进行路由。专用nic支持可以用于门户增强帧格式,并可以直接映射到网络100的结构格式上,所述结构格式例如为当交换机/交换机芯片(如交换机102、104、106、108以及110)被连接并相互通信时,提供某些控制和状态字段以支持多芯片结构的结构格式。如上所述,基于流通道的拥塞控制机制可以由这种交换机使用,并且还可以实现较小包的高传输速率(例如,每个端口每秒超过12亿个包),以适应hpc应用的需求。
[0042]
交换机202可以提供系统范围的服务质量(qos)分类、以及控制如何将网络带宽分配给不同分类的流量和不同分类的应用的能力,其中,单个特权应用可以访问多于一个分类的流量。在存在网络带宽竞争的情况下,仲裁器会基于包的流量分类和该分类可用的信用来选择要转发的包。网络100可以支持每个流量分类的最小带宽和最大带宽。如果分类没有使用其最小带宽,其他分类可能会使用未使用的带宽,但没有分类可以得到超过其最大分配带宽的带宽。管理带宽的能力提供了将网络资源以及cpu和存储器带宽专用于特定应用的机会。
[0043]
除了支持qos分类之外,交换机202实现基于流通道的拥塞控制,并且可以将例如具有蜻蜓拓扑的网络中的网络跃点数从五个网络跃点减少到三个。下面更详细描述的交换机202的设计可以降低网络成本和功耗,并且可以进一步促进改进应用性能的创新的自适应路由算法的使用。由多个交换机(如多个交换机202)创建的结构也可以用于例如在构建用于与第三方网络和软件集成的存储子系统时构建胖树网络。更进一步,交换机202的使用在保持有序包传送的同时实现了细粒度自适应路由。在一些实施例中,交换机202可以被配置为在完整的数据有效载荷到达之前将包的报头从输入端口发送到输出端口,从而允许输出端口负载指标反映未来负载,从而改进由交换机202做出的自适应路由决策。
[0044]
图2b示出了通过交叉开关交换机(例如交叉开关交换机210)进行的流通道操作的示例。交叉开关交换机210可以具有多个输入端口(如输入端口220b)以及多个输出端口(如输出220c)。交叉开关交换机210可以将包从输入端口转发到输出端口。每个输入端口都可以与多个输入队列相关联,每个队列被指派给到达该输入端口的不同传入流。例如,到达交换机给定端口的数据可以首先基于它们的各个流进行分离,并存储在特定于流的输入队列(如输入队列230)中。存储在输入队列中的包可以基于被设计用于控制拥塞的调度算法(在后面的章节中更详细地描述)出队并发送到交叉开关交换机210。在输出侧,一旦包通过交叉开关交换机210,它就可以被临时存储在输出传输队列(如输出传输队列240)中,该输出传输队列可以被离开同一输出端口的所有流所共享。同时,在包从输出传输队列出队并在传出链路上传输之前,可以使用传出链路的流id来更新包的报头。应注意,当流中的第一个包穿过网络时,可以完成这种逐跳的流id映射。当包到达下一跳交换机时,包可以再次存储在特定于流的输入队列中,并且可以重复相同的过程。应注意,流id用于区分在同一结构链路上传播的流,并且通常可以由该链路的发射器端指派,该发射器端是正在传输到该链路上的交换机输出端口。
[0045]
通过提供特定于流的输入队列,交换机可以允许每个流独立于所有其他流移动。交换机可以避免在共享输入缓冲区中很常见的队头阻塞问题。特定于流的输入队列还允许
单个流中的包保持有序。当流通过交换机时,可以针对该流在每个输入端口上分配特定于流的输入队列,并且这些输入队列变得链接起来,从而针对该流有效地形成跨整个结构的一个长队列,并且该流的包可以保持有序。
[0046]
属于流的包的成功传送的进度可以通过出口交换机的边缘端口生成的一系列ack来报告。ack数据包可以沿着数据包所经过的数据路径反向传播,并且可以由交换机根据在流表中维护的转发信息进行转发。当ack包向上游传播时,这些包可以被每个交换机的输入队列管理器处理,该交换机可以基于ack包所携带的信息来更新对应流的状态信息。ack包可以具有类型字段来提供有关下游数据路径的高级信息,如拥塞。交换机的输入队列管理器可以使用该信息来做出有关当前缓冲在其输入队列中的未决数据包的决策,如限制传输速率或更改转发路径。另外,输入队列管理器可以基于已缓冲流的状态信息来更新ack包中携带的信息,使得上游交换机可以做出恰当的决策。例如,如果给定流的输入队列遇到拥塞(例如,队列中的数据量高于预定阈值),则输入队列管理器可以将被转发到下一个上游交换机的ack包更新为包括该拥塞信息。
[0047]
如果ack对应于流的最后一个包,则交换机可以确定该流不存在任何未确认的数据。相应地,交换机可以通过删除流表中对应的条目来释放流通道。
[0048]
如上所述,每个交换机上的输入队列管理器可以维护有关给定流的已传输但未确认的数据的信息。图2c示出了数据路径上的交换机可以如何维护流状态信息的示例。在该示例中,流所采用的数据路径可以包括交换机202、252和262。已传输但未确认的流数据的量可以由变量“flow_extent”指示,该变量可以用固定长度的数据单元的数量来衡量,如256字节。此外,flow_extent和其他流状态信息可以由交换机的输入队列管理器维护,该输入队列管理器可以持续监测所有特定于流的队列。
[0049]
在图2c的示例中,交换机的输入队列管理器处的flow_extent的值为1,因为有一个数据单元已经从输入队列发送出去并通过交叉开关交换机转发。应注意,由于对要经由输出链路传输的所有数据包进行调度,由输入队列发送的数据包可能会临时缓冲在输出传输缓冲区中。当这样的包缓冲在输出端口的传输缓冲区中时,为了更新flow_extent值,输入队列仍可以将包视为已传输。
[0050]
相应地,由于交换机262处给定流的输入队列具有六个排队的数据单元,并且两个附加数据单元正在交换机252与262之间的途中,因此交换机252处的flow_extent值为9。类似地,交换机202处的flow_extent值为13,因为有三个数据单元存储在交换机252处的输入队列中,并且一个数据单元在交换机202与252之间的途中。
[0051]
通常,流通道可以保持分配给单个流,直到返回了流通道上发送的所有包的所有ack为止。这意味着流通道表条目可以在结构入口边缘端口附近比在出口边缘端口附近保持更长的活动时间。如果单个包被注入网络,可以为入口边缘端口分配流通道,然后可以为包所经过的下一个结构链路分配另一个流通道,依此类推,直到包到达最后一个结构链路时分配了最后一个流通道为止。每个分配可以生成表示为变量“flow_id”的流id,以标识结构链路的流表的条目。(在下面结合图4a的描述中提供了关于流通道表的更多细节。)该第一个包可能会导致在该包经过交换机结构的每个结构链路上分配不同的flow_id。
[0052]
在每个交换机的输入队列处,流通道表条目可以指示每个流从该点向下游到流的出口目的地边缘端口的状态信息,包括flow_extent值。在本地输入端口上接收到的包可以
将该flow_extent值增大传入数据量,而ack可以将flow_extent减小已确认的已传送数据量。
[0053]
当包到达最终目的地出口端口时,可以为该包生成ack包并将其返回。可以使用在数据路径上的每个交换机的流通道表的对应条目中存储的数据路径信息来路由该ack。可选地,ack包本身不需要携带路径信息,并且因此可以小而轻。如果流上未发送其他数据包,则ack可以以相反的顺序释放每个流通道。一旦释放,就可以将每个交换机上的流通道分配给不同的流。
[0054]
如果另一个包在同一流上的第一个包之后,则需要在给定交换机释放流通道之前接收到对应于第二个包的ack。在一个实施例中,只有当同一流的所有已传输包的ack都已返回时,才能释放流通道。
[0055]
通常,各种协议可能要求有序包传送。即使当结构使用自适应路由来实现多个数据路径上的负载均衡时,也可以使用流通道来保证这种传送顺序。如果入口边缘端口与出口边缘端口之间的包(可能位于结构远端的不同交换机中)以非常低的速率注入,则所注入的每个包都可以到达其目的地并在注入下一个包之前将ack返回到源。在这种情况下,每个包都可以是前导包,并且可以使用最佳的可用动态自适应路由选择来自由选择跨结构的任何路径。这是可能的,因为第一个包可以定义流通过结构的路径。
[0056]
现在假设包注入速率稍微增加到相同流的下一个包在当前包的ack返回到源之前被注入的程度。第二个包可以在沿流的数据路径上的某个地方与第一个包的ack相会。在此相会点之后,ack将释放分配给第一个包的流通道,因为当ack被流通道的逻辑处理时,与第一个包相关联的flow_extent值将返回零。同时,第二个包现在可以定义新的流,因为它再次导致在每个后续结构链路上分配流通道。这第二个包虽然在此相会点之后导致流通道被分配,但仍可以基于动态自适应路由被转发到不同的路径。另一方面,在相会点之前,第二个包可以扩展由第一个包创建的未完成流以包括第二个包。这意味着第一个包的ack可能不会将flow_extent值减至零,并且在相会点之前流通道可以保持活动状态。这也意味着第二个包可以沿着第一个包所采用的确切路径到达相会点。应注意,当它跟随前一个包时,第二个包无法在第一个包之前到达出口边缘端口,因此可以保持正确的包顺序。
[0057]
如果该流的注入速率进一步增加,第二个包将在更靠近目的地边缘端口的位置处与第一个包的ack相会。取决于该流的数据包注入速率和数据包

ack的往返延迟,也有可能第三个、第四个、第五个或附加包在第一个包的ack返回到源边缘端口之前进入结构。最大包速率取决于包的大小和链路的带宽。数据包和ack的往返延迟可以是结构实施方式的重要参数,并且可以与最大包速率一起用于计算每条链路所需的最大流通道数。理想情况下,无论流量模式如何,设计都可以提供合理数量的未分配流通道。当到达入口边缘端口的大量包具有不同的目的地并且这些包具有较小大小和高注入速率时,对流通道数量的需求可能很高。在最极端的情况下,可以为每个包分配不同的流通道。当包的ack返回时,这些流通道被释放。相应地,所需的流通道数可以计算为((包速率)*(平均包到ack往返时延))。
[0058]
应注意,不要将单个流通道上的包速率与链路上的包速率混淆。如果流量模式使得许多小包被发送到不同的目的地,则发送到链路上的连续包可能有不同的目的地。这意味着每个包可能属于不同的流,并且可能是唯一使用对应流通道的包。在该示例中,链路可能会经历高包速率,但各个流的包速率可能较低。可选地,可以将多个ack(例如,48个ack)
聚合在一起形成单个ack帧,以用于在链路上传输并且由帧校验序列(例如,32位fcs)保护。例如,每个ack可以占用25位,并且帧可以有9字节的开销。即,全尺寸帧上每ack的开销约为9/(25/8*48)*100%=6%。该逻辑可以优化每帧的ack数量,因此当ack缓慢到达时,ack不需要等待太长时间便可聚合。例如,ack聚合逻辑块可以使用三个定时器基于传出链路的活动来管理ack传输。当新的ack到达ack聚合逻辑块时,可以启动这些定时器。如果传出链路空闲,则可以使用第一定时器(例如,其可以设置为30ns)来保持ack,同时等待附加的ack到达。当该定时器到期时,可以将在对应的时间窗口内接收到的所有ack聚合成一帧并传输到传出链路上。如果传出链路繁忙,则可以使用第二定时器(例如,其可以设置为60ns)来等待附加的ack。使用该第二定时器可以允许将更多的ack聚合到单个帧中,并且该帧仅在收集到预定数量的ack时才可以被传输。应注意,由于以太网成帧约束,单个帧中的一些数量的ack可以使用比其他数量的ack更少的每ack线路带宽。如果没有收集到有效数量的ack,并且传出链路仍然忙于发送正常数据包,则可以使用第三定时器,其例如可以设置为90ns。一旦第三定时器到期,就可以将所有收集到的ack聚合在一个帧中并传输到链路上。通过使用这三个定时器,系统可以显著减少在传出链路上发送ack的开销。
[0059]
在一些示例中,交换机的入口边缘端口可以使用结构报头来封装接收到的数据包,这允许使用流通道转发数据包。图3a示出了数据包的示例性结构报头。结构报头可以包括flow_id字段(其可以标识流通道)以及“data_flow”字段(其可以指示整个流的进度)。
[0060]
交叉开关交换机210可以包括在输入端口与输出端口之间路由数据/数据元素的单独的、分布式的交叉开关。在一些实施例中,如图3a中所图示的,在输入端口220b与输出端口220c之间有五个分布式交叉开关,包括请求交叉开关210a、授权交叉开关210b、信用交叉开关210c、ack交叉开关210d、以及数据交叉开关210e。
[0061]
请求交叉开关210a用于将请求从输入发送到目标输出年龄队列。授权交叉开关210b用于将授权返回给满足请求的输入。特别地,授权交叉开关210b返回指示包在输入缓冲区内的位置的指针。应当注意,当输出中存在用于对应包的空间时,将返回授权。授权交叉开关201b还可以可选地在输出中返回所请求的空间的信用。应当注意,当在输出(例如,输出端口220c)处有包的着陆点时返回授权,因此包不能被阻塞(尽管这些包可能面临资源的瞬时竞争)。
[0062]
应当理解,根据各种实施例,可以使用信用协议来保证在输出处存在针对请求的着陆空间。因此,可以使用信用交叉开关210c在输出中返回所请求的空间的信用。
[0063]
数据交叉开关210d用于将授权的包从输入缓冲区移动到目标输出缓冲区。ack交叉开关210e用于将ack包从输出端口220c传播到输入端口220b。根据保持在输出流通道表中的状态来操纵ack。
[0064]
应当理解,数据交叉开关210d移动具有报头和数据两者的多时钟包,而其他四个交叉开关(请求交叉开关210a、授权交叉开关210b、信用交叉开关210c、以及ack交叉开关210e)仅移动单时钟包报头。所有五个交叉开关都使用相同的架构,其中,行总线和列总线位于具有32个双端口瓦片(tile)的8x 4矩阵内(如下所述)。
[0065]
返回参考图2a,如上所述,交换机202可以具有多个发射/接收端口,例如,端口220。所述多个端口可以被构造成瓦片矩阵。图3b图示了这种瓦片矩阵300的示例。在一个实施例中,瓦片矩阵300包括32个瓦片,每个瓦片包括两个端口,所述两个端口用于实施端口
之间的交叉开关交换,以及用于提供以下项:交换机202的核心与外部高速串行信号之间的用于驱动信号离开交换机202的串行器/解串器(serdes)接口;到物理编码子层(pcs)的媒体访问控制(mac)子层接口;serdes与以太网mac功能之间的pcs接口;链路级重试(llr)功能,所述llr功能以逐包的方式进行操作,并使用有序集来传送初始化序列、ack、以及nack;以及用于在不同帧结构格式之间进行转换的入口变换块。每个瓦片包含交叉开关交换机,诸如用于交叉开关(210a

201e)中的每一个的交叉开关交换机210。
[0066]
每个交叉开关交换机210具有十六个输入220b(其行中的每个端口一个输入)以及八个输出220c(其列中的每个端口一个输出)。行总线可以从行中的每个源驱动到该行中的所有八个交叉开关(一对所有)。仲裁可以在从该行的十六个行总线到给定列中的八个列总线的交叉开关处执行。可以在每个行总线的每个16x 8交叉开关处提供缓冲,以便在竞争列总线期间吸收包。在一些实施例中,除非目标交叉开关的输入缓冲区中存在用于整个包的余地,否则将非巨型包保持在行总线之外。由于面积限制,即使没有足够的空间(交叉开关的输入缓冲区的大小被设置成仅用于接收非巨型包),也允许巨型包通过,其中,行总线被阻塞,直到所述包赢得仲裁并在其移动到列总线上时释放空间为止。
[0067]
列总线从给定的交叉开关驱动到列内的每个目的地端口(所有对所有)。每个目的地可以在来自四行的列总线之间具有另一个级别的仲裁。十六个行总线驱动八个交叉开关,每个交叉开关馈送八个列总线,行与列之间有4倍的加速。每行具有相同的连接,即,行总线中所示的单行的一对所有行总线连接。每个瓦片取决于交叉开关将具有每瓦片一个(请求、授权、信用)或两个(数据、ack)时钟延迟。这在最左边的列与最右边的列之间提供了最大七或十四个时钟延迟。通过信用交叉开关210c路由的信用返回可以具有每瓦片一个时钟延迟,并且因此,可以占用最大七个时钟来完成传输。
[0068]
应当注意,每列可以具有相同的连接,即,单列的所有对所有列总线连接,并且可以有每瓦片两个时钟延迟,导致得到从顶行到底行的六个时钟延迟。还应该理解,行总线和列总线两者都使用上述基于信用的协议来确定这些行总线和列总线何时能够进行发送。在行总线的情况下,源端口维护该行内交叉开关的输入缓冲区的信用计数。对于数据交叉开关,需要注意确定何时允许包进入行总线。如果针对特定交叉开关的输入缓冲区的授权全部通过单个队列,则在开始包传送之前需要用于在队列头部的包的空间。如果授权分布在多个队列中,为了防止小包把大包锁在外面,除非缓冲区中存在用于整个最大大小的包的空间,否则不会开始包传送。以这种方式,一旦行总线上的包传送开始,其就不会停止,直到整个包传送完毕为止。因此,交叉开关的输入缓冲区被配置为足够大以处置最大包大小,并具有附加空间以覆盖最坏情况的往返(包发送到信用返回)。对于巨型包将不是这种情况。为了节省缓冲区域,交叉开关的输入缓冲区的深度仅足以处理非巨型大小的mtu(1500个字节),其中,在等待获得对目标列总线的访问权限时允许巨型包阻塞行总线。
[0069]
对于列总线,每个交叉开关维护该列中每个目的地端口处的输入缓冲区的信用计数。与行总线不同,在列总线上开始传送该包之前,不要求信用可用于最大大小的包。当信用变得可用时,将移动包的各个字。因此,每个列总线的目的地处的输入缓冲区只需大到足以覆盖最坏情况的往返(包到信用)。
[0070]
图3c更详细地图示了由瓦片1处置的两个端口(例如,端口0和1)、以及每瓦片的交叉开关包括一组行总线和列通道的交叉开关220a的示例实施方式。以这种方式,每个端口
都有其自己的行总线,跨其行通信,并且每个瓦片都有前述16x 8交叉开关(用于进行拐角转弯)以及一组八个列通道(最多可提供给包含在该列中的八个端口)。换句话说,每个交叉开关交换机210具有十六个行总线输入缓冲区和八个可能的目的地。例如,对于从例如输入端口17行进到输出端口52的数据,数据从输入端口17沿着行总线被路由,经过进行16到8仲裁的本地交叉开关,并且然后向上经过列通道到输出端口52。在通过所有分布式交叉开关集的总路由方面,内部带宽是外部带宽的四倍,从而导致在通过交换机202路由几乎任何任意流量排列时能够跟上入口。
[0071]
可以在每个目的地的十六个源之间使用公平的轮询(round

robin)仲裁。对于数据交叉开关210d,一旦源赢得仲裁,所述源就保持对目的地列总线的控制,直到整个包已被发送为止。每个输出都授权有限数量的包有效载荷,因此预期当涉及更大的包时对给定列总线的竞争应该是相当有限的。因此,即使请求者之间的包大小可能存在较大差异,预期轮询仲裁也是足够的。
[0072]
与输出功能相关联的交换机202的部分通常对交换机结构格式内的帧进行操作,并且具有结构报头(例如,甚至对于到达并靠在单个交换机202内的以太网端口上的帧)。
[0073]
年龄队列输出控制[发明人问题
‑“
图1输出控制顶层框图”在哪里?这在临时申请中提及,但是没有对应的附图]负责经由请求交叉开关210a接受来自所有输入端口(例如,输入端口220b)的请求、缓冲请求,使用流量整形器按流量分类在这些请求之间进行仲裁,并将请求传递给将经由授权交叉开关210b授权的ofct 216。管理年龄队列缓冲以允许每个输入具有足够的空间来流动,同时还允许具有针对给定输出的多个流的输入占用更多空间。特别地,年龄队列空间由输出控制管理。年龄队列/输出控制还可以负责管理对链路的访问,要么对连接的输入缓冲区使用基于信用的流控制,要么对非结构链路使用基于暂停的流控制。当包被年龄队列释放时,它被提交以放到链路上。另外,年龄队列具有允许针对给定端口上的资源对在给定端口(例如,输入端口220b之一)上发起的包(诸如维护或归约包)进行仲裁的路径。
[0074]
请求从矩阵30的每一行经由列总线进入输出控制块。每个列总线馈送独立的fifo(例如,先进先出移位寄存器或缓冲区),其中,fifo中的空间通过信用进行管理。fifo的大小(深度为24)可以设置为覆盖往返加额外的空间,以允许将请求移出交叉开关210a

210e并防止队头阻塞。在写入fifo之前,可以检查请求的有效纠错码(ecc)。如果ecc检查的目的地字段中具有多比特错误(mbe)或单比特错误(sbe)(即,所述请求已路由到错误的端口),则认为所述请求是无效请求,并被丢弃,其中,标记了错误。
[0075]
可以在列总线fifo之间执行最近最少使用(lru)仲裁,以选择将哪个fifo转发到年龄队列管理。当请求从每个fifo中移除时,信用将返回到对应的交叉开关。传入列总线对应的行可以取决于瓦片在矩阵中的位置以及块位于瓦片的哪一半。
[0076]
输出缓冲区(obuf)向输出控制块发出请求,以在链路上发送归约和维护包。这些请求可以被赋予最高优先级。具有8个位置的fifo可以用于在这些归约/维护包请求等待资源时对其进行缓冲。归约包不需要使用流通道,并且维护包可以使用环回来创建流,使得不需要检查流通道可用性或流经ofct来创建授权。归约和维护包也不需要使用输出缓冲区中的任何空间,使得不需要检查空间。相反,可以执行对链路伙伴输入缓冲区的检查。如果允许,则可以授权整形队列(sq)或虚拟通道(vc),从而阻止在该周期期间授予来自年龄队列
路径的任何授权。
[0077]
对照max_frame_size检查要从输出缓冲区处理的下一个请求的大小。如果该请求超过此设置,则不处理请求并设置错误标志。这将导致输出缓冲区请求路径被阻塞,直到执行热复位位置。错误标志将保持设置直到复位完成。也可以通过将max_frame_size设置增加到卡住输出缓冲区请求的大小以上的值来解除条件。比较中使用的大小可以是输出缓冲区请求中指示的大小(其可以包括线路上使用的4字节帧校验和(fcs))。
[0078]
每个输入可以被赋予年龄队列空间的相同的固定分配。此年龄队列空间足够大,从而为每个sq/vc保留位置,并有足够的额外空间来覆盖请求/信用往返。管理它在其sq/vc上被赋予的空间取决于输入。该分配(fixed_al/oc)可经由每个输入队列(inq)中的控制和状态寄存器(csr)进行编程,并且可以在例如64至96个位置的范围内。剩余的年龄队列空间(8k

64*fixed_al/oc)可以是所有输入可用的共享空间。共享空间可以由输出管理,如果共享空间中有余地,它会在传入请求到达时将其从静态空间移动到共享空间,但受每个输入的限制。当将请求移动到共享空间时,(例如,立即)经由信用交叉开关210c返回信用,并在年龄队列中将所述请求标记为处于共享空间中。
[0079]
当请求被授权时,如果所述请求被标记为使用共享空间,则共享空间被记入信用。如果所述请求没有被标记为使用共享空间,则认为所述请求已经使用了静态空间,并且将信用与授权一起返回给输入。
[0080]
由于信用交叉开关210c中的冲突,可能无法在每个时钟周期都发送信用。因此,fifo为这些瞬态中断提供了缓冲。在从请求交叉开关获取请求之前,需要此fifo中的空间。可以使用深度为32个位置的fifo来限制它备份到请求交叉开关210a中的机会。共享空间对于任何输入(来自输入端口220b)可以占用多少空间可能具有限制。这些限制可以设置为可用空间的百分比。例如,如果限制被设置为50%,如果一个输入端口是活动的,则所述输入端口可以访问50%的缓冲区空间;如果是两个活动的输入端口,每个输入端口得到37.5%((space_used_by_l pace_left*.5)/2=(50% 50%*.5)/2);如果是三个活动输入端口,每个输入端口得到29.2%((space_used_by_2 space_left*.5)/3=(75% 25%*.5)/3),等等。另外,活动的输入端口使用的总空间可以限制为给定的总数(50%、75%、87.5%)。因此,分配给每个输入端口220b的空间可以根据当前活动的输入端口的数量而动态变化。添加活动的输入端口会导致其他活动的输入端口放弃它们的空间,然后新的输入会占用这些空间。
[0081]
考虑到划分在硬件中不容易完成,上述年龄队列信用管理功能可以实施为具有64个条目312的查找表310。年龄队列320中当前活动的输入的数量对查找表310进行索引315。查找表310中的值314反映了任何输入可以占用的共享空间位置数量以及它们整体可以消耗的总空间的限制。因此,由软件根据共有多少共享空间以及每个输入端口允许占用的百分比来对查找表310中的值314进行编程。随着更多的输入端口220b变为活动的,每个输入端口220b被允许的空间越来越少,并且可用的总空间会增加。不允许来自输入端口220b的在此限制以上或总量超过总空间限制的传入请求占用更多共享空间。为了跟踪年龄队列中活动的输入端口220b的数量,使用了一组64个计数器316(每个输入端口一个计数器)。当请求被放入年龄队列320中时,这些计数器会向上计数,并在其被取出(即,被授权)时向下计数。非零计数的数量的计数319用作查找表310的索引。另外,为了管理共享空间,可以使用
附加的一组64个计数器318来跟踪每个输入对共享空间的当前使用情况。也可以存在可以用于跟踪整体的共享空间使用情况的单个计数器334。将这些计数器与当前配额进行比较,以确定是否允许请求使用共享空间。计数器316、318可以是例如13位宽,以提供对可能略小于8k的对象的最大值的足够覆盖。
[0082]
年龄队列320可以使用其中具有8k个位置的单个存储ram 321。这些位置可以动态地分配给32个单独的队列(每个sq/vc一个队列),其中,每个位置由存储ram 321内的位置链表组成。这使每个sq/vc能够根据需要占用更多空间。
[0083]
可以使用指向队列前面的前端指针322和指向队列中下一项的每个位置的下一指针324来创建年龄队列320。队列中的最后一个位置可以由后向指针326指示。项从队列的前面取出并插入到队列的后面。除了上述数据结构之外,每个队列在其头部都有条目的fifo 328。这些fifo 328可以确保队列可以在来自请求ram 321的多时钟读取访问时间的情况下在每个时钟维持请求。当新请求到达时,如果该队列的头部fifo 328 328未满,则所述请求可以旁路请求ram 321直接写入头部fifo 328。一旦针对给定年龄队列的请求被写入请求ram 321,后续请求也被写入请求ram 321以保持顺序。一旦请求ram 321中不再有针对该年龄队列的请求并且头部fifo 328中有余地,就可以再次使用旁路路径。当从头部fifo 328读取请求,并且存在在请求ram 321中排队的对应请求时,就发起出队。一次可以读取一个头部fifo 328,使得可以在每个时钟周期发起单个出队操作。可以包括逻辑来处置正在进行或即将进行的入队操作与头部fifo 328被读取之间的各种竞争条件。
[0084]
上述用于年龄队列ram 321的ecc保护可以扩展到fifo 328以保护数据路径触发器。得到的结构可以包括8k个触发器(32个队列x深度5x sq位宽)。在生成ecc时,可以将年龄队列编号包括在计算中(但不存储),作为空闲列表管理的额外检查。当检查ecc时,如果队列号比特中有mbe或sbe,则可以认为请求出错。
[0085]
空闲列表ram可以是简单的fifo,每当执行复位时,所述空闲列表ram都会使用指向所有8k个条目的指针进行初始化。可以维护计数以跟踪在空闲列表内有多少条目是有效的。当取出条目时,条目会从fifo的前面弹出并使用。当返回条目时,条目被推送到fifo的后面。空闲列表头部的某个数量的条目(例如,三个条目)可以保持在触发器中,以便这些条目可以被快速访问。与采用用于年龄队列的头部fifo一样,ecc通过触发器携带以提供保护。得到的结构可以具有最少的触发器(57=深度3x 19位宽)。
[0086]
为了支持小包的全部性能,年龄队列支持每个时钟周期的入队和出队。针对入队操作的数据结构上的操作在下面讨论,并且可以取决于正在写入的队列是否为空而有所不同。
[0087]
在某些情况下,由于使用和更新不同的字段,可以轻松处置针对特定队列的同时入队和出队。可能会出现某些特殊场景,例如,当出队操作清空年龄队列时。为了处置这种场景,逻辑上首先发生出队,然后是入队操作。因此,空标志被视为当队列被出队操作清空时被设置,并且然后由于入队操作而被清除。
[0088]
可以在受制于输入缓冲区管理、输出缓冲区管理和流通道配额而允许被授权的请求之间执行上述仲裁。如果ofct输入fifo没有信用,也可以暂停仲裁。在一些实施例中,仲裁可以分两级执行。首先,流量整形仲裁可以用于在sq之间进行仲裁。赤字轮询仲裁可以用于在给定sq内的vc之间进行仲裁。流量整形仲裁可以使用如下的一系列令牌桶来控制每个
sq的带宽:八个叶桶,每个sq一个叶桶;四个分支桶;以及单个头桶。
[0089]
仲裁可以划分为三个分组,第一分组具有最高优先级,其次是第二分组,然后是第三分组。对于第一分组和第二分组,可以在有资格的sq之间以相同的方式处置仲裁。对于八个优先级中的每一个,可以在sq之间执行x8轮询仲裁(八个并行轮询仲裁)。可以在优先级之间执行固定仲裁。例如,分组3仲裁没有优先级,并且因此只是单个x8轮询仲裁。
[0090]
对于第一分组中的仲裁,每个仲裁的优先级来自叶桶中的设置。对于第二分组中的仲裁,优先级来自叶桶分支中的设置。在所有情况下,如果该请求赢得仲裁,则被检查为符合该分组的资格的桶也是从中获得包大小令牌的桶。
[0091]
关于年龄队列320选择,可以对包进行分类,以选择其请求将被转发到的sq。这允许与应用相关联的流量与源自不同应用或不同流量分类的流量不同地整形。这在连接到nic的边缘端口上可以是有用的,因为应用将被配置为使用节点上的资源共享,并且类似地将被授权一定比例的网络带宽。根据一个实施例,该分类是通过在包进入到结构时将包分类为流量分类标识符(ftag)(例如,作为结构帧报头的一部分的4位代码)和vlanid(vni)来执行。然后可以在包离开结构时使用ftag和vni来选择整形队列。
[0092]
可以使用配置寄存器来将ftag映射到sq。此配置与入队列(in queue)中的对应的配置相匹配。当输出缓冲区请求或返回链路伙伴信用时,它会将给定的ftag转换为sq。对于包注入,ftag位于r_tf_obuf_cfg_pfg_tx_ctrl中。对于测试生成,ftag位于测试控制寄存器中。当归约引擎(red)请求信用返回时,ftag位于ret_cdtjtag中。当从输出流中移除归约帧并且需要返回链路伙伴信用时,ftag位于帧报头中。
[0093]
关于本文讨论的sq,每个年龄队列320可以有由{sq,vc}寻址的32个sq。3位sq 330可以被认为是整形函数,并且vc选择该整形函数内的四个队列之一。对于以太网出口(边缘)端口,不需要vc来避免死锁。因此,所有32个sq 330都可用。在这种场景下,可以通过将来自r_tf_obuf_cfg_ftag_sq_map的sq基添加到vni的较低位来选择sq 330。5位总和定义了要发送到年龄队列的{sq,vc}。应当注意,当在出口端口注入帧时,vni不可用,并且因此可以直接使用sq基。对于结构链路,sq 330取自sq基的较高三位。vc可以在返回归约帧的信用时从帧报头中获取、或者在注入帧时从适当的控制csr(r_tf_obuf_cfg_test_ctrl或r_tf_obuf_cfg_pfg_tx_ctrl)中获取。
[0094]
链路伙伴输入缓冲区管理可以取决于链路所附接的设备的类型。诸如交换机202等设备可以使用基于信用的流控制,其中,每个信用表示输入缓冲区中的存储单元。其他设备可以使用基于标准的以太网暂停或基于优先级暂停的流控制。标记为在本地终止(lac term组)的请求不需要考虑链路伙伴输入缓冲区流控制,并且不需要更新任何相关联的计数器。当链路处于排空状态时,不需要考虑链路伙伴空间。
[0095]
对于基于信用的流控制,链路伙伴输入缓冲区可以分为八个缓冲区分类。每个sq 330都可以被指派给这8个缓冲区分类之一。为每个缓冲区分类维护信用,其中,每个信用表示链路伙伴输入缓冲区中的32个字节的存储。为了允许基于信用的流控制与各种设备(交换机、增强型nic)一起工作,每个设备可以具有不同的单元大小,单元大小是以32个字节为单位的可编程值。
[0096]
可以有两个vc集,其中,每个sq 330被指派给其中一个集。可以为每个vc保留最大帧大小的有用空间,并且每个vc集可以具有不同的最大帧大小。链路伙伴输入缓冲区的其
余部分是任何sq/vc均可使用的共享的动态空间,但受每个vc和缓冲区分类限制。
[0097]
伴随请求的大小表示线路上的包的大小,其中包括4字节的fcs。在将包写入链路伙伴输入缓冲区之前,这会在链路伙伴处转换为内部2字节的fcs,因此信用需要考虑此差异,这可能是单元大小边界处所涉及的一个因素。例如,对于96字节的单元,97或98的大小将占用单个单元。为了知道何时发生这种情况,请求包括校正项,所述校正项计算如下:req.len_correct=(byte_len%16)==1或2。
[0098]
需要进一步验证此项以将其转换为任何可能的单元大小边界。当长度刚好超过单元大小时该项才有效。在这种情况下,经验证的fen_correct项可以通过以下来确定:len_correct=(((16字节大小)%(2*32字节单元大小))==1)&req.len_correct
[0099]
下表说明了这些值如何适用于少数单元和包大小的示例:
[0100]
长度校正计算
[0101][0102]
伴随请求的大小使用8字节为单位,并且链路伙伴输入缓冲区单元大小是32字节的倍数(32*y,其中,y=来自csr的单元大小)。首先,将8字节大小转换为16字节大小(roundup((8字节大小)/2))。而且,将单元大小转换为以16字节为单位(2*y)。数学上,请求将使用的单元的数量可以通过以下来计算:rounddn(((16字节大小) 2*y
‑1‑
len_correct)/(2*y))=#个单元
[0103]
虽然在硬件中可以进行划分运算,但由于时序原因,无法在仲裁的关键路径中完成划分运算。代替地,使用替代的信用管理。即,信用以32字节为单位进行维护。当请求赢得仲裁时,使用以下计算来根据最大误差项(2*y

1)调整占用的信用数:rounddn(((16字节大小) 2*y

1)/2)=需要最大32字节的信用。因为此计算高估了包所需的信用,因此在接下来的时钟上,可以执行模运算(x=(16字节大小)mod2*y,y=来自csr的32字节单元大小)来确定实际余数。此值与len_correct项一起用于调整信用计数器。用于为x创建调整值(adf_val)的公式是:如果(x==0),则adj_val=y

1,否则如果(x==1和fen_correct),则adj_val=y,否则,adj_val=rounddn((x

1)/2)
[0104]
下表说明了96字节单元的请求信用示例,所述示例示出了交换机输入缓冲区的96字节单元(y=3)在若干包长度中使用的值。
[0105]
96字节单元的请求信用示例
[0106][0107]
如果请求在转发到链路伙伴输入缓冲区之前被过滤,则输出缓冲区逻辑返回sq和vc,以便sq和vc可以用于将信用返回到适当的信用计数器。不需要大小,因为包大小始终相同,即归约帧的长度(69字节或16字节大小=5)。
[0108]
链路的本地(主)侧维护从两个集上的每个vc发送的包数量(共8个)的计数、发送到每个vc的包数量(4个)的计数(以32字节为单位),以及为每个缓冲区分类发送的包数量(8个)的计数(以32字节为单位)。链路的链路伙伴(从)侧维护相同的一组计数,并定期在链路上发送这些计数。主从计数之间的差异是来自两个集上的每个vc的链路伙伴输入缓冲区中的包数量的计数以及每个vc和每个缓冲区分类当前占用的空间量的计数(以32字节为单位)。还维护所有包使用的空间总量的计数。计数器的总结如下:master_vcx_cnt[4]/slave_vcx_cnt[4]——发送到集x中的每个vc的包数量的主从计数;master_vcy_cnt[4]/slave_vcy_cnt[4]——发送到集y中的每个vc的包数量的主从计数;master_bc_cnt[8]/slave_bc_cnt[8]——每个缓冲区分类占用的空间量的主从计数,以32字节为单位;master_vc_cnt[4]/slave_vc_cnt[4]——每个vc占用的空间量的主从计数,以32字节为单位;master

tot

cnt/slave

tot

cnt——占用的空间总量的主从计数,以32字节为单位。
[0109]
热复位时所有计数器都设置为零。当链路处于排空状态或设置dbg_reset csr位以清除计数器的状态时,计数器也被强制为零。输出缓冲区过滤器将归约包引导至到链路伙伴输入缓冲区的路径以外的位置。在这种情况下,信号可以与包的sq和vc一起返回。同样,由于这些包的大小是固定的,因此不需要长度。此信息用于调整适当的主信用计数。
[0110]
如果请求的vc计数为0(表明其一个静态指派的时隙可用)或动态空间中存在最大大小帧的空间(受目标缓冲区分类和vc限制),则允许所述请求参与仲裁。最大帧大小可以有单个可编程值,用于所有vc和sq。输入缓冲区空间的请求校验可以使用基于信用的流控制来解决。
[0111]
基于信用的流控制可以用于通过两种方式划分动态空间,每种方式彼此独立:首先,基于对四个vc中的每一个可以占用多少动态空间的限制;以及其次,基于对八个缓冲区分类中的每一个可以占用多少动态空间的限制。在这两种情况下,限制都设置为可用空间的百分比。对于给定的包,应在其目标vc和缓冲区分类两者中提供可用空间。例如,如果每个空间的限制设置为50%,如果一个空间是活动的,它可以访问50%的缓冲区空间,如果有两个活动的,每个空间获得37.5%((50 50*.5)/2),如果有三个活动的,每个空间得到29.2%((75 25*.5)/3),等等。而且,这些活动的空间使用的总空间可以限制为给定的总数(50%、75%、87.5%)。因此,分配给每一者的空间根据当前活动的数量而动态变化。当另外
一个空间变为活动的时,其导致其他活动的空间放弃它们的空间中的某些空间,然后由新的一个空间占用这些空间。
[0112]
如上面讨论的划分功能一样,此功能被实施为查找表。对于此示例中的vc空间,存在16个条目,其中,每个条目指定每个vc可用的空间以及所有vc可用的总空间。对于缓冲区分类,可以存在256个条目,其中,每个条目指定每个缓冲区分类可用的空间以及所有缓冲区分类可用的总空间。用于每一者的空间都以2048字节为单位表示。每个表的深度足以覆盖活动成员(vc或缓冲区分类)的所有组合,其中,每个组合都能够对这些组合的百分比进行独立设置。在这种情况下,由软件按照共有多少动态空间以及允许每个空间在所有可能组合中所占的百分比来对表中的值进行编程。随着更多成员变为活动的,每个成员被允许的空间越来越少,并且可用的总空间会增加。对在此限制以上或总量在总限制以上的空间的请求不允许占用更多动态空间。
[0113]
如果vc或缓冲区分类在年龄队列中有请求或者如果vc或缓冲区分类有链路伙伴输入缓冲区空间的未完成信用,则认为所述vc或缓冲区分类是活动的。作为示例,考虑仅有4个空间(16个条目的表),百分比设置为space0(50%)、space1(40%)、space2(30%)、space3(10%),并且总动态空间为16kb。这将产生以下缓冲区空间示例表中给出的16字节为单位的值。
[0114]
缓冲区空间示例
[0115]
索引space3space2space1space0总计0n/an/an/an/an/a1n/an/an/a5125122n/an/a410n/a4103n/an/a3193987174n/a307n/an/a3075n/a250n/a4166666n/a255339n/a5947n/a2022703378098102n/an/an/a102994n/an/a4695631094n/a377n/a4711175n/a2993747481295284n/an/a3791378234n/a3897011480239319n/a63815792363153941024
[0116]
作为示例,索引7的行中的值计算如下:总计%=0.5 (1

0.5)*0.4 (1

0.5

(1

0.5)*0.4)*0.3=0.79;space0=(0.5/(0.5 0.4 0.3))*0.79*1024=337;space1=(0.4/(0.5 0.4 0.3))*0.79*1024=270;space2=(0.3/(0.5 0.4 0.3))*0.79*1024=202;总计=337 270 202=809
[0117]
如上所述,并返回参考图2,诸如交换机202等交换机可以用于创建交换机结构,其
中,交换机端口220可以被配置为作为边缘端口或结构端口操作。还如上所述,交换机202可以支持各种网络拓扑,包括但不限于例如蜻蜒和胖树拓扑。网络可以被认为包括一个或多个切片,每个切片都具有相同的整体拓扑,尽管切片在每个切片的填充方式方面可以不同。节点连接到每个切片上的一个或多个端口。当网络具有多个切片、并且节点连接到多于一个切片时,假设该节点连接在每个切片中的相同位置。
[0118]
交换机结构中的路由可以由在交换机202中实施的结构路由功能(frf)来控制。示例frf部件400在图4a和图4b中图示。应当理解,frf部件400的单独实例可以在交换机202的每个端口的输入逻辑内实施。fr部件400做出的路由决策可以应用于那些还不是已确立流的一部分的帧。应当注意,frf部件400不一定知道特定帧是否与流相关联,而是为在输入端口处呈现的每个帧做出独立的转发决策。frf部件400可以包括过滤器、表格、电路和/或逻辑(诸如选择电路/逻辑),以实现如本文所述的贯穿交换机结构的数据的路由。如所图示的,frf部件400至少包括:最小端口选择部件402(其包括最小表部件402a)、各种端口过滤器(允许端口过滤器、操作端口过滤器、忙端口过滤器);首选端口鉴别部件402b;伪随机向下选择部件/逻辑402c;例外表404(包括例外清单表404a);包括全局故障表406a的操作端口部件406;以及路由算法表408。如图4b中所图示的,frf部件400可以进一步包括:非最小端口选择部件410,其包括局部非最小选择部件410a和全局非最小选择部件410b;以及输出逻辑部件412(其是交换机的输出控制块的一部分),其包括自适应选择部件或逻辑412a。frf部件400包括其他部件,并且在本文中被描述。
[0119]
特别地,frf部件400使用首选端口鉴别器402b来确定首选端口以基于以下来转发在输入端口处呈现的每个帧:所接收的帧的目的地结构地址(dfa);帧的当前路由状态(帧在其路径上的位置、以及到达其当前路由状态所取的(多个)路径);交换机结构路由算法和配置;以及与使用忙端口过滤器的输出端口(帧将被转发到的上述首选端口)相关联的负载指标。
[0120]
frf部件400可以包括路由算法表408,该路由算法表可以体现为基于帧的当前路由状态确定有效选择的软件可配置表。有效的选择是诸如是否允许为帧的下一跳选择局部最小、全局最小、局部非最小、或全局非最小路径等决策。路由状态包括信息,诸如在其上接收到帧的vc、以及帧是在源、目的地还是中间分组中。路由算法表408连同自适应选择功能或逻辑412a(如下所述)还确定要用于帧的下一跳的vc。
[0121]
以使用单播dfa的帧路由为示例来描述。但是,应当注意,路由请求的dfa可以是单播或多播格式。单播格式可以包括9位全局id字段(global_id)、5位交换机id字段(switch_id)、以及6位端点id字段(endpoint_id)。全局id可以唯一标识网络内的分组。具体地,全局id标识帧必须传送到的最终分组。交换机id唯一标识全局id标识的分组内的交换机。端点id字段与全局id以及交换机id一起标识连接到网络结构的边缘以及帧将被传送到的端点。该字段映射到由全局id和交换机id标识的交换机上的一个端口或一组端口。
[0122]
多播格式包括13位的多播id字段(multicast_id)。该字段由frf部件400映射到帧要转发到的当前交换机上的一组端口。
[0123]
根据该信息,frf部件400确定帧的更新的路由状态,然后在帧内携带该状态。例如,为了在蜻蜓拓扑中实现路由,可以从帧的vc中收集帧的当前状态(上面讨论的)。基于为交换机结构指定的算法交换机结构路由规则(这些规则的选择在下面描述),frf部件400确
定要用于帧的下一跳的特定vc以避免任何死锁。可以取决于帧在其路径上的位置(例如,帧是在其源分组中、在中间分组中、还是在其目的地分组中)来提供额外的路由状态信息。应当注意,frf部件400使用允许端口过滤器、操作端口过滤器、忙端口过滤器等来执行端口过滤(下文更详细地描述)以确定帧将被转发到的首选端口当前是否有故障、忙、缺席等。
[0124]
交换机202在交换机之间分发负载信息。frf部件400从其相关联的输出端口接收其负载测量值。frf部件400从其相关联的输入端口接收相邻交换机的汇总负载信息。每个frf部件400与相同交换机内的所有其他frf实例交换负载信息。frf部件400向其关联的输出端口提供汇总负载信息以用于传送到相邻交换机。通过负载分发机制,每个frf部件400学习到在其交换机的每个输出端口处测量的负载。此外,每个frf部件学习所有相邻交换机的汇总负载信息。
[0125]
应当注意,frf部件400可以支持帧多播。当接收到多播dfa时,frf部件400确定与多播dfa相关联的帧应该被转发到的一组端口。可以通过访问将软件配置的多播结构地址映射到输出端口的查找表来确定该组端口。这有助于避免与重复多播帧副本相关联的问题。
[0126]
图5图示了涉及候选端口的向下选择和基于负载的自适应路由选择的示例路由选择过程。frf部件400考虑帧可以转发到的三类候选端口:首选最小路径候选端口502;非首选最小路径候选端口504;以及非最小路径候选端口506。取决于帧在其路径上的位置,非最小路径候选端口是全局非最小路径候选端口或局部非最小路径候选端口。
[0127]
过滤可以应用于这三类候选端口,例如操作端口过滤、可用端口过滤以及忙端口过滤。本文应用的端口过滤可以用于通过识别缺席和/或故障端口并将其排除在考虑之外而减少被视为路径候选端口的一组有效端口。
[0128]
操作端口过滤(或非操作端口过滤)可以指从被视为路由候选的多组端口(例如,首选最小路径候选端口502、非首选最小路径候选端口504以及非最小路径候选端口506)中移除非操作端口。即,交换机202可以将一些端口识别为非操作的。这些非操作端口可以在非操作端口掩码中报告。应当注意,在一些实施例中,软件可以使用非操作端口csr强制将交换机202的附加端口视为非操作的,例如,当(多个)端口由于计划的维护而断开时。
[0129]
可用(或不可用)端口过滤可以涉及过滤出以下候选端口以供考虑:候选端口通常是可接受的,但由于网络100内的故障,例如,对于到达一个或多个目的地交换机、目的地(交换机)分组等而言,候选端口已变得不可接受/不可用,但对于到达一个或多个其他目的地交换机而言,仍然可接受或可用。在一些实施例中,全局故障表406a可以用于取决于帧被路由的目的地分组来阻塞全局最小路径端口候选和全局非最小路径端口候选。例如,在将帧路由到特定目的地(交换机)分组时,可以排除考虑通向中间(交换机)分组而没有连接到该目的地分组的候选端口,但是对于其他目的地分组,不一定会阻塞相同的候选端口。全局故障表406a可以由帧的dfa的global_id字段确定或索引。
[0130]
在一些实施例中,由例外清单表404a维护的例外清单可以用于取决于帧被路由到的目的地分组或交换机而有条件地排除端口候选。应当注意,例外清单表440a可以用于识别首选全局最小路径端口。因此,当不是使用例外清单表来识别首选全局最小路径端口时,使用例外清单表404a来排除候选端口。
[0131]
应当注意,关于相邻交换机中哪些端口忙的知识可以用于基于相邻交换机随后是
否需要将帧转发到已经较忙的端口来确定连接到相邻交换机的端口是否是用于接收所转发帧的较差候选。例如,当考虑用于全局最小路由的候选端口时,如果连接到帧的目的地分组的相邻交换机的全局端口都忙,则连接到相邻交换机的端口是较差的候选。类似地,当在目的地分组中考虑用于局部非最小路由的候选端口时,如果连接到帧的目的地交换机的相邻交换机的局部端口都忙,则连接到相邻交换机的端口是较差的候选。
[0132]
因此,忙端口过滤可以由frf部件400通过使用忙端口掩码以移除严重负载的端口而不被视为候选端口来执行。应当注意,在一些实施例中,当存在未严重负载的其他候选端口时,严重负载的端口被排除在考虑之外。否则,当不存在未严重负载的端口时,忙端口过滤不会将严重负载的端口排除在考虑之外。frf部件400维护四个忙端口(即负载超过软件定义的阈值的端口)掩码:局部交换机忙端口掩码;全局非最小忙全局端口掩码;全局非最小忙局部端口掩码;远程交换机忙端口掩码。在交换机之间传送来自这些掩码的信息以填充远程交换机。
[0133]
局部交换机忙端口掩码可以应用于最小路径候选端口以及局部非最小路径候选端口。frf通过将每个端口的local_load与软件定义的阈值进行比较来生成64位ls_busy_port_mask。负载高于该阈值的端口在该掩码中被标记为忙。
[0134]
全局非最小忙端口全局掩码可以应用于全局非最小路径候选端口的全局端口。frf通过将每个端口的gnmgp_load与软件定义的阈值进行比较来生成64位gnmbgp_mask。
[0135]
负载高于该阈值的端口在该掩码中被标记为忙。
[0136]
全局非最小忙局部端口掩码可以应用于全局非最小路径候选端口的局部端口。frf通过将每个端口的gnmlp_load与软件定义的阈值进行比较来生成64位gnmblp_mask。
[0137]
负载高于该阈值的端口在该掩码中被标记为忙。
[0138]
从远程交换机忙全局端口表中获得的目的地分组相关忙端口掩码可以应用于全局最小路径候选端口。相应地,当在帧的目的地分组中路由该帧时,从远程交换机忙局部端口表中获得的目的地交换机相关忙端口掩码可以应用于局部非最小路径候选端口。
[0139]
在应用上述过滤或向下选择阶段时,可以产生一组幸存的路径候选端口508。即,在移除非操作和不可用、严重负载的端口候选之后,可以确定减少数量的候选端口,剩下一组路径候选端口。在一些实施例中,伪随机选择过程用于将幸存的路径候选端口508的数量进一步减少到与每个候选端口类别(首选最小路径候选端口、非首选最小路径候选端口以及非最小路径候选端口)相关联的所确定的端口阈值数量。在一些实施例中,该候选端口的阈值数量可以是每个类别四个候选端口。如果未满足候选端口的最小阈值数量,则该类别中的任何候选端口都不会被排除在考虑之外。
[0140]
在一些实施例中,可以对候选端口的这种伪随机选择(或向下选择)进行加权。即,可以逐csr配置地为每个端口指派权重,例如0到15之间的权重。该加权可以用于影响选择各个候选端口的概率,使得更高权重的端口有很大的机会被选择。例如,权重为15会导致端口在伪随机选择过程中被选择的可能性为原来的15倍。在一些实施例中,可以基于候选端口被指派的权重来将这些候选端口过滤到四个分组(gw1、gw2、gw4、gw8)中,其中,候选端口可以取决于被指派的权重而属于多个分组,例如,具有权重1的候选端口仅属于一个权重分组,而具有权重5的候选端口属于两个分组(gw1和gw4,即1 4=5),具有权重15的候选端口属于所有四个分组(gw1、gw2、gw4、gw8,即,1 2 4 8=15)。可以确定每个分组中的候选端口
的数量(nw1、nw2、nw4、nw8),并对每个分组应用伪随机选择以从每个分组中选择一个候选端口(cw1、cw2、cw4、cw8)。可以计算每个分组的权重以及它们的总权重:ww1=nw1;ww2=2*nw2;ww4=4*nw4;ww8=8*nw8;wtotal=ww1 ww2 ww4 ww8。可以执行第五次伪随机选择来选择范围0

wtotal

1中的数字j。基于j的值,如下选择候选cw1、cw2、cw4、cw8之一作为向下选择的候选端口:如果j<ww1,则选择cw1;否则如果j<ww1 ww2,则选择cw2;否则如果j<ww1 ww2 ww4,则选择cw4;否则,选择cw8。
[0141]
由于操作状态和负载的改变,每个分组中的端口数量可以因请求而异,并且还可以取决于全局故障表406a的配置。例如,端口数量也可以取决于正在执行路由请求的端口的类型而变化,即,边缘端口与局部端口。假设操作状态和负载没有变化太快,并且全局故障表406a的配置对于不同的global_id值不应该有很大变化,每个伪随机生成器之前生成的值简单地用作用于使其下一个值偏置的偏移量。如果偏移值超出范围(>n

1),则通过截断高位将该偏移值置于范围内。mgnm=4个候选端口由伪随机向下选择过程产生。如上所述,每个候选可以通过加权的伪随机向下选择逻辑410c的单独副本产生。
[0142]
应当注意,相同的候选端口可以通过加权的伪随机向下选择逻辑410c的实例/迭代中的多于一个实例/迭代来选择,实际上减少了被选择的候选端口的数量。相同候选端口被mgnm=4个全局非最小加权的伪随机选择器中的多于一个选择器选择的概率随着可供选择的候选端口数量的增加而降低。在例如蜻蜓拓扑,并且具有完整全局带宽的网络的上下文中,在源分组中的边缘端口处可能存在大约48个可能的全局非最小候选端口:16个全局端口和32个局部端口。如果局部跳已经被占用,则下一跳是全局跳,由此将候选端口的数量减少到大约16个。然而,如果网络是锥形的,使得该网络仅支持完整全局带宽的四分之一,则在局部跳已被占用之后,可能仅有4个全局候选供选择。选择四个唯一全局非最小候选端口的概率表明了对于供选择的不同数量的可能候选而言选择四个唯一候选端口的概率。选择n个唯一全局非最小候选端口的概率表明了当仅有16、8或4个候选端口供选择时、不同数量的四个所选候选是唯一的概率。
[0143]
frf部件400可以使用所接收的远程交换机忙端口掩码来生成上述忙端口掩码的远程交换机忙全局端口表,这些忙端口掩码标识连接到相邻交换机的端口基于帧被路由到的目的地分组应当避免作为全局最小路径候选。类似地,也可以使用所接收的远程交换机忙端口掩码来生成上述忙端口掩码的远程交换机忙局部端口表,这些忙端口掩码标识连接到相邻交换机的端口基于帧被路由到的目的地交换机在目的地分组中路由时应当避免作为局部非最小路径候选。
[0144]
rs_busy_port_mask用于评估相邻交换机经由全局最小路径到达特定目的地分组以及经由局部非最小路径或经由局部最小路径到达特定目的地交换机的适用性。对应于局部端口或全局端口的每个frf实例可以被配置为生成64位rs_busy_port_mask。将所生成的掩码传送到连接到该端口的伙伴交换机。类似地,伙伴交换机也可以生成并返回rs_busy_port_mask。
[0145]
每个frf实例将其从其伙伴交换机接收的rs_busy_port_mask使用端口状态环(该端口状态环连接交换机的瓦片并在交换机上的端口之间传送状态和负载信息)传送到交换机的所有其他frf实例。每个frf实例捕获所有rs_busy_port_mask,使得所有frf实例学习所有相邻交换机提供的远程忙端口状态。每个frf实例使用其接收到的rs_busy_port_mask
来生成远程交换机忙全局端口(rsbgp)表和远程交换机忙局部端口(rsblp)表中描述的忙端口表。
[0146]
rs_busy_port_mask的生成过程分为两步。第一步是将每个端口的local_load与软件可配置的进行比较,生成所有各自忙的端口的中间掩码。该中间掩码是在从端口状态环接口接收到每个端口的状态时形成的。被分类为非操作的端口在中间掩码中也被记录为忙。第二步考虑链路捆绑,使得仅在端口和作为相同捆绑的一部分的所有其他端口在中间掩码中被标记为忙的情况下才在rs_busy_port_mask中将该端口标记为忙。作为相同捆绑的成员的所有端口在rs_busy_port_mask中都标记为忙、或者都不标记。作为相同捆绑的一部分的全局端口都连接到相同的远程分组。作为相同捆绑的一部分的局部端口都连接到当前分组内的相同的远程交换机。
[0147]
在使用rs_busy_port_mask来确定生成掩码的交换机是否是将帧路由到另一个分组或当前分组中的另一个交换机的良好候选时,使用捆绑来在其连接到目的地分组或当前分组中的目的地交换机的链路上的忙状态不一致时提供生成交换机的适用性的一致视图。这里描述的捆绑处理的基本原理在于,生成rs_busy_port_mask的交换机仍然是到达目的地分组或当前分组中的目的地交换机的候选,只要该交换机至少有一个不忙的链路到目的地分组或交换机即可;生成rs_busy_port_mask的交换机处的自适应路由应当将帧引导到非忙链路。
[0148]
端口必须包括在捆绑端口掩码csr或非捆绑端口掩码csr(这两个csr都是接线的静态描述的一部分)中,以便在rs_busy_port_mask中将这些端口标记为忙。当从端口状态环接收每个帧时执行第二步。扫描捆绑端口掩码以识别它们包含的捆绑和端口。另外,查询非捆绑端口掩码以识别任何其他端口,这些端口不是捆绑的成员,但其忙状态也应当包括在所生成的rs_busy_port_mask中。
[0149]
在计算rs_busy_port_mask时使用一不同的软件定义的阈值,因为在传送和处理rs_busy_port_mask以及将受该掩码约束的帧传送到生成掩码的远程交换机时涉及更大的时延。由于更大的时延,可能有用的是在端口被认为非常忙以至于该端口不是从远程交换机接收附加帧的良好候选之前需要端口负载更多。忙的远程端口应当负载足够使得该端口在接收已经受掩码约束的帧所占用的整个时间内保持是负载的。
[0150]
上述rsbgp表存储由目的地分组(global_id)索引的忙端口掩码。同样,rsbgp表用于评估全局最小路径,这些全局最小路径由到具有连接到目的地分组的全局端口的相邻交换机的跳组成,以过滤掉当前交换机的以下端口,在到达目的地分组时使用这些端口是较差的选择,因为当前交换机的过滤掉的端口到达的相邻交换机的对应的一个或多个全局端口负载严重。
[0151]
rsblp表存储由目的地交换机(switch_id)索引的忙端口掩码,并且同样可以用于评估局部非最小路径,这些局部非最小路径由到相邻交换机的局部跳、以及紧接着的到目的地交换机的另一个局部跳组成。对于如胖树等拓扑,其中局部最小路径可以由到相邻交换机的局部跳和紧接着的到目的地交换机的另一个局部跳组成,rsblp表也可以用于评估局部最小路径。rsblp表用于过滤掉当前交换机上的端口,在间接到达目的地交换机时使用这些当前交换机上的端口是较差的选择,因为连接到目的地交换机的相邻交换机的一个或多个端口负载严重。
[0152]
应当注意,对于相同的路由请求,rsbgp表和rsblp表永远不会被同时访问。当不在目的地分组中路由帧时访问rsbgp表,而仅当在目的地分组中路由帧时访问rsblp表。因此,两者都在相同的存储器(称为远程交换机忙端口)内实施。
[0153]
倘若存在至少一个有效的候选端口,则可能不允许各种忙端口过滤器(忙端口过滤器、局部非最小(ln)忙端口过滤器、全局非最小(gn)忙端口过滤器)共同阻塞所有候选端口。如果存在可行的候选端口选择,如果没有更好的选择,即使这些可行的候选端口选择是“较差的”选择,也允许它们。否则,当路由实际可用时,将为路由请求生成空路由响应。
[0154]
为了防止生成不正确的空路由响应,如果以下条件全部为真,则将首选和非首选最小路径忙端口过滤器的第一阶段(图4a)和局部非最小路径忙端口过滤器的第一阶段(图4b)全部禁用:没有候选在首选最小路径忙端口过滤器(忙端口过滤器)的第一阶段幸存下来;没有候选在非首选最小路径忙端口过滤器(忙端口过滤器)的第一阶段幸存下来;没有候选在局部非最小忙端口过滤器(局部非最小(ln)忙端口过滤器)的第一阶段幸存下来;并且没有候选在全局非最小忙端口过滤器(全局非最小(gn)忙端口过滤器)处幸存下来。
[0155]
应当注意,如果禁用最小路由,则将不存在最小路径候选端口(允许端口过滤器)。只有启用了局部非最小路由,才会存在局部非最小路径候选端口(候选局部非最小路径端口)。只有启用了全局非最小路由,才会存在全局非最小路径候选(候选全局非最小路径端口)。通常不会同时启用局部和全局非最小路由。当首选和非首选最小路径忙端口过滤器以及局部非最小忙端口过滤器的第一阶段由于上述条件被禁用时,将在自适应选择阶段(如下所述)看到的唯一候选端口将是较差的候选,因为这些候选端口都将是通向其他交换机的端口,这些其他交换机的端口(这些端口连接到目的地分组或目的地交换机)负载严重。这是因为这些端口是被禁用的过滤器阻塞的唯一的候选端口,并且在没有禁用这些过滤器的情况下,不存在其他候选。
[0156]
自适应选择阶段将在这些剩余/幸存的候选端口之间基于它们偏向的局部负载(局部负载和负载值选择)进行选择,但是它们的局部负载不一定反映它们较差的原因。它们较差的特性可能是由于这些候选端口到达的其他交换机的某些端口上的高下游负载。这是因为自适应选择阶段可能无法看到这些候选有多差,所以可以使用本文描述的不同忙端口过滤器之间的协调。如果每个忙端口过滤器独立决定是否禁用其基于rsbgp表和基于rsblp表的过滤器,则可能出现如以下等情况。非首选最小路径忙端口过滤器可能会产生一个或多个不差的候选,而不禁用其任何过滤器阶段。首选最小路径忙端口过滤器可能只能通过禁用其两个过滤器阶段来产生一个或多个候选端口。因此,首选最小路径忙端口过滤器能够产生的所有候选端口都较差。在自适应选择阶段,将向下选择的、不差的、非首选最小路径候选端口与向下选择的、较差的、首选最小路径候选端口进行比较。然而,自适应选择阶段缺乏对首选最小路径候选有多差的可见性,因此它可能会选择较差的首选最小路径候选而不是不差的非首选最小路径候选。
[0157]
本文描述的忙端口过滤器协调机制的替代机制是所有忙端口过滤器独立动作,但最小路径和局部非最小路径忙端口过滤器各自将信号转发到自适应选择阶段来指示它们各自的候选端口是否由于下游交换机的端口忙而是较差的选择。如果是,自适应选择功能可能会降低其候选端口的优先级,以支持其他端口。结果将与通过本文描述的各种忙端口过滤器之间的协调所实现的结果相同。
[0158]
如图5中所图示的,可以对frf部件400执行伪随机选择过程之后剩余的幸存的路径候选端口510执行基于负载的自适应选择。自适应选择阶段将产生单个、负载最少的候选端口512,帧可以路由到该候选端口,其中,将在伪随机向下选择中幸存下来的候选端口(幸存的路径候选端口508)上存在的当前负载进行比较以确定在这组剩余的候选端口中负载最小的候选端口。
[0159]
在一些实施例中,首选最小路径候选端口优先于非首选最小路径候选端口而被选择,并且最小路径候选端口优先于非最小路径候选端口而被选择。为了完成该优先选择,在执行自适应选择比较之前,可以将偏置值添加到每个候选端口的负载。所使用的偏置值可以使用csr来配置,并且可以取决于应用该偏置值的路径的类型(即,非首选最小、首选最小、以及非最小)、被路由的帧的流量分类以及帧在其路径上的位置而变化。例如,与其他流量分类中的帧相比,属于低时延流量分类的帧可以更倾向于偏向最小路径,以更有可能实现/符合低时延要求或需求。帧也可能越偏向于最小路径路由,帧越接近其目的地。
[0160]
特别地,负载值表示交换机202的端口的忙碌情况并且用于评估基于负载的端口掩码以及在自适应路由选择过程期间比较候选端口。在忙端口过滤器中使用基于负载的端口掩码,以基于当前的负载从被考虑的一组候选中移除作为较差候选的端口。交换机内使用了多个不同类型的负载值,并且将一些负载值传送到相邻的交换机设备。这些负载值在下面描述,并在图6中图示。
[0161]
当存在帧可以被路由到的多于一个端口时,计算并使用若干负载指标来确定用哪个端口来路由帧。负载指标还用于生成忙端口掩码,如上所述,这些忙端口掩码用于将严重负载的端口排除在考虑之外。
[0162]
本文描述了五个负载指标:局部负载;分组负载;全局非最小全局端口负载;平均全局负载;以及全局非最小局部端口负载。
[0163]
关于局部负载,交换机的每个输出端口(例如,交换机202的输出端口220c)的负载不断被评估并作为8位值local_load提供给对应的frf实例。越大的值表示越高的负载。每个输出端口处存在的当前负载由输出控制年龄队列块测量。输出端口负载由每个年龄队列实例提供给与相同端口的输入侧相关联的(frf部件400的)frf实例。提供给frf的负载值是8位值,称为local_load。年龄队列基于排队、等待离开该端口的流量的量和在链路伙伴交换机设备的输入缓冲区中的链路的另一侧处排队的流量的量的组合来确定局部负载。local_load的计算和配置在稍后进行。每个frf实例将该frf实例从其关联的年龄队列实例接收的local_load值分发给所有其他frf实例。以这种方式,每个frf实例都会学习到每个输出端口的当前local_load。
[0164]
当比较候选端口的端口负载以确定将帧路由到的最佳端口时,是将端口的local_load值用于进行最小路径路由所考虑的端口以及用于进行局部非最小路径路由所考虑的端口。
[0165]
分组负载是衡量蜻蜓分组用作全局非最小路径中的中间分组的适当程度的度量。8位分组负载值不是由诸如交换机202等交换机计算的,而是软件可配置的。软件可以使用在分组的边缘端口的输入侧上存在的网络注入负载的度量来得出group_load值,或者可以基于不鼓励(也许基于在分组中运行的作业或服务来不鼓励)将某些分组用作非最小中间分组的策略来确定group_load值。即,group_load值旨在表示分组内的局部流量的量。
[0166]
网络管理堆栈通过周期性地写入csr来设置group_load值。软件配置的分组负载值通过全局链路进行传送。与全局链路相关联的frf实例将这些frf实例从链路另一侧处的分组中的其链路伙伴接收的group_load值转发到交换机中的所有其他frf实例。以这种方式,每个frf实例学习到在交换机终止的每个全局链路的相反端处的分组的分组负载值。
[0167]
在全局非最小全局端口负载(gnmgp_load)方面,该负载是用于评估全局端口用于将帧引导到连接到全局端口的全局链路所到达的中间分组的适用性的度量。gnmgp_load名义上等于全局端口的local_load和从全局链路到达的分组接收的group_load值中的最大值。然而,通过csrr_tf_frf_cfg

_load_ctrl中的字段g

nmgp_en_grp ld,可以排除group_load分量。
[0168]
当比较候选端口的端口负载以确定将帧路由到的最佳选择端口时,是将端口的gnmgp_load值用于进行全局非最小路径路由所考虑的全局端口。
[0169]
平均全局负载(mean_global_load)旨在用于评估交换机用于到达直接连接到该交换机的任何中间分组的适用性。mean_global_load值是8位值,等于所有交换机全局端口的gnmgp_load值的算术平均值。被硬件或软件分类为非操作的端口被排除在计算之外。要包括在mean_global_load计算中的端口从csr r tf frf cfg gnm全局端口中确定。
[0170]
对于其负载包括在mean_global_load计算中的任何端口,如果未从端口状态环接收到该端口的group_load值(要么是因为未收到该端口的链路伙伴数据、要么是因为正接收的链路伙伴数据不是全局链路数据),则该端口对mean_global_load的贡献仅基于该端口的局部负载。应当理解,上述端口状态环在交换机上的端口(例如,分别为交换机202的输入和输出端口220b和220c)之间传送状态和负载信息。所计算的mean_global_load值通过局部链路进行传送。与局部链路相关联的frf实例将这些frf实例从链路的另一侧处的局部交换机中的其链路伙伴接收到的mean_global_load值转发到交换机中的所有其他frf实例。以这种方式,每个frf实例学习到由交换机终止的每个局部链路的相反端处的局部交换机的mean_global_load值,并可以将这些值用于全局非最小路径选择。
[0171]
全局非最小局部端口负载指标由每个frf实例计算,使用端口状态环在交换机中的端口之间分发,以及在交换机之间分发。全局非最小局部端口负载是用于评估局部端口用于将帧引导到全局非最小路径的中间分组的适用性的指标。全局非最小局部端口负载考虑局部端口上的负载以及端口所连接的局部分组交换机用于到达中间分组的适用性。端口的gnmlp_load值等于端口的local_load和端口的伙伴交换机报告的mean_global_load中的最大值。通过软件配置,可以移除mean_global_load分量,使得端口的gnmlp_load变得简单地等于该端口的local_load。
[0172]
gnmlp_load值是8位值。所计算的gnmlp_load值基于经由端口状态环分发的local_load和mean_global_load值。每个frf实例计算该frf实例的所有交换机端口的gnmlp_load值,在这些端口处接收局部链路的链路伙伴数据。如果未从端口的伙伴交换机接收负载状态信息,则该端口的gnmlp_load值设置为等于端口的local_load。
[0173]
对于接收全局链路的链路伙伴数据的端口,将端口的gnmlp_load值设置为针对gnmgp_load计算的值。这是实现优化的附带效果,其中,gnmgp_load和gnmlp_load使用相同的存储,因为对于任何给定的端口,两者中的最多一个是有效的。全局非最小局部端口负载指标不在接收全局链路伙伴数据的端口上使用。
[0174]
图6图示了示例负载测量值以及如何可以在分组中的交换机之间交换负载测量值。图6图示了一组交换机,例如包括交换机602、604、以及606的分组1,其中每个交换机都可以是交换机202(图2)的实施例。如上所述,分组负载值可以通过全局链路交换,并且如图所示,从交换机结构中的其他分组/交换机的交换机602、604、以及606中的每一个发射/由其接收group_load值。在分组1内,交换机602、604、以及606交换mean_global_load值和rs_busy_port_mask。如上所述,每个frf实例捕获所有rs_busy_port_mask,使得所有frf实例学习所有相邻交换机提供的远程忙端口状态。交换机602也被示为接收gnmlp_load值,其中,这些值在局部端口的输出处基于该端口处的local_load和链路伙伴报告的mean_global_load测量。更进一步,在所有端口的输出处测量的local_load值由交换机602接收。应当注意,这样的负载和掩码值是通过连接的交换机之间的链路从每个交换机对称地发送到另一个交换机的。
[0175]
对所接收的每个帧执行前面小节中描述的结构路由过程。交换机根据流量的排序要求确定是执行逐包自适应路由(使用该值)还是基于流的自适应路由(其中,将该值用于每个流中的第一个包)。
[0176]
如本文已经描述的,诸如交换机202等交换机支持最小和非最小路径路由。应当理解,最小路径是基于目的地的。如果目的地nic是局部的,则选择连接到目的地交换机的输出端口。如果目的地在另一个分组中,则将包路由到连接到目的地分组的局部分组内的交换机。在大型系统中,可能仅有一个这样的路径,但在小型系统中可能有许多这样的路径,一些路径连接到输入交换机,而其他路径连接到其分组内的其他位置的交换机。输入交换机在它们之间进行选择。
[0177]
如本文已经描述的,诸如交换机202等交换机支持网络中的最小和非最小路径路由。在一些实施例中,如上所述,网络可以具有蜻蜓拓扑,蜻蜓路由是分层的,区分局部目的地(与源在相同分组中的那些)和全局目的地。因此,在蜻蜓网络中,交换机使用两个表来路由到目的地分组并且然后路由到该分组内的交换机,而不是使用一个大表来路由到各个目的地。
[0178]
应当理解,最小路径是基于目的地的。如果目的地nic是局部的,则选择连接到目的地交换机的输出端口。如果目的地在另一个分组中,则将包路由到连接到目的地分组的局部分组内的交换机。在大型系统中,可能仅有一个这样的路径,但在小型系统中可能有许多这样的路径,一些路径连接到输入交换机,而其他路径连接到其分组内的其他位置的交换机。输入交换机在它们之间进行选择。
[0179]
考虑用于最小路径路由的候选端口进一步划分为首选和非首选端口组,其中,所述首选组中的端口可以导致路径包含较少的跳数。非最小路径经由中间交换机(称为根交换机)来路由包。取决于流量的排序要求,以逐包或逐流的方式选择根交换机。
[0180]
考虑用于最小路径路由的候选端口进一步划分为首选和非首选端口组,其中,所述首选组中的端口可以导致路径包含较少的跳数。非最小路径经由中间交换机(称为根交换机)来路由包。取决于流量的排序要求,以逐包或逐流的方式选择根交换机。
[0181]
将非最小流量“向上”路由到根交换机,然后最小地“向下”路由到目的地。在一些实施例中,随机选择中间根交换机以便均匀分发负载。网络(例如,网络100)提供对中间分组选择的控制,使流量能够被朝已知负载较轻的中间分组路由或远离具有特定功能或已知
负载严重的分组路由。根交换机可以分布在所有分组中,其中,非最小路径可以检测到源分组、目的地分组、或任何中间分组中的根交换机。全局非最小路由通过中间分组中的根交换机来采用间接路径。这些路径需要两个全局跳,一个从源分组到中间分组,一个从中间分组到目的地分组。全局非最小路径需要最多三个局部跳,每个分组一个局部跳。无论系统大小如何,最大路径长度都是五个交换机到交换机的跳。
[0182]
由于路径更短,因此首选最小路由,由此网络负载更低。但是,单独的最小路由会导致某些流量模式的性能较差,例如当一个分组中的所有节点与另一个分组中的节点通信时。在广泛的流量模式中实现良好的性能需要最小路由和非最小路由的混合。
[0183]
在沿帧的路径的每一跳处,可以用于使帧沿其下一跳前进的路由模式由frf路由算法表408的配置来控制。当在交换机输入端口处接收到帧时,确定可以与帧一起转发的路径类型:局部最小、全局最小、局部非最小、以及全局非最小。帧可以被转发到的一组输出端口由该点处允许的路径类型确定。
[0184]
允许采用的路径类型取决于帧在其网络入口端口与出口端口之间的行程中所处的位置。路径类型如下。局部最小路径选择直接连接到帧的目的地交换机的链路,并且可以在帧在其目的地分组中时使用。当帧不在其目的地分组中时,可以使用全局最小路径,并选择直接连接到帧的目的地分组的全局链路或连接到具有直接连接到帧的目的地分组的工作全局链路的交换机的局部链路。当帧在其目的地分组中时或者当帧在中间分组中时,可以使用局部非最小路径。局部非最小路径选择连接到分组中其他交换机的局部链路,而不考虑帧的目的地。当在目的地分组中时,在进行局部非最小跳之后,必须能够在另一跳内到达帧的目的地交换机。当在中间分组中时,在进行局部非最小跳之后,必须能够在另一跳内到达具有连接到帧的目的地分组的工作全局链路的交换机。不能选择连接到不可能做到这样的交换机的局部链路。
[0185]
当帧在其源分组中而不在其目的地分组中时,可以使用全局非最小路径。全局非最小路径选择连接到其他分组的全局链路或连接到源分组中的其他交换机的局部链路,而不考虑帧的目的地。仅当全局链路连接到具有将其连接到帧的目的地分组的工作链路的分组时,才必须选择全局链路。类似地,仅当局部链路连接到具有全局链路(这些全局链路本身就是有效的全局非最小路径选择)的交换机时,才必须选择局部链路。
[0186]
自适应路由根据最小与非最小路径(如上所述)当前的负载在它们之间进行选择。
[0187]
在最小路由方面,当在目的地分组中而不是在目的地交换机处时,通过在局部交换机最小表中查找目的地结构地址的switch_id字段来生成局部最小路由(图4a)。该查找返回一组有效链路。局部交换机最小表包含128个条目,每个条目64位,其中,每个位表示一个可能的输出端口。在目的地交换机处时,通过在局部端口最小表中查找目的地结构地址的endpoint_id字段来生成出口端口或端口选择。该查找返回一组有效链路。局部端口最小表包含64个条目,每个条目64位,其中,每个位表示一个可能的输出端口。
[0188]
通过在全局最小表中查找目的地结构地址的global_id字段来生成全局最小路由(图4a)。该查找返回一组有效链路。全局最小表包含512个条目,每个条目64位,其中,每个位表示一个可能的输出端口。
[0189]
局部最小路径从源交换机到目的地交换机最多占用一个交换机到交换机的跳,源交换机和目的地交换机在相同分组内。可以存在若干个这样的路径。局部非最小路径占用
两个交换机到交换机的跳,两者为从源交换机到中间交换机(称为根交换机)、以及从中间交换机到目的地交换机。存在许多这样的路径。
[0190]
全局最小路径从源分组到目的地分组需占用一个全局跳。在源分组和目的地分组两者中最多有一个局部跳。无论系统大小如何,全局最小路径最多需要三个交换机到交换机的跳。
[0191]
在其中存在将源分组连接到目的地分组的多个全局链路的一些系统配置中,可能出现偏置,使得在源分组处注入的流量分发到每个全局链路的比例不相等。作为示例,考虑交换机a、b、以及c(都在组x中)的情况,其中,交换机b具有三个全局链路将其连接到分组v,并且交换机c具有两个全局链路将其连接到分组v。如果在交换机a处注入的去往分组v的流量在交换机b与c之间均等地分发,则交换机c的两个全局链路中的每个全局链路都将比交换机b的三个全局链路中的每个全局链路负载更重。
[0192]
为了能够抵消偏置,可以将全局最小表划分为若干个块,每个块都能够为任何目的地分组生成一组有效的全局路由选择。以逐帧的方式,由frf伪随机地选择用于服务请求的块。在每个全局最小表块实例内,仅填充可以用于到达目的地分组的可能的候选端口的子集。以抵消偏置的方式来选择该子集。所填充的子集可以在不同的块实例之间变化,使得能够使用所有可能的候选端口。
[0193]
一个分组中的边缘端口与另一个分组中的边缘端口之间的全局最小路径可能需要跨结构链路的一跳、两跳、或三跳。如果源分组中包含入口边缘端口的交换机具有直接将其连接到目的地分组中包含出口边缘端口的交换机的全局链路,则为一跳。如果帧经过直接连接到源分组中的入口交换机或目的地分组中的出口交换机的两个分组之间的全局链路,则为两跳。在这种情况下,还需要跨源分组或目的地分组中的局部链路的一跳。最后,如果帧经过的全局链路既没有直接连接到源分组中的入口交换机、也没有直接连接到目的地分组中的出口交换机,则需要三跳。在这种情况下,源分组和目的地分组两者中也需要跨局部链路的跳。源分组中的局部链路跳将帧从入口交换机带到连接到全局链路的源分组交换机。目的地分组中的局部链路跳将帧从连接到全局链路的目的地分组交换机带到出口交换机。
[0194]
在标识最小路径候选端口时,frf能够将候选分类为一组首选端口和一组非首选端口。首选端口是那些允许需要两个或更少结构链路跳的全局最小路径的端口。非首选端口是所有未被分类为首选的最小路径候选。在可用且负载不太重时使用首选路径会降低系统局部结构链路的平均负载,因为它会减少每个帧经过的局部结构链路的平均数量。使用首选路径还可以减少帧经历的端到端结构时延。
[0195]
在执行局部非最小路由时,任何局部链路都可以是候选。然而,如果一些局部链路引导到因为系统内存在链路或交换机故障而可能无法到达目的地的交换机,则可能需要将这些局部链路排除在考虑之外。csr控制哪些端口是局部非最小路径路由的候选。
[0196]
在执行全局非最小路由时,通常任何全局链路都可以是候选。另外,通常到达具有操作的全局链路的交换机的任何局部链路也可以是候选。然而,如果一些链路引导到因为系统内存在链路或交换机故障而可能无法到达目的地分组的交换机或分组,则可能需要不考虑这些链路。csr控制哪些端口是全局非最小路径路由的候选。
[0197]
在选择用于全局非最小路由的候选端口时,如果所有候选端口(全局和局部)有均
等的可能被选择,对于许多系统配置,全局非最小流量将不会均匀地在离开分组的全局链路中分发。例如,考虑分组内三个交换机a、b、以及c的情况,其中,每个交换机通过四个局部链路相互连接,并且交换机a和交换机b都终止14个全局链路,并且交换机c终止16个全局链路。到达交换机a的边缘端口的入口流量可以全局非最小地路由到由交换机a终止的任何全局或局部链路。如果该入口流量被均等可能地路由到这些链路中的任何一个链路,则由交换机b终止的每个全局链路将仅接收路由到交换机a终止的每个全局链路的流量的4/14(4个局部链路到达14个全局链路)。同样,由交换机c终止的每个全局链路将收到4/16(4个局部链路到达16个全局链路)。
[0198]
为了抵消在分组的全局链路之间进行全局非最小流量分发中的这种潜在的偏置,当全局非最小候选端口组被伪随机地向下选择到将参与自适应路由阶段的少量端口时,可以对每个候选端口应用权重,使得一些候选端口将比其他候选端口更有可能在向下选择过程中幸存下来。
[0199]
自适应路由基于其负载在这些最小与非最小路径之间进行选择。自适应路由的流量从最小路径开始,如果最小路径上的负载较高,则转向非最小路径(这称为渐进式自适应路由)。可以说这样的路径已经岔开。
[0200]
可以在源分组中的注入点或出口路由器处选择非最小路径。如果选择源分组、中间分组或目的地分组作为中间分组,则可以在其内采用局部非最小路由。蜻蜓路由算法允许中间分组和目的地分组两者中的非最小路径(考虑特定路由器的全局端口上传入的所有流量都去往分组中另一路由器上的nic的情况)。然而,一般来说,非最小流量分布得足够好以避免这种情况发生,但在局部链路上存在错误的情况下,目的地分组中的附加跳可以仍然是有益的。到达中间分组之后,包可以采用到目的地分组的最小路由或到具有到目的地分组的路径的交换机的局部非最小路由。
[0201]
同样,该决策是基于负载做出的。在中间分组内进行某跳之后,包必须检测根并采用到目的地的最小路径。自适应决策是基于负载和朝首选的、最小的、或非最小路径的偏置做出的。如上所述,路由算法越朝最小路径增加偏置,包越接近其目的地。倘若负载较低,该算法倾向于跨中间分组的直接路径。
[0202]
限制路由用于注入和根检测点以外的点,以防止包沿其来的方向回流。在交换机中,检测包从注入点和根检测点进行一跳的情况,并确保采用全局端口。对于局部最小路由,从根进行某跳之后,包将到达连接到目的地nic的交换机。对于全局最小路由,从注入点进行某跳之后,包将达到具有必须采用的全局链路的交换机。在中间分组中,允许包在注入点处进行局部跳并检测到根。在进行该跳之后,包将达到连接到目的地分组的交换机,必须采用该路径。
[0203]
在交换机之间传递信息时,必须对路径上的下一跳做出即时决策。使用从局部状态得到的信息和从相邻交换机传送的信息来做出决策。使用来自许多不同源的信息允许做出更准确/有效的决策。该信息包括来自邻居的信息。
[0204]
先前的系统在交换机之间携带关于平均负载的信息。也就是说,来自相关或相邻交换机的更多详细信息更有帮助。在当前的交换机asic中,一组值可以包括指示相关/相邻交换机的输出端口的状态的信息。通过传递该组值,可以做出更好的路由决策。在一个示例中,标志从相邻交换机传回,其中,所述标志具有用于每个输出端口的一个位。例如,对于具
有64个输出的交换机,将发射64位标志。这比简单地传递相邻端口的全局平均值要准确得多。
[0205]
图7a图示了示例场景,其中,将平均负载用作用于在包括源交换机702、目的地交换机708和两个可能的中间交换机704和706的交换机结构中路由包的基础。如图7a中所图示的,基于如本文所述的自适应路由,源交换机702可以确定两个候选中间交换机(704和706),可以通过这两个候选中间交换机将包从源交换机702路由到目的地交换机708。当基于中间交换机704和706的平均负载做出自适应路由决策时,在该示例中,中间交换机704可以具有为二的平均负载值,而中间交换机706可以具有为三的平均负载值。基于平均负载值做出自适应路由决策然后将导致源交换机702选择通过中间交换机704(即,路由或路径710)到达目的地交换机708。然而,如上所述,中间交换机704与目的地交换机708之间的链路可能是忙的,这可能对例如时延产生负面影响。
[0206]
根据一个实施例,并且如上所述,可以考虑端口忙碌情况。也就是说,并返回参考图5,候选端口的向下选择和自适应路由选择可以基于负载。同样,frf部件400考虑帧可以转发到的三类候选端口:首选最小路径候选端口502;非首选最小路径候选端口504;以及非最小路径候选端口506。取决于帧在其路径上的位置,非最小路径候选端口是全局非最小路径候选端口或局部非最小路径候选端口。
[0207]
过滤可以应用于这三类候选端口,例如操作端口过滤、可用端口过滤以及忙端口过滤。本文应用的端口过滤可以用于通过识别缺席和/或故障端口并将其排除在考虑之外而减少被视为路径候选端口的一组有效端口。
[0208]
在图7a的示例中,忙端口过滤可能导致选择不同的路径来将帧从源交换机702路由到目的地交换机708。同样,关于相邻交换机(在该示例中,中间交换机704和706)中哪些端口忙的知识可以用于基于相邻交换机随后是否需要将帧转发到已经较忙的端口来确定连接到相邻交换机的端口是否是用于接收帧的较差候选。因此,忙端口过滤可以由frf部件400通过使用忙端口掩码以移除严重负载的端口而不被视为候选端口来执行。frf部件400维护四个忙端口(即负载超过软件定义的阈值的端口)掩码:局部交换机忙端口掩码;全局非最小忙全局端口掩码;全局非最小忙局部端口掩码;远程交换机忙端口掩码。在交换机之间传送来自这些掩码的信息以填充远程交换机。
[0209]
这里,局部交换机忙端口掩码可以应用于最小路径候选端口以及局部非最小路径候选端口,例如,中间交换机704和706的输出端口。frf部件400通过将每个端口的local_load与软件定义的阈值进行比较来生成64位ls_busy_port_mask。负载高于该阈值的端口在该掩码中被标记为忙。在该示例中,来自引导到目的地交换机708的中间交换机704的输出端口满足或超过为交换机结构指定的软件定义的阈值。因此,ls_busy_port_mask指示从中间交换机704到目的地交换机708的链路是忙的。另一方面,因为没有满足/超过忙碌阈值,中间交换机706到目的地交换机708的输出端口没有用ls_busy_port_mask标记或做记号,这反映了中间交换机706与目的地交换机708之间的链路是安静的,并且不忙。
[0210]
基于中间交换机704之间的链路是忙的忙端口掩码指示,链接到目的地交换机708的输入端口的中间交换机704的输出端口被认为是较差的候选,并且被排除在考虑之外。因此,与其中基于平均负载选择路由710的图7a的场景相比,选择路由或路径712以将(多个)帧从源交换机702通过中间交换机706路由到其目的地,即目的地交换机708。应当理解,尽
管平均负载更高,但中间交换机706与目的地交换机708之间的安静链路条件是路由来自源702的帧的更好选择。
[0211]
图8是图示了根据所公开技术的一个实施例的用于实现自适应路由或路径选择的示例操作的流程图。
[0212]
在操作800处,在网络边缘处接收数据通信。如上所述,例如交换机202等交换机可以具有多个端口(在一些实施例中为64个端口),其中,一些端口可以是输入端口(220b),一些端口可以是输出端口(220c)。包可以在一个交换机的输入与输出端口之间路由到另一个或多个交换机(每个交换机都有其自己的输入和输出端口)。可以根据包在从源交换机到目的地交换机的路径上可以经过的交换机的某些特性来执行包在交换机之间的路由。在一些实施例中,交换机202可以是位于网络或交换机结构边缘处的交换机,并且可以经由这样的边缘交换机的入口端口来从交换机结构内部或外部的另一交换机、nic等接收数据(例如数据包或帧)。
[0213]
在操作802处,基于针对数据通信识别的源和目的地生成流通道。如上所述,在接收到已注入数据包时,入口边缘交换机可以向流指派流id,并且流id可以是特定于链路和特定输入端口的本地有效值。当包转发到下一跳交换机时,包进入另一个链路并且流id被更新,使得在包经过链路和/或交换机时,由与该特定流对应的流id形成唯一链。属于同一流的后续包可以沿路径使用相同的流id。当包被传送到目的地出口交换机并且数据路径上的交换机接收到ack包时,每个交换机可以更新其关于该流的未完成的、未确认的数据量的状态信息。对于该流,当交换机的输入队列为空并且没有更多未确认的数据时,交换机可以释放流id(即,释放该流通道)并将流id重新用于其他流。这种数据驱动的动态流建立和拆除机制可以消除集中流管理的需要,并允许网络快速响应流量模式变化。
[0214]
在操作804处,基于最小化多个交换机的子集之间的跳数并根据流通道在该多个交换机上路由数据通信。在沿帧的路径的每一跳处,可以用于使帧沿其下一跳前进的路由模式由frf路由算法表408的配置来控制。当在交换机输入端口处接收到帧时,确定可以与帧一起转发的路径类型:局部最小、全局最小、局部非最小、以及全局非最小。帧可以被转发到的一组输出端口由该点处允许的路径类型确定。
[0215]
如上所述,使用自适应路由技术,将路由方法结合到网络中,如网络100(图1)等,其中,最小路由在整个路径上进一步分类为首选最小路由和正常最小路由。首选路由是首选更直接的最小路由的路由,导致到目的地的跳数更少。
[0216]
同样,如交换机202等交换机支持基于目的地的最小和非最小路径路由。如果目的地nic是局部的,则选择连接到目的地交换机的输出端口。如果目的地在另一个分组中,则将包路由到连接到目的地分组的局部分组内的交换机。在大型系统中,可能仅有一个这样的路径,但在小型系统中可能有许多这样的路径,一些路径连接到输入交换机,而其他路径连接到其分组内的其他位置的交换机。输入交换机在它们之间进行选择。考虑用于最小路径路由的候选端口进一步划分为首选和非首选端口组,其中,所述首选组中的端口可以导致路径包含较少的跳数。非最小路径经由中间交换机(称为根交换机)来路由包。取决于流量的排序要求,以逐包或逐流的方式选择根交换机。
[0217]
一个分组中的边缘端口与另一个分组中的边缘端口之间的全局最小路径可能需要跨结构链路的一跳、两跳、或三跳。在标识最小路径候选端口时,frf能够将候选分类为一
组首选端口和一组非首选端口。首选端口是那些允许需要两个或更少结构链路跳的全局最小路径的端口。在可用且负载不太重时使用首选路径会降低系统局部结构链路的平均负载,因为它会减少每个帧经过的局部结构链路的平均数量。使用首选路径还可以减少帧经历的端到端结构时延。
[0218]
应注意的是,如本文所使用的术语“优化”、“最优”等可以用于意指使或达到尽可能有效或完美的性能。然而,阅读本文件的本领域普通技术人员将认识到,并不总是能够实现完美。因此,这些术语还可以涵盖在给定的情况下做到或实现尽可能好或有效或实际的性能、或者做到或实现优于利用其他设置或参数所可以实现的性能。
[0219]
图9描绘了可以在其中实施本文描述的各种实施例的示例计算机系统900的框图。计算机系统900包括总线902或用于传送信息的其他通信机制、与总线902耦接以处理信息的一个或多个硬件处理器904。(多个)硬件处理器904可以是例如一个或多个通用微处理器。
[0220]
计算机系统900还包括耦接到总线902以用于存储要由处理器904执行的信息和指令的主存储器906,诸如随机存取存储器(ram)、缓存和/或其他动态存储设备。主存储器906还可以用于存储在执行要由处理器904执行的指令期间的临时变量或其他中间信息。这种指令当存储在处理器904可访问的存储介质中时使计算机系统900成为被自定义为执行指令中指定的操作的专用机器。
[0221]
计算机系统900进一步包括只读存储器(rom)908或耦接到总线902以用于存储处理器904的静态信息和指令的其他静态存储设备。诸如磁盘、光盘或usb拇指驱动器(闪存驱动器)等存储设备910被提供并耦接到总线902,用于存储信息和指令。
[0222]
计算机系统900可以经由总线902耦接到诸如液晶显示器(lcd)(或触摸屏)等显示器912上,以用于向计算机用户显示信息。包括字母数字键和其他键的输入设备914耦接到总线902,以用于将信息和命令选择传送到处理器904。另一种类型的用户输入设备是诸如鼠标、轨迹球或光标方向键等光标控制装置916,以用于将方向信息和命令选择传送到处理器904并用于控制在显示器912上的光标移动。在一些实施例中,与光标控制装置相同的方向信息和命令选择可以通过在没有光标的情况下接收触摸屏上的触摸来实施。
[0223]
计算系统900可以包括用于实施gui的用户界面模块,所述gui可以作为由(多个)计算设备执行的可执行软件代码被存储在大容量存储设备中。通过举例的方式,此模块和其他模块可以包括部件(诸如软件部件、面向对象的软件部件、类部件和任务部件)、进程、函数、属性、过程、子例程、程序代码段、驱动程序、固件、微代码、电路、数据、数据库、数据结构、表格、数组和变量。
[0224]
通常,如本文所使用的词语“部件”、“引擎”、“系统”、“数据库”、“数据存储”等可以是指在硬件或固件中实施的逻辑,或者是指以诸如例如java、c或c 等编程语言编写的、可能具有入口点和出口点的软件指令集。软件部件可以被编译并链接到可执行程序,被安装在动态链接库中,或者可以用诸如例如basic、perl、或python等解释性编程语言编写。应当理解的是,软件部件可从其他部件或从其本身调用,和/或可以响应于检测到的事件或中断而被调用。被配置用于在计算设备上执行的软件部件可以被提供在计算机可读介质中,诸如致密盘、数字视频盘、闪存驱动器、磁盘、或任何其他有形介质,或者可以被提供作为数字下载(并且可以原始地以要求在执行之前安装、解压缩或解密的压缩格式或可安装格式来
存储)。这种软件代码可以部分或全部地存储在执行计算设备的存储器设备上,以用于由计算设备执行。软件指令可以嵌入在诸如eprom等固件中。将进一步理解的是,硬件部件可以包括诸如门和触发器等连接逻辑单元,和/或可以包括诸如可编程门阵列或处理器等可编程单元。
[0225]
计算机系统900可以使用定制的硬接线逻辑、一个或多个asic或fpga、固件和/或程序逻辑来实施本文所描述的技术,所述定制的硬接线逻辑、一个或多个asic或fpga、固件和/或程序逻辑与计算机系统相结合使计算机系统900成为专用机器或者将其编程为专用机器。根据一个实施例,本文的技术由计算机系统900响应于(多个)处理器904执行主存储器906中包含的一个或多个指令的一个或多个序列而执行。这种指令可以从另一个存储介质(诸如存储设备910)读取到主存储器906中。主存储器906中包含的指令序列的执行使(多个)处理器904执行本文所描述的过程步骤。在替代实施例中,可以使用硬接线电路来代替软件指令或者与软件指令相结合。
[0226]
如本文所使用的术语“非暂态介质(non

transitory media)”及类似术语是指存储使机器以特定方式操作的数据和/或指令的任何介质。这种非暂态介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备910。易失性介质包括动态存储器,诸如主存储器906。非暂态介质的常见形式例如包括软盘、软磁盘、硬盘、固态驱动器、磁带或者任何其他磁性数据存储介质、cd

rom、任何其他光学数据存储介质、具有孔图案的任何物理介质、ram、prom和eprom、闪速eprom、nvram、任何其他存储器芯片或者盒、以及所述介质的联网版本。
[0227]
非暂态介质不同于传输介质但可以与传输介质结合使用。传输介质参与非暂态介质之间的信息传送。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线902的导线。传输介质还可以采用声波或光波的形式,诸如在无线电波和红外数据通信期间生成的声波或光波。
[0228]
计算机系统900还包括耦接到总线902的通信接口918。网络接口918提供耦接到一个或多个网络链路的双向数据通信,所述一个或多个网络链路连接到一个或多个本地网络。例如,通信接口918可以是综合业务数字网(isdn)卡、电缆调制解调器、卫星调制解调器或调制解调器,以向对应类型的电话线提供数据通信连接。作为另一个示例,网络接口918可以是用于提供与兼容lan(或用于与wan进行通信的wan部件)的数据通信连接的局域网(lan)卡。还可以实施无线链路。在任何这种实施方式中,网络接口918发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光学信号。
[0229]
网络链路通常通过一个或多个网络向其他数据设备提供数据通信。例如,网络链路可以提供通过本地网络到主计算机或到由因特网服务提供商(isp)操作的数据设备的连接。isp进而通过现在通常称为“因特网”的全球包数据通信网络来提供数据通信服务。本地网络和因特网两者都使用携带数字数据流的电信号、电磁信号或光学信号。通过各种网络的信号以及网络链路上和通过通信接口918的信号(其将数字数据携带到计算机系统900和从所述计算机系统携带数字数据)是传输介质的示例形式。
[0230]
计算机系统900可以通过(多个)网络、网络链路和通信接口918发送消息和接收数据,包括程序代码。在因特网示例中,服务器可以通过因特网、isp、本地网络和通信接口918来传输应用程序的请求代码。
[0231]
所接收的代码可以在被接收到时由处理器904执行,和/或存储在存储设备910、或其他非易失性存储器中以供稍后执行。
[0232]
在前面章节中所描述的每个过程、方法、和算法均可以在由包括计算机硬件的一个或多个计算机系统或计算机处理器所执行的代码部件中实施并由所述代码部件全部或部分地进行自动化。所述一个或多个计算机系统或计算机处理器还可以操作以支持“云计算”环境中相关操作的进行、或者操作作为“软件即服务”(saas)。所述过程和算法可以在专用电路中部分地或全部地实施。上文所描述的各种特征和过程可以彼此独立地使用,或者可以以各种方式进行组合。不同的组合和子组合旨在落入本公开的范围内,并且在一些实施方式中可以省略某些方法框或过程框。本文描述的方法和过程也不限于任何特定的顺序,并且与所述方法和过程相关的框或状态可以以适当的其他顺序进行、或者可以并行进行、或者以某种其他方式进行。可以向所公开的示例实施例中添加框或状态或从中移除框或状态。可以将某些操作或过程的进行分发到多个计算机系统或计算机处理器之中,使其不是仅驻留在单个机器内,而是跨多个机器部署。
[0233]
如本文所使用的,电路可以利用任何形式的硬件、软件或其组合来实施。例如,可以实施一个或多个处理器、控制器、asic、pla、pal、cpld、fpga、逻辑部件、软件例程或其他机制以构成电路。在实施中,本文描述的各种电路可以被实施为分立电路,或者所描述的功能和特征可以在一个或多个电路之中部分地或全部地共享。即使可以分别地描述或主张各种特征或功能元件作为单独的电路,这些特征和功能也可以在一个或多个公共电路之间共享,并且这种描述不应要求或暗示需要单独的电路来实施这种特征或功能。在使用软件来全部或部分地实施电路的情况下,这样的软件可以被实施以与能够执行关于所述软件所描述的功能的计算系统或处理系统(诸如计算机系统900)一起操作。
[0234]
如本文所使用的,术语“或”可以以包括性或排他性的意义来解释。而且,不应将对单数形式的资源、操作或结构的描述理解为排除复数。除非另外具体规定,或在如所使用的环境内以其他方式被理解,否则条件语言(除其他外,诸如“可(can)”、“可以(could)”、“可能(might)”、或“会(may)”)一般地旨在传达某些实施例包括(而其他实施例不包括)某些特征、元素和/或步骤。
[0235]
除非另外明确说明,否则本文档中使用的术语和短语及其变体应被解释为开放式的而不是限制性的。形容词(诸如“常规(conventional)”、“传统(traditional)”、“正常(normal)”、“标准(standard)”、“已知(known)”和类似含义的术语)不应被解释为将所描述的项限制为给定时间段或在给定时间可用的项,而是应该被理解为包含可能现在或将来的任何时候都可用或已知的常规、传统、正常或标准技术。在某些实例中,宽泛词语和短语(诸如“一个或多个”、“至少”、“但不限于”或其他类似的短语)的存在不应被理解为是指在这样的宽泛短语可能不存在的情况下意图或要求更窄的情况。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献