用于在存在持续流的情况下的自适应路由的系统和方法

文档序号:1942987 发布日期:2021-12-07 浏览:13次 >En<

阅读说明:本技术 用于在存在持续流的情况下的自适应路由的系统和方法 (System and method for adaptive routing in the presence of a continuous flow ) 是由 D·罗威斯 于 2020-03-23 设计创作,主要内容包括:描述了用于在存在持续流的情况下提供自适应路由的系统和方法。结构中的交换机具有建立流通道的能力。交换机可以自适应地路由流,同时监视流通道的传输特性以识别任何流是否在朝向目的地时正经历拥塞。响应于检测到拥塞,可以进一步确定流是否与拥塞源有关或替代地流是否为拥塞受害者。作为拥塞源的流的路由受到约束以防止拥塞传播。例如,作为拥塞源的流的新包可能被迫仅采取检测到所述拥塞的数据传输路径(防止拥塞扩散)。替代地,拥塞受害者的路由不受约束,并且包可以采取如由自适应路由所准许的任何路径。(Systems and methods for providing adaptive routing in the presence of a continuous flow are described. The switches in the fabric have the ability to establish flow paths. The switch may adaptively route flows while monitoring the transmission characteristics of the flow channels to identify whether any flow is experiencing congestion toward the destination. In response to detecting congestion, it may be further determined whether the flow is related to the source of the congestion or alternatively whether the flow is a congestion victim. The routing of flows that are sources of congestion is constrained to prevent congestion propagation. For example, a new packet of a flow that is a source of congestion may be forced to take only a data transmission path in which the congestion is detected (congestion spreading is prevented). Alternatively, the routing of the congestion victim is unconstrained, and the packet may take any path as permitted by adaptive routing.)

具体实施方式

大型网络由许多单独的交换机组成,这些交换机与许多数据链路连接。传统的网络将数据拆分为可管理的块(称为包或帧)。这允许许多单独且不同的通信共享单个链路的带宽。特别地,一个通信的单次大数据传送将不会阻止许多其他小型通信的完成。大型通信被分解成许多单独的包,并且它的包与其他小型通信和大型通信的包进行时间多路复用。这种方法允许单个共享网络资源执行许多并发通信,并在存在大型通信的情况下显著减少小型通信的最大时延。

然而,在许多完全不同的通信之间共享资源只有在没有一个通信可以耗尽其他通信的任何共享资源的前提下才能很好地工作。同样重要的是,对共享资源的访问对于所进行的每一个通信的重要性仍然是公平和适当的。因此,当在源节点和目的地之间路由数据包时,典型的路由技术要么是静态的,要么是自适应的(动态)。在自适应路由的一个示例中,基于负载信息和其他因素动态地做出本地路由决定。在当前系统中,自适应路由(不考虑拥塞源)会引起拥塞扩散。根据本文中所公开的自适应路由技术,某些数据流可以被识别为拥塞源,而其他数据流可以被识别为拥塞受害者。如将详细描述的,自适应路由技术可以允许受害流继续做出正常的动态路由决定。正引起拥塞的流将根据自适应路由技术而受到限制,从而使其路由受限制。此外,所公开的自适应路由技术处理持续流。

本公开描述了可以适应百亿亿次计算的系统和方法,例如以百亿亿次速度执行诸如模拟、数据分析、人工智能工作负载之类的数据密集型任务。特别地,提供了HPC网络或互连结构,其可为以太网兼容的、能够连接到第三方数据存储装置(data storage)、以及可以使用带宽极高的交换机部件(例如,每个交换机大约12.8Tb/s/dir)来构建,其中例如64个200Gbps端口支持以非常低的直径(例如,仅三个网络跃点)的大型网络创建。此外,可以通过新颖的拥塞控制机制、自适应路由以及使用允许在带宽整形、优先级和路由策略方面的灵活性的流量类别来实现低时延。

关于自适应路由,本文中所描述的技术和系统可以通过利用对流通道的识别和管理来实现对流的动态路由。当在源节点和目的地之间路由数据包时,典型的路由技术要么是静态的,要么是自适应的(动态)。在自适应路由的一个示例中,基于负载信息和其他因素动态地做出本地路由决定。在当前系统中,自适应路由会引起拥塞扩散。这就是说,某些数据流可以被识别为拥塞源,而其他数据流可以被简单地识别为拥塞受害者。在处理持续流的自适应路由技术中,如本文中所公开的,允许受害流继续做出传统路由的决定,而对引起拥塞的流的路由将受到限制。如上文所暗示的,这种能力是通过对流通道的识别和管理来实现的。

图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有效负载)。IPv4或IPv6包、专门针对网络100格式化的帧等也可被接收、通过交换机结构100传送到另一个交换机(例如,交换机110)。因此,网络100能够同时处理多种类型的流量。一般而言,交换机可以具有边缘端口和结构端口。边缘端口可以联接到结构外部的装置。结构端口可以经由结构链路联接到结构内的另一个交换机。

通常,流量可以经由边缘交换机的入口端口注入到交换机结构100中,并且经由另一个(或同一个)边缘交换机的出口端口离开交换机结构100。入口边缘交换机可以将注入的数据包集合成流,这些流可以通过流ID进行识别。流的概念不限于特定的协议或层(诸如,开放系统接口(OSI)参考模型中的第2层或第3层)。例如,流可以被映射到具有特定的以太网源地址的流量、源IP地址和目的地IP地址之间的流量、对应于TCP或UDP端口/IP 5元组的流量(源IP地址和目的地IP地址、源TCP或UDP端口号和目的地TCP或UDP端口号、以及IP协议号)、或由在终端主机上运行的进程或线程产生的流量。换句话说,流可以被配置成映射到任何物理或逻辑实体之间的数据。此映射的配置可以远程地或在入口边缘交换机处本地地完成。

在接收到注入的数据包时,入口边缘交换机可以将流ID指派给该流。该流ID可以被包括在特殊的报头中,入口边缘交换机可以使用该报头来封装注入的包。此外,入口边缘交换机还可以检查注入的包的原始报头字段以确定适当的出口边缘交换机地址,并将此地址作为目的地地址包括在封装报头中。注意,流ID可以是特定于链路的本地有效值,并且此值可以仅对于交换机上的特定输入端口是唯一的。当包被转发到下一跳(next-hop)交换机时,包进入另一个链路,并且可以相应地更新流ID。由于流的包横过多个链路和交换机,因此对应于该流的流ID可以形成唯一的链。也就是说,在每个交换机处,在包离开该交换机之前,包的流ID可以被更新为由送出链路使用的流ID。流ID之间的这种从上游到下游的一对一映射可以在入口边缘交换机处开始并在出口边缘交换机处结束。由于流ID只需要在引入链路内是唯一的,因此交换机可以容纳大量的流。例如,如果流ID为11位长,则输入端口可以支持多达2048个流。此外,用于映射到流的匹配模式(包的一个或多个报头字段)可以包括更大的位数。例如,32位长的匹配模式(其可以在包报头中包括多个字段)可以映射2^32种不同的报头字段模式。如果结构具有N个入口边缘端口,则可以支持总数为N*2^32个可识别流。

交换机可以向每个流指派单独的专用输入队列。这种配置允许交换机监视和管理各个流的拥塞程度,并防止在将共享缓冲区用于多个流的情况下可能发生的队列头阻塞。当包被递送到目的地出口交换机时,出口交换机可以生成确认(ACK)并沿上游方向沿着同一条数据路径将该ACK发送回到入口边缘交换机。由于此ACK包横过同一条数据路径,因此沿着路径的交换机可以通过监视未完成的(outstanding)、未确认的数据量来获得与对应流的递送相关联的状态信息。然后,可以使用此状态信息来执行特定于流的流量管理,以确保整个网络的健康和对流的公平处理。如下文更详细解释的,这种按流排队与特定于流的递送确认相结合,可以允许交换机结构实施有效、快速和准确的拥塞控制。反过来,交换机结构可以在不遭受拥塞的情况下以显著改善的网络利用率来递送流量。

可以基于需求动态地或“即时”设立和释放流。具体地,当数据包到达交换机并且先前没有将流ID指派给此包时,可以由入口边缘交换机设立流(例如,建立流ID到包报头的映射)。当此包行进通过网络时,可以沿着该包横过的每个交换机来指派流ID,并且可以建立从入口到出口的流ID链。属于同一个流的后续包可以沿着数据路径使用相同的流ID。当包被递送到目的地出口交换机并且ACK包由沿着数据路径的交换机接收时,每个交换机可以更新它的关于该流的未完成的、未确认的数据量的状态信息。当交换机的用于该流的输入队列为空并且不存在更多未确认的数据时,交换机可以释放流ID(即,释放该流通道)并将该流ID重新用于其他流。这种数据驱动的动态流设立和拆除机制可以消除对集中化流管理的需要,并且允许网络快速响应流量模式变化。注意,本文中所描述的网络架构与软件定义网络(SDN)不同,后者通常使用OpenFlow协议。在SDN中,交换机由中央网络控制器配置,并且基于第2层(数据链路层,诸如以太网)、第3层(网络层,诸如IP)或第4层(传送层,诸如TCP或UDP)报头中的一个或多个字段来转发包。在SDN中,这种报头-字段查找在网络中的每个交换机处执行,并且不存在如在本文中所描述的网络中完成的基于流ID的快速转发。此外,由于OpenFlow报头-字段查找是使用三态内容可寻址存储器(TCAM)完成的,因此这种查找的成本会是高的。而且,由于报头-字段映射配置由中央控制器完成,因此每种映射关系的设立和拆除相对缓慢并且可能需要相当量的控制流量。结果,SDN网络对各种网络情形(诸如,拥塞)的响应会是缓慢的。相比之下,在本文中所描述的网络中,可以基于流量需求动态地设立和拆除流;并且可以根据定长(fixed-length)流ID来转发包。换句话说,流通道可以在没有中央控制器的干预的情况下以分布式方式进行数据驱动和管理(即,设立、监视和拆除)。此外,基于流ID的转发可以减少所使用的TCAM空间的量,且结果可以容纳数量大得多的流。

参考图1中所示的示例,假设存储阵列112要使用TCP/IP将数据发送到主机116。在操作期间,存储阵列112可以利用主机116的IP地址(作为目的地地址)和TCP报头中所指定的预定TCP端口来发送第一包。当此包到达交换机110时,交换机110的输入端口处的包处理器可以识别此包的TCP/IP 5元组。交换机110的包处理器还可以确定这个5元组当前没有被映射到任何流ID,并且可以将新的流ID分配给这个5元组。此外,交换机110可以基于目的地(即,主机116的)IP地址(假定交换机110知道主机116联接到交换机104)来确定用于此包的出口交换机(其为交换机104)。随后,交换机110可以用结构报头来封装接收到的包,该结构报头指示新指派的流ID和交换机104的结构地址。然后,交换机110可以基于结构转发表将所封装的包调度为朝向交换机104转发,该结构转发表可以由结构100中的所有交换机使用路由算法(诸如,链路状态或距离矢量)来计算。

注意,当接收到第一包时,上文所描述的操作可以基本上以线速度执行且几乎没有缓冲和延迟。在第一包被处理并调度用于传输之后,由于使用了相同的流ID,因此来自同一个流的后续包可以由交换机110甚至更快地处理。另外,流通道的设计可以使得流通道的分配、匹配和解除分配可以具有基本相同的成本。例如,可以在几乎每个时钟周期中并发地执行基于查找匹配对流通道的有条件分配和对另一个流通道的单独、独立的解除分配。这意味着,生成和控制流通道几乎不会将附加的开销加到包的常规转发。另一方面,拥塞控制机制可以将一些应用的性能改善三个数量级以上。

在沿着数据路径的每个交换机(其包括交换机110、106和104)处,可以为该流提供专用的输入缓冲区,并且可以跟踪已传输但未确认的数据量。当第一包到达交换机104时,交换机104可以确定包的结构报头中的目的地结构地址与它自己的地址匹配。作为响应,交换机104可以从结构报头解封包,并将解封后的包转发到主机116。此外,交换机104可以生成ACK包并将此ACK包发送回到交换机110。当此ACK包横过同一条数据路径时,交换机106和110可以各自针对该流的未确认的数据更新它们自己的状态信息。

一般而言,网络内的拥塞会引起填充网络缓冲区。当网络缓冲区满时,应减慢或停止理想情况下试图通过缓冲区的流量。否则,缓冲区可能溢流,并且可能丢失包。在常规网络中,拥塞控制通常在边缘处端对端完成。假定网络的核心仅用作“哑管道”,其主要目的是转发流量。这种网络设计常常遭受对拥塞的响应缓慢的问题,因为拥塞信息常常无法快速发送到边缘装置,并且由边缘装置采取的所得动作并非总是能有效去除拥塞。这种缓慢的响应进而限制了网络的利用率,因为为了保持网络畅通无阻,网络运营商常常需要限制注入到网络中的流量总量。此外,端到端拥塞控制通常只有在网络还没有发生拥塞的条件下才有效。一旦网络严重拥塞,端到端拥塞控制就将不起作用,因为拥塞通知消息本身会发生拥塞(除非使用与数据平面网络不同的单独的控制平面网络来发送拥塞控制消息)。

相比之下,流通道可以防止这种拥塞在交换机结构内增长。流通道机制可以辨识流何时正经历某种程度的拥塞,并且作为响应,可以减慢或停止同一个流的新包进入结构中。反过来,这些新包可以被缓存在边缘端口上的流通道队列中,并且它们只有当同一个流的包在目的地边缘端口处离开结构时才被允许进入结构中。这个过程可以将结构内对该流的总缓冲要求限制为将不会引起结构缓冲区变得太满的量。

就流通道而言,交换机具有关于结构内未完成的传输中(in-transit)数据的量的相当准确的状态信息。可以聚合入口边缘端口上的所有流的此状态信息。这意味着,通过入口边缘端口注入的数据总量可以是已知的。因此,流通道机制可以对结构中的数据总量设定限制。当所有边缘端口都应用此限制动作时,可以很好地控制整个结构中的包数据总量,这进而可以防止整个结构饱和。流通道还可以减慢结构内单独的拥塞流的进展,而不会减慢其他流。这个特征可以保持包远离拥塞热点,同时防止缓冲区变满并为不相关流量确保可用的缓冲区空间。

流通道的操作

一般而言,流通道可以为跨越交换机结构的每个通信会话定义路径。可以在与交换机结构的每个链路相关联的一组动态地连接的流表中描述属于每个流的数据的路径和量。在每个入口端口、边缘和结构上,可以定义一组流通道队列。每个流通道可以存在一个队列。当包到达时,它们可以要么被指派给边缘端口上的流通道,要么已由链路伙伴的出口结构端口在结构入口端口上指派给流通道。流通道信息可以用于将包引导到适当的流通道队列中。

图2A示出了促进流通道的示例性交换机。在此示例中,交换机可以包括纵横交换机202。纵横交换机202可以具有若干个输入端口(诸如,输入端口204)以及若干个输出端口(诸如,输出208)。纵横交换机202可以将包从输入端口转发到输出端口。每个输入端口可以与若干个输入队列相关联,每个输入队列被指派给到达该输入端口的不同传入流。例如,到达交换机的给定端口的数据可以首先基于它们的各个流进行分离,并且存储在特定于流的输入队列(诸如,输入队列206)中。存储在输入队列中的包可以基于被设计成控制拥塞的调度算法(在后面的章节中更详细地描述)而出列并发送到纵横交换机202。在输出侧上,一旦包通过纵横交换机202,它就可以临时存储在输出传输队列(诸如,输出传输队列210)中,该输出传输队列可以由在同一个输出端口上离开的所有流共享。同时,在包从输出传输队列中出列并在送出链路上传输之前,包的报头可以用送出链路的流ID进行更新。注意,当流中的第一包行进跨越网络时,可以完成这种逐跳(hop-by-hop)流ID映射。当包到达下一跳交换机时,包可以再次存储在特定于流的输入队列中并且可以重复相同的过程。注意,流ID用于区分在同一条结构链路上行进的流,并且通常可以由该链路的发射器端指派,该发射器端是正传输到此链路上的交换机的输出端口。

通过提供特定于流的输入队列,交换机可以允许每个流独立于所有其他流移动。交换机可以避免队列头阻塞问题,队列头阻塞问题在共享输入缓冲区的情况下是常见的。特定于流的输入队列还允许使单个流内的包保持有序。当流通过交换机时,可以为该流分配每个输入端口上的特定于流的输入队列,并且这些输入队列变得被链接,从而针对该流有效地形成到达跨越整个结构的一个长队列,并且可以使该流的包保持有序。

属于一个流的包的成功递送进展可以通过由出口交换机的边缘端口生成的一系列ACK来报告。这些ACK包可以沿相反方向沿着数据包所横过的数据路径行进,并且可以由交换机根据流表中所维持的转发信息进行转发。当ACK包向上游行进时,它们可以由每个交换机的输入队列管理器处理,该输入队列管理器可以基于由ACK包携载的信息来更新对应流的状态信息。ACK包可以具有类型字段以提供关于下游数据路径的先进信息,诸如拥塞。交换机的输入队列管理器可以使用该信息来做出关于当前被缓存在其输入队列中的未决数据包的决定,诸如限制传输速率或改变转发路径。另外,输入队列管理器可以基于缓冲流的状态信息来更新ACK包中携载的信息,使得上游交换机可以做出恰当的决定。例如,如果用于给定流的输入队列正经历拥塞(例如,队列中的数据量高于预定阈值),则输入队列管理器可以将被转发到下一个上游交换机的ACK包更新为包括该拥塞信息。

如果ACK对应于流的最后一个包,则交换机可以确定该流不再存在未确认的数据。相应地,交换机可以通过去除流表中的对应条目来释放流通道。

如上文提到的,每个交换机处的输入队列管理器可以维持关于给定流的已传输但未确认的数据的信息。图2B示出了沿着数据路径的交换机如何可以维持流状态信息的示例。在此示例中,流所采取的数据路径可以包括交换机222、224和226。已传输但未确认的流数据量可以由变量“flow_extent”来指示,该变量可以以定长数据单元的数量来衡量,诸如256字节。此外,flow_extent和其他流状态信息可以由交换机的输入队列管理器来维持,该输入队列管理器可以持续监视所有特定于流的队列。

在图2B中的示例中,交换机的输入队列管理器处的flow_extent值为1,因为存在一个已从输入队列发送出并通过纵横交换机转发的数据单元。注意,由于对要经由输出链路传输的所有数据包的调度所致,由输入队列发送的数据包可能临时被缓存在输出传输缓冲区中。当这种包被缓存在输出端口的传输缓冲区中时,出于更新flow_extent值的目的,输入队列仍然可以将包视为已传输的。

相应地,由于交换机226处用于给定流的输入队列具有六个排队的数据单元,并且两个附加的数据单元在交换机224和226之间是在传输中的,因此交换机224处的flow_extent值为9。类似地,交换机222处的flow_extent值为13,因为在交换机224处存在三个存储于输入队列中的数据单元并且一个数据单元在交换机222和224之间是在传输中的。

一般而言,流通道可以保持分配给单个流,直到对于在该流通道上发送的所有包的所有ACK都已返回为止。这意味着,流通道表条目可以在结构入口边缘端口附近比在出口边缘端口附近保持起作用历时更长时间。如果单个包注入到网络中,则可以为入口边缘端口分配一个流通道,且然后可以为该包所横过的下一条结构链路分配另一个流通道,等等,直到当该包到达最后一条结构链路时分配最后一个流通道为止。每次分配均可以生成流ID(表示为变量“flow_id”),以识别结构链路的流表的条目。(在下文结合图4A的描述中提供了关于流通道表的更多细节。)该第一包可在包所横过跨越交换机结构的每条结构链路上引起对不同flow_id的分配。

在每个交换机的输入队列处,流通道表条目可以指示每个流的从该点下游到流的出口目的地边缘端口的状态信息(包括flow_extent值)。在本地输入端口上接收到的包可以使该flow_extent值增加传入数据的量,且ACK可以使flow_extent减小已确认的递送数据的量。

当包到达最终目的地出口端口时,可以为该包生成并返回ACK包。在沿着数据路径的每个交换机处,可以使用存储在流通道表的对应条目中的数据路径信息来路由该ACK。可选地,ACK包本身不需要携载路径信息,且因此可以是小而重量轻的。如果流上没有发送其他数据包,则ACK可以以相反的顺序释放每个流通道。一旦释放,每个交换机处的流通道就可以分配给不同的流。

如果另一个包跟随同一个流上的第一包,则将需要在可以在给定交换机处释放流通道之前接收到对应于第二包的ACK。在一个实施例中,只有当同一个流的所有已传输的包的ACK都已返回时,才可以释放流通道。

通常,各种协议可能需要按顺序的包递送。流通道可以用于保证该递送顺序,即使当结构使用自适应路由来跨越多条数据路径进行负载平衡时也如此。如果入口边缘端口和出口边缘端口之间的包(可能在结构远侧上的不同交换机中)以非常低的速率注入,则每个注入的包可能到达其目的地并在注入下一个包之前将ACK返回到源。在这种情况下,每个包可以是引导包并且使用最佳可用的动态自适应路由选择来自由地采取跨越结构的任何路径。这是可能的,因为第一包可以定义流的穿过结构的路径。

现在假定包注入速率稍微增加到在当前包的ACK已返回到源之前注入同一个流的下一个包的点。第二包可以在沿着流的数据路径的某个地方传递第一包的ACK。超过(beyond)该传递点,ACK将释放分配给第一包的流通道,因为当流通道的逻辑处理ACK时,与第一包相关联的flow_extent值恢复为零。同时,第二包现在可以定义新的流,因为它再次引起在后续结构链路中的每一者上分配流通道。该第二包虽然引起超过传递点分配流通道,但它可以基于动态自适应路由被转发到不同的路径。另一方面,在传递点之前,第二包可以将由第一包创建的未完成流扩展为包括第二包。这意味着,第一包的ACK可不将flow_extent值减小到零,并且流通道可在传递点之前保持起作用。也就意味着,第二包可跟随第一包所采取的确切路径一直到传递点。注意,当它跟随前一个包时,第二包无法在第一包到达出口边缘端口之前到达出口边缘端口,且因此可以维持正确的包顺序。

如果该流的注入速率进一步增加,则第二包将在更靠近目的地边缘端口的位置处传递第一包的ACK。也有可能的是,在第一包的ACK返回到源边缘端口之前,第三包、第四包、第五包或附加包可进入结构中,具体取决于该流的数据包注入速率和数据包-ACK往返延迟。最大包速率可以取决于包的大小和链路的带宽。数据包和ACK的往返延迟可以是结构实施方式的重要参数,且可以与最大包速率一起用于计算每个链路所需的最大流通道数量。理想情况下,无论流量模式如何,设计都可以提供合理数量的未分配的流通道。当到达入口边缘端口的大量包具有不同的目的地并且这些包具有小的大小和高注入速率时,对流通道数量的需求会是高的。在最极端的情况下,每个包可能分配有不同的流通道。当包的ACK返回时,这些流通道被释放。相应地,所需的流通道数量可以被计算为((包速率)*(平均的包-ACK往返延迟))。

注意,单个流通道上的包速率不要与链路上的包速率混淆。如果流量模式使得许多小的包被发送到不同的目的地,则发送到链路上的连续包可以具有不同的目的地。这意味着,每个包可能属于不同的流并且可能是使用对应的流通道的唯一包。在此示例中,链路会经历高包速率,但各个流的包速率会是低的。可选地,若干个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使用的线带宽(wire bandwidth)小于其他数量的ACK。如果没有收集到有效数量的ACK并且送出链路仍然忙于发送正常的数据包,则可以使用第三计时器(其例如可以设定为90ns)。一旦此第三计时器到期,已收集到的所有ACK就可以聚合在一个帧中并传输到链路上。通过使用这三个计时器,系统可以显著减少在送出链路上发送ACK的开销。

在一些示例中,交换机的入口边缘端口可以用结构报头来封装接收到的数据包,这允许使用流通道转发包。图3A示出了用于数据包的示例结构报头。结构报头可以包括:flow_id字段,其可以识别流通道;以及“data_flow”字段,其可以指示整个流的进度。

当数据包被递送到它的目的地时,可以生成至少一个ACK。图3B示出了示例性ACK包格式。ACK包可以包括“flow_id”字段、“ack_flow”字段、“ACK类型”字段和循环冗余检查(CRC)字段。flow_id字段可以指示此ACK包所属的流。ack_flow字段可以指示此ACK包向其做出确认的数据包。回想一下,每个交换机可以维持flow_extent值,该flow_extent值指示已传输但未确认的数据量。flow_extent值可以被导出为flow_extent=data_flow-ack_flow,其中,data_flow值取自最后传输的数据包。

ACK类型字段可以指示不同类型的ACK。如上文提到的,在正常操作期间,当数据包被递送到目的地边缘端口时,可以生成常规的ACK包并将其发送回到源。相应地,ACK包中的ACK类型字段可以指示正常的ACK。当结构中发生拥塞时,ACK类型字段可以用于指示拥塞的各种类型和严重程度,诸如新拥塞、持续拥塞或在出口边缘端口处的严重拥塞(严重拥塞要求对流的重新路由)。另外,在特殊情况下(诸如,存在严重拥塞的结构链路、丢包或链路错误),也可以由非为最终目的地的中间交换机生成ACK,并且ACK类型字段可以用于通知上游交换机不同类型的网络状况。其他附加字段也可以包括在ACK包中。

图3C示出了用于导出和维持流的状态信息的不同变量之间的关系。在此示例中,交换机可以使用变量“total_extent”来跟踪未确认的已传输数据和当前在交换机处排队的数据的总量。total_extent值可以等于flow_extent(其为已传输而未确认的数据量)和queue_extent(其为存储在用于对应流的输入队列中的数据量)之和。变量“ack_flow”可以指示对应于针对该流的最新ACK的数据位置。变量“data_flow”可以指示要传输的下一个数据包的位置,该下一个数据包也对应于存储在输入队列的前头的数据包。变量“next_data_flow”可以指示交换机可以期望从上游交换机接收到的下一个数据包的位置。注意queue_extent=next_data_flow-data_flow,并且flow_extent=data_flow-ack_flow。

在一些示例中,流通道表可以用于促进遍及结构的流通道。流通道表是将给定流的转发和状态信息存储在交换机的端口处的数据结构。图4A示出了如何可以使用流通道表来存储与多个流相关联的状态信息的示例。此状态信息可以特定于每个流并高效地存储在表中。假定源主机402正经由结构将数据包发送到目的地主机404。数据包所横过的数据路径可以包括入口边缘交换机406、中间交换机408和430、以及出口边缘交换机432。

当包到达交换机406的入口边缘链路403时,可以由地址转换逻辑块410分析包的报头。地址转换逻辑块410可以基于包的以太网、IP或HPC报头信息来确定出口交换机(在这种情况下为交换机432)的目的地结构地址。注意,地址转换逻辑块410也可以使用与其他协议或不同协议的组合相关联的报头信息。然后,由地址转换逻辑块410确定的结构目的地地址可以用于在边缘流通道表(EFCT)412中执行查找。EFCT 412可以使用包的结构目的地地址以及可选地从包的报头中提取的附加值来执行对包的查找操作,这可以被称为匹配模式。EFCT 412可以将包的匹配模式与所有现有已分配流的存储的匹配模式进行比较。如果找到匹配,则此包是现有流的一部分,并且可以为该包返回先前分配的流ID。如果没有找到匹配,则可以为该包分配新的流ID,并且可以将匹配模式添加到EFCT 412。换句话说,EFCT412可以用于确定对于传入包是否已经存在流通道,或者是否需要分配新的流通道。除了目的地结构地址之外,其他包报头信息(诸如,流量类别、TCP或UDP端口号以及进程或线程ID)也可以用于映射或分配流ID。

然后,由EFCT 412获得的流ID可以用作索引以映射到输入流通道表(IFCT)414中的条目。IFCT 414中的每个条目可以按流ID进行索引并存储对应流的状态信息。IFCT 414中的条目可以存储与流相关联的next_data_flow、data_flow和ack_flow(见图3C)的值。另外,IFCT条目可以存储用于流的拥塞控制和动态路由的其他参数。

流ID还可以用于识别或分配特定于流的输入队列,在该输入队列中可以临时存储传入包。特定队列的状态信息以及用于监视和控制队列的参数(诸如,用于检测拥塞的阈值)可以存储在IFCT 414中的对应条目中。输入队列管理逻辑块可以基于存储在IFCT 414的条目中的流控制参数来确定包何时可以从输入队列中出列并发送到数据纵横交换机413。

当包从输入队列中出列并通过纵横交换机413发送到输出端口时,利用它已在其上到达交换机406的输入端口号发送该包。当包到达输出端口的传输缓冲区时,可以基于包的流ID和输入端口号来更新包的报头,其中新的流ID将由用于同一个流的下一跳交换机(即,交换机408)使用。这是因为,每个链路沿每个方向都可以具有它自己的一组流通道,该组流通道通过它们各自的流ID进行识别。可以通过查找输出流通道表(OFCT)416来完成从传入流ID到下一个链路上使用的传出流ID的映射。OFCT 416可以使用匹配模式来执行查找,该匹配模式是对应于链路403的本地输入端口号和由EFCT 412产生的包的流ID的组合。如果找到匹配,则已经定义了流,并且包的流ID用对应于匹配模式的值进行更新(这个新的传出流ID将由下游的下一跳交换机408使用)。如果未找到匹配,则可以向新的流通道分配新的传出流ID,该传出流ID可以被映射到输入端口号和先前的传入流ID。包括传出流ID、输入端口号和传入流ID的条目可以存储在OFCT 416中。

在包是流中的第一包的情况下,在OFCT 416中进行的查找将不会产生任何映射。反过来,OFCT 416可以为包分配要由输入端口和交换机408上的IFCT 418使用的带有流ID的流通道。该新的流通道(通过其流ID进行识别)可以被添加到包报头以用于传输到链路417上,并且可以由链路伙伴的(它是交换机408)IFCT 418用来访问流通道的拥塞信息。如前所述,如果没有找到匹配,则OFCT 424可以进一步使用其立即上游的输入端口号以及与链路417相关联的流ID的匹配模式来生成新的流通道。然后,OFCT 424可以分配通过新的流ID进行识别的新的流通道。注意,OFCT 416还可以用作沿上游方向该流的ACK的转发表。在从交换机408向上游被转发到交换机406之后,ACK包可以用与边缘链路403相关联的流ID进行更新并被转发到交换机406上的适当输入端口,如由OFCT 416中的对应条目所指示的。ACK包可以沿上游方向由ACK纵横交换机415转发到输入端口。

随后,当包到达交换机408时,其流ID可以用于识别要使用的输入队列并确定IFCT418中的条目。如果交换机408先前还没有分配包的流ID,则可以提供新的输入队列并且可以创建IFCT 418中的新的条目。从此以后,可以执行类似的过程以跨越交换机408和430转发包,直到包到达出口交换机432为止。

当包到达交换机432时,在包由数据纵横交换机423转发之后,ACK生成器逻辑块420可以基于包的流ID和输入端口号生成ACK包。然后,此ACK包可以沿上游方向由ACK纵横交换机422转发。同时,基于ACK包,IFCT 421可以更新对应表条目中的流的状态信息。当ACK包到达交换机430时,可以查找OFCT 419以确定ACK包要被转发到的上游流ID和上游输入端口。然后,ACK包可以更新其流ID并沿上游方向被转发到适当的输入端口。由于ACK包以类似的方式向上游横过数据路径,因此每个交换机处的IFCT可以基于ACK来更新其表条目。

注意,flow_extent变量可以是重要参数,因为它表示流的下游包数据总量。当条目的flow_extent为零时,认为流通道被自由地重新分配给另一个流。一般而言,在接收到新包时,输入逻辑可以请求将数据发送到输出端口。选定的输出端口可以是随存储在IFCT中的flow_extent而定的。如果flow_extent为零,则在流中下游没有包到目的地出口边缘端口。结果,交换机可以使用基于负载的自适应路线选择来选择通向目的地的任何有效路径。在多路径网络中,可以在不对包进行重新排序的情况下完成动态自适应路由。如果flow_extent不为零,并且如果需要按顺序递送,则包可以使用先前的包所采取的相同路线。IFCT可以具有存储先前的输出端口号的字段,该先前的输出端口号在对输出端口做出包请求时被加载并且可以用于确保与先前使用的输出端口的连接。

如前文所提到的,流通道可以使用匹配功能来辨识属于现有流的包。当在入口边缘端口上接收到帧或包时,可以实时解析接收到的以太网帧或其他类型的包,并且包报头的一些字段可以用于在CAM或三态内容可寻址存储器(TCAM)中进行查找。如果存在匹配,则匹配地址可以成为用于选择流通道的流ID。当没有发生匹配时,交换机硬件可以将匹配失败的模式直接加载到CAM的自由行上,这可以在没有附加延迟的情况下完成。结果,在没有大量的缓冲的情况下,任何后面的包都可以与此新的条目匹配。选择的自由条目成为新的流通道条目的新的流ID。注意,加载新的条目不需要外部软件干预。该过程可以由交换机硬件自主完成。

当为流返回最后一个ACK时,也可以由硬件自动执行流ID和对应的CAM匹配行的解除分配。在没有外部软件干预的情况下,可以在硬件中关于潜在匹配的新包发生解除分配。

在一些示例中,入口边缘交换机406可以包括细粒度流控制逻辑块434,该细粒度流控制逻辑块可以与主机402上的网络接口控制器(NIC)401通信以在每个流的基础上应用流控制。下文结合关于拥塞管理的描述来提供关于细粒度流控制的更多细节。

图4B示出了EFCT的示例。在此示例中,EFCT可以包括data_flow字段454、ACK_flow字段456、以及可选地附加字段。EFCT可以与输入端口相关联,并且EFCT中的条目可以按flow_ID值(诸如,flow_ID 452)进行索引。在一个实施例中,匹配模式字段可以驻留在匹配功能逻辑块中,该匹配功能逻辑块可以包括CAM或TCAM。匹配功能逻辑块可以使用匹配模式来生成flow_ID值,该flow_ID值进而可以用作对应的EFCT条目的索引。从该EFCT的角度来看,flow_extent(即,data_flow-ack_flow)可以包括该表下游的所有未确认的数据,其可以包括本地flow_queue加上对应的IFCT的flow_extent值。

图4C示出了IFCT的示例。在此示例中,IFCT可以与输入端口相关联,并且可以包括follow_port字段466、next_data_flow字段468、data_flow字段470、ACK_flow字段472、ep_congestion字段474、上游计量(UM)标志字段477、下游计量(DM)标志字段478、以及可选地附加字段。传入包的flow_ID值(诸如,flow_ID 464)可以用作查找输出端口号(其由follow_port字段466指示)以及与对应流相关联的状态信息的索引。与端点拥塞(诸如,ep_congestion字段474)相关联的拥塞控制信息和逐跳基于信用的流控制(诸如,UM标志字段477和DM标志字段478)(后者稍后在本文件中进行更详细的描述)也可以存储在IFCT中。IFCT可以进一步存储与跟不同流关联的动态路由有关的信息。

图4D示出了OFCT的示例。在此示例中,OFCT可以与输出端口相关联,并且可以包括input_port字段482、input_port_flow_ID字段484(其对应于包在其到达输入端口时的现有flow_ID)、data_flow字段486、ACK_flow字段488、以及可选地附加字段。data_flow字段486和ACK_flow字段488可以用于从该OFCT向前确定flow_extent的值。input_port字段482和input_port_flow_ID字段484(其也可以称为“传入流ID”)的组合可以用于确定或分配准备好传输到对应于该OFCT的送出链路上的包的传出流ID。在一个实施例中,传出流ID值(诸如,flow_ID 486)可以用作查找OFCT中的条目的索引。

在多路径网络中使用流通道的自适应路由

如先前所描述的,流通道可以为每个通信定义跨越网络的路径。流中的第一包可以定义路径,并且如果流保持有效,则后续包可以被迫遵循与第一包采取的路径相同的路径(由流通道定义)。高性能结构可以从特定源到另一个目的地具有很多条路线。多路径网络允许更大的总对分网络带宽。在大多数情况下,HPC系统包括多路径网络。用于衡量多路径网络的性能的常用指标是全局带宽(在全对全通信模式时递送的总带宽)。在大多数网络中,系统中的每个节点通过一组链路发送包,该组链路用于将数据从一个源传输到目的地。一些方法使用生成自包报头中找到的值的散列值。虽然这改善了性能,但它也会遭受系统性不良行为的问题,从而导致不可预测的性能。使用本地负载信息来做出动态自适应路由决定可以是对上述基于散列的技术的改善。然而,使用负载信息可以允许对单个流的包进行重新排序。例如,当包作为路由决定的结果而沿新方向发送并反超沿旧方向发送的包时,可能发生重新排序。

这种类型的无序递送(或重新排序)对于一些网络协议来说会是严重的问题。值得注意的是,大多数以太网网络应按顺序递送包。对于HPC环境,排序要求可以取决于编程模型而变化。在又一示例中,MPI需要对消息进行点对点排序,但不需要按顺序递送批量数据。PGAS远程存储器访问模型还需要对同一地址的访问进行点对点排序,但可以允许对作用于不同地址的操作进行重新排序。不同的传送层应能够指定它们的最低排序要求,并且交换机结构应能够满足这些要求。

在每个路由阶段允许针对每个包作出真正的动态自适应路由决定可能导致对从源到目的地的同一个流内的包重新排序。因此,使用包级动态路由方法会引起流的包分散遍及多路径结构。结果,可能失去对作为包流的流的任何控制。不过,包级动态路由对于一些网络流量模式可以是很好的模型,诸如以每秒十亿次更新(GUPS)基准测试为例的统一资源定位器(URL)流量。例如,GUPS通常生成许多小的包,其中每个包被发送到随机目的地。因此,在使用GUPS的大型网络中,从特定源到特定目的地的各个流很少有机会形成有这种流量,并且可能永远不会出现持续性流的不利影响。在GUPS的情况下,小的包到随机目的地的动态自适应路由可跨越结构产生非常平衡的负载。然而,如本文中所公开的,基于流通道的自适应路由会导致在联网环境的每个上述示例中的最佳路由。

流通道的利用实现了基于网络的本地负载针对新的流的第一包做出的真正的动态自适应路由决定。返回参考其中生成小消息的MPI和PGAS环境,这些消息对于实施流通道的结构呈现为新的流。这些流通道可以允许完全自适应路由,从而导致可以跨越结构生成的非常类似地平衡的负载(UR流量是一种极端情况)。

关于需要点对点排序(或其中期望点对点排序)的网络环境,使用流通道可以确保流中的后续包被迫跟随第一包,从而防止包重新排序。此外,流通道给予了处理由链路错误引起的丢包的机会。发送到链路上的每个包可以在流通道状态下进行重新排序。输入逻辑可以通过观察流中的“空洞”来检测流的缺包。可以将缺包(或空洞的位置)发回信号给流的源。

另外,对于不需要点对点排序的网络环境,仍然可以使用流通道来提供显著的优点。例如,如果已定义了无序流量类别,则可以允许流中的每个包自适应地路由。因此,代替跨越多路径结构定义单个路径的是,将形成全部都汇聚到同一个目的地的路径树。在每个下游结构链路上的每个流都将使一个包通过它,并且如果再次使用同一个输出端口,则将使更多的包通过它。所有下游流通道都将指回同一个上游流通道。单独的ack将折回由在出口边缘端口处创建该ack的包采取的路径。当这些包到达目的地时,它们可能是乱序的。然而,通过使用流通道,可以实现以下优点:

·入口流表仍然可以准确地测量出流的注入的包数据总量。这意味着,用于限制网络中的包数据总量的节点注入极限仍然可以起作用。该极限保留了结构输入缓冲区空间,即使在锥形结构上也是如此,并且这样做防止了拥塞发展。

·ack仍然可以将目的地正发生拥塞(要么是因为节点已饱和,和/或要么是正形成incast)发回信号给源边缘端口。然后,这些ack可以以两种方式控制拥塞;首先限制该流可以注入到结构中的总量和最大带宽,且其次强迫流变得有序。一旦为有序的,可能已开始的流通道树就将合并回(collapse back)成单个源-目的地流。

无序流量可以为合意的流量模式(尤其是为HPC)提供出色的性能。然而,无序流量也会加重拥塞流量模式。无序流量也会消耗可用的结构带宽,达到可共享同一结构并具有其他流量模式(具有长得多的流)的其他应用程序可能被阻止取得任何重大进展的程度。相比之下,具有注入极限的流通道管理每个应用程序的结构利用率,使得每个应用程序保持其访问是公平的。如本文中所公开的,使用流通道的自适应路由允许包的动态自适应路由和按顺序递送两者(例如,防止重新排序)。

在拥塞网络中使用流通道的自适应路由图5图示了在多路径网络500中的拥塞流510、520的示例,该多路径网络包括多个交换机501-506和多个路径531-537。通过根据所公开的实施例实施动态自适应路由,可以识别这些拥塞流(例如,拥塞源或拥塞受害者),且然后相应地对其进行路由。另外,跨越多路径网络500的负载可以经由所公开的动态自适应路由技术来分布。在图5的所图示的示例中,示出了两个流510和520。流510可以具有与流520的目的地不同的目的地(目的地未示出)。然而,流510、520两者都共享拥塞链路535。流510、520可为持续流。如本文中所提及的,持续流可以被描述为持续很长时间而不中断的流。作为持续流510、520可以具有使链路531-537链路在全带宽下饱和的潜力。这些流中的一个(例如,流510)中的引导包可以建立跨越网络500的路径。随后,该流(诸如,流510)中的后续包可以在由第一包建立的这条路径上继续下去,这可以维持该流中包的顺序。新的流可调适成绕过(around)该已建立的流,但如果所有新的流也是持续和拥塞流,则流量模式可能变为静态并且相当地不太理想(如果并未自适应地路由)。因此,所公开的自适应路由技术可以在存在持续流(诸如,流510、520)的情况下利用流通道来解决拥塞的负面影响。作为一般描述,拥塞可以由系统内的瓶颈引起。瓶颈可以包括但不限于:

·最终链路—如果许多源正试图将一个发送到单个目的地,如在incast的情况下

·NIC—如果NIC不急切地消耗包

·带宽的变化—如果带宽从高带宽链路改变到较低带宽链路

·单个链路—网络本体中的单个链路已有太多的流引导通过它

在图5中,示例图示了可以是瓶颈的单个链路535。如图所示,链路535正经历拥塞。例如,交换机505可以具有使链路535发生拥塞的结构出口端口(具有深出口端口报头FIFO)。可以解决瓶颈的方式可取决于检测瓶颈的方式和位置。如果流要被重新路由,则自适应路由技术考虑因重新路由产生的变化是否将减少拥塞的合理置信度。例如,自适应路由技术可确定流510是拥塞源。与仅仅是受害者相比,作为拥塞源可以指示存在高的置信度,因为它与重新路由该流有关。因此,如果流510被识别为拥塞源,则自适应路由技术可以决定限制对流510的路由,或在其他方面以防止该流在网络中进一步扩散拥塞的方式约束针对流510做出的路由决定500。相反地,自适应路由技术可确定流520是拥塞受害者(与源相反)。作为受害流,在重新路由该特定流方面存在小的置信度。重申一下,重新路由受害流(诸如,流520)将不显著防止在网络500上出现更多拥塞。因此,在受害流将基本上不影响网络上的拥塞这一假定下,自适应路由技术允许流520继续做出它自己的自适应路由决定。

在实践中,自适应地路由作为拥塞原因的持续流(诸如,流510)可以通过引导流510绕过(around)现有瓶颈来重新路由该流。该重新路由决定可以基于以下概念:有效地重定向流确保了新路径在到达最终边缘端口之前不返回到同一个瓶颈。从自适应路由中选择的针对流的新路线可以在每个链路上沿着其整个路径具有备用容量,以提供通过初始路线进行的传输方面的改善。流通道可以给予整个流从源到目的地的可见性。沿着流的路径,可存在最小带宽点。超过(beyond)该低带宽点,可以非常快速地从输入队列接受包。因此,输入队列通常可以是空的(或几乎是空的)。相比之下,在低带宽点之前,在持续流的情况下,包将最可能积聚在输出端口的FIFO中。在入口边缘交换机上,在具有拥塞队列的交换机之前,流控制机制将限制递送速率以对结构内节点和流数据的总量设限(cap)。返回参考图5,网络500中的低带宽点被认为是在拥塞链路535处。如所见,在链路535下游的交换机506处,其输入队列被示为不拥塞的或空的(例如,由几条垂直线指示)。在交换机505处,在链路535上的低带宽点之前,其输出(或出口)端口被图示为由于包的积聚(由多个箭头指示)所致而发生拥塞。在链路535处的低带宽点的更远上游,具体地在入口边缘交换机501和502处,流控制可以实施注入极限以通过将包保持在它们各自的输入队列(由许多条垂直线指示)处来防止太多的数据进入结构中。

在拥塞网络中使用流通道的自适应重新路由

进一步地,本文中所公开的自适应路由技术可以实施流重新路由以便将流重定向远离发生拥塞的结构链路。结构的性能可以取决于这些链路上跨越整个结构被平衡的负载。通过自适应路由操纵后续包远离重负载链路,可以实现平衡。自适应路由还可以依赖于作为每个边缘入口端口IFTC的一部分的注入极限,以便防止太多的数据进入结构中,如图5中所图示的。

注入极限可以在锥形结构上尤为重要,其中已减少了昂贵的光学全局链路的数量以有利于成本考虑因素。这些逐渐变细的全局链路可以提供中间结构带宽瓶颈,并且是拥塞逐渐形成的自然场所。注入极限对总结构数据设限(cap)。如果不存在到全局链路上的过载的单个出口结构端口,并且每个全局链路均具有显著负载,则结构可被认为是平衡良好的。平衡良好的另一个特性可以包括不促成数据递送的少数的昂贵链路。相反地,不平衡结构可能以过载的全局结构出口端口的输出FIFO的深度变得太深为特征。根据暗示,并且假定存在起作用的注入极限,其他全局结构出口端口将未得到充分利用。这意味着,尝试移动(或重定向)当前正使用过载链路的一些流将很可能导致它们被引导朝向未得到充分利用的全局链路并且应提供对结构的显著的重新平衡。

出口端口输出FIFO的深度可以很好地衡量端口负载。如果可以将深度本身和深度变化率(深度的一阶导数)组合以提供对端口上的拥塞的度量(或值)。然后,可以使用拥塞值的大小来决定是否应尝试重定向流。例如,过载的端口可能有太多的流使用它。一般而言,为了得到适当的平衡,应从该端口重定向少数流。移动太多的流可能导致端口负载不足,这也与某些缺点相关联。

根据实施例,可以通过返回“重定向ack”来重定向(或移动)流。将由流的任何包在它通过时生成的正常ack断开链接,重定向ack属于该流并且可以由流的任何包在它通过时生成。和所有其他ack一样,它遵循流的向上游朝向边缘入口端口的路径。

在实施例中,当帧被加载到全局结构出口端口的报头输出FIFO中时,可以通过观察该FIFO中的拥塞程度来生成重定向ack。此时,可以测量拥塞的大小,并且可以将其与本地创建的随机数进行比较。如果拥塞值大于随机数,则为该流返回重定向ack。使用随机数给予了生成重定向ack的概率,这个概率与拥塞的大小成比例。换句话说,在更加名义(morenominal)的拥塞状况期间只有一些流才将被重定向,但如果拥塞变得严重,则更多的流将被重定向。这确保了没有不必要地移动太多的流,不必要地移动太多的流会导致问题(例如,端口负载不足)。

当启用的IFCT(在图2中示出)接收到重定向后的ack时,该流在此IFCT中的状态从RUNNING改变为BLOCK_FOR_REDIRECT。启用的IFCT可以是交换机结构内的任何IFCT。然而,例如,ICFT可以是边缘端口,诸如入口边缘端口。这种状态防止了任何新包从该流的流队列中出列,直到flow_extent变为零为止。当下游流的所有包的所有ack都已返回时,flow_extent将变为零。此时,状态可以变回到RUNNING,因为从排序的角度来看,采用新路径将是安全的,因为采用新路径的下一个包无法反超前一个包。在状态变回到RUNNING之后要释放的第一包可以使用最佳自适应负载信息来选择通过结构的拥塞最小的路径。

现在参考图6,描绘了用于在存在持续流的情况下自适应地路由的过程600的示例。过程600可以由网络交换机(如图1中所示)来实施。因此,该过程被图示为存储在机器可读存储介质640中并由计算部件630中的硬件处理器635执行的一系列可执行操作。硬件处理器635执行过程600,由此实施本文中所公开的技术。

一般来说,网络在存在极端拥塞的情况下表现不佳。过程600中的自适应路由技术利用对拥塞源的认识以便在路由时管理拥塞。而且,过程600采用传达拥塞信息以及响应拥塞的指示。在许多情况下,拥塞可以由网络共享资源的过量预订(over-subscription)造成。因此,恰当地管理拥塞(特别是拥塞源)对于向网络上的所有用户提供公平性以及向作为一个整体的系统提供良好的网络利用率是非常重要的。如通篇中所描述的,所公开的自适应路由技术采用流通道以在路由持续流的同时管理拥塞。流通道可以提供对从源到目的地的帧流的极细粒度的控制。此外,IFCT可以启用来自流的早期帧的反馈,该反馈通过ack来递送。

作为一般描述,过程600涉及辨识包何时从一个源到一个目的地,其中每个包有完全的自由去采取从该源到该目的地的任何路径。然后,当任何包检测到进入目的地的拥塞时,对该包的拥塞确认然后强迫从该源到此目的地的新的后续包仅采取此包的路径,其中所有拥塞控制均可用于单个有序流。在拥塞之前,不存在关于路由的约束,并且包可以采取任何路径。在不对拥塞进行控制的情况下,所有这些不同的路径都可能变得拥塞。当拥塞强迫单个路径时,只有那条路径才会变得拥塞(并且流通道甚至会潜在地防止那条路径上发生拥塞)。因此,过程600可以监视任何数据传输所经历的进入目的地的拥塞。随后,响应于在进行任何数据传输时检测到进入目的地的拥塞,共享相同的源和目的地的所有新数据传输可能被迫仅采取检测到所述拥塞的数据传输的路径(防止拥塞扩散)。

该过程可以在操作606处通过建立对应于多个数据传输的多个流通道而进行。例如,在具有交换机结构(在图1中示出)或多个交换机的网络中,可横过网络本体内的结构端口将数据从源端口传输到目的地端口。操作606涉及建立对应于这些数据传输的多个流通道。通篇中例如参考图2A和图2B来详细描述流通道。根据实施例,交换机可以实施建立流通道和维持流通道。作为示例,可在操作606处建立用于在所述多个数据传输(从源端口到目的地端口)内传达的持续流的流通道。流通道可使用一组动态地连接的流表和流通道队列(在入口端口处)来维持属于该持续流(以及所述多个数据传输中的每个流)的路径和数据量。由于每个流及其路径对应于流通道,因此所建立的每个流通道均与源端口和目的地端口对挂钩。

该过程可以进行到操作608,其中经由交换机结构将所述多个传输路由通过网络。根据实施例,结构中的交换机被配置成在逐个流的基础上执行对流量的自适应路由。因此,操作608可以涉及使用自适应路由来路由所述多个数据传输,包括持续流。如上文所描述的,操作608中的自适应路由可以维持流中包的顺序(通过在逐个流的基础上进行路由),这在需要点对点排序的联网环境中是特别期望的。参考图5来详细描述多路径网络中的自适应路由和按顺序的包递送的细节。此外,操作608中的自适应路由可以包括:使用拥塞信息(或关于网络负载的实时信息)来以避开拥塞热点的方式重新路由流。先前描述了关于自适应路由的重新路由方面的细节。在操作608中,可以根据所公开的自适应路由技术在每个流的路径上的每个端口处动态地做出针对该流的路由决定。

随后,在操作610处,可以监视所述多个传输中的流的特性。特别地,用于所述多个传输的流通道可以维持其相应的流的状态。结果,操作610可以涉及针对该流的状态来监视流通道。在示例中,持续流可在包括瓶颈(低带宽或过度利用的链路)的路径上,从而引起持续流在结构中经历拥塞。所公开的交换机的能力(除了流通道之外)是拥塞检测。拥塞检测可以包括测量指示拥塞的ack包的拥塞程度和利用率。例如,可以通过缓冲区利用率来观察交换机内的本地拥塞。缓冲区利用率可以是该本地端口的链路利用率的指示。可以观察全局拥塞,其检测流量在其去往目的地的路径上遇到的“热点”。通常,这种拥塞可以被描述为端点拥塞(例如,多对一通信),抑或被描述为多个流量流被引导通过网络的特定部分并使网络的该特定区域内的资源过载的结果。关于流通道,当包到达严重拥塞的边缘出口端口时,可以生成确认ack(NewCongestionAck)。该ack可以传输到所有上游IFCT以指示流正经历拥塞特性,在这种情况下,作为目的地拥塞(可能由incast通信引起)的结果。在一些实施例中,可以利用流通道以基于接收到指示拥塞的ack来调节流量。作为示例,当NewCongestionAck通过IFCT时,最大flow_extent、最大结构链路流队列深度(称为queue_extent)和最大流带宽将全部都减小。这可以防止新包到达已经拥塞的目的地。因此,操作610最初确定流是否正经历拥塞。

与由本文中所公开的交换机实施的拥塞检测有关的另一种能力是识别拥塞源。拥塞检测(和管理)可以在硬件中实施,每个交换机检测拥塞、识别其原因并向其对等方提供实时反馈。因此,交换机可以确定流过拥塞点的流量是促成拥塞(拥塞源)还是拥塞受害者。因此,在操作612处,可以利用这种能力以便将流识别为拥塞源(例如,流量的一部分促成拥塞)或替代地识别为拥塞受害者。在一些情况下,可以通过从已促成拥塞的包中导出的任何字段来识别拥塞源。例如,可以使用显式拥塞通知(ECN)(例如,IP报头中的两位字段)来发出拥塞信号。作为示例,持续流可以是incast通信的一部分,其中注入带宽可以以引起拥塞的方式远远超过弹射带宽(ejection bandwidth)。因此,操作612可以使用在其相应的流通道内维持的流状态(例如,拥塞ack)来识别正经历拥塞的流是否与拥塞源有关。在持续流被识别为拥塞源的情况下,过程600继续到操作614。

此后,在操作614处,约束针对被识别为拥塞源的流做出的路由决定。针对对应于拥塞源流的流通道做出的路由决定以防止拥塞传播的方式受到限制。重申一下,使用上述自适应路由技术,不允许作为拥塞原因的流继续通过结构(和不扩散拥塞的流一样)。例如,一旦在前一操作612处流被识别为拥塞源,该流的新包就可能被迫仅采取检测到拥塞的一个路径(防止拥塞扩散)。此外,具有与和拥塞源有关的流相同的源和目的地的任何后续数据传输也可能被迫采取检测到拥塞的该相同路径。

作为另一个示例,流通道可以通过减慢作为同一个流的一部分的新包的注入来约束对流(被识别为拥塞源)的路由以免进入结构中。限制流可以包括强迫新包缓存在边缘端口中的流通道队列中。这些新包只有当同一个流的包在目的地边缘端口处离开结构时才被允许进入结构中。通过以这种方式限制对流的路由,得以将结构内对该流的总缓冲要求限制为将不会引起结构缓冲区变满的量,且由此防止网络中的进一步拥塞(由该流引起)。

替代地,操作612可确定该流不是拥塞源而是受害者。结果,过程600继续到操作616。在操作616处,根据所公开的自适应路由技术,允许被识别为拥塞受害者的流名义上继续路由通过结构。返回参考持续流是incast通信的一部分并被识别为拥塞源的示例,非为该incast通信的一部分的另一个流(所述多个数据传输中的另一个)可被路由以与incast流共享链路。尽管incast流引起拥塞,但后续流仍然经历拥塞(由于在同一个拥塞链路上)。过程600不以相同的方式处理作为拥塞源的流和仅仅是拥塞受害者的流,从而提高整个系统的性能(例如,不限制对具有显著减少拥塞的低可能性的流的路由)。

通过在自适应路由中利用流通道,网络交换机中的每个流都可以具有它自己的专用的包队列。这分离了对每个流的流控制,从而进一步允许对每个流进行单独的流控制。这种完全单独的流控制使得网络能够为无损的。例如,使用链路的一个流会在其去往最终目的地的路径上受到阻塞,而不阻塞使用与第一受阻塞流相同的链路的任何其他流。与传统的包交换网络不同,网络的一个部分中的拥塞将只会影响将包发送到拥塞瓶颈中的流。典型的无损网络会引起拥塞瓶颈之前的缓冲区被拥塞包迅速填满。这进而强迫交换机断言暂停或使用某种其他流控制方法来防止先前的交换机将包发送到具有填充缓冲区的链路上。拥塞包被停止,并且所有其他可能不前往拥塞瓶颈的包也被停止,从而强迫拥塞横向扩散并增加饱和树的大小。

通过实施流通道,由拥塞流呈现在拥塞瓶颈之前的链路上的负载减少,从而允许共享较早链路的其他流使用更多链路带宽并且更快地完成它们的通信。只有属于被识别为拥塞瓶颈源的流的包才被减慢。其他不受拥塞影响的流并未被减慢。这些流将利用先前由拥塞流采取的已释放的负载。最终,拥塞将被清除,并且前往拥塞热点的流将完成它们的通信而不丢失任何包。图7图示了可用于创建交换机结构(例如,图1的交换机结构100)的示例交换机702(其可为交换机102、104、106、108和110中的任何一个或多个的实施例)。在此示例中,交换机702可以包括若干个通信端口,诸如端口720。每个端口可以包括发射器和接收器。交换机702还可以包括处理器704、存储装置706和流通道交换逻辑块708。流通道交换逻辑块708可以联接到所有通信端口,并且可以进一步包括纵横交换机710、EFCT逻辑块812、IFCT逻辑块814和OFCT逻辑块816。

纵横交换机710可以包括一个或多个纵横交换机芯片,所述纵横交换机芯片可以被配置成在通信端口当中转发数据包和控制包(诸如,ACK包)。EFCT逻辑块712可以处理从边缘链路接收到的包并且基于包中的一个或多个报头字段将接收到的包映射到相应的流。另外,EFCT逻辑块712可以组装FGFC以太网帧,这些帧可以被传达到终端主机以控制由各个进程或线程注入的数据量。IFCT逻辑块714可以包括IFCT,并且响应于控制包(诸如,端点拥塞通知ACK和结构链路基于信用的流控制ACK)来执行各种流控制方法。OFCT逻辑块716可以包括存储器单元,该存储器单元存储OFCT并与另一个交换机的IFCT逻辑块通信以在包被转发到下一跳交换机时更新包的流ID。

在一个实施例中,交换机702是可以提供64个网络端口的专用集成电路(ASIC),这些网络端口可以以100Gbps抑或200Gbps操作以实现12.8Tbps的总聚合吞吐量。每个网络边缘端口可能够支持IEEE 802.3以太网和基于优化IP的协议以及门户(一种提供对更高速率的小消息的支持的增强型帧格式)。以太网帧可以基于其L2地址进行桥接,或者它们可以基于其L3(1PV4//1PV6)地址进行路由。优化IP帧可仅具有L3(1PV4/1PV6)报头,并且被路由。专门化NIC支持可以用于门户增强型帧格式,并且可以直接映射到网络100的结构格式,例如,当交换机/交换机芯片(诸如,交换机102、104、106、108和110)彼此连接和通信时提供某些控制和状态字段以支持多芯片结构的结构格式。如上文所暗示的,基于流通道的拥塞控制机制可以由这种交换机来使用,并且也可以实现小的包的高传输速率(例如,每个端口每秒超过12亿个包),以适应HPC应用的需求。

交换机702可以提供系统范围服务质量(QoS)类别连同控制如何将网络带宽分配给不同类别的流量和不同类别的应用程序的能力,其中单个特权应用程序可访问不止一种类别的流量。在存在网络带宽争用的情况下,仲裁器基于包的流量类别和该类别可用的信用来选择要转发的包。网络可以支持每个流量类别的最小带宽和最大带宽。如果一个类别没有使用它的最小带宽,则其他类别可使用未使用的带宽,但没有一个类别可以获得超过其最大分配带宽。管理带宽的能力提供了将网络资源以及CPU和存储器带宽专用于特定应用程序的机会。

除了支持QoS类别之外,交换机702还实现基于流通道的拥塞控制,并且可以限制被识别为已拥塞的路由流并将网络跃点(例如,在具有蜻蜓拓扑的网络中)的数量从五个网络跃点减少到三个。下文更详细描述的交换机702的设计可以降低网络成本和功耗,并且可进一步促进对改善应用程序性能的创新性自适应路由算法的使用。由多个交换机(诸如,多个交换机702)创建的结构也可用于构造胖树网络,例如当构建用于与第三方网络和软件集成的存储子系统时。更进一步地,交换机702的使用在维持有序包递送的同时实现了细粒度自适应路由。在一些实施例中,交换机702可被配置成在完整的数据有效负载到达之前将包的报头从输入端口发送到输出端口,由此允许输出端口负载指标反映未来负载,由此改善由交换机202做出的自适应路由决定。纵横交换机710可包括在输入端口和输出端口之间路由数据/数据元素的单独的、分布式纵横件(crossbar)。交换机802可具有多个传输/接收端口,例如端口720。交换机702的与输出功能相关联的部分通常对交换机结构格式内的帧进行操作,并且具有结构报头,例如,甚至对于到达和离开单个交换机702内的以太网端口的帧。

图8描绘了示例计算机系统800的框图,在该计算机系统中可实施本文中所描述的各种实施例。计算机系统800包括用于传达信息的总线802或其他通信机构、与总线802联接以用于处理信息的一个或多个硬件处理器804。(多个)硬件处理器804可为例如一个或多个通用微处理器。

计算机系统800还包括主存储器806(诸如,随机存取存储器(RAM)、高速缓存和/或其他动态存储装置),该主存储器联接到总线802以用于存储要由处理器804执行的信息和指令。主存储器806还可用于在执行要由处理器804执行的指令期间存储临时变量或其他中间信息。这种指令在存储于处理器804可访问的存储介质中时使计算机系统800呈现为经定制以执行指令中所指定的操作的专用机器。

计算机系统800进一步包括联接到总线802以用于为处理器804存储静态信息和指令的只读存储器(ROM)808或其他静态存储装置。存储装置810(诸如,磁盘、光盘或USB拇指驱动器(闪存驱动器)等)被提供并联接到总线802以用于存储信息和指令。

计算机系统800可经由总线802联接到显示器812(诸如,液晶显示器(LCD)(或触摸屏))以用于向计算机用户显示信息。包括字母数字和其他键的输入装置814联接到总线802以用于将信息和命令选择传达到处理器804。另一种类型的用户输入装置是光标控件816(诸如,鼠标、轨迹球或光标方向键)以用于将方向信息和命令选择传达到处理器804以及用于控制显示器812上的光标移动。在一些实施例中,可经由在没有光标的情况下接收触摸屏上的触摸来实施与光标控件相同的方向信息和命令选择。

计算系统800可包括用于实施GUI的用户接口模块,GUI可作为由(多个)计算装置执行的可执行软件代码而存储在大容量存储装置中。通过示例的方式,这种和其他模块可包括部件(诸如,软件部件、面向对象的软件部件、类部件和任务部件)、过程、函数、属性、程序、子例程、程序代码段、驱动程序、固件、微代码、电路、数据、数据库、数据结构、表、数组和变量。

一般来说,如本文中所使用的词语“部件”、“引擎”、“系统”、“数据库”、“数据存储区”等可以指代体现在硬件或固件中的逻辑,或者指代软件指令的集合,这些软件指令可能地具有入口点和出口点、用编程语言(诸如例如,Java、C或C++)编写。软件部件可被编译并链接到可执行程序中,安装在动态链接库中,或者可用解释性编程语言(诸如例如,BASIC、Perl或Python)编写。将了解,软件部件可从其他部件或从它们自身是可调用的,和/或可响应于检测到的事件或中断而被调用。被配置成用于在计算装置上执行的软件部件可提供在计算机可读介质(诸如,光盘、数字视频盘、闪存驱动器、磁盘或任何其他有形介质)上,或被提供作为数字下载件(并且可最初以压缩或可安装的格式存储,其在执行之前需要安装、解压缩或解密)。这种软件代码可部分地或全部地存储在执行计算装置的存储器装置上,以供由计算装置执行。软件指令可嵌入在固件(诸如,EPROM)中。将进一步了解,硬件部件可包括连接的逻辑单元(诸如,门和触发器),和/或可包括可编程单元(诸如,可编程门阵列或处理器)。

计算机系统800可使用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实施本文中所描述的技术,以上各者与计算机系统结合而引起计算机系统800成为专用机器或将计算机系统800编程为专用机器。根据一个实施例,本文中的技术由计算机系统800响应于(多个)处理器804执行包含在主存储器806中的一个或多个指令的一个或多个序列而执行。这种指令可从另一个存储介质(诸如,存储装置810)读入主存储器806中。包含在主存储器806中的指令序列的执行引起(多个)处理器804执行本文中所描述的过程步骤。在替代性实施例中,硬连线电路可代替软件指令使用或与软件指令结合使用。

如本文中所使用的术语“非暂时性介质”和类似术语指代存储引起机器以特定方式操作的数据和/或指令的任何介质。这种非暂时性介质可包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储装置810。易失性介质包括动态存储器,诸如主存储器806。非暂时性介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、任何带有孔图案的物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其他存储器芯片或盒式存储器、以及它们的网络版本。

非暂时性介质与传输介质不同,但可与传输介质结合使用。传输介质参与在非暂时性介质之间的传送信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包括总线802的导线。传输介质还可以采取声波或光波的形式,诸如在无线电波和红外数据通信期间生成的声波或光波。

计算机系统800还包括联接到总线802的通信接口818。网络接口818提供到一个或多个网络链路(所述网络链路连接到一个或多个本地网络)的双向数据通信联接。例如,通信接口818可为综合业务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器或用于提供到对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,网络接口818可为用于提供到兼容LAN(或用于与WAN通信的WAN部件)的数据通信连接的局域网(LAN)卡。还可实施无线链路。在任何这种实施方式中,网络接口818发送和接收电、电磁或光学信号,这些信号携载表示各种类型的信息的数字数据流。

网络链路通常通过一个或多个网络向其他数据装置提供数据通信。例如,网络链路可通过本地网络提供到主计算机或由互联网服务提供商(ISP)操作的数据设备的连接。ISP进而通过全球包数据通信网络(现在通常被称为“互联网”)来提供数据通信服务。本地网络和互联网两者都使用携载数字数据流的电、电磁或光学信号。穿过各种网络的信号以及在网络链路上和穿过通信接口818的信号(这些信号携载进出计算机系统800的数字数据)是传输介质的示例形式。

计算机系统800可以通过(多个)网络、网络链路和通信接口818发送消息和接收数据,包括程序代码。在互联网示例中,服务器可能通过互联网、ISP、本地网络和通信接口818传输针对应用程序所请求的代码。

接收到的代码可在其被接收时由处理器804执行,和/或存储在存储装置810或其他非易失性存储装置中以供稍后执行。前述部分中所描述的过程、方法和算法中的每一者可体现在由包括计算机硬件的一个或多个计算机系统或计算机处理器执行的代码部件中,并且由这些代码部件完全或部分自动化。所述一个或多个计算机系统或计算机处理器还可操作来支持“云计算”环境中的相关操作的性能或操作为“软件即服务”(SaaS)。过程和算法可部分地或全部地在专用电路中实施。上文所描述的各种特征和过程可彼此独立地使用,或者可以各种方式组合。不同的组合和子组合旨在落入本公开的范围内,并且在一些实施方式中可省略某些方法或过程块。本文中所描述的方法和过程也不限于任何特定的顺序,并且与其相关的块或状态可以以其他适当的顺序执行,或者可并行执行,或者以某种其他方式执行。可将块或状态添加到所公开的示例实施例或从所公开的示例实施例中去除。某些操作或过程的性能可分布在计算机系统或计算机处理器当中,不仅驻留在单个机器内,而且还部署跨越若干个机器。

如本文中所使用的,可能利用任何形式的硬件、软件或其组合来实施电路。例如,可能实施一个或多个处理器、控制器、ASIC、PLA、PAL、CPLD、FPGA、逻辑部件、软件例程或其他机制来组成电路。在实施方式中,本文中所描述的各种电路可能被实施为分立电路,或者所描述的功能和特征可以在一个或多个电路当中部分地或整个地共享。尽管各种特征或功能元件可作为单独的电路而单独描述或要求保护,但这些特征和功能可以在一个或多个公共电路当中共享,并且这种描述不应要求或暗示需要单独的电路来实施这种特征或功能。在电路全部或部分地使用软件来实施的情况下,这种软件可以被实施为与能够实施关于其所描述的功能的计算或处理系统(诸如,计算机系统800)一起操作。

如本文中所使用的,可在包括性抑或排他性意义上解释术语“或”。此外,单数形式的资源、操作或结构的描述不应被解读为排除复数形式。除非另有明确陈述,或者在如所使用的上下文内以其他方式理解,否则条件语言(诸如,尤其是“可以”、“可能”、“也许”或“可”)通常旨在传达某些实施例包括而其他实施例不包括某些特征、元素和/或步骤。

除非另有明确陈述,否则本文件中所使用的术语和短语及其变体应被解释为开放式的,这与限制性完全不同。诸如“常规的”、“传统的”、“正常的”、“标准的”、“已知的”和类似含义的术语之类的形容词不应被解释为将所描述的条目限制到给定的时间段或截至给定时间可用的条目,而是应被解读为涵盖可在现在或将来的任何时间可用或已知的常规的、传统的、正常的或标准的技术。在一些情况下,诸如“一个或多个”、“至少”、“但不限于”或其他类似短语之类的宽泛词语和短语的出现不应被解读为意味着在可能缺乏这种宽泛短语的情况下意图或需要更窄的情况。

37页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于分发软件确定的全局负载信息的方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!