一种用于传送以太网分组的方法及装置转让专利

申请号 : CN201580003764.9

文献号 : CN105900386B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : M·S·比利特拉T·D·罗维特T·M·里默

申请人 : 英特尔公司

摘要 :

用于在链路层上可靠地传送以太网分组数据以及以匹配的线速和分组数据速率促进结构至以太网和以太网至结构网关操作的方法、装置和系统。从在网关处接收到的以太网帧提取以太网头部和有效载荷数据,并且将此以太网头部和有效载荷数据封装在结构分组中以便被转发到主管此以太网分组寻址到的实体的结构端点。结构分组被划分为微片,所述微片被捆包到组中以形成链路分组,使用采用隐式确收的可靠传输方案、在链路层处的结构上传送所述链路分组。在端点处,重新生成结构分组,并且解封以太网分组数据。使用64b/66b编码对从以太网网络接收到的以及传输到以太网网络的以太网帧编码,从而具有1:32的开销比数据的位比率。同时,链路分组具有相同的比率,包括对于每个微片的一个开销位以及14位CRC加上2位用于基于信用的流控制的信用返回字段或边带。

权利要求 :

1.一种用于在结构端点之间可靠地传送以太网分组的方法,所述方法包括以下步骤:在第一结构端点处,将包括以太网头部和以太网有效载荷的以太网分组数据封装在结构分组中;

经由包括多个链路的转发路径,将所述结构分组的数据内容传输到第二结构端点;

对于每一个链路上的传输,采用隐式的确收ACK来验证已在所述链路的接收侧无错地接收到所传输的数据内容;

使用在所述第二结构端点处接收到的数据内容来重新生成结构分组;以及解封来自重新生成的结构分组的所述以太网分组数据。

2.如权利要求1所述的方法,其特征在于,进一步包括以下步骤:在第一结构端点处接收包括所述以太网分组的以太网帧;以及

从所述以太网帧中提取所述以太网分组数据。

3.如权利要求2所述的方法,其特征在于,所述第一结构端点包括以太网网关,并且所述方法进一步包括以下步骤:在所述以太网网关处,以以太网链路线速以及以接收到的以太网分组数据速率来接收从以太网网络流入的以太网帧;以及从所述以太网网关的结构链路接口,以匹配所述以太网链路线速的线速以及以匹配所述接收到的以太网分组数据速率的速率向外将从所述以太网帧提取的以太网分组数据发射到结构上。

4.如权利要求3所述的方法,其特征在于,所述以太网帧包括利用开销位编码的多个数据块,并且在所述结构上使用包括多个数据单元和开销位的链路分组来传输数据,所述以太网帧中的数据块和所述链路分组中的数据单元中的每一者包括数据位,并且其中,所述以太网帧和所述链路分组中的开销位比数据位的比率相同。

5.如权利要求4所述的方法,其特征在于,链路分组的所述开销位包括数据完整性校验字段和信用返回边带信道,所述方法进一步包括以下步骤:采用所述完整性校验字段以验证在每一个链路的接收端处无错地接收到链路分组;以及实现基于信用的流控制机制,在所述基于信用的流控制机制下,在链路的接收端处返回信用以指示已在所述链路的所述接收端处释放的缓冲器空间的量,其中,在所述信用返回边带信道中返回所述信用。

6.如权利要求1-5中的任一项所述的方法,其特征在于,进一步包括以下步骤:对于多个结构分组中的每一个结构分组,将所述结构分组划分为多个微片;

在每一个链路的发射侧处,将微片捆包为组以形成多个链路分组;以及在相应的链路上传输所述多个链路分组,其中,在所述转发路径的单个链路上传输每一个链路分组。

7.如权利要求6所述的方法,其特征在于,进一步包括以下步骤:采用数据完整性校验以验证是否在每一个链路的接收侧无错地接收到每一个链路分组中包含的数据;以及响应于检测到接收到的链路分组具有错误,在所述链路上重传所述链路分组。

8.一种用于传送以太网分组的装置,所述装置包括:

以太网接口,所述以太网接口包括用于接收以太网帧的以太网接收端口;以及用于以下操作的设备:从在所述以太网接收端口处接收到的以太网帧中提取以太网分组;

将所述以太网分组封装在结构分组中;以及

形成多个链路分组,所述多个链路分组包括所述结构分组中包含的数据的多个部分,其中,所述以太网帧包括利用开销位编码的多个数据块,并且所述链路分组包括多个数据单元和开销位,所述以太网帧中的所述数据块和所述链路分组中的数据单元中的每一者都包括数据位,并且其中,所述以太网帧和所述链路分组中的开销位比数据位的比率相同。

9.如权利要求8所述的装置,其特征在于,所述以太网帧块包括多个64位块,所述64位块对于每个块具有2个开销位且使用64b/66b编码来编码。

10.如权利要求9所述的装置,其特征在于,链路分组包括具有比率为1:32的开销位和数据位。

11.如权利要求10所述的装置,其特征在于,链路分组包括十六个64位数据单元,每一个64位数据单元具有1位的类型位、14位的循环冗余校验CRC值以及2个信用返回边带位。

12.如权利要求8-11中的任一项所述的装置,其特征在于,进一步包括用于以下操作的设备:将每一个结构分组划分成包括微片的多个数据单元;以及

将所述微片捆包为组以形成所述多个链路分组,

其中,所述多个链路分组中的至少一个链路分组包括来自至少两个结构分组的微片。

13.如权利要求8-11中的任一项所述的装置,其特征在于,进一步包括:结构链路接口;以及

用于在内部将链路分组转发到所述结构链路接口以便在结构链路上向外发射的设备,其中,所述以太网链路接口和所述结构链路接口配置成使用相同的标称链路速度来操作,并且在结构链路上向外发射以太网分组数据的速率匹配在所述以太网接收端口处接收以太网分组数据的速率。

14.如权利要求12所述的装置,其特征在于,进一步包括:结构链路接口;以及

用于在内部将链路分组转发到所述结构链路接口以便在结构链路上向外发射的设备,其中,所述以太网链路接口和所述结构链路接口配置成使用相同的标称链路速度来操作,并且在结构链路上向外发射以太网分组数据的速率匹配在所述以太网接收端口处接收以太网分组数据的速率。

15.如权利要求13所述的装置,其特征在于,所述标称链路速度为100千兆位/秒。

16.如权利要求14所述的装置,其特征在于,所述标称链路速度为100千兆位/秒。

17.一种用于传送以太网分组的装置,所述装置包括:

以太网接口,所述以太网接口包括用于将以太网帧发射到以太网链路上的以太网发射端口;

结构链路接口;以及

用于以下操作的设备:

从在所述结构链路接口处接收到的链路分组提取微片,所述微片包括具有经封装的以太网分组内容的结构分组的经划分的多个部分,所述以太网分组内容从原始的以太网分组中提取出;

重新组装微片以重新生成结构分组;

解封来自重新生成的结构分组的以太网分组内容;

使用经解封的以太网分组内容来重新生成所述原始的以太网分组;以及生成各自都包含重新生成的以太网分组的多个以太网帧,

其中,所述以太网帧包括利用开销位编码的多个数据块,并且所述链路分组包括多个微片和开销位,所述以太网帧中的所述数据块和所述链路分组中的微片中的每一者都包括数据位,并且其中,所述以太网帧和所述链路分组中的开销位比数据位的比率相同。

18.如权利要求17所述的装置,其特征在于,所述以太网帧块包括多个64位块,所述64位块对于每个块具有2个开销位且使用64b/66b编码来编码。

19.如权利要求18所述的装置,其特征在于,链路分组包括具有比率为1:32的开销位和数据位。

20.如权利要求17-19中的任一项所述的装置,其特征在于,通过将包含经封装的以太网分组内容的结构分组划分为多个微片并且将所述微片捆包为组来形成所述链路分组,每一个链路分组都包括经捆包的微片组。

21.如权利要求17-19中的任一项所述的装置,其特征在于,所述装置包括具有集成的以太网网关的结构交换机,所述结构链路接口包括内部结构交换机接口,并且其中,所述装置进一步包括:多个外部交换机端口;

内部交换机端口,耦合至所述内部结构交换机接口;以及

内部交换机矩阵,配置成选择性地将外部交换机端口耦合至所述内部交换机端口。

22.如权利要求20所述的装置,其特征在于,所述装置包括具有集成的以太网网关的结构交换机,所述结构链路接口包括内部结构交换机接口,并且其中,所述装置进一步包括:多个外部交换机端口;

内部交换机端口,耦合至所述内部结构交换机接口;以及

内部交换机矩阵,配置成选择性地将外部交换机端口耦合至所述内部交换机端口。

23.如权利要求21所述的装置,其特征在于,每一个外部交换机端口都包括结构链路接口,并且其中,每一个结构链路接口和所述以太网接口配置成使用相同的标称链路速度来操作,并且在所述外部交换机端口处接收以太网分组数据的速率匹配从所述以太网发射端口向外发射以太网分组数据的速率。

24.如权利要求22所述的装置,其特征在于,每一个外部交换机端口都包括结构链路接口,并且其中,每一个结构链路接口和所述以太网接口配置成使用相同的标称链路速度来操作,并且在所述外部交换机端口处接收以太网分组数据的速率匹配从所述以太网发射端口向外发射以太网分组数据的速率。

25.一种用于传送以太网分组的装置,所述装置包括:

以太网网关,所述以太网网关包括,

以太网接口,配置成从以太网网络接收流入以太网帧并且将流出以太网帧发射到所述以太网网络;以及至少一个结构接口,配置成从结构接收流入链路分组并且将流出链路分组发射到所述结构,其中,所述装置进一步配置成:通过从在所述以太网接口处接收到的每一个以太网帧提取以太网分组数据来促进以太网至结构网关功能;确定所述以太网分组数据将被递送至的结构端点;以及使包含所述以太网分组数据的链路分组准备好朝向所述结构端点被发射到结构上,并且其中,所述装置进一步配置成:通过处理从所述结构接收到的链路分组以重新生成包含经封装的以太网分组数据的结构分组来促进结构至以太网网关功能;从重新生成的结构分组提取所述以太网分组数据;以及生成包括以太网分组的以太网帧,所述以太网分组包括所述以太网分组数据。

26.如权利要求25所述的装置,

其中,所述流入链路分组包括经捆包的微片组,所述经捆包的微片组已在一个或多个结构端点处通过将具有经封装的以太网分组数据的结构分组划分为包括微片的多个数据单元而被生成;

其中,所述流出链路分组包括在所述以太网网关处通过将具有经封装的以太网分组数据的结构分组划分为多个微片而生成的经捆包的微片组;并且其中,所述以太网帧包括利用开销位编码的多个数据块,并且所述链路分组包括微片捆包和开销位,所述以太网帧中的所述数据块和所述链路分组中的数据单元中的每一者都包括数据位,并且其中,所述以太网帧和所述链路分组中的开销位比数据位的比率相同。

27.如权利要求26所述的装置,其特征在于,所述以太网帧块包括对于每一个块具有2个开销位且使用64b/66b编码进行编码的多个64位块,并且其中,链路分组包括十六个64位数据单元,每一个64位数据单元具有1位的类型位以及14位CRC值和2个信用返回边带位,在基于信用的流控制机制中使用的信用经由所述信用返回边带位被返回。

28.如权利要求25-27中的任一项所述的装置,其特征在于,所述以太网网关进一步包括集成的以太网交换机。

29.如权利要求25-27中的任一项所述的装置,其特征在于,所述装置包括具有集成的以太网网关的结构交换机,并且其中,所述装置进一步包括:多个外部交换机端口;

内部交换机端口,耦合至内部结构交换机接口;以及

内部交换机矩阵,配置成选择性地将外部交换机端口耦合至所述内部交换机端口,其中,每一个外部交换机端口都包括结构链路接口,并且其中,每一个结构链路接口和所述以太网接口配置成使用100千兆位/秒的标称链路速度来操作,并且在所述外部交换机端口处接收以太网分组数据的速率匹配从所述以太网发射端口向外发射以太网分组数据的速率。

30.如权利要求28所述的装置,其特征在于,所述装置包括具有集成的以太网网关的结构交换机,并且其中,所述装置进一步包括:多个外部交换机端口;

内部交换机端口,耦合至内部结构交换机接口;以及

内部交换机矩阵,配置成选择性地将外部交换机端口耦合至所述内部交换机端口,其中,每一个外部交换机端口都包括结构链路接口,并且其中,每一个结构链路接口和所述以太网接口配置成使用100千兆位/秒的标称链路速度来操作,并且在所述外部交换机端口处接收以太网分组数据的速率匹配从所述以太网发射端口向外发射以太网分组数据的速率。

说明书 :

一种用于传送以太网分组的方法及装置

背景技术

[0001] 近年来,对高性能计算(HPC)的使用和兴趣已出现大幅增长。过去,HPC通常与所谓的“超级计算机”相关联。超级计算机在20世纪60年代被引入,最初以及几十年来主要由Seymour Cray在以Seymour Cray的名字或首字母缩写命名的控制数据公司(CDC)、Cray研究所以及随后的多个公司制造。虽然20世纪70年代的超级计算机仅使用几个处理器,但在20世纪90年代,具有数千个处理器的机器开始出现,并且近来已经实现具有数十万个“现成”的处理器的大规模并行超级计算机。
[0002] 存在许多类型的HPC架构,这些HPC架构以不同级别的规模和性能来实现并进行研究导向。然而,共同的思路在于,诸如处理器和/或处理器核之类的大量计算单元的互连来以并行的方式协作地执行任务。根据近来的芯片上系统(SoC)设计和提案,使用二维(2D)阵列、三维环(torus)、环或其他配置在单个SoC上实现大量的处理器核等。此外,研究人员已经提出了3D SoC,在3D soC下,100个或甚至1000个处理器核以3D阵列互连。在多个服务器板上的多个分开的多核处理器和SoC也可以紧密地间隔,多个服务器板又经由背板等通信地互连。另一常见方法是互连在通常以2D阵列配置的服务器的机架(例如,刀片式服务器和模块)中的多个互连计算单元。IBM Sequoia(红杉)(世界上最快的超级计算机之一)包括总计1572864个核的服务器刀片/模块的96个机架的2D阵列,并且当在峰值性能下操作时消耗巨额的7.9兆瓦。
[0003] HPC的性能瓶颈之一是由在计算节点之间的多个互连上传送数据引起的等待时间(latency)。典型地,这些互连以互连层次结构来构造,处理器/SoC内的最高速且最短的互连在此层次结构的顶部,而等待时间随着沿层次结构级别向下而增加。例如,在处理器/SoC级别之后,互连层次结构可包括处理器间的互连级别、板间的互连级别、以及将单独的服务器或单独服务器的聚合与其他机架中的服务器/聚合连接的一个或多个附加的级别。
[0004] 互连层次结构的一个或多个级别采用不同的协议是常见的。例如,SoC内的多个互连典型地是专有的,而层次结构中的较低级别可采用专有或标准化的多个互连。不同的互连级别还将典型地实现不同的物理(PHY)层。作为结果,在多个互连级别之间采用某种类型的互连桥接是必要的。此外,当实现异构计算环境时,给定的互连级别内的桥接可能是必须的。
[0005] 在互连层次结构的较低级别处,使用诸如以太网(在各种IEEE 802.3标准中定义)和无限带宽(InfiniBand)之类的标准化互连。在PHY层,这些标准中的每一种都支持有线连接(诸如,缆线和在背板上)以及光链路。以太网在OSI 7层模型中的链路层(层2)上实现,并且从根本上被视为链路层协议。无限带宽标准定义了用于覆盖OSI层1-4的无限带宽的各个OSI层方面。
[0006] 当前的以太网协议不具有用于支持以太网链路上的可靠数据传输的任何固有设施。这与无限带宽的链路层实现类似。在更高层(诸如,TCP/IP)上,每个地址传输是可靠的。在TCP下,经由响应于从(IP源地址处的)发送方接收到IP分组而从(IP目的地地址处的)接收方返回至此发送方的显式确收(ACK)来实现可靠数据递送。由于分组在沿发送方与接收方之间的路径的多个节点中的一个节点处可能丢失(或者如果接收方具有的缓冲器空间不足,则甚至有可能在接收方处丢失),因此使用显式ACK来确认每一个分组的成功递送(注意,单个ACK响应可确认多个IP分组的递送)。传输-确收(ACK)方案需要在源和目的地设备中的每一个设备处维持大量的缓冲器空间(在需要重传丢失的一个或多个分组的情况下),并且还给网络栈添加了附加的处理和复杂性。例如,由于ACK有可能丢失,因此发送方还采用定时器,此定时器用于触发对在此定时器的超时时段之内未接收到ACK针对的分组的重传。每一个ACK都消耗珍贵的链路带宽并且产生附加的处理开销。此外,使用定时器对链路往返延迟设置了上限。
[0007] 最近,正在开发高速互连结构,此高速互连结构提供部分地由新协议促进的对以太网和无限带宽的增强。然而,当前HPC软件中的许多软件已被开发为用于使用以太网和/或无限带宽协议来交换数据,并且将必须重写此软件来使用新协议。具体而言,诸如当跨以太网网络连接多个计算节点时,具有依赖于以太网链路的HPC结构中的多个方面。由此,对于在新结构与此类以太网网络之间提供接口具有需求。同时,对现有的HPC软件具有最小的影响,同时支持由新的高速以太网链路提供的传送带宽将是优选的。

附图说明

[0008] 通过参考与附图一起进行的下面的详细描述,本发明的前述的方面和许多伴随的优点,将变得更加轻松地被理解,其中,在各个视图中,相同参考编号表示相同部件,除非另作说明:
[0009] 图1是示出根据一个实施例的包括结构(fabric)架构的各种部件和互连的系统的高级视图的示意图;
[0010] 图2是描绘根据一个实施例的用于在结构链路上传送数据的该架构的多个层的示意图;
[0011] 图3是示出被集合在捆包(bundle)中的多个微片(flit)的示意图;
[0012] 图4是示出根据一个实施例的结构分组(packet)的结构的示意图;
[0013] 图5是示出根据一个实施例的标准检测LTP的数据结构的示图;
[0014] 图6是示出根据一个实施例的14位CRC LTP的数据结构的示图;
[0015] 图7是示出根据一个实施例的增强型检测LTP的数据结构的示图;
[0016] 图8是示出根据一个实施例的标准检测空LTP的数据结构的示图;
[0017] 图9a是示出根据一个实施例的用于4通道链路的传输方案的实施例的示图,在此传输方案下,每次在链路结构与链路传送子层之间的接口处并行地处理两个用于标准检测LTP的微片;
[0018] 图9b是示出根据一个实施例的用于4通道链路的传输方案的实施例的示图,在此传输方案下,每次在链路结构与链路传送子层之间的接口处并行地处理两个用于增强型检测LTP的微片;
[0019] 图10是示出根据一个实施例的在4通道链路上传输具有两个控制位的14位CRC LTP的示意图,其中每次在链路结构与链路传送子层之间的接口处并行地处理两个微片;
[0020] 图11是示出根据一个实施例的在8通道数据路径上并行地传输具有两个控制位的两个14位CRC LTP的示意图,此8通道数据路径包括结合在一起的两个4通道链路;
[0021] 图12是示出根据一个实施例的在采用4通道的两个链路端口之间的双向数据传输的示例的示意图;
[0022] 图13是示出交织来自在分开的虚拟通道上发送的两个FP的多个结构分组微片的实施例的示例的示图;
[0023] 图14是示出根据一个实施例的使用进栈(Push)和出栈(Pop)交织的示图;
[0024] 图15是示出根据一个实施例的、使用进栈和出栈交织以及VL标记交织的组合的示图;
[0025] 图16是示出根据一个实施例的、来自缓存在三个分开的VL FIFO中的三个结构分组的多个微片的抢占式交织的示例的组合示意图和时间流图,三个分开的VL FIFO对应于具有单独优先级等级的VL;
[0026] 图17是示出根据一个实施例的、来自缓存在三个分开的VL FIFO中的三个结构分组的多个微片的冒泡式交织和抢占式交织的示例的组合示意图和时间流图,其中两个VL共享优先级等级,而另一个VL具有更高的优先级等级;
[0027] 图18a和18b是示出传输LTP传输方案和使用每通道(per-lane)的CRC和LTP CRC来检测LTP通道和错误通道的示意图,其中
[0028] 图18a描绘了根据一个实施例的LTP传输方案中的LTP的原始传输,而图18b描绘了根据一个实施例的使用重放缓冲器在LTP传输流中的LTP的重传;
[0029] 图18c是示出根据一个实施例的使用重试标记和往返标记来防止重放缓冲器LTP被覆写的示意图;
[0030] 图19是示出根据一个实施例的使用33个传送组(XFR)来传输标准检测LTP的示图;
[0031] 图20是示出根据一个实施例的使用33个32位XFR和四个LTP序列状态在4通道链路上传输LTP的示图;
[0032] 图21是示出根据一个实施例的如何使用33个32位XFR在4通道链路上传输包括8字节数据和第65位的微片数据的示图;
[0033] 图22a-22e共同构成多页流程图,示出根据一个实施例的用于便于使用隐式ACK以及重放缓冲器在链路层的可靠LTP传输,还示出根据一个实施例的用于检测错误通道的操作和逻辑;
[0034] 图23a是根据一个实施例的发射机的状态图;
[0035] 图23b是根据一个实施例的接收机的状态图;
[0036] 图24是根据一个实施例的按照XFR组来计算并存储的每通道的CRC的示图;
[0037] 图25是示出用于图18a和18b的示例的按照每个XFR组来存储的示例性的每通道的CRC计算的示图,其中,在第一LTP序列状态下在坏LTP的原始传输期间以及在第三LTP系列状态下在从重放缓冲器重传该坏LTP的期间计算每通道的CRC;
[0038] 图26是示出根据一个实施例的在三个通道上的标准检测LTP的传送的示图,其中逐通道并行地传送11个XFR;
[0039] 图27是示出根据一个实施例的在两个通道上并且采用两个LTP序列状态来传送标准检测LTP的示图,其中在这两个通道中的一个通道上传送17个XFR,并在另一个通道上传输16个XFR;
[0040] 图28是示出根据一个实施例的使用33个32位XFR在单个通道上传输标准检测LTP的示图;
[0041] 图29是示出根据一个实施例的、用于交换机以及用于HFI的端口和架构层及子层之间的关系的示图;
[0042] 图30是示出发射机与接收机对等方之间信用组织和信用返回ACK的交换的示意图;
[0043] 图31a、31b和31c示出根据一个实施例的专用的、共享的两层式以及共享的三层式缓冲器组织;
[0044] 图32是示出根据一个实施例的、用于递增式信用ACK的LF命令微片格式的示例的示图;
[0045] 图33是示出各自都具有不同的vAU和vCU值的两种不同的设备类型的示例的示意图;
[0046] 图34是示出根据一个实施例的、支持抢占的VL仲裁机制的示意图;
[0047] 图35示出5x4抢占矩阵的示例;
[0048] 图36是示出异构结构配置的示例的框图,在该异构结构配置下,在经由结构链路而互连的不同的部件处支持不同数量的VL;
[0049] 图37是示出根据一个实施例的、与由HFI的L4层注入到结构中的分组相关联的QoS映射的示例的示意图;
[0050] 图38是示出根据一个实施例的、结合对在交换机的输入端口处接收到且将在该交换机的输出端口处被向外发射的分组的内部传送来执行的QoS映射的示意图;
[0051] 图39是示出根据一个实施例的、与在HFI处接收从结构发出的分组相关联的QoS映射的示例的示意图;
[0052] 图40是示出根据一实施例的VL膨胀式映射的示例的示意图;
[0053] 图41是示出根据一实施例的VL收缩式映射的示例的示意图;
[0054] 图42是示出根据一个实施例的、支持9B结构分组的SL至VL旧式模式的示意性框图;
[0055] 图43是示出根据一个实施例的、支持9B、10B和16B结构分组的混合式SL至VL旧式模式的示意性框图;
[0056] 图44是示出在具有信用循环避免的拓扑中的TC、SL和SC使用的示例的图示;
[0057] 图45是示出根据一个实施例的通用结构分组格式的示图;
[0058] 图46是示出根据一个实施例的结构分组8B头部格式的示图;
[0059] 图47是示出根据一个实施例的结构分组10B头部格式的示图;
[0060] 图48是示出根据一个实施例的结构分组16B头部格式的示图;
[0061] 图49是示出根据一个实施例的结构分组9B头部格式的示图;
[0062] 图50a是示出根据一个实施例的10B EN封装头部格式的示图;
[0063] 图50b是示出根据一个实施例的16B EN封装头部格式的示图;
[0064] 图51是示出根据一个实施例的经封装的以太网L4头部的字节0和字节1的细节的示图;
[0065] 图52是示出根据一个实施例的经封装的以太网L4头部的字节7的细节的示图;
[0066] 图53a是示出经由以太网封装的在结构5300上的示例性数据传送的示意图,其中,所述传送从节点端点到以太网端节点;
[0067] 图53b是示出经由以太网封装的在结构5300上的示例性数据传送的示意图,其中,所述传送从以太网端节点到节点端点;
[0068] 图54是示出根据一个实施例的、当将以太网分组封装在L2结构分组中时被保持和丢弃的字段的示图;
[0069] 图55a是示出结合利用图53a的以太网封装进行的结构分组的传送来执行的操作的流程图;
[0070] 图55b是示出结合利用图53b的以太网封装进行的结构分组的传送来执行的操作的流程图;
[0071] 图56是示出64b/66b块编码将如何实现用于符合40GBASE-R和100GBASE-R物理层标准的以太网链路的示图;
[0072] 图57是根据一个实施例的、具有集成的轻量以太网网关的结构交换机的示意图;
[0073] 图58是示出根据一个实施例的信用消息的示图;
[0074] 图59是示出包括发射端口和接收端口的端口的实施例的示意图;
[0075] 图60是根据一个实施例的结构交换机的示意图;
[0076] 图61是示出根据一个实施例的由结构交换机执行的操作的流程图;以及[0077] 图62是根据一个实施例的包括HFI的系统的示意图。

具体实施方式

[0078] 本文描述了用于在链路层上可靠地传送以太网分组数据以及用于促进以匹配的线速和分组数据速率进行的结构至以太网以及以太网至结构网关操作的方法、装置和系统的实施例。在以下描述中,阐述了许多具体细节以提供对本发明的实施例的透彻理解。然而,本领域技术人员将领会,可以不利用这些特定细节中的一个或多个细节或者通过其他方法、部件、材料等来实施本发明。在其他实例中,未详细地示出或描述公知的结构、材料或操作以免使本发明的多个方面含糊。
[0079] 本申请文件中通篇对“一个实施例”或“实施例”的引用意指结合所述实施例描述的特定的特征、结构或特性被包括在本发明的至少一个实施例中。如此,在整篇说明书中的不同位置出现短语“在一个实施例中”或“在实施例中”不一定都是指同一个实施例。此外,在一个或多个实施例中,能以任何合适的方式来组合特定的特征、结构或特性。
[0080] 为清楚起见,也可通过附图中的各个部件的标记而不是通过特定的参考编号来指代附图中的各个部件。附加地,可利用跟随有"(typ)"(意指“典型的”)的参考编号示出指代特定类型的部件(与特定的部件相对照)的参考编号。将理解,这些部件的配置将是在附图中示出、但出于简洁和清楚的目的未标记的典型的或类似的部件。相反,“typ"不应理解为意指该部件、元件等典型地用于它的所公开的功能、实现、目的,等等。
[0081] 根据本文中描述的实施例的多个方面,提供定义了消息传递、交换的、服务器互连网络的架构。该架构跨越OSI网络模型的层1和层2,充分利用用于层3的IETF网际协议,并且包括用于该架构的层4的新的且被充分利用的规范的组合。
[0082] 可通过正式定义(诸如,超级计算机)或简单地通过关联来实现该架构以用于互连CPU和包括逻辑消息传递配置的多个其他子系统,如同云计算中常见的情况,此类服务器组或集群由于它们运行的消息传递应用而以某种类型的协作方式运作。互连的部件被称为节点。被称为主机的一种类型的节点是用户模式软件在其上执行的类型。在一个实施例中,主机包括单个高速缓存一致性存储器域(无论该一致性域中的核或CPU的数量),并且可包括各种本地I/O和存储子系统。主机运行的软件的类型可定义更专业化的功能(诸如,用户应用节点、或存储或文件服务器),并用于描述更详细的系统架构。
[0083] 在顶层,该架构定义以下部件:
[0084] ·主机结构接口(HFI);
[0085] ·链路
[0086] ·交换机;
[0087] ·网关;以及
[0088] ·综合性的管理模型。
[0089] 主机结构接口至少由用于实现该架构的物理层和链路层的逻辑组成,使得节点可附接至结构并向其他服务器或设备发送分组并接收分组。HFI包括用于操作系统和VMM(虚拟机管理器)支持的适当的硬件接口和驱动器。HFI还可包括用于执行或加速上层协议和/或卸载传输协议的专门逻辑。HFI还包括用于响应于来自网络管理部件的消息的逻辑。每一个主机都经由HFI而连接至架构结构。
[0090] 链路是全双工的点对点互连,这些互连将HFI连接至交换机,将交换机连接至其他交换机,或者将交换机连接至网关。链路可具有以电路板迹线、铜缆或光缆形式的不同的物理配置。在一个实施例中,PHY(物理层)实现、电缆和连接器策略将遵循以太网(具体是100GbE,每秒100千兆比特的以太网,诸如IEEE 802.3bj标准草案(当前草案2.2)中定义的以太网链路)的PHY(物理层)实现、电缆和连接器策略。该架构是灵活的,支持使用可超过
100GbE带宽的未来以太网或其它链路技术。高端超级计算机产品可使用专用(高得多的带宽)的PHY,并且对于这些配置,与架构产品的互操作性将基于具有带有不同的PHY的端口的多个交换机。
[0091] 交换机是OSI层2的部件,并且由该架构的管理基础设施管理。该架构将网际协议定义为其OSI的层3或互联层,不过该架构既不在IP域中指定任何事物,也不管理IP相关的设备。支持架构结构与外部网络(尤其是以太网)之间的连接性的设备被称为网关。轻量网关可提供降低的功能性,并且严格地在以太网的层2上工作。全功能网关可在层3上以及更高的层上操作,因此表现为路由器。由该架构提供的网关规范包括机制,所述机制用于以太网封装,并用于网关如何能够在该结构上工作以准许至与该架构的其余部分一致的以太网数据中心网络的灵活的连接性。将IP用作相互联网协议使得能够使用IETF认可的传输(即TCP、UDP和SCTP)以超出该架构的结构来发送并接收消息。
[0092] 图1示出根据一个实施例的系统100的高级视图,系统100示出架构的各种部件和互连。该架构的中心特征是结构102,该结构102包括经由架构链路和交换机而互连的HFI和网关的集合。如图1中所描绘,结构102的部件包括:多个HFI 104(示出一个HFI 104),每一个HFI 104都由相应的分立的单节点平台106主管;HFI 108,由虚拟平台110主控;HFI 1121和112n,由多节点平台116的相应节点1141和114n主管;以及集成单节点平台120的HFI 1181和118n;高基交换机122;交换机124和126;(多个)结构管理器128;网关130;链路132、134、1361、136n、138、1401、140n、142、144、148以及共同示出为云150的附加的链路和交换机。
[0093] 如上文所讨论,交换机是层2设备,并且在结构内担当分组转发机构。交换机由结构管理软件集中地供应和管理,并且每一个交换机都包括管理代理以对管理事务作出响应。集中式供应意味着转发表由结构管理软件编程,以实现特定的结构拓扑和转发能力(类似于用于自适应路由的替代路径)。交换机负责执行诸如自适应路由和负载平衡之类的QoS功能,并且还实现阻塞管理功能。
[0094] 图2描绘了用于在结构链路上传送数据的架构的多个层。这些层包括物理(PHY)层、链路传送子层、链路结构子层以及传输层。在图2的左侧是这些层向OSI参考模型的映射,其中PHY层映射至层1(PHY层),链路传送子层和链路结构子层共同映射至层2(链路层),并且传输层映射至层4(传输层)。
[0095] 在该架构中,在物理层中,信号被一起集合到端口中,这些端口表现为单片式实体、并且作为单片式实体被控制和报告。端口包括一个或多个物理通道,其中每一个通道都由在物理传输介质中实现的两个差分对或光纤组成(每个通信方向一个差分对或光纤)。构成端口的通道的数量是依赖于实现方式的;然而,链路传送子层的架构支持端口宽度的有限集合。特定的端口宽度被支持为基本端口宽度以允许用于电缆和芯片设计的常见目标。这些端口宽度包括1x、4x、8x、12x和16x,其中“x”标识物理通道的数量。在诸如检测缺陷通道的一些情况下,链路可能在减小的通道宽度下运行。
[0096] 链路传送子层充当物理层与链路结构子层之间的接口。(链路结构子层处的)链路结构分组被分割成64位流控制数位(FLIT、Flit或微片,流控制数位的近似收缩)。图3示出在捆包302中成组的多个微片300的示例。每一个微片300都包含64个数据位,包括8字节的数据。
[0097] 链路传送子层将多个通道形成队组(team),这些队组能够以可靠的方式、跨该链路来传送微片以及它们相关联的信用返回信息。这通过使用被称为链路传送分组(LTP)的1056位捆包来完成,所述LTP与链路结构子层相关联。图3还描绘了LTP中包括16个数据微片的数据部分。此外,LTP包括微片类型信息、CRC数据以及任选的数据(未在图3中示出)。在各附图(例如,图5-11)中示出、并在下文中更详细地描述了LTP的示例。
[0098] 结构分组由64位微片以及针对每个微片的微片类型位组成。结构分组的第一数据微片被称为头微片。结构分组的最后一个数据微片被称为尾微片。结构分组中的任何其他数据微片被称为体微片。在图4中示出结构分组400的示例。
[0099] 为每一个微片提供微片类型位以将体微片与其他微片类型区分开。在一个实施例中,体微片被编码成将微片类型位置位为1,并且包含64位数据。所有其他微片被标记成将类型位置位为0。头微片被编码成将微片[63]置位为1。所有其他的(非体)微片被编码成将微片[63]置位为0。尾微片被编码成将微片[62]置位为1。所有其他的(非体/头)微片被编码成将微片[62]置位为0。在以下表1中概述了微片编码。
[0100]微片类型位 微片[63] 微片[62] 描述
1 X X 体数据微片
0 0 0 空闲的、坏分组和控制微片。
0 0 1 尾数据微片
0 1 X 头数据微片
[0101] 表1
[0102] 在表2中概述了控制微片。在空(null)LTP中发送仅由链路传送层使用的七个控制微片(LT控制微片)。其余的控制微片被划分成两个组。结构分组(FP)微片包括HeadBadPkt(头坏分组)、BodyBadPkt(体坏分组)以及TailBadPkt(尾坏分组)控制微片以及正常的分组头(Head)微片、体(Body)微片和尾(Tail)微片。链路结构(LF)命令微片包括Idle(空闲的)、VLMrkr(VL标记)和CrdtRet(信用返回)微片。FP微片和LF命令微片可被一起混合在可靠的LTP内以用于在链路上传输。
[0103]
[0104] 表2
[0105] 当没有要插入到数据流中的结构分组微片时,由链路结构层使用空闲命令微片。如果数据路径的完整宽度包含空闲,则链路传送层将从被插入到输入缓冲器中的微片流中去除这些空闲。如果该数据路径既包含空闲的微片又包含非空闲的微片,则将不会去除这些空闲。实现此以使链路传送层将完全相同的数据路径组成呈现给该链路的远侧的链路结构层。如果链路传送层没有来自链路结构层的待处理的微片,则当在该链路上发送原始的微片时,链路传送层将插入空闲。与从重放缓冲器发送的、包括被重传或重放微片的那些微片相比,原始的微片是首次在链路上发送的微片。
[0106] 链路传送分组保持十六个微片以用于在该链路上传输。可靠的LTP被保持在重放缓冲器中达一时间段,该时间段长至足以保证重传请求的缺乏指示已由链路对等方成功地接收到该可靠的LTP。对于每一个LTP,在发射机处和在接收机处维护重放缓冲器位置指针(发射机处为NxtTxLTP,接收机处为NxtRxLTP),但这些指针不作为LTP的部分被交换。当由接收机检测到传输错误时,它将包含NxtRxLTP重放缓冲器位置指针的RetryReqLTP(重试请求LTP)发送至发射机。响应于接收到RetryReqLTP,以原始的顺序重传重放缓冲器中的LTP,以RetryReqLTP(对等方NxtRxLTP)开始,并且以被写入的最后一个重放缓冲器位置(NxtWrLTP-1)结束。空LTP不被保持在重放缓冲器中,并且不被重传。
[0107] 可在LTP中将链路结构命令微片与FP微片混合;然而,LF命令微片不是结构分组的部分。它们将来自链路的一端处的链路结构子层的控制信息携带至该链路的另一端的链路结构子层。
[0108] 在一个实施例中,存在三个LTP格式,包括标准检测LTP、14位CRC LTP以及增强型检测LTP。在图5中示出标准检测LTP的实施例。除了十六个微片之外,每一个标准检测LTP还具有16位CRC,该16位CRC覆盖LTP内容。为了说明的目的,图5中的微片为示出为65位,其中位64是微片类型位。
[0109] 在图6中示出14位CRC LTP的实施例。除了十六个微片之外,每一个14位CRC LTP还具有两位信用边带通道和覆盖LTP内容的14位CRC。在LTP内,在特殊的LF命令微片或在LTP信用边带通道中传输流控制信用。
[0110] 除了标准检测LTP之外,链路还可支持任选的增强型检测LTP,该任选的增强型检测LTP保持十六个微片并且具有四个十二位CRC字段。图7示出增强型检测LTP的实施例的格式。四个CRC字段中的每一个都覆盖所有十六个微片。如果四个CRC中的任一个是坏的,则重传该LTP。存在用于四个12位CRC的两个CRC计算选项。第一选项(48b重叠)使用四个重叠的计算,其中每一个计算都覆盖该LTP内的所有位。第二选项(每个通道的12b-16b CRC)使用四个不重叠的计算,其中每一个计算限于在四个通道中的一个通道上流动的所有位。
[0111] 如上文所讨论,在空LTP中发送由链路传送层使用的LT控制微片。空LTP不消耗重放缓冲器中的空间,并且不被重传。使用以上表2中概述的链路传送LT控制微片中的一个对它们进行区分。在连续的对中发送空LTP类型中的大部分以保证两个中的至少一个由链路对等方无错误地接收,或者保证当两者都存在错误时将自动地生成RetrainRetryReq(重新训练重试请求)。图8中示出了标准检测空LTP的示例。
[0112] 标准检测空LTP包含单个的区分性控制微片、975个预留位以及标准检测十六位CRC字段。增强型检测空LTP包含单个的区分性控制微片、975个预留位、以及增强型检测四个12位CRC字段。当使用14位CRC时,在空LTP中忽略两个边带位。
[0113] 对于连接至具有四个通道的链路的能够4x的端口和能够8x的端口两者,在链路上一次传输一个LTP。这在图9a和9b中使用链路结构数据路径视角分别针对标准检测和增强型检测LTP而示出(注意,CRC字段不是按比例的),同时在图10中示出对应的信号处理和传送路径的实施例。14位CRC LTP将类似于图8中示出的标准检测LTP,区别在于,LCRC[15:0]字段将由LCRC[13:0]字段和C[l:0]字段的组合代替。微片传输顺序开始于微片0,并且结束于微片15。
[0114] 在一个实施例中,每一个通道上的数据的物理传输采用串行的两级位不归零(NRZ)编码位模式,其中对应于每一个通道的数据被解码、解串行化并且对于每个通道每个循环成组为四个字节。这导致传送16字节(包括每个循环的两个微片)。例如,图9a和图10中的图示假设两微片宽度的实现专用的数据路径,其中微片0和1将同时被传输,微片2和3将同时被传输,以此类推。由链路传送子层来计算LCRC。
[0115] 图11示出LTP传输方案,其中两个4通道链路被结合在一起以支持8x数据路径(其中在8个通道上传输数据)。如图所示,在该方案下,在链路结构与链路传送子层之间的接口处并行地处理来自两个LTP的四个微片。
[0116] 如上文所讨论,该架构采用三级数据单元粒度来支持数据传送:结构分组、微片以及链路传送分组。链路传送层处的传输单元是LTP。如图所描绘,每一个LTP标称地为16微片长,并且如上所述,LTP的实际尺寸可取决于所使用的特定CRC方案而不同,并且使用称为具有16微片的长度的LTP对应于包含在LTP中的64位数据微片的数量(排除CRC位和16个位65)。
[0117] 在图12中示出包括四个物理通道的链路的一个实施例的物理层(也称为“PHY”)结构。该PHY定义了链路互连的物理结构,并且负责处理在两个链路对等方(诸如,由部件A和B所描绘)之间的特定的链路上的信号操作的细节。该层管理信号线上的数据传送,包括在跨并行通道发送和接收每一个信息位时涉及的电平、时序方面和逻辑问题。如图12中所示,每一个互连链路的物理连接性由四个差分信号对1200(包括在每个方向上的通道0-3)组成。每一个端口支持由两个单向链路构成的链路对以完成两个对等部件之间的连接。这同时支持两个方向上的通信量。出于说明和便于理解的目的,未在图12中示出图10中示出的通道“混合”;然而将理解,在一些实施例中,发送和接收通道经混合。
[0118] 如图12中所示,具有链路端口的部件使用一对单向点对点链路进行通信,被定义为链路对等。每一个端口包括发射(Tx)链路接口和接收(Rx)链路接口。对于所示示例,部件A具有Tx端口1202,该Tx端口1202连接至部件B的Rx端口1204。同时,部件B具有Tx端口1204,该Tx端口1204连接至部件B的Rx端口1208。一个单向链路从部件A向部件B发送,而另一个链路从部件B向部件A发送。所述“发射”链路和“接收”链路是相对于哪个部件端口正在发送数据以及哪个链路正在接收数据来定义的。在图12中所示的配置中,部件A发射链路将数据从部件A的Tx端口1202传输到部件B的Rx端口1204。此相同的部件A发射链路是端口B接收链路。
[0119] 如先前所陈述,用于链路端口之间的数据传送的基本单元是LTP。每一个LTP专用于在由链路的相对端处的发射端口和接收端口定义的特定的链路上、在一个方向上的传输。LTP具有单次链路传送的寿命,并且通过从适用的VL缓冲器中拉取微片并每次16个地将它们组装到相应的LTP中来动态地生成LTP。如上文中参考图4所讨论,如LTP传输流1210和1212所描绘,LTP作为微片的流被传输,并且各个LTP的第一个和最后一个微片由头微片位和尾微片位界定。
[0120] 如上文所讨论,该架构定义分组递送机制,该分组递送机制主要包括目的地定路由的结构分组或FP,其中层4的有效载荷尺寸为0字节至10240字节。这提供对发送一系列消息(从简单的ULP确收到经封装的以太网巨型帧)的高效支持。结构分组表示用于进入HFI和离开HFI的有效载荷的逻辑单元。结构分组之所以被称为结构分组是因为它们具有在结构中的端到端的寿命。更具体地,结构分组的寿命是它在如由FP的源地址和目的地地址所定义的结构端点之间传送FP内容所花费的时间。FP的每一个传送路径将包括跨至少一个链路的传送,并且当传送路径横越一个或多个交换机时,可包括跨多个链路的传送。
[0121] 结合FP和LTP来使用微片促进了对于该架构唯一的数据传送功能。具体而言,FP、微片和LTP的分开支持对虚拟通道的使用以及QoS和结构强健性的各个方面。
[0122] 如上文所讨论,微片并非被单个地传输,而是将16个微片的组紧缩(捆包)为链路传送分组。这允许多个微片共享共同的链路CRC。LTP中的微片可来自许多不同的结构分组,与其他结构相比,这给予链路协议一些有趣的特性。通过使用高效的分组抢占和交织机制,该架构支持对不同流的数据传送的交织,从而几乎消除了行头(head-of-line)阻塞效应,甚至消除了在物理链路上物理地传送大型单个分组的阻塞效应。在图15和16中示出了结构分组、微片和LTP之间的关系的图示,并且在下文中描述对这些图的进一步的描述。
[0123] 该架构使用基于信用的流控制来管理该链路的接收机侧的缓冲资源,并且控制发射机何时可以发送微片。在该方法下,对于发送微片的结构端口,它需要可用于在接收端口处所需的缓冲器空间的足够的流控制信用。在一个实施例中,接收机提供多个接收缓冲器的单个池以用于链路上支持的虚拟通道(VL)。由该链路的发射机侧上的逻辑来管理对缓冲器池的分配。为每一个支持的VL分配专用的缓冲器。此外,发射机可将该空间的部分管理为共享池以在VL之间动态地分配。基于信用的流控制意味着在链路上的数据传送被严格地管理;不存在未经授权的数据传送,而且还意味着该结构是所谓的“无损的”结构。在这种情况下,“无损的”简单地意味着,在正常操作期间,微片和由此的分组永不会因为拥塞而被丢弃。
[0124] 在链路结构(LF)命令微片和链路传送(LT)控制微片中携带诸如流控制信用之类的控制信息。可将LF命令和LT控制微片插入在发射机的微片流中的任何点处。此外,一些LTP格式中的边带信息可用于以甚至更少的开销来传送信用。LF命令和LT控制微片由链路发射机生成,并且由链路接收机消耗。
[0125] 该架构包括用于链路传送分组和结构分组的CRC以确保数据完整性。该架构还为未被正确地接收的LTP提供链路级重试。LTP重试显著地改善了该链路的有效位错误率,并且允许以较低的功耗换取略微降级的物理BER的PHY策略的使用。LTP重试对大型结构也是有用的,在此大型结构中,结构中的大量链路使好得多的每链路BER特性成为必需以维持可接受的系统级错误率。
[0126] 抢占和交织
[0127] 当跨链路发送来自不同的分组的微片时,只要这些分组在不同的VL中,L2链路层就允许交织来自不同分组的这些微片。交织的一个动机是使对给定链路的使用最大化。如果发送的分组出于无论什么原因而被冒泡中断,则可将第二分组交织到信道中,而不是使其保持空闲。交织的第二原因(被称为抢占)是使较高优先级的分组中断正被传送的较低优先级的分组,从而减少此较高优先级的分组的等待时间。
[0128] 在交织时,将结构分组的微片的全部或部分与来自跨链路传输的该微片流内的其他FP的微片交织。发射机从可用于在端口的输出队列处发送的FP之间选择微片来传输。在一个实施例中,按顺序递送单个VL内的FP,因此在虚拟通道内,在发送来自(那个VL中的)后续的分组的任何微片之前,发送来自一个分组的所有微片。跨不同VL不具有所指定的排序,因此可在微片流内(以及在给定的LTP内,只要在每一个VL内维持微片的排序)任意地交织来自不同VL中的分组的微片。一些发射机实现可选择限制分组之间交织的量。
[0129] 在抢占时,来自具有较高优先级等级的结构分组的微片抢先于来自具有较低优先级等级的FP的微片。在一个实施例中,每一个虚拟通道与相应的优先级等级相关联。发射机配置成将来自较高优先级的VL的微片插入到链路LTP之上并且位于来自较低优先级的VL的微片之前。发射机可选择将较高优先级的微片插入在大于单个微片的边界处。此外,在发送来自相同优先级的不同的VL中的不同的分组的微片之前,发射机可选择交织来自相同优先级的VL的微片,或者它们可将来自一个分组的所有微片注入到该链路上。
[0130] 链路上的接收机按照VL将传入的微片流分开,以便插入到队列中并转发至下一跳(hop)(用于交换机中的接收机)。一般而言,至少对于给定的链路,接收机实现将支持可由发射机生成的交织的完全范围。在一些实施例中,跨结构来实现类似的交织范围。任选地,不同链路可支持不同水平的交织。
[0131] 根据分组抢占的多个方面,来自具有第一优先级等级(例如,高优先级)的VL上的分组B的微片可抢先于来自较低优先级的VL(即,具有比第一优先级低的优先级的VL)上的分组A的微片流。在这种情况下,可由来自分组B的头微片来跟随分组A的头微片以及来自分组A的零个或更多个体微片。该头微片指示,新分组正在开始,并且接收机将在L2头部中寻找SC字段以确定VL标识符。将由零个或更多个体微片跟随分组B的头微片,最终尾微片终止分组B。在终止了分组B之后,利用零个或更多个体微片来恢复分组A的传输,所述零个或更多个体微片由尾微片跟随。
[0132] 当由依次更高优先级的分组(依次更高优先级的VL上的分组)抢占分组时,可嵌套分组抢占。在一个实施例中,这被建模为链表,其中活跃分组在该列表的头部。在当前分组被抢占时,新分组被添加至该列表的头部。当抢占的分组终止时,它从列表中被去除,并且下一预期要恢复的分组是列表的新头部。一次可保持在列表上的分组的最大数量等于所支持的VL的数量。
[0133] 虽然先前讨论使用优先级等级来描述抢占,但是并没有抢占仅用于较高优先级的分组的要求。可能存在没有来自当前分组的可用于传输(导致“冒泡”)的微片,但存在来自较低优先级的分组的可用的头微片的情况。可发送来自该较低优先级的分组的头微片和依次的体微片。新的头微片将导致分组被添加在列表的头部处,并且接收机将准确地跟踪此新分组。
[0134] 当在第一分组的尾微片之前发送第二分组的头微片时,分组被视为与第二分组交织。在交织的最简单的情况下,中断头微片之后的所有体微片属于第二分组,直到其尾微片为止,在其尾微片之后,第一分组的其余的分组微片恢复。在图13中以图形方式描绘了这种简单的情况。
[0135] 该组微片对应于微片流中的微片的顺序(从顶至底)。该组中的第一微片是在虚拟通道0(被标记为VL0)上传送的结构分组的头微片。VL0头微片将该FP标为4微片长(头微片、两个体微片以及尾微片)。第二微片是FP VL0的第一体微片。下一微片被标记为VL1头微片,并且它是在标记为VL1的虚拟通道1上发送的FP的头微片。该VL1头微片也将该FP标识为4微片长。在一种方法下,当来自新的VL的FP的微片与来自当前VL的微片交织时,新的VL成为用于在该链路上发送微片的活跃虚拟通道。这通过将VL1的头微片添加至微片流来描绘。因此,FP VL1与FP VL0交织,这通过首先添加VL1头微片、两个VL1体微片以及VL1尾微片来描绘。尾微片标识FP VL1FP的微片的末尾,这也使FP VL1交织完成。然后该逻辑在VL1交织之前返回至FP微片,导致在链路上发出余下的FP VL0体微片和尾微片。
[0136] 为了进一步示出链路结构子层如何支持来自多个结构分组的微片的交织,图14示出进栈和出栈交织的示例。链路结构子层中的交织利用进栈和出栈方案,在此进栈和出栈方案中,中断头微片导致栈中被中断的VL的进栈以及当遇到尾微片时栈中的该VL的出栈。为了使栈如何工作可视化,想象收件箱中的一叠纸以及用于在当前纸上工作的桌面区域。
在进栈和出栈交织的情境下,这叠纸被称为“栈”,而桌面区域对应于活跃VL寄存器,在此活跃VL寄存器中,数据标识正在通过其存储微片的活跃虚拟通道。当响应于交织来交换正在被传输的VL时,被交织的VL成为新的活跃VL,而先前的活跃VL被推离桌面而到栈的顶部上,因此称为“进栈”。在FP的VL微片完成时(例如,当该VL FP的尾微片被添加至LTP发射FIFO时),从桌面区域去除该VL,并且使该栈的顶部上的VL弹离该栈至桌面区域上,由此成为新的活跃VL。VL的进栈和出栈能以嵌套方式继续。在链路结构子层支持n个VL的情况下,能被同时中断的分组的最大数量是n-1。
[0137] 在图14的示例中,微片的有序列表1400表示来自存储在各个VL中的结构分组的微片被添加至微片的传输流的顺序(或任选地,示出在接收端口处接收的微片流中的微片的顺序)。以下描述关于微片流的生成,其中将微片添加至捆包成LTP(即,将被“注入”到该结构中的LTP)的流出流。描绘了活跃VL寄存器1402中处于各种状态的、标识活跃VL的指标。在初始状态下,将对应于VL0的指标存储在活跃VL寄存器1402中,从而指示微片是从为虚拟通道VL0(称为VL0FP)缓冲的下一结构分组添加的。相应地,将VL0FP的前两个微片添加至微片传输流,此刻检测到交织事件,从而发起VL1交织VL0。为了完成该交织操作,用于VL1的指标代替活跃VL寄存器中的VL0,从而将VL0推至栈上。这将活跃虚拟通道切换至VL1,从而将VL1FP的头微片和第一体微片添加至微片传输流。接着,响应于第二交织事件,发起VL2与VL1的交织,从而将VL2加载到活跃VL寄存器1402中,并将VL1推至栈上。这导致将FP VL2的所有三个微片添加至微片传输流。添加FP VL2尾微片完成VL2与VL1的交织,从而导致VL1被弹离栈而进入活跃VL寄存器1402中。添加VL1的另一体微片,之后发起VL7交织VL1,这通过将VL7的指标添加至活跃VL寄存器1402并往回将VL1推至栈来实施。将对应于整个VL7FP的这三个微片添加至微片传输流,从而完成VL7与VL1的交织,并且使VL1弹离栈而往回至活跃VL寄存器1402中。添加VL1FP的尾微片,从而完成VL1的交织,并且使VL0弹离栈而进入活跃VL寄存器1402。这使VL0返回成为活跃VL,并且将VL0FP的最后两个分组添加至LTP传输FIFO。
[0138] 链路结构子层允许设备利用特殊的LF命令微片(称为“VL标记”)来显式地指定将哪个VL移动至列表的头部,而不依赖于出栈以返回到正在被中断的隐式的VL。使用VL标记由于此附加的标记微片而较不高效,但它提供更多交织的灵活性。图15中的示图表示出了该概念。
[0139] VL标记实际上允许从默认的栈排序中拉出VL,或允许将栈中不存在的新VL移至栈的顶部。随后,保留在栈中的VL继续遵循进栈和出栈规则。这两个不同的机制的使用可相互混合,并且不是互斥的。在特定的VL从栈中被拉出且随后由另一VL交织的情况下,它被往回推到栈上。
[0140] 返回至图15,操作序列以与图14的进栈和出栈示例类似的方式开始,其中初始的活跃虚拟通道是VL0,并且将VL0FP的前两个微片添加至微片传输流1500。与以上类似,下一VL1交织VL0两个微片,然后VL2交织VL1。然而,在到达VL2FP尾微片之前,将VL标记1502插入微片传输流,表明VL0将变成新的活跃VL。这导致VL0从该栈被拉出并被加载到活动VL寄存器1402中,并将VL2推至栈的顶部。将VL0的余下两个微片添加至微片传输流1500,完成VL0,从而导致VL2被取出栈进入活动VL寄存器1402。这添加VL2的尾微片,从而完成VL2并使VL1弹离栈而进入活跃VL寄存器1402。添加另一VL1体微片,随后发起VL7交织VL1,这将VL7加载到活跃VL寄存器1402中,并将VL1从活跃VL寄存器1402推至栈上。接着将第二VL标记1504添加至微片传输流1500以将活跃虚拟通道往回切换至VL1。这将VL7推至栈上,并将VL1拉入活跃VL寄存器1402中。添加VL1FP尾微片,这样完成VL1的交织,并且使VL7弹离栈并进入活跃VL寄存器1402。随后添加VL7FP的最后两个微片。
[0141] 出于说明目的并且为了更容易地理解进栈和出栈交织方案和VL标记交织方案,图14和15中示出的交织示例示出了夸张等级的交织。在实际的系统中,大多数交织将来自两种类型的交织事件中的一者:(A)抢占;以及(B)分组流中的冒泡。分别在图16和17中示出了抢占式交织以及抢占式交织和由冒泡事件引起的交织的组合的进一步详细的示例。
[0142] 如上文所述,在抢占时,具有较高优先级的虚拟通道中的结构分组的内容(微片)可抢先于处于较低优先级的VL的FP的微片向微片传输流的添加。在HFI、网关、或其他类型的结构端点处,构建出结构分组的数据一般最初将以某种其他类型的格式(诸如,将被封装在结构分组中的以太网帧)被缓冲。与生成层3的分组(诸如,IP分组和UDP分组)类似,将结构分组创建为联网的栈的部分也是可能的。在交换机处,接收到和被发送的内容均已被格式化成微片,并且使用附加的元数据来确定哪些微片与哪些FP相关联,以及要在什么交换机端口上将这些微片向外发送至它们的下一跳或端点目的地。鉴于以上内容,图16和17在整体上描绘结构分组,其中FP内容的微片格式化在FP下方。
[0143] 每一个FP的微片内容被临时地存储在分配给为FP指派的虚拟通道的缓冲器中。在各种缓冲器配置实施例中,可将分开的缓冲器分配给相应的VL,一些VL可共享缓冲器空间,或可能存在两者的组合,其中VL缓冲器分配的第一部分对于那个VL是私有的,而另一部分是共享的缓冲器空间。下文中描述关于分配对于接收缓冲器(Rbuf)发射缓冲器(Tbuf)的VL使用的进一步的细节。
[0144] 使用虚拟通道的基本方面在于,给定的虚拟通道中的内容保持有序。这意味着,对于给的定虚拟通道,一个FP不可越过另一FP。此外,FP的微片也保持它们原始被生成的顺序。同时,不同的虚拟通道中的内容不一定要相对于其他虚拟通道保持有序。这使得更较优先级的通信量抢先于更低优先级的通信量。虚拟通道还可用于消除路由和协议死锁,并避免多个通信量类别之间的线端阻塞。
[0145] 如图16中所示,存在用于相应的虚拟通道VL1、VL2、VL3的三个缓冲器1602、1604和1606。这些虚拟通道中的每一个也被分配相应的优先级等级——VL1为低优先级,VL2为中优先级,并且VL3为高优先级。仲裁器(未示出)用于确定从哪个VL缓冲器拉出微片以添加至微片传输流1608,在此微片传输流1608中,微片被捆包到LTP 2、3、4、5、6和7中。图16是“滑动窗口”图,描绘了在所描绘的窗口时间帧上的VL(VL1、VL2和VL3)的链路通信量的处理。在一个实施例中,VL缓冲器被实现为FIFO(先入先出)缓冲器,其中每一个FIFO槽的尺寸设定成用于存储微片。
[0146] 如上文所讨论,在抢占式交织的一个方面,被分配给较高优先级的VL的FP内容可抢先于被分配给较低优先级的VL的FP内容。一般而言,如果在相应的VL出口(将被注入到结构中)缓冲器中缓冲对应于多个FP的FP内容,则被分配给具有最高优先级的VL的FP内容将被添加至微片传输流。然而,应注意这不是绝对的规则,因为可能存在其中不发生抢占的情形。同时,如果FP内容仅对给定的VL或具有相同优先级的多个VL是可用的,则无论(当前不具有任何被缓冲的内容的)其他VL的优先级等级如何,FP内容都将被添加至微片传输流。在图16中示出此情形,如下所述。
[0147] 在时刻T1,在VL1缓冲器1602中缓冲分组1的至少第一部分,并且分组1的至少第一部分准备好进行传输。由于该架构下的数据传送的流式性质,微片既可被接收在VL缓冲器处被接收(添加至VL缓冲器),也可从VL缓冲器去除(以用于传输)。此外,将微片添加至VL缓冲器以及从VL缓冲器去除微片可能在某种程度上是异步的,尤其是在交换机处。作为结果,在任何给定的时间点,给定的VL缓冲器可具有或不具有被缓存且准备好传输的内容。在图16的示例中,在时刻T1,仅VL1缓冲器1602包含准备好传输的微片,而VL2缓冲器1604和VL3缓冲器1606是空的。为了发起将FP分组的微片添加至微片传输流,至少一个或多个头微片(取决于特定的FP格式)需要在VL FIFO缓冲器的头部处。(如下文中进一步详细地所描述,在一个实施例中,VL缓冲器被实现为圆形FIFO,其中FIFO头部通过FIFO头部指针来标识。)在图16中,在时刻T1,头微片1610被缓冲在VL1缓冲器1602的头部。
[0148] 在时刻T1,将第一组微片1612添加至微片传输流1608的LTP 2,其中在时刻T2添加微片1612的开始处的头微片1610,T1与T2之间的时间差表示仲裁器认识到活动VL将被改变至VL1缓冲器1602所花费的时间量和用于将微片数据从缓冲器复制到微片传输流1608的时间。图16中的T1与T2之间的差不是按比例的,而相反用于示出在当FP数据到达VL缓冲器并准备好传输与当数据实际被添加至微片传输流之间将会有某个有限的时间。
[0149] 在时刻T3,已在VL2缓冲器1604处接收到分组2的第一部分,以头微片1615开始。由于VL2具有比VL1更高的优先级,因此由仲裁器(或未示出的其它逻辑)检测到抢占事件。取决于实现方式,可在分组2的(多个)头微片到达VL2缓冲器1604FIFO的头部之后立刻检测到抢占事件,或者可能存在一些延迟以减少某种程度的交织的出现,因为附加的交织会导致在其他端口处产生冒泡,从而导致甚至更多的交织。例如,如果具有添加至微片传输流的微片的当前分组仅具有一些剩余的微片,并且将成为抢占的分组是大的,则该逻辑可等待当前分组完成,使得对当前分组的抢占不发生。
[0150] 响应于抢占事件,使用进栈和出栈方案来将活跃VL从VL1切换至VL2。任选地,可使用VL标记交织方案。响应于将活跃VL从VL1切换至VL2,将用于VL2的指标加载到活跃VL寄存器中,并且将VL1推至栈上。如时刻T4处所描绘,从VL2缓冲器1604FIFO拉出第一组微片1616,并将此第一组微片1616添加至微片传输流1608。这导致有利于分组2而抢占对分组1的传输,并且导致来自分组1和分组2的微片的交织。
[0151] 在时刻T5处,已在VL3缓冲器1604处接收到分组3的第一部分,以头微片1618开始。由于VL3具有比VL2更高的优先级,因此由仲裁器(或未示出的其他逻辑)检测到第二抢占事件。这导致有利于传输分组3而抢占对分组2的传输,这是通过将VL3的指标加载到活跃VL寄存器中并将VL2推至栈上来实施的。如时刻T6处开始所描绘,将分组3的全部微片1620添加至微片传输流1608,从而将分组3微片与分组2微片交织。
[0152] 结合将尾微片1622添加至微片传输流1608,仲裁器(或其他逻辑)检测到,添加来自分组3的微片已完成。因此,从活跃VL寄存器去除VL3,并且使VL2弹离栈而到活跃VL寄存器中,从而使VL2返回成为活跃VL。这导致分组2的余下微片1624被添加至微片传输流1608,开始于时刻T7并结束于时刻T8,在时刻T8检测到已经添加尾微片1626并且因此分组2已完成。这导致VL1被取出栈至活动VL寄存器中,并且VL1代替VL2作为活跃VL。随后,将分组1的其余微片1628添加至微片传输流1608,从而在时刻T9处、在尾微片1630处完成。随后,将用于下一结构分组的头微片添加为LTP7的最后一个微片(为简明起见未示出下一结构分组)。
[0153] 图17示出冒泡交织事件以及跟随其后的抢占交织事件。当结构分组的多个微片横越包括多个跳的路由路径时,这些微片的部分可能在一个或多个交换机处被抢占。这导致给定的FP的微片流的中断。当在接收端口处接收到此类被中断的微片流时,在当在抢占之前被传输的微片的部分与当在抢占之后被传输的微片的部分之间存在间隙。这导致“冒泡”。除了该冒泡示例之外,还可能因为各种其他原因而产生冒泡。响应于检测到此类冒泡,可实现与来自具有与带有冒泡的FP相同或更低的优先级等级的FP的微片之间的交织。
[0154] 如同图16的示例,在时刻T1,在VL1FIFO缓冲器1602中接收到包括头微片1700的、分组1的至少第一部分,并在时刻T2开始,将微片的第一部分1702添加至微片传输流1704的LTP 2。在时刻T3,在VL2FIFO缓冲器1604处接收到分组2的微片的第一部分,以头微片1706开始。VL1和VL2两者都被分配低优先级,因此分组1和分组2中的每一个被分配相同的低优先级等级。虽然FP和/或它们的微片在被分配给相同虚拟通道时不能越过彼此,但准许FP和/或它们的微片在被分配给不同的虚拟通道时越过彼此。当不同的虚拟通道具有相同的优先级等级时,也会产生该情形。一般而言,当两个(或更多个)虚拟通道中的FP共享相同的优先级等级时,将FP整体地(经由其微片)添加至微片传输流,例如,添加第一FP的所有微片,添加第二FP的所有微片,等等。选择接下来将哪个FP从共享相同的优先级等级的多个VL发送出将是仲裁器选择逻辑的功能,仲裁器通常将设计成平等地(或公平地平等地)对待FP的传输。例如,在一些实施例中,可实现轮循方案。此类轮循方案还可考虑FP的长度,使得跨多个VL的缓冲器使用等级针对某个等级。例如,两个VL之间的仅轮循方法将交替发送VL中的FP,而使用等级法可发送来自VL中的一个的第一FP,随后如果第一FP显著地大于第二和第三FP则发送来自另一VL的第二和第三FP。
[0155] 在图17中所示的示例下,通常将发送分组1的所有微片,随后是分组2的所有微片(假定没有抢占交织事件,并且仅考虑VL1和VL2以进行仲裁)。然而,如图所示,在分组1的微片的传输中具有开始于时刻T4的冒泡。仲裁器逻辑将结合VL2FIFO缓冲器1604中的分组2的微片的可用性来考虑冒泡的存在。作为响应,检测到冒泡交织事件,这导致在时刻T5开始,分组2的微片1708与分组1的微片交织。如同抢占式交织,通过将VL2加载到活跃VL寄存器中并将VL1推至栈上,交织的发起开始。
[0156] 当来自分组2的微片正被添加至微片传输流1704时,在时刻T6,开始将分组1的微片的第二(以及余下)部分接收并缓存在VL1FIFO缓冲器1602中。虽然这些微片可用于立即传输,但它们在时刻T6的接收不产生交织事件(或者以其他方式结束来自分组2的微片的交织)。相反,来自分组2的微片继续被添加至微片传输流1704,直到在时刻T7响应于检测到在VL3FIFO缓冲器1606中包括头微片1710的分组3微片的可用性而检测到抢占式交织事件为止。如同图16的示例,VL3具有也比VL1或VL2的优先级更高的高优先级等级。作为结果,高优先级分组3的微片的可用性发起分组3微片1712与分组2微片的抢先交织,这开始于时刻T8,并通过添加尾微片1715而完成于时刻T9。在完成分组3的交织时,使VL2弹离栈,并且将VL2加载到活跃VL寄存器中,从而使VL2活跃虚拟通道而返回。这导致将分组2的余下微片1716添加至微片传输流1704。
[0157] 在分组2的完成时(如由时刻T10处的微片传输流1704的尾微片1718所标识),使VL1弹离栈并将VL1加载到活跃VL寄存器中,从而使VL1作为活跃VL而返回。这导致将对应于分组1的其余部分的微片1720添加至微片传输流1704,其中当在时刻T11添加尾微片1722时,完成分组1的微片的添加。
[0158] 链路可靠性
[0159] 如上文所讨论,该架构的结构是“无损的”,这意味着在接收到分组时从不丢弃分组,或在传输期间从不以其他方式“丢失”分组。这经由主要包括使用基于信用的流控制和使用重放缓冲器的机制的组合来完成。在基于信用的方法下,发送单元(例如,HFI、交换机或网关)将不会将微片发送至接收单元(例如,另一HFI或交换机),除非该发送单元具有用于传输这些微片的信用;信用是在每个VL基础上的,并且用于指示接收机具有足够的缓冲器空间以用于将用于这些微片的VL。
[0160] 取决于使用了标准检测还是增强型检测LTP,每一个LTP包括用于验证数据完整性的一个或多个CRC。对LTP的数据内容计算(多个)CRC,并且将得到的(多个)CRC值附到LTP的末尾、跟随最后的微片(微片15),如图5-8中所示,并且如上文所述。在接收到(多个)CRC时,重新计算(多个)CRC,并且在接收到的LTP的(多个)CRC与接收到数据中的(多个)CRC之间进行比较以判定是否存在任何数据错误。如果传输的CRC与对接收到数据计算的CRC不匹配,则检测到数据错误。响应于检测到CRC失配,通过使用重放缓冲器来重传该LTP。
[0161] “可靠的”LTP被保持在重放缓冲器中达足够长以保证重传请求的缺乏指示已由对等方成功地接收该“可靠的”LTP的时间段。在该方法下,接收机不发送ACK来确收分组已被成功地接收;相反,在往返时间周期内重传请求的缺乏提供了已跨链路成功地传送了LTP的隐式的确收。使用术语“可靠的”LTP是为了将保持在重放缓冲器中的LTP与未保持在重放缓冲器中的其他LTP(诸如,空LTP)区分开。相应地,不重传空LTP。
[0162] 对于每一个LTP,在发射机处和在接收机处维护重放缓冲器位置指针(发射机处为NxtTxLTP,接收机处为NxtRxLTP),但这些指针不作为LTP的部分被交换。当由接收机(经由CRC失配)检测到传输错误时,它将包含NxtRxLTP(下一RxLTP)重放缓冲器位置指针的RetryReqLTP(重试请求LTP)发送至发射机。当在发射机处接收到RetryReqLTP之后,以原始的顺序重传重放缓冲器中的LTP,以RetryReqLTP(对等方NxtRxLTP)开始,并且以被写入的最后一个重放缓冲器位置结束。在一个实施例中,使用了用于写入LTP数据的下一重放缓冲器槽(NxtWrLTP),从而被写入的最后的重放缓冲器位置是NxtWrLTP-1。
[0163] 结合检测到由CRC失配指示的链路错误,实现第二机制以确定哪一个通道是错误的。该机制采用仅在接收机处计算的每通道的CRC,并且不使用与所传输的数据中的每通道的CRC的比较(因为不存在)。相反,每通道的CRC用于将对于具有CRC失配的LTP计算的每通道的CRC与对于经由重放缓冲器重传的同一LTP(基于每一个通道或每一个传送组)重新计算的对应的每通道的CRC作比较,如下文所讨论。
[0164] 在图18a和18b中示出连同对用于检测错误通道的每通道的CRC的使用的、对重放缓冲器的使用的示例。在该示例中,正在将包括LTP传输流1604的LTP 2、3、4、5、6和7的LTP传输流从设备A的链路接口A传输至该链路另一端处的对等设备B的链路接口B。更具体地,使用与以上讨论的图17中所示的四通道链路互连类似的四通道链路互连来将LTP传输流从链路接口A的发送端口1800传输至链路接口B的接收端口。在该架构的链路下,在并行的多个通道上串行地发送LTP内容。如上文所讨论,通道的数量可取决于特定的链路配置而不同;此外,还支持具有减少数量的通道的链路上的传送。作为示例而非限制,在被称为单位间隔(UI)的时间周期期间,在每一个通道上传输单个位。在一个实施例中,LTP数据的传送被分割成被称为传送单元(XFR)的数据单元。在一个实施例中,每一个XFR是32位数量。在一个实施例中,使用同一通道来传输XFR的所有位。在一些实施例中,可在多个通道上传输一些XFR。
[0165] 图19示出用于标准检测LTP的XFR的映射,该标准检测LTP具有1056位的长度。每一个XFR为32位长,并且在单个通道上被传送。相应地,存在用于每一个LTP的33个XFR。图20示出根据一个实施例的用于四通道链路的每通道的XFR映射。为了说明目的和简单起见,每个微片标称地为64位。然而,如图3中所示,每一个微片具有额外的第65位,该额外的65位整体地使用(对于体微片)或部分地使用(对于头微片和尾微片以及控制微片)以标识其微片类型。在传输期间,整齐地传输多个第65位,这意味着,在对在多个通道上并行地传输的串行化传输的位流的解串形化和再组装时,在1056位标准检测LTP中的每个第65个位的位置处都存在第65位。
[0166] 在四通道链路的一个实施例中,在32UI上、并行地在链路上传送用于两个微片的数据位,使得(逻辑地)一起传送包括四个XFR的128个位。然而,如上所述,每个第65个位置由微片类型位占据。作为结果,XFR并非确切地按照2:1来与微片映射。相反,如图21中所示,这些额外的第65位的整齐的存在导致经包裹的传送。
[0167] 更详细地,在一个实施例中,对于每128个UI报告额外的两个位,从而导致在完成8组四通道XFR之后16位的聚合。这8组包括前32个XFR,并且第33个XFR包括微片15的最后16位(加上其第65位),随后是16位CRC(或任选地,用于CRC-14LTP的14位CRC加上2个控制信道位)。为了说明目的且易于理解,可在本文中将微片示为以64位的单元来传送;然而将理解,在一个实施例中,实际上以65位的单元来传送微片。
[0168] 返回至图20的四通道XFR映射,对于每个1056位的标准检测LTP使用33个XFR导致为每一个LTP包裹一个XFR。这转而根据通道0、通道1、通道2、通道3、返回至通道0、通道1……以此类推的LTP起始通道序列而使每一个随后的LTP的起始点移动至下一通道。这在本文中这被称为四通道标准检测LTP“序列”,或简称为LTP序列(如应用于本文中所示和所讨论的在四个通道上的标准检测LTP传送)。为方便起见,LTP序列状态被示出为第一、第二、第三和第四,不过在一个实施例中,使用两个位将其跟踪为0、1、2、3。
[0169] 如图18a中所示,由传输链路控制块1804来执行LTP传输流1604中的微片的串行化和映射(或该操作的部分以其他方式由未示出的另一块来执行)。在由传输链路控制块1804处理之前,将每一个可靠的LTP的数据内容复制到重放缓冲器1806中的LTP槽中的一个LTP槽中,其中该槽由NxtWrLTP指针1807标识。一般而言,重放缓冲器可具有可变的尺寸或预定的尺寸。在一个实施例中,重放缓冲器可选择性地配置成多个预定的尺寸中的一个。
[0170] 如图所示,在一个实施例中,重放缓冲器实现为圆形FIFO,其中,下一个传输LTP(NxtTxLTP)指针1808具有从最后一个FIFO槽往回环绕到第一FIFO槽(在此示例中,从槽7环绕到槽0)的值。使用圆形FIFO导致先前的LTP数据(对应于先前传输的LTP)被新的(接下来将传输的)LTP数据覆写;然而,提供措施以确保没有LTP数据被覆写,直到检测到LTP数据已被成功地传送的隐式的确收为止,如下文所详述。该方案促进数据在链路上的可靠的传输而无需使用显式的ACK,从而减少了与使用ACK相关联的开销。这也减少了用于支持用于链路层上的协议(诸如,TCP)的基于ACK的可靠的传输方案必需的传输端口处的缓冲。
[0171] 参考图22a-22e的流程图2200a-e以及图23a和23b的发射机和接收机状态机图2370和2350,根据一个实施例,以如下方式实现对链路错误的处置(包括对错误链路通道的检测)。在链路初始化过程期间,在该链路的接口的对等发送端口与接收端口之间交换各种信息,从而建立双向的通信链路。在该过程期间,将重放缓冲器的NxtTxLTP指针1808和接收侧上的对应的下一接收LTP(NxtRxLTP)指针1810初始化为0。在成功的链路初始化之后,如由开始框2202以及图23a和图23b中的用于发射机和接收机的LinkTransferActive.normal(链路传送活跃.正常)状态所描绘,链路传送模式设置为“正常”,并且LTP准备好跨链路被传送。为清楚起见,以下讨论集中在数据在一个方向上被传送;可在相反方向上(使用单独的通道集合)执行类似的操作以支持该链路上的双向通信。
[0172] 随着LTP传输流1604中的LTP被连续地传输,LTP的数据被连续地复制到重放缓冲器1806中,并且NxtTxLTP指针1808对于每一个LTP进展一个槽(或一旦到达最后一个槽(MyLTPmax)就往回环绕到0)。对于图18a中所示的示例状态,LTP 2-6先前已从发送端口1800被传输,并且先前已由接收端口1802接收到的LTP2和LTP3由Rx链路控制块1805处理,并且基于LTP CRC匹配而被确定为是好的LTP。LTP 4将被接收,而LTP 5和6在传输中(这些LTP的数据已从发射机端口1800被向外发送,但尚未在接收端口1802处接收到)。
[0173] 返回至流程图2200a,主流程环路开始于框2204,在框2204中,在接收端口处接收LTP。在图18a的示例中,通过在接收端口1802处接收LTP4来描绘该操作。如框2206中所描绘,对于每一个通道,基于在适用的LTP序列状态期间在该通道上接收导的数据来计算CRC,并且将此CRC写入每通道的CRC寄存器(如由CRC通道寄存器CRC-L0、CRC-L1、CRC-L2和CRC-L3所描绘)。在一个实施例中,这些寄存器中的数据被当前LTP的CRC计算结果覆写,使得CRC通道寄存器仅存储最近处理的LTP的数据。在一个实施例中,四通道链路的每通道的CRC是12位CRC,该12位CRC是随着接收到每一个通道的多个位而动态地计算的。
[0174] 在框2208中,计算接收到的LTP数据的CRC(Rx CRC),并将其与所传输的LTP中的Tx CRC进行比较。由发送端口1800使用将被传输至接收机的LTP数据来计算Tx CRC,并且该Tx CRC被附到LTP的末尾处,如本文中的各种LTP格式中所示。接收机从接收到的LTP数据中提取Tx CRC,并且将此Tx CRC对接收到的LTP数据计算的Rx CRC进行比较。在决策框2210中,作出接收到的Tx CRC与计算出的Rx CRC是否匹配的判定。如果它们匹配,则如框2212中所描绘,认为该LTP是好的,并且执行对LTP数据的正常处理,并且该逻辑返回至框2204以处理下一个接收到的LTP。
[0175] 在图18a中所示的示例中,LTP 4的Tx CRC与Rx CRC不匹配(CRC失配),这指示LTP数据错误。链路数据错误可能源自各种链路条件,而在此刻,导致错误的特定的链路条件是未知的;已知的是接收到的LTP数据与被发送的LTP数据不同,因此接收到的LTP具有错误数据,并且将不被进一步处理。失配的LTP CRC对应于决策框2210的“否”结果,从而导致该逻辑继续至框2214,在框2214中,将LTP描绘为是坏的,也由接收机状态图2350中的RcvBadLTP(接收坏LTP)来描绘。响应于检测到坏的LTP,如由框2216(在图22a中)、2218和2220(在图22b中)中的每一个中的操作所描绘,基本上并行地发起并执行多个操作。
[0176] 如框2216中所描绘,在每通道或每XFR组的基础上存储针对坏的LTP计算出的每通道的CRC值。如果每个LTP的XFR的数量可被通道的数量整除,则在每通道的基础上存储每通道的CRC值;否则,在每个XFR组的基础上来存储它们。例如,对于具有三个活跃通道和33个XFR的链路,存储每通道的CRC值,因为33/3=11。反之,对于四通道或两通道,在每个XFR组的基础上存储每通道的CRC值(33/4=7.5以及33/2=16.5)。如果存储了每个XFR组的CRC,则在寄存器1814中存储接收LTP序列状态。
[0177] 在图24中示出每个XFR组的CRC的示例。如图所示,跨四个通道针对其计算每通道的CRC的XFR的数量不相等;相反,通道中的一个对于每个标准检测LTP将接收9个32位XFR(从而为288位),而其他三个通道将接收8个32位XFR(从而为256位)。此外,接收9个32位XFR的通道将取决于LTP序列状态。如将在下文进一步详细讨论,通过将具有CRC失配的LTP的每个XFR组的CRC与同一LTP的后续的重传进行比较,可使用所存储的每通道的CRC来检测哪个或哪些通道产生了错误。由于用于原始的LTP传输的LTP序列可能与用于重传的LTP的LTP序列不同,因此可采用每个XFR组的CRC。每个XRF组的CRC将导致比较对相同的XFR计算的CRC,而如果使用每通道的CRC方案,则当操作具有四个通道或两个通道的链路时,这可能导致或可能不导致对相同的XFR进行的CRC计算(对于四个通道的链路,有25%的机会相同;对于两个通道的链路,有50%的机会相同)。
[0178] 如图24中所示,每个XFR组的CRC被标记为CRC-G0、CRC-G1、CRC-G2以及CRC-G3。针对其计算这些CRC的传送将取决于通道和LTP序列状态两者。例如,对于第一LTP序列状态,从在通道0上接收的9个XFR即0、4、8、12、16、20、24、28和32计算XRC-G0,而CRC-G1、CRC-G2和CRC-G3的计算值将分别取决于对通道1、2和3描绘的8个XFR。在第二LTP序列状态下,从通道1上的9个XFR计算CRC-G0,而CRC-G1、CRC-G2和CRC-G3的计算值将分别取决于对通道2、3和1描绘的8个XFR。如图所示,对第三和第四LTP序列状态使用了类似的方法。
[0179] 在图18a中描绘的时间帧期间,LTP序列状态是1,从而CRC-G0、CRC-G1、CRC-G2和CRC-G3分别是通过在通道0、1、2和3上对于LTP 4接收到的数据来计算的。在图18a和25中示出对于每个XFR组的CRC-G0、CRC-G1、CRC-G2和CRC-G3值的、对LTP的示例性计算,并且分别是428、556、208和804。这些每个XFR组的CRC值被存储在寄存器CRC-G0、CRC-G1、CRC-G2以及CRC-G3中。
[0180] 继续图22b中的流程图2200b,在框2218中,将重传请求(RetryReq LTP1812)从接收机返回至发射机,从而经由NxtRxLTP指针1810的当前值来标识坏的LTP。在一个实施例中,发送连续的RetryReq LTP对,而在另一实施例中,发送单个的RetrReq LTP。在该示例中,NxtRxLTP指针值指向重放缓冲器槽4,槽4存储LTP 4(坏的LTP)的数据。在图22c的流程图2200c中示出在重放模式下响应于接收到RetryReq LTP而发起的发射机侧操作的细节。
[0181] 同样,当在框2216中检测到坏的LTP之后,在框2220中,将LTP接收模式设置成“LTP抛弃”,从而导致接收到的LTP(包括坏的LTP)被抛弃(丢弃)。在接收机状态图2350中,LTP抛弃模式被描绘为LTA.RxTossing状态。虽然接收机在LTP抛弃模式下操作,但是LTP被接收,每通道的CRC被计算且寄存器被更新,执行LTP CRC错误校验以检测连续的LTP CRC错误,并且丢弃LTP。以环路方式执行这些操作,以在框2222中接收LTP开始。如之前所述,执行框2206和2208的操作,随后在决策框2224中作出接收到的LTP是否具有CRC错误(Tx CRC和Rx CRC失配)的判定。虽然接收机在LTP抛弃模式下操作,但该逻辑配置成校验连续的LTP CRC错误的出现。例如,如果在进入LTP抛弃模式之后第一个接收到的LTP具有错误,则已经发生了连续的错误。通过决策框2226描绘检测到连续的错误的确定,如果对决策框2224的回答为“是”,则该逻辑继续至决策框2226。此外,在框2225中递增总的LTP CRC错误计数。(还应注意,无论出于正常模式还是抛弃模式,都响应于检测到每一个LTC CRC错误来递增总的LTP CRC错误计数。)
[0182] CRC是配置成检测所传输数据单元(诸如,分组、帧等)中的错误的数据完整性校验。CRC的数学公式化被选择成使得CRC将检测位传输错误,并且还利用数字数据的二进制性质,从而使得能够迅速对二进制量计算CRC。然而,CRC不是100%失效保护的。当位错误的数量等于或超过CRC的汉明距离(Hamming distance)时,CRC校验可能无法检测错误。在网络结构中使用的CRC的汉明距离典型地是4,这意味着开启错误将不被检测到的可能性(极其低的概率)需要至少4个位错误。未检测到的链路错误导致称为“假分组接受”的情况,这意味着具有错误的分组(虚假地)通过了CRC校验,从而被接受以用于进一步处理。这些未检测到的错误导致分组无记载数据损坏。
[0183] LTP的尺寸大约是1000位。在给定的平均位错误率(BER)下,与错误跨多个LTP随时间分布情况下的均匀的错误模式相比,如果错误在单个链路传送分组内猝发地(4个或更多个)被关联并出现,则未命中的检测的概率更高。
[0184] 网络结构链路设计成提供非常低但非零的BER。减小链路功率的期望提供允许更高的BER的动机,当减小功率时,BER趋向于增加。随着BER提高,未命中的错误检测的概率升高。在某个时刻,该概率变得不可接受地高。跨结构内的许多链路的BER是不均匀的。链路典型地由多个通道组成,并且BER跨给定的链路内的多个通道上可广泛地变化。在常规方法下,当结构管理软件检测到以某个阈值BER运行的链路时,迫使该结构管理软件将该链路从结构中去除以避免不可接受地高的数据损坏概率。这是在不知晓链路内的错误分布的情况下完成的,并强制使用保守性的更小的BER阈值,该更小的BER阈值假定错误是相关的。此外,链路的BER可能随时间漂移和/或降级,并变得不可接受地高。结构管理器不能总是实时地连续监测所有的链路;结果,检测到链路正在以过高的BER操作可能花费一些时间。在该时间期间,该结构可能暴露于数据损坏的可能性。
[0185] 对紧密间隔的位错误的一种校验是通过使用决策框2224中的LTP CRC错误校验和决策框2226中的连续的LTP CRC错误校验。虽然CRC可用于标识检测到至少一个错误,但是它们不标识存在多少错误。然而,连续的LTP CRC错误指示至少两个错误存在于连续的LTP中。在一个实施例中,响应于检测到连续的LTP CRC错误,在框2228中,将一对RetrainReq LTP(重新训练请求LTP)发送至发射机,从而导致流程图逻辑退出以重新训练该链路,如由退出框2232和发射机状态机2300中的RcvRetrainReq(接收重新训练请求)所描绘。在一个实施例中,该重新训练是轻量的重新训练,它不如在初始化或重新初始化链路时采用的链路(重新)训练操作复杂。在训练或重新初始化期间,该链路的正常活跃传送状态是离线的,这意味着正常的数据传送操作是暂时不可用的,直到在完成链路训练或链路重新初始化之后该链路返回至其正常活跃传送状态为止。此外,接收机设置一些内部指标以指示它在框2230中发送了RetrainReq LTP,并且在框2231中重置链路连续错误定时器,链路连续错误定时器的使用的进一步细节在图22e中示出,并且在下文中讨论。在完成训练序列之后,该逻辑返回至流程图2200b的框2218和2220,其中将(多个)重试请求LTP往回发送到发送侧,并且在接收机处重新进入LTP抛弃模式。
[0186] 响应于接收到重试标记LTP,退出LTP抛弃模式循环,相应地,如果接收到的LTP不具有CRC错误,则该逻辑继续至决策框2234,在决策框2234中,作出在LTP抛弃模式下每一个接收到的好的LTP是否是重试标记的判定。在接收到重传请求之前,发射机将继续按顺序传输LTP,并且这些LTP将与已经在传输中的LTP(如果存在)一起被接收。如图22c的流程图2200c中的框2238、2240和2242中所示,在接收到重传请求(RetryReq LTP)之后,发射机将向外发送重试标记,随后是在重放缓冲器1806中的LTP的重传,此重传从由经由重传请求而返回的NxtRxLTP指针值指示的槽中的LTP开始。在一个实施例中,发送单个重试标记,而在另一实施例中,连续地发送一对重试标记。在一个实施例中,通过发送这对重试标记的顺序来标识这对重试标记(例如RetryMrkr0(重试标记0),RetryMrkrl(重试标记1))。在一个实施例中,重试标记中的每一个都包括空LTP。在图18b中示出由RetryMrkrLTP(重试标记LTP)
1816描绘的单个重试标记的使用的示例。将理解,当发送一对重试标记时,第二重试标记(RetryMrkr1)将紧跟着RetryMrkrLTP 1816(RetryMrkr0)。
[0187] 在图18a的示例中,在接收到传输请求之前继续传输LTP导致按顺序接收LTP 5和6(在传输中)、LTP 7(接下来传输)以及LTP 0和1。由于LTP5、6、7、0和1中的每一个都不是重试标记,因此对每一个而言,对决策框2234的回答都是“否”,并且逻辑继续以在框2236中丢弃LTP,随后,往回循环至框2222以接收下一LTP,同时保持在LTP抛弃模式中。对后续接收到的LTP的处理以相同的方式继续,直到在决策框2234中接收并检测到重试标记LTP为止。
[0188] 图18b描绘了时间帧,在该时间帧处,RetryMrkrLTP 1816已经被传输、由接收端口1802接收并处理,LTP 4已经被重传,并且由接收端口1802接收,随后是重传的LTP 5和6(在传输中),并且LTP 7将被重传。LTP 4、5和6中的每一个都包括“重放的”LTP。还如图18b中所示,槽0和1中的重放缓冲器数据(图18a中示出)被LTP 0和1结合它们的原始传输的对应的微片数据覆写,所述原始的传输在接收到RetryReqLTP 1812以及传输RetryMrkrLTP1816之前发生。
[0189] 和之前一样,对于每一个可靠的LTP传输,将LTP的数据复制到重放缓冲器1806中由NxtTxLTP指针1808标识的槽中,对于每一个可靠的LTP,递增该指针。因此,将结合发送LTP7、0和1(注意,NxtTxLTP指针从7往回环绕到0)中的每一个来递增NxtTxLTP指针1808。LTP 1正在被传输(或不久前被传输)时,发送端口1800已经接收到RetryReqLTP 1812。作为响应,发送端口1800返回RetryMrkrLTP 1816(或一对重试标记,其包括RetryMrkr0LTP和随后的RetryMrkr1LTP)。由于RetryMrkrLTP 1816是空LTP,引起其数据内容不被复制至重放缓冲器1806,NxtTxLTP指针1808也不前进。反之,无论是可靠的LTP还是空LTP,对于每一个传输的LTP,使Tx LTP序列状态前进。
[0190] 返回至决策框2234,在接收到RetryMrkrLTP 1816之后,它被标识为重试标记,并且该流程图逻辑继续至图22d中的流程图2200d。如在框2252中所示,处理重试标记,并且接收机设置倒计数值以准备好接收即将到来的重放的坏LTP。在一个实施例中,采用相对于重试标记的坏LTP重放偏移,以便指示该坏LTP的重传将在重试标记之后的k个LTP处开始。在采用一对重试标记的一个实施例中,坏LTP重放偏移比第二重试标记小一。同样如框2240中所描绘,鉴于坏的LTP重放偏移,接收机基于LTP偏移来发起坏LTP重放倒计数。使用此来检测框2256中的坏LTP的重放。此外,在框2254中,接收机返回往返标记LTP(或一对往返标记LTP),并且在框2254中,将LTP接收模式(接收状态)返回至正常,并且流程图逻辑返回至框2204以接收下一分组。这通过接收机状态图2350中的Send RndTripMrkr Pair(发送往返标记对)状态和返回至LinkTransferActive.normal状态来描绘。如下文中参考图18c所描述,响应于(多个)重试标记LTP而返回(多个)往返标记LTP,以便于确定是否可以覆写重放缓冲器LTP。
[0191] 在传输RetryMrkrLTP 1816(或RetryMrkr0LTP和RetryMrkr1LTP)之后,发起LTP的重放(重传),以RetryReqLTP 1812中返回的NxtRxLTP指针所标识的坏LTP(在本示例中是LTP 4)的重传开始。当发射机处于重放模式时,所传输的数据将包括存储在重放缓冲器1806中的LTP的重传。重传的LTP基于重传的LTP在重放缓冲器的FIFO中的连续地从发送端口1800向外发送这些重传的LTP,并且以由NxtRxLTP指针指向的LTP开始。
[0192] 对于每一个重传的LTP,所传输的数据与原始地传输LTP时相同。除了坏LTP重放倒计数(以及与接收重放的坏LTP相关联的操作)之外,接收侧逻辑不知道接收到的LTP数据对应于原始传输的LTP还是重传的LTP。相应地,执行框2204、2206和2208以及决策框2210的操作,导致每通道CRC计算、对接收到的LTP数据的Rx LTP CRC的计算、以及将Rx LTP CRC与Tx LTP CRC进行比较。如果如由决策框2210中的“否”结果所指示存在错误,则该逻辑返回至框2214,其中,错误的重传的LTP发起新的重放序列,在该新重放序列下将再次重传该坏的LTP。这将基本上重复以上结合来自重放缓冲器1806的坏LTP 4以及随后的LTP的重传所讨论的操作。
[0193] 假定重传的坏LTP 4是好的,则该逻辑流至框2258。在该框中,将先前存储在寄存器CRC-G0、CRC-G1、CRC-G2和CRC-G3中的每通道的CRC值与对于重传的LTP 4的每一个通道上接收到的数据计算的每通道的CRC值进行比较,取决于操作通道的数量,在每通道或每个XFR组的基础上进行该比较(注意,当传送组的数量相同时,每通道与每个XFR组的比较是等价的,使得总是可以执行每个XFR组的比较)。根据以上描述,对于四通道链路,在每个XFR组的基础上来比较每通道的CRC。
[0194] 结合每一个被传输的LTP的Tx LTP和Rx LTP序列状态的持续递增,当重传LTP 4时,LTP序列状态是3,相比之下,当最初传输LTP时,LTP序列状态为1。作为结果,跨每一个通道传输的XFR组已经改变。在图25中示出通道-XFR组的重新映射,并且通过比较在图18a和18b中的每一个通道上发送的XFR也可以看出。如上文所讨论,当最初传输LTP 4时,LTP序列状态是1,而当重传LTP 4时(在图25中由4R描绘),LTP序列状态是3。
[0195] 返回至图18b,为通道0、1、2和3计算重传的LTP 4的每通道的CRC,随后,在流程图2200d的框2258中,执行每一个XFR组的CRC比较,并且如果适用,在框2260中,通过标识失配的每通道或每个XFR组的CRC来标识坏的通道。在图18a和18b的示例中,每个XFR组的CRC比较的结果表明CRC-G0、CRC-G1和CRC-G3的CRC匹配,而CRC-G1的CRC不匹配。这指示通道2是错误的,因为通道2对应于在最初传输错误的LTP4时对其计算该错误的LTP4的CRC-G1值的XFR组,注意由于在重传的LTP4中未检测到LTP CRC错误,因此在对于重放的LTP 4的通道2上传输的数据中也(假定)没有错误。在框2261中,递增经标识的坏通道的错误计数。
[0196] 考虑通道间歇性出错的场景。如上文所讨论,决策框2226以及相关联的逻辑块的连续的LTP CRC错误校验是用于检测在该链路上传输的数据中的紧密间隔的错误的一种机制。虽然该机制检测非常紧密间隔的错误(要求在连续LTP中的错误),但是它无法标识哪个通道是出错的,也无法标识连续的错误在各个通道上多频繁地发生。
[0197] 根据第二BER检查机制的实施例,监测每通道的错误频率以判定给定的通道的错误频率(BER)是否超过每通道的BER阈值。在一个实施例中,这通过使用每通道的连续错误计数器和定时器(结合流程图2200d和2200e中描绘的并以并行方式执行的其他操作和逻辑)来完成。
[0198] 在决策框2262中,作出接收机状态是否正在离开由该接收机发起的链路重新训练状态的判定。如由流程图2200b中的逻辑所示且如上所述,对连续的LTP CRC错误的检测将导致由接收机检测到错误发起的链路重新训练。反之,虽然单个LTP CRC错误将类似地发起重试请求、重试标记接收序列,但它将不会导致链路重新训练的发起。如果重放的LTP是好的,并且接收状态不是正在离开链路重新训练(即,仅已检测到单个LTP CRC错误),则对决策框2262的回答是“否”,这导致该逻辑流至框2264,在框2264中,如同LTP是原始被发送的LTP那样来处理该LTP。随后,该逻辑返回至流程图2200a,以便如最初发送LTP那样(从接收机的角度看)来处理后续经重放的LTP。
[0199] 现在假定由接收机检测到两个连续的LTP CRC错误,导致由接收机发起链路重新训练,并且对决策框2262的回答为“是”,从而导致该逻辑继续至框2266。在该框中,递增在框2260中确定的坏通道的连续错误计数器。在决策框2268中,作出该通道的连续错误计数是否已达到阈值的判定。一般而言,该阈值将是整数,诸如1、2,等等。在一个实施例中,该阈值是2,使得在一个定时器周期内,一个通道上的2个连续错误导致该通道BER阈值检测进行。作为响应,在一个实施例中,该逻辑继续至退出框2270,在退出框2270中,中重新初始化该链路,并且去除被检测为坏的通道。作为结果,链路的活跃通道的数量可减少一个通道,诸如,四通道链路被降级为三个活跃通道。
[0200] 如果每通道的连续错误计数未达到阈值,则对决策框2268的回答为“否”,并且该逻辑继续至框2204以接收下一LTP,并且接收机以其正常的接收状态操作,且发射机仍然以重放模式操作。
[0201] 如上文所讨论,在一个实施例中,使用定时器方案来检测每通道的连续错误的频率。根据以上描述,响应于检测到连续的坏LTP,该逻辑继续至框2231,并且如图22e的流程图2200e所示,发起用于实现定时器方案的一组并行的操作。在框2272,如果适用,则启动(第一次)或重新启动(重置)定时器。如由决策框2274以及回到其自身的循环所描绘,周期性地校验定时器以确定它是否已期满,或者任选地,可将定时器逻辑配置成生成中断或指示它已期满的其他指标。如框2276中所描绘,在定时器期满时,递减每一个通道的坏连续错误计时器。在一个实施例中,最小的坏错误计数是0,因此对于已经是0的通道错误计数,不递减其计数。
[0202] 并行过程的组合以如下方式检测各个通道上的错误已经超过频率阈值(例如,标识呈现紧密间距的错误的通道)。每当流程图操作导致该逻辑流过框2258、2260并且决策框2264的结果为“是”时,将递增坏通道的连续错误计数器。同时,考虑并行的定时器操作,每一次定时器期满而不被重启指示,该定时器的时间周期已经过去且没有每通道的错误,因此将每一个通道的每通道连续错误计数递减一(直到最小值零)。在一个实施例中,出现“两连击(two strikes)”使得该通道出局,这对应于在该定时器周期内具有两个连续错误的通道。
[0203] 除了单个定时器之外,可并行于不同的时间周期以及不同的相关联计数阈值来使用多个定时器。例如,这将使得能够观察到每通道的操作的更长期视图,同时也便于更短的每通道的BER阈值检测。还可改变该时间周期中要求的连续错误数量的阈值。
[0204] 在流程图2200a-e中描绘的实施例下,链路的重新初始化和坏通道的去除源自检测到呈现紧密间隔的错误的通道。然而,这不意味着是限制性的,因为可结合在其他条件下链路的重新初始化和/或重新训练链路来去除通道,所述其他条件诸如,当在检测到连续的LTP CRC错误之后、经由退出框2232退出时。例如,当链路被重新初始化时,校验多个每通道错误计数器以查明错误计数是否已经超过某个阈值。如果已经超过阈值,则那个通道被标记为是坏的,并且当链路返回至活跃操作时,那个通道不是活跃的。
[0205] 利用隐式的ACK的可靠的LTP传输的另一方面是用于确保在已经无错误地接收到隐式的确认之前不覆写重放缓冲器中的LTP的机制。在一个实施例中,这通过使用重试请求和往返标记来促进。如上文所讨论,在一些实施例中,重放缓冲器具有固定的尺寸,或者可经配置以设置成使用多个固定尺寸中的一个尺寸来操作。此外,一对链路对等方可采用不同尺寸的重放缓冲器。
[0206] 在使用固定尺寸的重放缓冲器的情况下,由于对各种处理等待时间的附加的考量,重放缓冲器的尺寸一般将被确定为用于保持多个LTP,这多个LTP的数量大于可在该链路的往返横越期间传送的LTP的数量。这是图18a和18b中示出的情况,其中重放缓冲器具有8个槽,并且可能正并发地在该链路以及相反方向上的链路路径上横越往返的LTP的数量为大约6或7个LTP。作为结果,如果在接收机处检测到错误,则在重放缓冲器中的坏LTP的副本被覆写之前,发射机将接收重试请求。
[0207] 然而,出于实际原因,固定尺寸的重放缓冲器的尺寸未被设定成处理所有可能的链路长度。链路的长度越长,在接收到重试请求之前可从重放缓冲器向外发送的LTP的数量就越大。在某种情况下,链路长度将使得单独使用重试请求方案将无法确保在接收到对于坏LTP的重试请求之前在重放缓冲器中的那个坏LTP的副本不被覆写。
[0208] 这是往返标记的使用适用的情况。返回流程图2200c的决策框2244,作出所有LTP的重放是否已完成而没有接收到往返标记的判定。在图18c中所示的配置下,在重放缓冲器1806中同样存在8个FIFO槽,但链路长度使得5个LTP可以同一时刻“在线上”,这意味着至少
10个LTP可能在往返途中和/或正在接收机处被处理。作为结果,在接收到对于LTP中的任一个的重试请求之前,可重传重放缓冲器中的所有LTP副本,从而导致潜在地坏的LTP的副本被覆写。这将防止重传坏的LTP,从而使重放缓冲器的目的无效。
[0209] 为了适应该场景,发射机包括用于如决策框2244中所示的、在接收到往返标记之前检测是否已到达重放LTP的末尾的逻辑。本质上,这确定重放缓冲器的深度是小于还是大于往返持续时间。通过重放指针往回环绕到第一个经重放的LTP的开始(FIFO槽)来检测到达重返LTP的末尾。
[0210] 在图18c中,第一个经重放的LTP槽是槽4,并且已连续地重传了槽4、5、6、7、0、1、2和3中的LTP,从而在接收到一对往返标记1822a和1822b中的第一往返标记之前,使重放LTP指针返回至槽4。这示出在接收到往返标记之前到达重放LTP的末尾,从而指示往返持续时间大于重放缓冲器的深度的示例。这导致对决策框2244的回答为“是”,并且逻辑继续至框2245a,在框2245a中,发射机的空计数器(Nullcount)n被重置为整数k。如由框2246a以及决策框2248(决策框2248的“否”结果往回循环到框2246a)所描绘,随后,发射机继续将一个或多个空LTP发送至接收机,直到接收到往返标记或重试请求为止。此外,对于每一个传输的空LTP,将空计数n递增1。如上问所讨论,空LTP不是可靠的LTP,因此不将所所传输的LTP的副本添加至重放缓冲器。作为结果,将保证导致重试请求的坏LTP的副本在接收到重试请求之前不被覆写。
[0211] 一旦在决策框2248a中确定了接收到往返标记,则该逻辑就继续至框2250,在框2250中,使发射机返回至正常传送模式——也如同由返回至图23a的发射机状态机2300中的LinkTransferActive.normal所描述,同时对于通过重放缓冲器的每一个循环使用空计数n值以确定一旦到达重放缓冲器的末尾将要发送多少空LTP。例如,比如说空计数n达到4。
作为结果,每当重放缓冲器FIFO槽到达槽7,发射机就将向外发送4个空LTP。在一个实施例下,重试请求和往返标记具有最高的优先级并且永不被抢占,因此使用传输由空计数n定义的多个空LTP将确保坏在接收到对于坏LTP的重试请求之前将不覆写那个坏LTP的副本。作为选项,可在框2245中将空计数n重置为值k>0以提供安全的裕度,使得将在通过重放缓冲器的每一个循环的结束处传输k个额外的空LTP。空计数方案的固有优势在于,它可被实现为支持基本任何长度的链路(认识到物理链路的长度存在实际的限制,并且制造和/或实现具有超过该限制的长度的链路既不可能也不实际)。
[0212] 返回至决策框2224,如果在到达第一FIFO槽之前已经接收到往返标记,则对决策框2244的回答为“否”,并且逻辑继续至框2245b,在框2245b中,将空计数n重置为整数m。如由框2246b和决策框2249(决策框2249的“否”结果往回循环到框2246b)所描绘,随后,发射机继续进行以继续将LTP重放至接收机,直到缓冲器指针已经环绕并返回至其起始槽或空计数n已经到达零,其中空计数倒计数以m开始,并且对于每一个重传的可靠的LTP,使孔计数倒计数递减1。响应于决策框2249的“是”结果,该逻辑退出其空计数倒计数循环,并且继续至框2250。
[0213] 对于其中缓冲器深度大于往返持续时间但在往返持续时间的m个LTP传送循环之内的配置,使用空计数倒计数导致大约m个LTP传送循环的安全裕度。例如,假定缓冲器深度是32个槽且往返持续时间等于30个LTP传送循环,并且m=5。在这种情况下,当该逻辑退出倒计数循环时,m将是3。这意味着,每当重放缓冲器往回环绕到其开始(槽0)时,将在覆写槽0中的LTP之前传输3个额外的空LTP。由于缓冲器深度是32个槽,因此被覆写的重放缓冲器槽之间的LTP循环的数量是35,或比往返持续时间大5。
[0214] 响应于检测到坏的通道,能以降级的状态、利用减少数量的活跃通道来操作链路。此外,该链路的降级的状态可级联,使得链路可按顺序操作,诸如,以四个活跃通道开始,检测到第一个坏通道并去除该坏通道,从而导致利用三个活跃通道进行的链路操作,检测到第二个坏通道并去除该第二个坏通道,从而导致利用两个活跃通道进行的链路操作。该级联能以检测到第三个坏通道继续进行,从而导致在单个余下的好通道上的链路操作。还应注意,能以不对称的配置操作链路,使得一个传输方向可使用与另一传输方向不同数量的活跃通道。
[0215] 图26描绘根据一个实施例的用于利用三个活跃通道来操作链路的XFR组。在该实例中,存在三个XFR组G0、G1和G2,并且对应的CRC是CRC-G0、CRC-G1以及CRC-G2。由于该LTP序列仅具有单个状态,并且XFR模式被重复而没有通道改变,因此在相同的相应通道上传输相同的XFR组。作为结果,可在每通道的基础上进行每通道的CRC比较,或者以其他方式的每个XFR组的基础不考虑LTP序列状态。在3个通道下,对于每一个通道存在11个32位传送,从而导致在每个通道上对于每个标准检测LTP传输352个位。在一个实施例中,当在三个活跃通道下操作时,使用16位的每通道的CRC。
[0216] 图27描绘根据一个实施例的用于利用两个活跃通道来操作链路的XFR组。由于每个LTP存在33个32位传送,因此在LTP传输流的通道0和1中的每一个通道上传送的位的数量将在512位与544位之间交替。作为结果,使用两个LTP序列状态来实现每个XFR组的每通道的CRC比较方案。此外,在一个实施例中,使用16位的每通道的CRC。
[0217] 图28描绘根据一个实施例的、用于利用单个活跃通道来操作链路的XFR组。由于仅有在其上发送LTP数据的单个通道,因此它是唯一可能出错的通道。作为结果,不需要执行每通道的CRC比较。然而,在其中具有多于单个通道的链路被降级至在单个通道下操作的通道降级场景下,仍可对于该单个的通道计算每通道的CRC计算,因为这可在硬件中、以总是来执行它的方式来实现。在该实例中,简单地忽略每通道的CRC计算。
[0218] 如上所讨论,在本文中公开的实施例中,链路支持可靠的数据传输,而无需使用显式的ACK。虽然当跨链路传输LTP时不会丢失LTP(不考虑诸如电缆被割断的事件),但是LTP可能包含错误。回想一下,隐式的确收方案经由在时间段内在发射机处没有接收到重试请求来实现的,该时间段至少与完成从发射机到接收机并回到发射机的往返路程花费的时间一样长。由于在与被传送的数据不同的通道集合上发送重试请求,因此单个重试请求会具有错误(通过CRC校验来标识)从而被抛弃是可能的。作为结果,接收侧链路接口可能正在尝试通知发射侧链路接口它接收到出错的LTP,但是该通知(由重试请求指示)将被抛弃。这是发送连续的RetryReqLTP对以及其他空LTP对(例如RetryMrkr0,RetryMrkrl)有助于促进隐式的ACK方案的情况。
[0219] 首先,由于这些是空LTP,因此不将它们存储在重放缓冲器中,从而它们不可用于重传。然而,通过发送连续的空LTP对,保证了两个事件中的一者将产生:1)无错地成功接收到两个空LTP中的至少一个或这两个空LTP;或2)如果这两个LTP都具有错误,则这将被检测为连续的LTP错误,从而触发对该链路的重新训练。在(重新)训练期间,通过链路合作方的发射机-接收机对来执行训练序列,从而在将该链路返回至活跃操作之前验证该链路在两个方向上的适当的操作。当重新训练完成时,发送侧当在发送(多个)重试标记之后开始发送新的LTP(或LTP的继续的重放)之前,等待来自接收侧的有保证的重试请求(同时发送空LTP)。发送一对这些空分组的另一益处在于,提高了LTP中的至少一个将是良好的可能性。
[0220] 端口、缓冲器和信用管理器
[0221] 图29示出用于交换机以及用于HFI的端口以及架构层和子层之间的关系。交换机将分组转发至分组端点,并且具有多个物理端口,每一个物理端口都包括入口(接收)端口和出口(发射端口)。进一步参考上文中讨论的图2,这些端口中的每一个都包括物理子层(PHY)(L1),该物理子层与链路传送子层(L1.5)对接,该链路传输子层与链路结构子层(L2)对接。本章节涉及助益在用于HFI和交换机设备两者的架构的链路传送子层与链路结构子层之间移动分组数据的端口的方面。端口的部件是入口和出口缓冲器管理、SC和VL转换机制、路由方法和定义、信用管理和出口端口仲裁。HFI应用建立分组,随后将它们传送至端口,以便在传输到链路传送子层之前进行路由和调度。在相反的方向上,端口将分组传送至接收缓冲器并选择出口端口目的地。
[0222] 该架构采用用于跨结构来控制分组流的基于信用的流控制方案,在该方案下,在多对发射机和接收机端口(也被称为发射机-接收机对等方)之间实现基于信用的流控制策略。分组经由一系列缓冲器而从设备(HFI/交换机)流到设备(交换机/HFI),这在分组横越结构时提供临时的存储。流控制是控制何时可将设备A中的分组转发到设备B中的缓冲器的机制。如下文中详述,在VL的基础上分配并管理缓冲器,其中,每一个VL分配有缓冲器空间单元。基于信用的流控制方案防止VL缓冲器发生缓冲器溢出(overrun),并且也在竞争链路的多个VL之间提供公平。
[0223] 根据控制流的方面,提供用于信用管理的灵活的机制。通过使用允许可靠的递增式信用返回的链路层重试,该架构能够进行信用管理并跟踪发射机的响应性。这助益当通信量在传输中时四处移动信用的灵活性。它还意味着,通过简单地告知发射机当没有信用在给定的VL上是可用的时该发射机是否应当阻止或丢弃分组,对于每一个VL,可容易地启用或禁用流控制。
[0224] 用于基于信用的流控制的灵活的机制定义以下特性:·利用可靠链路传送协议来准许跨许多虚拟通道的高效的递增式信用交换
[0225] ·允许仅由发射机执行对信用分配的管理
[0226] ·允许当通信量正在流动时针对每一个VL对信用的重新配置,而不要求链路是静默的。
[0227] ·如由发射机所配置,能够利用或不利用流控制来操作
[0228] ·允许信用单元的交换以及将由接收机定义的分配,因此允许在不同的硬件设计之间的互操作性
[0229] ·允许信用专用于单个VL,跨一组VL被共享,并且/或者跨所有的VL被共享[0230] 使用对数尺度来递增地交换信用。接收机将正在被返回的信用的数量往回传递至发射机。由于存在确保所有的交换(信用、分组、其他控制消息)可靠地发生的可靠的链路传送机制,该机制是可能的。
[0231] 使用递增式信用交换准许发射机进行所有的信用跟踪。作为结果,可重新配置可用于给定的VL的信用而不影响通信量流,并且也不必协调对接收机的重新配置。这准许此类重新配置发生,而不影响传输中的通信量,也不影响在发射机处排队的通信量。
[0232] 也可针对独立的VL启用或禁用流控制。例如,在一个实施例中,如果针对给定的VL禁用流控制,则如果具有不足够的当前可用的信用,信用管理器将丢弃给定的VL的分组。如果启用流控制,则信用管理器将回压(backpressure)VL,并且在发送分组(的微片)之前,等待足够的信用是可用的。可禁用流控制以避免管理协议的拓扑死锁或提供类似以太网的链路层行为,从而促进将分组损失用作用于标识拥塞的手段的协议(诸如,TCP/IP)。
[0233] 图30示出一对等设备A与B之间的链路的使用的多个方面的示例。设备A包括发射端口3000a和接收端口3004a,发射端口3000a包括信用管理器3002a,接收端口3004a包括初始化块3006a以及多个VL FIFO缓冲器3008a。设备B如由同样编号的元件所描绘类似地经配置,但是具有所附的“b”而非“a”。
[0234] 一般而言,每一个设备端口将包括为缓冲器使用而分配的存储器。用于给定的端口的缓冲器空间的总尺寸可取决于各种因素,这些因素诸如,由端口的主机设备支持的VL的数量以及连接至端口的链路的预期的电缆长度。VL缓冲器的尺寸设定对设计的性能可具有主要的影响。如果缓冲过小,并且不覆盖从发射机到接收机的往返时间(RTT),则可能无法实现最大带宽。如果缓冲器过大,则它对于ASIC面积和功率可能有影响。在一个实施例中,当具有用于整个FP的足够的缓冲器空间时,仅允许将结构分组的微片传输至下一跳。在另一实施例中,如果具有可用于存储分组的部分的一些缓冲器空间,则准许传送对FP的微片的初始传送。在一个实施例中,当设定VL缓冲器的尺寸时,考虑以下因素:1)信道速率;2)电缆长度;3)传播延迟;以及4)最大结构分组长度(最大传输单元或MTU)。在一个实施例中,MTU针对每一个VL是可配置的。可考虑附加的因素,诸如,信用返回延迟和信用返回处理的处理等待时间。
[0235] 图31a、31b和31c示出专用的、共享的两层式以及共享的三层式缓冲器组织。在专用缓冲器组织下,为每一个VL分配存储器的相应部分,注意,不同的VL可分配有存储器的不同部分。在一个实施例中,存储器中用于每一个VL的部分被实现为FIFO。在一个实施例中,这些FIFO被实现为具有头指针和尾指针的圆形FIFO。
[0236] 在共享的两层式缓冲器组织下,以专用方式将缓冲器空间的第一部分分配至VL,而其余的第二部分分配为使得跨多个VL被共享。在图31b中,该第二部分包括跨所有的VL而使用的共享池。然而,这仅是示例性的,可在少于所有的VL的VL之间共享该共享池。例如,给定的VL可用于管理目的,并且采用专用的VL FIFO空间,该专用的VL FIFO空间具有与其他VL不同的尺寸且不在共享第二层缓冲器的VL之间。
[0237] 在3层式共享的缓冲器组织方案下,存储器的第一部分作为专用空间被分配给各自的VL,存储器的第二部分在两个或更多个共享池之间拆分(跨VL的相应的子集共享这些共享池中的每一个),并且第三部分用于跨VL的全部或子集而使用的共享池。在图31c中所示的配置中,层2包括两个共享池,而层2包括跨所有的VL被共享的缓冲器池。共享池的尺寸不必是相同的,而每一个子集中VL的数量可类似地有所不同。
[0238] 在正在进行的链路操作期间,每一个发射机维持缓冲器配置的“视图”,并且填充“邻居”设备中其对等接收机的接收缓冲器处的VL缓冲器和(多个)共享缓冲器空间(如果适用)的等级(可用的空间)。这通过使用以下方式来促进。首先,在链路数据传送操作的开始之前,邻居设备中的对等的发射和接收端口中的每一个都被通知接收端口中的接收缓冲器的初始的接收缓冲器配置和VL配置。在一个实施例中,结构管理器负责指定或标识接收机的缓冲器组织中的一项或多项操作。随后,它可将发射器的信用管理器编程为反映所支持的数据VL的缓冲器组织和数量。在一个实施例中,结构管理器结合链路协商和初始化过程调用LNI来执行该操作。
[0239] 当数据开始跨链路而流动时,在各接收端口处的缓冲器可用性根据以下因素而动态地改变:在每一个接收机处接收到的微片;以及结合将微片转发至下一跳而从那个接收机的缓冲器中被去除的微片。结合这些改变,接收端口将信用ACK发送至其对等发射端口,其中,由发射端口的信用管理器处理信用以更新发射端口的、关于接收端口当前缓冲器配置的视图。由于包括链路往返传送时间和信用处理等待时间的等待时间,在发射端口处的接收端口缓冲器配置的视图将在接收端口处的当前实际的缓冲器配置之后;提供附加的缓冲器空间以将这些等待时间考虑在内。
[0240] 在初始化链路之后且在分组可横越链路之前,使每一个单向链路的相对端上的接收机和发射机对等方就接收机的缓冲器组织和由接收机实现的所期望的信用组织而言是一致的。如上文所讨论,在一个实施例中,由结构管理器将缓冲器组织信息提供给接收机和发射机对等方。在一个实施例中,在接收机处实现信用管理,并且将对应的信用组织信息从接收机发送至其对等的发射机。
[0241] 更详细地,由接收机实现的信用组织涉及使用以下两者:缓冲器分配单元(AU)以及结合返回那个接收机的信用ACK而采用的信用返回ACK单元(CU)。AU是用于接收机处的缓冲器分配的最小块尺寸。信用ACK单元(CU)是通过由接收机返回的每一个信用来表示的接收机AU的数量。在一个实施例中,接收机发送对应的变量vAU和vCU,该vAU和vCU指定接收机正对其对等的发射机使用的AU和CU。在一个实施例中,vAU和vCU变量使用对数尺度,在下文中的表5和表6中示出它们的示例。
[0242] 如图30中所示,接收机3004a和3004b中的每一个都将包括缓冲器分配单元变量(vAU)和信用ACK单元变量(vCU)的信用组织信息传递至相应的发射机3000b和3000a,在发射机3000b和3000a处,它们由信用管理器3002b和3002a接收,如图30中的虚线所示。也向每一个发射机的信用管理器提供定义了由其发射机的对等的接收机实现的缓冲器组织的信息。每个发射机的信用管理器3000跟踪从其对等方的接收端口接收到的当前可用的信用,并且相应地控制至其对等方的分组的流动。随着由接收机3004处理分组,缓冲器空间被释放,并且接收机将信用ACK往回提供至其发射机对等方的信用管理器3002,如由实线所示。基于结构操作需要,集中式结构管理器可作出在运行时操作期间、在各VL之间的信用的相对分配的改变。
[0243] 在初始化信用管理器之后,该信用管理器负责跟踪接收侧上的缓冲器空间的量。在一个实施例中,使用表4中的下列配置寄存器的集合来配置专用和共享的信用的分布。这些寄存器全部都在对等方的分配单元(AU)值的单元内。
[0244]
[0245] 表4
[0246] 专用_限制[VL]配置寄存器用于预留接收机的缓冲器中用于特定VL的专用部分。为了确保多个VL之间的QoS分离,推荐结构管理器为每个活跃VL配置一些专用空间。
[0247] 全局_共享_限制配置寄存器用于共享池类型组织中。它指示在接收机处有多少缓冲器被所有的VL共享。专用限制和全局共享限制的和不能超过总缓冲器空间。此外,如果没有全局共享空间被使用,则此寄存器值被置位为0。
[0248] 共享_限制[VL]配置寄存器指定共享空间中单个VL可消耗的空间量的限制。当这个寄存器被置位为0时,给定VL不具有对共享空间的访问权。结构管理器可将这个寄存器配置成使得防止单个VL消耗过多的共享空间,并因此防止单个VL上的拥塞或猝发使其他VL的共享缓冲器空间饥饿。针对单个VL的限制不会超过全局_共享_限制,然而,所有VL的限制的和可以超过全局_共享_限制。例如,使全局_共享_限制为10且使4个VL中的每一个的共享_限制为5是有效的,在这种情况下,没有单个VL可使用不多于5个共享空间单元。
[0249] 当在发射机处消耗信用时,首先从VL的专用信用池消耗信用。一旦已消耗了给定的VL的所有VL专用的信用,从可用于该给定VL的共享池消耗信用。当单个分组大于剩余专用信用时,该分组可消耗来自专用池和共享池两者的信用。
[0250] 当在发射机处补充信用时,信用首先被补充给共享池。一旦已补充了由给定的VL消耗的所有共享信用,将信用补充给给定VL的专用池。
[0251] 适用于2层式共享缓冲器配置的上述内容可延伸至3层式共享缓冲器配置。在这种情况下,基于以下内容来消耗信用:给定VL,随后是跨包括给定VL的VL子集而使用的共享池,随后是全局共享池。补充按相反的方向进行:全局共享池,随后是跨VL子集而使用的共享池,最后是用于给定VL的专用池。
[0252] 变量中使分组能够跨链路而流动的一个变量是在接收侧上可用的缓冲器空间的量。如上文所讨论,每一个发射机(在一个实施例中,通过其信用管理器)维护其接收机对等方的缓冲器配置和使用的视图,这(部分地)通过使用信用ACK来实现。在一个实施例下,管理每一个VL的信用是信用管理器的责任。当使用虚拟切入(cut-thru)策略时,除非在接收缓冲器中有足够可用的空间使整个分组下沉,否则分组不能竞争仲裁。当使用虫洞(worm-hole)路由时,如果可用的空间>0,则分组竞争仲裁。在混合式方式下,如果接收机具有足够的信用来接收微片的“大块”(“chunk”),则准许在链路上发送微片的“大块”。在该实施例下,大块的尺寸是可配置的,并且当链路活跃时,可动态地重新配置尺寸。
[0253] 当分组赢得仲裁时,从那个单个VL的信用池或从适用于该VL的共享池分配多个信用。当从接收侧接收到信用ACK时,补充信用池。当接收侧从它的缓冲器中去除指定数量的微片时,该信用ACK发生。在信用返回(CrdRet)LF命令微片上或经由在LTP中承载的边带信息来返回该信用ACK。信用ACK中包含的信息包括VL以及经确收的(ACKed)信用的量;如下文中所述,单个信用LF命令微片可包括针对多个VL的信用ACK。设备经由CrdRet LF命令微片来接受信用返回。当选择14b CRC LTP格式时,设备也经由LTP边带信息来接受信用返回。当使用14b CRC LTP格式时,设备应当使用LTP边带机制来返回信用,但是可任选地也使用CrdRet LF命令微片。
[0254] 如图30中所示,并且如上文中所讨论,在链路数据传送操作的开始之前(例如,在LNI过程期间),由邻居来交换缓冲器分配单元变量(vAU)和信用返回ACK单元变量(vCU)。在一个实施例中,以下文中表5和表6中所示的方式来实现这些变量。如表中所描绘,AU和CU两者都使用对数尺度。
[0255]
[0256] 表5
[0257]
[0258] 表6
[0259] 如果链路的两侧上的邻居在LNI期间报告不同的vAU和/或vCU变量,则在一个实施例中,每一个端口的发射机在管理信用时将使用其邻居的AU。此外,每一个发射端口在处理入口信用ACK时将使用其邻居的CU。
[0260] 在图33中示出此情形的示例,图33描绘各自都具有不同的vAU和vCU值的两种不同的设备类型(示出为设备A和设备B)的示例。在这个示例中,以vAU=4以及vCU=1来引导设备A。vAU与设备A的接收缓冲器(Rbuf)的硬件设计一致,设备A的接收缓冲器的硬件设计是针对128B分配单元而设计的。以vAU=3以及vCU=0来引导设备B,其中,vAU与设备B的Rbuf一致,设备B的Rbuf是针对64B分配单元而设计的。在LNI期间,每一个设备都发送其vAU和vCU变量。在接收到邻居的vAU和vCU之后,每一个设备将其自身的发射机编程为:在管理信用时使用邻居的AU值;以及使用邻居的CU值来处理来自邻居的信用返回。同时,每一个设备中的接收机(RX)和信用返回单元使用其自身的原生的AU和CU值。
[0261] 在一个实施例中,使用多位字段和对数标尺来对被返回的信用单元编码。在以下表7中示出对所返回的信用单元(CR)的编码的示例。
[0262]
[0263] 表7
[0264] 无论使用LF边带还是LF命令微片,用于确定信用ACK的数量的算法是相同的。区别在于,当经由LF命令微片返回信用ACK时,暗示了VL。在图32中示出根据一个实施例的、用于递增式信用ACK的LF命令微片格式3200的示例。如图所示,较低的六个字节被分割成十六个3位字段,这些3位字段各自都具有(相对于位0的)偏移,该偏移标识与这些字段相关联的VL(当结合位55处的乘数“i”考虑时)。例如,“i”为0,可采用命令微片格式3200来指定用于VL 
0-15的返回信用,而如果“i”为1,则指定用于VL 16-31的返回信用。使用对数标尺使得这3个位能够编码信用值0、1、2、4、8、32和64。由此,在具有32个VL的系统中,可仅使用16个字节来返回用于所有的VL的信用。
[0265] 表8示出当vAU=3(AU=64)且vCU=0(CU=1)时被返回的信用的示例。被返回的总信用为CR*AU*CU,其中CR是信用的数量,AU是分配单元尺寸,而CU是信用单元值。对于64字节的AU,代码“111”指定4096字节的信用正在被返回。
[0266]
[0267] 表8
[0268] 该架构的基于信用的流控制机制提供了相比常规方式的显著的优势。例如,从结构效率的角度来看,该机制允许在单个的8字节消息中返回用于16个VL的信用。用于每一个VL的信用仅需要3个位,并且可指示将被返回的0个与128个之间的信用交换单元。此外,信用交换单元的尺寸是可配置的。相比之下,诸如无限带宽之类的结构将需要128个字节(16个八字节消息)来交换可比较量的信用。
[0269] 通过由发射机完成信用跟踪,可仅通过调整发射机处的计数器来完成对可用信用的重新指派。发射机也可在信用被返回时将这些信用重新指派给不同的VL。这种灵活性允许响应于应用需求、QoS要求和结构上的工作负载的其他改变来调谐VL的性能。相比之下,利用绝对的信用的常规解决方案不能够在不需要使通信量静默且协调发射机与接收机两者之间的改变的情况下来可靠地到处移动信用。
[0270] VL仲裁
[0271] 每一个出口端口提供用于将不同VL的分组发送到输出链路的仲裁。由结构管理器在初始化期间编程的VL仲裁表包含用于调节这个仲裁过程的一组规则。这些规则调节用于每一个VL的带宽的量,并且也定义多个VL之间的抢占优先级。
[0272] 由于VL优先级和调度与发射机有关,因此架构的不同实现可为该特征提供显著不同的架构而对互操作性没有任何影响。例如,附加于本文中公开的实施例,设想了可定义更强大且更灵活的机制,该机制准许用于VL使用的更佳的控制以及改善的调度。
[0273] 该架构支持诸如链路等级重试和抢占之类的特征。这些特征可能导致分组流中的“冒泡”(分组破碎)。如果具有与当前VL相关联的分组冒泡(例如,由于先前的抢占、链路重放等),并且没有为被允许抢占当前VL的VL排队的其他分组,则可将空闲(idle)而非VL分组数据插入到流中。在设备的出口端口处,不中断正在流动的VL,除非已被指定为抢占式VL的VL具有排对的分组。
[0274] 图34示出支持抢占的VL仲裁机制3400的一个实施例。该机制包括VL仲裁表3402、抢占配置寄存器3404、抢占矩阵3404、用于远程设备3406的每VL的信用、每VL的出口FIFO 3408以及发射分组仲裁逻辑3410。VL仲裁表3402包括低优先级表3412、高优先级表3414、抢占表3416、高优先级限制块3418以及抢占限制块3420。
[0275] 在一个实施例中,三级式仲裁方案用于数据VL。抢占式VL采用其他抢占式VL之间的加权的公平的轮循,并且具有对两个其余的优先级等级的优先权。这些其余的VL占据最低等级优先级的优先权,并且定义如下:对于其余的VL,使用在加权的公平方案的顶部上分层的双级调度来采用两级式方案。此外,该方案提供确保低优先级VL的向前进展的方法。在一个实施例中,加权、优先级排定、最小向前进展带宽是可由结构管理器编程的。
[0276] 由VL仲裁表3402控制VL仲裁。在所示实施例中,该表由五个成分组成:抢占表3416、高优先级表3414、低优先级表3412、抢占限制块3420以及高优先级限制块3418。抢占表3416、高优先级表3414和低优先级表3412中的每一个都包括VL/权重对的列表。在一个实施例中,抢占列表具有最小为1且最大为32的长度,高优先级列表具有最小为1且最大为128的长度,而低优先级列表具有最小等于所支持的数据VL的数量且最大为128的长度。最高优先级表和最低优先级表列表允许为不同长度的。每一个列表条目都包含VL号(从0值31的值)以及加权值(值0-255),从而指示当在仲裁循环中轮到VL时可从那个VL传输的64字节单元的数量。分组头部中的长度字段用于确定分组中的单元的数量。在一个实施例中,将该计算维持为4字节递增,而其他实施例可采用其他粒度,诸如,8字节和16字节。权重0指示:应当跳过该条目。
[0277] 可在抢占表列表、高优先级表列表和/或低优先级表列表以及两个列表或全部三个列表中列出相同的数据VL多次。应当在这些表中的至少一个表中列出经配置的数据VL。例如,在一个实施例中,低优先级表3412尺寸设定为使得每一个数据VL可具有至少一个条目。如果没有在任何列表中列出经配置的数据VL,则可立即丢弃该数据VL的分组,当仲裁器没有分组要发送时可发送该数据VL的分组,或者可从不发送该数据VL的分组。
[0278] 抢占限制块3420和高优先级限制块3418指示在不具有发送高优先级或低优先级分组的机会的情况下可分别被传输的抢占式分组或高优先级分组的数量。在一个实施例中,字节的数量为限制值(存储在限制字段中的值)乘以多倍的字节,诸如,乘以16字节、32字节、64字节,等等。在一个实施例中,以上文中针对权重所描述的类似的方式来进行计数(例如,对于4字节递增进行计算,并且如果当前的字节计数还未超过抢占限制/高优先级值限制,则可发送抢占式/高优先级分组)。在一个实施例中,每一个限制字段的尺寸为14位,然而,可使用其他尺寸。在采用14位字段的实施例下,最大值16383指示:字节限制是无界(unbounded)的。(注意,对于无界的字节限制,不会由该仲裁方案保证较低优先级分组的向前进展)。在一个实施例中,抢占式/高优先级限值0指示,在分别给予高优先级表/低优先级表机会之前,仅可发送来自抢占表/高优先级表的单个分组。
[0279] 在一个实施例中,当端口是活跃的时,可修改VL仲裁表3402a。此外,此类修改将不会导致传输中的任何分组的破碎。然而,在此改变期间,不保证仲裁规则。
[0280] 抢占矩阵3404支持灵活的控制机制,该灵活的控制机制用于提供关于哪些VL可抢先于其他VL的规则。在一个实施例中,VL 15是为结构管理预留的,并且不能由另一VL抢占。在一个实施例中,该矩阵为(N+1)xN结构,该结构支持多达N个数据VL与VL 15抢占乘以多达N个数据VL。任选地,如果没有预定义的不能被抢占的VL,则可使用N x N矩阵。优选地,给定的实现应当基于该实现支持的最大数量的数据VL来设定抢占矩阵的尺寸。为了控制哪些VL可抢占,对于每一行,断言一个或多个位(“1”)。图35示出用于具有4个数据VL的示例设备的
5x4抢占矩阵3500。
[0281] 忽略抢占矩阵中用于VL抢占自身的条目。对于抢占矩阵3500,抢占规则如下:
[0282] ·VL 3可抢先于VL2、VL1和VL0
[0283] ·VL 2可抢先于VL1、VL0
[0284] ·VL 1可抢先于VL2和VL0
[0285] 在每一个优先级表内,使用加权的公平仲裁,每一个表中的条目的顺序指定VL调度的顺序,并且加权值指定分配给那个条目的带宽的量。仲裁是基于循环的,其中,有序地处理表中的每一个条目。
[0286] 除了“当前”权重以及当存在优先级等级之间的转变时,没有用于优先级表中的每一个表内的条目的其余权重的存储。这随后创建三组其余的权重和VL保存值:抢占当前权重/VL、高当前权重/VL以及低当前权重/VL。如果存在优先级等级之间的转变,则挂起并保存当前值,完成至新优先级等级的转变,并且在仲裁循环之前加载新的当前权重/VL值。当完成了往回至原始的优先级等级的转变时,可重新加载所保存的当前权重和VL,并且仲裁在其停止处继续。
[0287] 为这三个表中的每一个表维护分开的指针和可用的权重计数表。这些指针标识表中的当前条目,而可用的权重计数指示当前条目具有的、可用于数据分组传输的权重的量。当表是活跃的时,检查表中的当前条目。如果以下条件中的全部都为真,则将会将对应于该条目的分组发送到输出端口以用于传输,并且将从当前条目的可用的权重计数中扣除分组尺寸(按4字节递增):
[0288] 1.列表条目的可用的权重为正,并且
[0289] 2.存在可用于条目的VL的分组,以及
[0290] 3.缓冲器信用可用于该分组
[0291] 注意,如果在新分组的开始处的可用的权重为正,则即使分组大于可用的权重,也符合上述条件1。
[0292] 当这些条件中的任一项不为真,则检查表中的下一条目。将当前指针移动到表中的下一条目,将可用的权重计数设置为新条目的加权值,并且重复以上测试。重复此,直到找到可发送到端口以进行传输的分组为止。如果校验了整个表,并且没有找到符合上述准则的条目,则下一较低优先级的表变成活跃的。
[0293] 服务质量(QoS)
[0294] 该架构支持提供众多能力的QoS特征,这些能力包括:
[0295] ·作业分离/资源分配
[0296] ·服务分离/资源分配
[0297] ·给定作业内的应用通信量分离
[0298] ·协议(例如,请求/响应)死锁避免
[0299] ·结构死锁避免
[0300] ·通信量优先级排定和带宽分配
[0301] ·通过允许通信量抢占而实现的等待时间抖动优化
[0302] 该架构经由虚拟结构(v结构)、通信量类别(TC)、服务等级(SL)、服务信道(SC)和虚拟通道(VL)来提供非常灵活的QoS能力。在QoS的核心处是用于区分结构内的分组的SC机制。在一个实施例中,为了支持各种各样的结构拓扑和配置,由结构管理器来管理SC指派,并且给定分组的SC可在该给定的分组横越结构时改变,使得可避免死锁。
[0303] 应用和系统管理员(sysadmin)操作围绕v结构居中。V结构是结构端口集与一个或多个应用协议的交叉点。对于每一个v结构,由系统管理员建立一组QoS和安全策略。给定的v结构与QoS的通信量类别以及用于安全性的分区相关联。
[0304] 通信量类别表示给定的传输层或应用将使用的一组服务等级。一些传输层可使用多个QoS等级以避免死锁(诸如,将请求通信量与响应通信量分开),而其他传输层可利用多个QoS等级来将高优先级控制通信量与较低优先级的数据通信量分开。较简单的传输层可简单地将通信量类别与单个的SL相关联。在一个实施例中,该架构支持多达32个通信量类别,但是4至8个是可能性更大的典型的配置。
[0305] 通过服务等级的端对端概念来实现通信量类别。在一个实施例中,通信量类别可跨越多个服务等级,但是服务等级可指派给仅一个通信量类别。在一个实施例中,支持多达32个服务等级。服务等级通过对流过结构的分组排定优先级来起作用。服务等级是对于架构的层4协议和应用可见的最低层的QoS概念。
[0306] 位于下方的服务等级是服务信道(SC),SC区分当分组经过结构时的不同的服务等级的分组。SC是包含在结构分组中的仅有的QoS标识符,因此允许比其他网络更密集的分组格式。在一些分组拓扑中,服务等级可跨越多个服务信道,但是服务信道可指派给仅一个服务等级。在一个实施例中,该架构支持32个SC。在一个实施例中,SC中的一个或多个专用于带内结构管理。
[0307] 在一个实施例中,结构管理器配置每一个端点中的SL至SC表,该SL至SC表提供从每一个服务等级至单个的SC的映射。一方面,SL是QoS等级的规范化的ID,使得每一个QoS等级在结构范围内恰具有一个SL值。SL至SC表的目的在于对传输层隐藏路由拓扑要花费多少SC以及对于那个路由确切的指派和有效的启动SC是什么的细节。在更复杂的配置中,将用于给定的QoS等级的有效的启动SC可能甚至针对每一个发送机而变化,但是所有的发送机仍可具有该QoS等级的相同的规范化的ID。一些API(诸如,开放结构和PSM)可显式地要求SL。
[0308] 一些接收机可能需要标识在什么QoS等级上接收到给定分组。对于此类接收机,也在每一个端点中配置SC至SL表。该表提供规范化变换,并且从使用多个SC的路由算法中去除任何复杂性。接收机可完全忽略接收到的QoS等级,可将它向上传到API(诸如,开放结构),可验证它(对于一些SLA验证,等等)或甚至可进行更精细的处理(诸如,使用QoS等级来有助于选择网关中的第E个优先级等级)。一些接收机可使用接收到的分组中的QoS等级来生成适当的响应。例如,简单的服务可往回模仿QoS等级以作为响应(并且经过上述发送侧处理以确保用于响应的合适的启动SC)。其他接收机可将响应分组置于相同的通信量类中的不同的QoS等级上。在任何情况下,使用响应分组在其上被接收到的相同的SC来简单地发送该响应分组不是有效的,因为这可能导致一些路由算法和拓扑的问题。因此,规范化的映射消除那个问题。
[0309] 图44示出在具有信用循环避免的拓扑中的TC、SL和SC使用的示例。在该示例中,两个HFI端点经由穿过结构的8交换机跳路由被连接。使用两个TC,一个用于要求两个SL(请求SL和响应SL:SL0、SL1)的PGAS(TC0),一个用于仅要求1个SL(SL2)的存储(TC1)。位每一个SL指派一对SC(SC0/SC1、SC2/SC3或SC4/SC5),用于结构中的死锁避免。当分组横越结构时,SC可逐链路地改变,然而,被层4和应用看见的SL和TC是以端对端方式一致的。
[0310] 在给定的链路内,服务信道被指派给虚拟通道(VL)。VL提供用于传入结构分组的专用接收缓冲器。VL还用于解决路由死锁。在一个实施例中,该架构支持多达32个VL,但是所支持的实际的数量一般将是依赖于实现的。该架构支持将SC映射到VL上,使得可支持异构的结构配置。各个实现方式可选择支持少于32个VL,或者可配置成通过减少可用的VL的总数量来优化每个VL的缓冲的量。
[0311] 通过将服务信道映射至独立的VL,SC可提供穿过结构的独立的信道,从而确保在一个SC中的竞争和阻塞不阻碍不同的SC中的通信量的进展。服务信道用于避免路由和协议死锁,并且用于避免多个通信量类别之类的线头阻塞。
[0312] 每一个SC承载单个通信量类别中的单个服务等级的通信量。结构管理器在每一个出口端口中配置在可能正在使用相同的端口的多个SC之间划分或共享VL资源的方式。由FM使用SC的期望的QoS特性来为被指派给它的VL选择适当的设置,这些设置包括:
[0313] ·经由可配置的VL仲裁算法来调度分组跨虚拟通道的传输,所述可配置的VL仲裁算法允许结构管理器配置当多个VL具有为给定的链路排队的通信量时应当共享和调度链路的方式。
[0314] ·分组抢占可准许较高优先级的通信量抢先于较低优先级的分组。这提供了对于高优先级通信量的线头阻塞的进一步降低。
[0315] ·共享通过配置VL的返回速率而可用的输出端口的带宽。
[0316] ·每个端口的可配置的VL缓冲,使得可针对每一个VL来控制在每一个交换机跳处所允许的队列深度。
[0317] 结构的架构促进实现其中设备的混合体支持不同数量的VL的异构环境。示例包括:通过支持有限数量的VL来节省缓冲器空间的交换机;不需要额外的VL的、旨在用于结构内的拓扑死锁避免的HFI端点;或通过提供大量缓冲但仅用于有限数量的VL来支持超长链路的一些特殊的设备。
[0318] 在图36中示出示例性异构环境。如图所示,经互连的部件(诸如,交换机、HFI、网关和具有结构接口的存储设备)可实现为支持不同数量的虚拟通道,并且取决于哪个部件具有较大数量的VL,伴随着向上或向下的VL至VL映射。
[0319] 一般而言,不必以L2链路结构分组格式的单独字段来显式地标识服务等级(SL),但是具有FP格式包含SL字段以支持与其他协议(诸如,一些无限带宽格式)之间的互操作性的实例。相反,由结构分组的SC字段来暗示QoS信息。在一个实施例中,当每一个分组从端到端横跨过结构时,通过SC至SC映射来保持QoS等级。对于异构的结构,该架构提供允许分组膨胀或收缩VL资源的利用率以有助于同时地减小线头阻塞的几率并保持所暗示的SL信息,而不是通过要求所有的通信量在由具有不同能力的设备支持的VL的最低标准上行进来限制整个结构。
[0320] 图37示出根据实施例的、通过HFI的L4层将分组注入到结构中的示例。当通过HFI的L4层将分组注入到结构中时,它首先经由SL至SC映射3700来将由L4接口提供的SL映射至初始的SC(在操作“A”处标出),并且利用该值对分组的SC字段置位。所生成的SC值可嵌入SL以及与结构的拓扑有关的信息两者。在操作“B”处,SC随后经历SC至VLt映射3702以选择发射该分组的输出VL资源。输出资源通常是指输出FIFO以及与之相关联的信用管理器。在图32的示图中,出于说明性目的,具有四个VL FIFO 3704;FIFO的实际数量将取决于由设备支持的虚拟通道的数量。此外,在此输出级处的SC至VLt映射3702不但取决于本地设备支持的VL的数量,而且还取决于远程设备支持的VL的数量。如操作“C”处所描绘,由远程接收设备基于该本地设备的VLt往回确收(ACK)信用,并且递增对应的计数器。下文中进一步详细地解释以下细节:SL如何映射至SC;SC如何映射至VLt;以及如何使用VLt往回映射信用。
[0321] 为了使对VL资源的使用最大化而同时保持嵌入在传入分组的SC字段中的QoS等级,每一个交换机执行用于选择流水线中的输入和输出资源两者的映射。在图38中示出说明交换机3800的选择性细节的示例性实施例。每一个交换机将包括多个输入端口3802和输出端口3804,其中,输入端口的输出经由交叉互连3806而耦合至输出端口的输入。输入端口3802包括用于实施各种端口操作的电路和逻辑,所述输入端口操作包括转发路由表3808、SC至SC映射表3810。每一个输入端口还包括多个VL输入。FIFO 3812使用于实施解复用器(demux)3814和复用器(mux)3816操作的电路和逻辑相关联。输出端口3804包括多个VL输出FIFO 3813,所述多个VL输出FIFO 3813具有用于实施demux 3815和mux 3817操作的相关联的电路和逻辑。
[0322] 如图38中所示,当分组3818进入时,它首先经过(操作“D”处的)SC至VLr映射3820以选择输入VL资源中的一个来接受该分组。输入资源通常是指输入级处的VL专用FIFO。如下文中进一步详细地所解释,该映射取决于该本地设备支持的VL的数量。对于对输入级处的每一个VL不具有单独资源的实施例,不需要SC至VLr映射3820。并行地,转发路由表3808使用分组3818的目的地本地标识符(DLID)来确定该分组的输出端口,如操作“E”处所描绘。取决于路由决策的结果和分组的SC,基于SC至SC映射表3810确定新的退出SC。对于诸如胖树(Fat-Tree)之类的拓扑,新SC通常与原始的SC是相同的。对于诸如环面(Torus)之类的拓扑,新SC可以是原始SC的递增以在输出端口恰好横穿“变更线”(“dateline”)时防止潜在死锁。由该新SC取代分组的SC字段。随后,该新SC在操作“F”处通过另一输出端口专用的SC至VLt映射3822以导出出口VLt,该出口VLt用于选择在目的地端口处发射分组3818的输出资源。如下文中所解释,用于选择输出资源的映射不但取决于本地设备支持的VL的数量,而且还取决于远程设备支持的VL的数量。
[0323] 当从特定的VL输入FIFO 3812拉出分组而不是使用该VL往回向发射机确收信用时,交换机基于发射设备的VL(或VLnt)往回确收信用以匹配来自发射端的信用管理。这由通过映射正在从输入FIFO拉出的分组的SC的操作“H”来实现,并且通过SC至VLnt表3824来映射它,由结构管理器基于发射侧上的VL来对VLnt表3824编程。类似地,当处理入口分组以及入口VL标记LF命令微片时,使用SC至VLnt表3824来映射流入的SC值以适当地跟踪如发射机定义的每一个分组的交织。如果该本地设备和发射设备两者都支持相同数量的VL,则在操作“D”和“H”两者处的映射表将是相同的。”如操作“G”处所描绘,在输出端口处,由远程接收设备基于该本地设备的VL往回确收信用,并且递增对应的信用计数器。
[0324] 如图39中所示,一旦分组到达HFI 3900,则SC通过操作T处的第一SC至VLr映射3902以生成VL用于选择输入资源中的一个资源来接收该分组的VL。该映射与交换机的输入级处的映射(图38中的操作“D”)非常类似。对于对于输入级处的每一个VL不具有单独的资源的实现方式,不需要在操作“I”处的该映射。”操作“J”处的第二级的SC至SL映射3904解码SC值,并且在将该SC值往回传递至L4层之前,将该SC值往回映射至该分组的原始的SL。如操作“K”处所描绘,当从特定的输入FIFO 3906拉出分组时,如交换机的情况(与图38中的操作“H”类似)那样,基于发射设备的VLnt往回确收信用。类似地,当处理入口分组以及入口VL标记LF命令微片时,使用SC至VLnt表3908来映射流入的SC值以适当地跟踪如发射机定义的每一个分组的交织。
[0325] 当由HFI将分组注入到结构中时,由L4层提供SL以生成初始的SC值。在一个实施例中,该架构支持32个QoS等级和32个SC,其中可在软件中或在HFI内部完成该映射过程。取决于结构的拓扑,对于每一个QoS等级可能需要多个SC以避免结构中的死锁。示例将针对环面拓扑,每一个QoS等级将要求2个SC以覆盖分组跨过“变更线”的情况。在这种情况下,16个SC随后将映射为32个SC空间,从而不仅传达QoS等级,而且提供适当的SC设置以防止给定的拓扑中的死锁。其余的16个SL要么可不由L4使用,要么可被冗余地映射至32个SC。对于每一个QoS等级仅需要单个SC的拓扑(诸如,胖树),随后可按1:1来将32个SL映射至32个SC。一般而言,只要实际的SL至SC映射值符合结构拓扑的死锁避免规则,这些值就向上去往软件。
[0326] 进入HFI的传入分组的SC被往回映射至SL。可在软件中或在HFI内完成该逆映射过程。对于对每一个QoS使用多个SC用于死锁避免的拓扑,在一个实施例中,这些SC向下塌陷为应用可用来处理该分组的单个的SL值。示例将针对环面结构,其中,将两个SC用于每一个QoS等级以防止拓扑死锁;32个SC随后被向下映射为16个SL值。基于给定的SL值,单个的L4可选择忽略所提供的SL,可使用它来选择供在响应通信量中使用的SL,或者可执行附加的L4验证或L4通信量分离。
[0327] 当分组进入交换机之后,通过转发和路由表来作出路由决策以决定该分组被递送至哪个输出端口。对于从端到端SC保持一致的拓扑(诸如,胖树),无论SC采用哪个输出端口,该SC保持不变。然而,对于诸如环面之类的某些拓扑,如果输出端口恰好跨过“变更线”,则需要递增传入分组以避免死锁。因此,提供SC至SC映射表(诸如,图38中的SC至SC映射表3810),以便基于入口SC和输出端口来生成出口SC。随后,可由该新SC取代传入分组的SC字段以防止死锁。当在输出端口处选择用于向外发送该分组的输出资源时,如图38的操作“F”中所示,VL选择基于该新的SC。
[0328] 实现SC至VL映射,以便当分组进入时选择输入资源,并且需要另一映射以选择供该分组离开的输出资源。用于在HFI处选择输出资源(图37中的操作“B”)以及在交换机处选择资源(图38中的操作“F”)的映射机制是相同的,而用于在HFI处选择输入资源(图39中的操作“I”)以及在交换机处选择输入资源(图38中的操作“D”)也是等价的。”对于支持最多32个VL的设备,可忽略用于选择输入资源的映射。仍然需要用于选择输出资源的映射,因为它取决于邻居的能力。
[0329] 在结构中的所有设备都支持相同数量的VL的同构的环境中,可完全相同地设置所有的SC至VL映射,以便简单地将32个SC向下映射至可用的VL。在不同的设备支持不同数量的VL的异构的环境中,SC至VL机制取决于映射是“膨胀”还是“收缩”而有所不同。下文描述这两个概念。
[0330] 膨胀式映射描述在接收设备支持比发射设备更多的VL的情况下的、用于发射和接收对的映射机制。图40示出交换机4000T与交换机4000R之间的膨胀式映射的示例,其中,交换机4000T包括4个VL且操作为发射设备,而交换机4000R包括8个VL且操作为接收设备。
[0331] 在交换机4000T内部,分组的SC通过操作“F”处的输出端口专用的SC至VLt映射3822以导出用于选择输出资源的出口VLt。该映射配置可取决于接收设备处的输入缓冲器类型而有所不同。如果接收设备的输入缓冲器是分立的FIFO,则操作“F”处的输出映射映射至在发射侧处可用的所有4个VL。这4个VL的信用计数器中的每一被设置为接收侧的输入FIFO中的一个的尺寸。SC至VLt映射的结果生成对1:4demux 3815的控制输入,以便选择与出口VLt相关联的适用的VL输入FIFO 3813。结合发射分组的相关联的微片传出,(由未示出的仲裁器实现的)输入控制应用于4:1mux 3817以选择从哪个VL输出FIFO 3813拉出微片。
[0332] 从交换机4000T发射分组数据,并且在接收机4000R处接收该分组,在交换机4000R上执行SC至VLr映射3820以选择输入VL资源中的一个(VL输入FIFO 3812中的一个)来接受该分组。“D”处的输入映射映射至所有8个VL,以便使对输入FIFO的使用最大化,并且有助于减少线头阻塞。在该配置下,缓冲器信用中的一半不被利用。由控制输入实施对VL输入FIFO的选择,所述控制输入由操作“D”生成,并且被提供为对1:8demux 3814a的输入。当在进一步的处理期间从VL输入FIFO 3812a中拉出微片时,实现8:1mux3816a。同样如图40中所示,在操作“H”处使用SC至VLnt表3824以映射流入的SC值,从而适当地跟踪如由发射机定义的每一个分组的交织。
[0333] 如果接收设备的输入缓冲器是共享的或可重新配置的缓冲器的池,则操作“F”处的输出映射映射至在发射侧处可用的所有4个VL。用于4个VL的信用计数器配置成使得整个接收缓冲器空间正在被利用。每一个VL被给予足够的信用以至少能够发送一个完整尺寸的分组,从而保证向前进展。操作“D”处的输入映射映射至所有8个VL,以便使对输入FIFO的使用最大化,并且有助于减少线头阻塞。
[0334] 收缩式映射描述用于在其中接收设备支持比发射设备更少的VL的发射和接收对的映射机制。图41示出交换机4100T与交换机4100R之间的收缩式映射的示例,其中,交换机4100T包括8个VL且操作为发射设备,而交换机4100R包括4个VL且操作为接收设备。
[0335] 像膨胀式映射那样,收缩式映射配置可取决于接收设备处的输入缓冲器类型而有所不同。如果接收设备的输入缓冲器是分立的FIFO,则操作“F”处的输出映射映射至在发射侧处的仅4个VL以匹配接收侧的VL。这4个VL的信用计数器中的每一被设置为接收侧处的输入FIFO中的一个的尺寸。操作“D”处的输入映射相应地映射至所有4个VL。在该配置下,8个可用的输出资源中的仅4个正在被使用。
[0336] 如果接收设备的输入缓冲器是共享的或可重新配置的缓冲器的池,则操作“F”处的输出映射映射至在发射侧处可用的所有8个VL。用于8个VL的信用计数器配置成使得整个接收缓冲器空间正在被利用。每一个VL被给予足够的信用以至少能够发送一个完整尺寸的分组,从而保证向前进展。操作“D”处的输入映射映射至所有4个VL。在这种情况下,所有8个可用的输出资源正在被使用。
[0337] 有多次在接收端处的输入缓冲器不是足够大以覆盖往返等待时间,或者仅勉强覆盖它。在那种情形下,如果接收缓冲器是共享的或可配置的结构,则通过刻意不利用所有的资源来节约缓冲器信用是可能的。考虑图40中所示的配置。如果接收端处的共享缓冲器勉强可覆盖链路的往返等待时间而不是使操作“F”映射至发送侧处的所有4个VL,则它可配置成仅映射至2(或者如果没有协议或拓扑死锁要求,仅映射至甚至1)。利用该配置,尤其是当MTU是大型的时,可更高效地在2个而非4个VL之间共享信用。然而,该方法危害QoS的传递。
[0338] 当将SC至VL表配置成将SC向下映射至VL时,上层协议不交叉且不违背结构拓扑的死锁避免规则是重要的。对于层4协议(诸如,PGAS(分区的全局地址空间)),某些SC被指定为用于请求类别通信量,而其他SC被指定为用于响应类别通信量。如果这两个类别意外地向下映射至相同的VL缓冲器,则协议死锁可能发生。
[0339] 类似地,也可指派SC以用于结构拓扑中的死锁避免。示例将是环面拓扑的示例,为跨过“变更线”的分组指派所有奇数编号的SC以防止信用循环依赖关系。在该情形中,在VL资源中的任何一个中,不允许偶数编号和奇数编号的SC混合,否则会由在结构中经历拓扑死锁的风险。当将SC向下映射至VL时,其遗憾的本质在于,危害了QoS。属于不同的QoS等级的多个SC被向下映射以共享相同的VL资源。
[0340] 当从输入缓冲器中拉出分组时,从接收机向发射机往回确收信用。如同图40和图41中的情况,由于在两端之间的SC至VL映射潜在地不同,对信用的确收基于发射侧处的VLnt。这通过以下操作来实现;映射正从输入FIFO中拉出的分组的SC,并且通过(图40和图41中的操作“H”处的)SC至VLnt表3824来映射它。随后,通过由L2链路传送子层提供的流控制机制往回确收用于该生成的VLnt的信用。对于图40和图41中示出的两种情况,操作“F”和“H”处的映射表将匹配。
[0341] 该架构允许用于(例如,图38的操作E处的)交换机的输入端口的SC至SC映射表3810的实例替代地被配置为SL至SC映射表。该特征允许直接将IB HCA或IB交换机连接至架构结构。它还准许使用用于结构的旧式(legacy)路由和配置管理软件,其中,仅L2分组头部(其包括SL字段)正在被使用。
[0342] 该架构还支持旧式映射模式。例如,SL至VL映射是以与IBTA类似的方式工作的旧式映射模式。按此模式,在VL与SC之间没有差异。它们是等效的。可将遍及结构的所有的SC至VLt映射和SC至VLnt映射编程为1:1,或可绕过所有这些映射。交换机的输入端口处的所有的SC至SC映射表(例如,图38中的操作“E”处的SC至SC映射表3810)被改变为SC至VL映射表。基于传入分组的SL以及目的地输出端口来确定出口VL,而不是基于传入分组的SC以及目的地输出端口来生成出口SC。在退出交换机之前,以该VL值来标记分组的SC字段。与用于拓扑死锁避免且不知晓设备支持的资源的数量的SC至SC映射不同,SC至VL映射知晓两者。因此,消除了后续的SC至VL映射的需求。
[0343] SL至VL映射模式以包含SL字段的L2链路结构分组格式工作,并且它适用于仅使用此类格式的结构环境。这意味着仅允许所有的HFI使用此类格式在彼此间通信。由于SL被显式地包括在分组内部,因此从端到端保持SL是自动的。现在将异构环境中的收缩式映射和膨胀式映射建立到SL至VL表中,而不是依赖于各种SC至VL表来执行任务。在该旧式模式下,IB HCA可直接附连至架构结构。观察这种模式的等效方法为:将它视为连同SC至VLt与SC至VLnt的1:1映射一起的SL至SC表。
[0344] 图42示出该SL至VL旧式映射模式的高层级示例。该示图包括两个无限带宽主机信道适配器(IB HCA)4200和4202、两个HFI 4204和4206以及两个交换机4208和4210。L2链路结构9B分组格式包括SL字段,该SL字段在图49中示出并在下文中描述。这在不必改变SL字段值的情况下允许在IB HCA和HFI的任何组合之间端对端地传送这些9B分组。
[0345] SL至VL混合式旧式模式支持具有IB HCA和HFI的混合体且除使用9B分组格式之外还使用其他分组格式的环境。在图43中示出此类环境的示例,该示例支持9B、10B和16B分组格式,并且包括两个IB HCA 4300、两个HFI4304和4306以及两个交换机4308和4310。图43还通过在括号中包括针对操作的适用的字母来描绘图37-32中示出的各种操作。利用此类结构,以普通模式连接所有的端口,例外是连接至IB HCA设备的交换机接口。对于那些端口,在SC至SC映射表3810(操作38中的操作“E”)的实例配置成用于SL至SC映射的情况下使用混合模式。当分组从IB端口进入时,其SL字段被映射至32个SC中正由该架构支持的一个SC。当将SC字段置位为该值之后,该分组通过与图38的操作“F”处所示的类似的、用于选择用于该分组的输出资源的SC至VL映射。这与上文针对SL至VL的旧式模式所描述的SL至VL不同。通过将映射解耦合为两个步骤,分组的SL字段被映射至32个SC的最完整的范围而不是被向下标记至连接交换机支持的VL。这允许该分组通过异构结构中的膨胀式和收缩式映射,并且利用沿途的所有资源。注意,对于仅包含9B分组通信量的结构,也可使用该混合模式而不是SL至VL旧式模式。
[0346] 链路结构子层
[0347] 如上文所讨论,通过L2链路层,从端到端地传输信息,在L2链路层处,由一个或多个链路结构分组承载每一个消息。在实施例中,这些分组支持小到16字节(2个微片)至大到16376字节(2047个微片)的尺寸。该范围旨在满足小消息到大消息两者的需求,所述小消息在PGAS编程语言中是常见的,所述大消息对于传送经封装的巨型(10KB)以太网帧是必要的。在一个实施例中,最大的FP的尺寸限制为L4MTU(最大传送单元),该LT MTU为10KB。
[0348] 如图2中所示,该链路结构子层是总体L2层的上半部分,而包括L2链路传送子层的下半部分更接近物理层来操作。在一个实施例中,用于架构的设备(诸如,HFI和交换机)的逻辑流水线在较上方的链路结构子层处传输分组。然而,在设备之间的链路处,链路结构分组被分段为更小的单元(微片),这些更小的单元又被捆包为(LTP),并且使用链路传送子层协议被承载。
[0349] 如图45中的通用结构分组格式中所示,结构分组开始于头微片,随后是0至2045个体微片,并且以尾微片结束。允许冒泡、空闲微片以及其他LF命令微片与结构分组微片散布。一组结构分组头部字段跨多个字节、存在于每一个分组的头部处,所述一组结构分组头部字段提供各种信息以帮助将该分组路由至目的地端点。取决于格式类型,这些头部字段可跨越以头微片开始的一个或多个微片。FP的数据有效载荷跟随这些头部字段,并且继续,直到由尾微片定义的FP的末尾为止。如上文中参照图4和表1所讨论,微片类型位(微片位[64])结合链路类型(LT)控制位(数据位[63]和[62])来标识微片是头微片、体微片还是尾微片。
[0350] 在一个实施例中,该架构支持四种不同的头部格式。每一种格式包含不同数量的头部字段,并且提供不同的特征集。L2结构分组格式中的一种是8B头部格式,它使L2类型头部字段置位为“00”。它被设计为比其他格式更紧凑,从而提供更小的分组开销。为了使该头部能适配在单个微片内,该格式具有减少的特征集以及可承载总共127个微片的最大分组尺寸的缩短的长度字段。对于超过该限制或要求被省略的特征的有效载荷,使用其他格式中的一种。在图46中示出结构分组8B头部字段的实施例。
[0351] 如图47中所示,10B头部格式具有比8B格式更大的长度字段,从而允许它能够承载多达2047个微片的最大分组尺寸。此外,它提供减小的PKey(P键)以及8B不提供的熵特征。在一个实施例中,10B头部分组使L2类型头部字段置位为“01”。
[0352] 在一个实施例中,16B头部格式包含链路结构子层支持的所有特征。如图48中所示,16B头部分组使其L2类型头部字段置位为“10”。该格式可用于包含从3至2047个微片的分组。头部精确地消耗16个字节(两个微片),这为后续的有效载荷提供了良好的对准。此外,该格式提供支持非常大数量的端点的扩展的24位寻址空间。
[0353] 在图49中示出9B头部格式的实施例。9B头部格式针对承载无限带宽(IB)通信量的目的。该分组格式的L2类型头部字段被置位为“11”,并且随后紧跟着位[60:57]中的“0000”。在头微片的该最高有效字节之后,直接附连原生的IB分组。然而,原生的4位IB VL字段被扩展一位而进入头微片的位[56]中,从而向上匹配该架构支持的5位SC字段。由于IB与该架构之间的统一的结构架构,当路由该分组时,由链路结构子层直接使用IB本地路由头部和基址传输头部中的所选择的头部字段。这些字段包括在图49中以交叉阴影线描绘的SC字段、LVer字段、SL字段、LNH字段、DLID字段、长度字段、SLID字段、PKey字段、(F)ECN字段以及(B)ECN字段。
[0354] L2结构分组开始于跨越一个或多个微片的头部。承载头部的第一个微片被标记为头微片,头部的其余部分由零个或多个体微片标记。如由10B头部格式所呈现,分组头部不必是微片尺寸的整数倍,在10B头部格式中,头部占据整个第一微片以及来自第二微片的2个字节。每一个头部都由包含路由指示以及关于分组的其他信息的各种字段组成。以下表6提供包含在每一个分组格式内的字段的综述。
[0355]字段 字段名称 8B 9B 10B 16B
L2 L2类型编码 Y Y Y Y
L4 L4类型编码 Y N Y Y
SC 服务信道 Y Y Y Y
SL 服务等级 N Y N N
DLID 目的地局部ID Y Y Y Y
SLID 源局部ID Y Y Y Y
RC 路由控制 Y N Y Y
长度 分组长度 Y Y Y Y
LNH 链路下一头部 N Y N N
F 前向显式的拥塞通知 Y Y Y Y
B 后向显式的拥塞通知 Y Y Y Y
P_Key 分区键 N Y Y Y
熵 熵 N N Y Y
年龄 年龄 N N N Y
[0356] 表3
[0357] L2类型编码字段用于标识结构分组格式。当位[62:61]被置位为“00”、“01”或“10”时,该字段为2位宽。然而,当该字段被置位为“11”时,它被扩展至位于位[62:57]的6位宽。基于该编码,每一个架构设备检测分组格式的类型以及其头部字段的位置。
[0358] 每一个结构分组承载用于上方的L4协议层的有效载荷。为了使端点知晓特定的分组正在承载哪个L4协议,L4类型字段被包括在每一个头部中。对于8B和10B头部格式,该字段为4位宽,而在16B头部格式中,它被扩展为8位,从而允许由更多的L4协议来使用它。在4位宽版本的情况下,它承载位7,并且被定义为[7,2:0]而不是被定义为[3:0]。在4位版本和8位版本的L4类型字段两者下,编码空间的高有效位部分分配为用于架构的L4原生卸载协议。所有其他L4协议共享其余的编码空间。9B头部字段是唯一不包含L4类型字段的格式,因为它专门针对L4IB封装。
[0359] 在每一个头微片中被包括在位[56:52]处的5位SC字段标识分组正在使用32个服务信道中的哪一个。如本文中别处更详细地所述,每一个架构设备使用该字段来确定哪一组SC和VL资源用于向下游移动分组。
[0360] 在一个实施例中,该架构支持32个QoS等级。对于8B、10B和16B分组格式,由SC字段指示该信息,并且那些格式因此不包含显式的SL字段。对于9B分组格式,它承载从经封装的IB分组中继承的4位显式SL字段。由于旧式IB HCA在将分组注入到结构中时在其VL字段中指示SL信息,因此需要该SL字段来指示用于分组的QoS。从IB HCA接收9B分组的边缘交换机具有通过使用上文讨论的SL至SC映射来将该SL信息指示到SC字段中的选项。在这种情况下,接收端口可通过检查其显式的SL字段或通过解码SC字段来检索用于分组的QoS。
[0361] 目的地本地ID(DLID)字段位于每一个头微片处以指示应当将分组递送至的端点。通过在结构的域内唯一的一个或多个DLID来标识架构结构的每一个端点。对于8B和10B格式,20位DLID字段位于头微片的位[51:32]处。对于16B格式,24位DLID字段位于头微片的位[51:32]以及第二头部微片的位[15:12]处。对于9B格式,16位DLID位于头微片的位[39:24]处,从而提供比其他格式更少的寻址空间。在一个实施例中,DLID空间支持单播寻址和多播/集体寻址两者,其中,单播地址标识单个端点递送,而多播/集体DLID标识将被递送至的一组端点。
[0362] 源本地ID(DLID)字段位于每一个头微片处以指示从其发送分组的端点。对于8B和10B格式,20位源字段位于头微片的位[19:0]处。对于16B格式,24位的DLID字段位于头微片的位[19:0]以及第二头部微片的位[11:8]处。对于9B格式,16位SLID字段跨越头微片的位[7:0]以及第二微片的位[36:56]。这种对SLID的指派与先前章节中所述的DLID非常类似,但例外在于,SLID将永远不是多播/集体地址,因为不会由多于一个端点生成分组。
[0363] 许多拓扑提供多种路由方法,诸如:通过最短路线将分组路由至它们的目的地以尝试在非拥塞的环境中减少等待时间;或者即便路由路径可能不是最短的也遍及结构来传播分组以使拥塞最小化。一些也提供自适应路由,其中,基于每一个分组遇到的拥塞等级,在多个端点之间路由分组。
[0364] 为了促进路由控制,将RC字段编码为3位字段,这3位字段指定用于遍及结构路由给定的分组的路由要求和优选方法两者。决定对于通信量或应用的特定的流使用哪种路由方法并相应地设置该字段是L4传输层的责任。当顶部的位RC[2]未置位时,底部的位RC[0]通知结构是否将有序地路由分组。对于允许被无序地路由的分组,取决于结构的能力,可随机地或基于路由选择的拥塞等级来路由分组。中间位RC[1]指定应当路由分组以优化等待时间还是优化带宽。当优化等待时间时,该结构使去往目的地的跳计数最小化。当优化带宽时,可利用非最小的路由来传播路由,从而减小拥塞。
[0365] 取决于由结构支持的拓扑和路由方法,每一个交换机都检查RC字段设置中指定了什么,但可以选择以更限制性的方式来路由分组。在一个实施例中,如果该字段的设置已指定有序的路由,则不允许无序地路由分组。然而,即使指定了无序方式,也准许有序地路由分组。
[0366] 所有的分组格式都在头微片的位[59:57]处包含该字段,例外为9B字段格式。由于使用9B头部格式来封装IB分组,并且由于现有的IB协议不能利用该路由控制字段,因此从9B格式中省略该字段。在一个实施例中,使用确定性的0路由方法来处理使用9B格式的分组。
[0367] 对于8B、10B和16B头部格式,长度字段指定分组中微片的总数(包括头微片和尾微片)。由于每一个微片为64位宽,因此分组的总尺寸等于长度乘以8B。对于用于封装原生的IB分组的9B头部格式,该长度字段是经封装的IB分组的部分,并且因此不提供微片的数量。相反,它指定被封装在4字节字的单元中的IB分组的尺寸。由于在封装IB分组时的附加的头字节和尾字节,因此,9B头部分组中的微片的实际数量总是等于长度揫[11:0]/2+1。”[0368] LVer(链路版本)字段专门用于9B头部格式,并且位于位[51:48]处。这是从附连的IB分组中直接使用的字段。根据IBTA 1.2.1,该字段中的值应当为0。类似地,链路下一头部(LNH)字段专门用于9B头部格式,并且位于位[41:40]处。这是从附连的IB分组中直接使用的字段。
[0369] 该架构支持各种拥塞管理特征。作为用于使拥塞扩散最小化的端对端(E2E)拥塞管理方案的部分,使用前向显式的拥塞通知(FECN或简称F)位来标记在结构内遇到拥塞的分组。该FECN位结合后向显式的拥塞通知(BECN或简称B)位一起使用。对于8B、10B和16B格式,该F位位于头微片的位[60]处。然而,对于9B头部格式,该位直接与附连的IB分组内部的FECN位共享。该(B)ECN位用作通知源端点该源端点可能正在导致结构内的拥塞的形成和扩散的反馈机制。对于8B、10B和16B格式,该B位位于头微片的位[31]处。然而,对于9B头部格式,该位直接与附连的IB分组内部的BECN位共享。
[0370] 该概念为:当分组从源行进至其目的地端点时,当遇到拥塞时,基于一组拥塞准则来标记该位。一旦它被置位,该结构内沿路径没有其他交换机可使它复位。当到达目的地时,端点具有通过以下操作来向源端点通知分组的选项:标记ACK分组的B位;或往回将显式的拥塞通知(ECN)分组发送到源端点。如在F位的情况下那样,没有结构中的交换机被允许使该B位复位。如果源接收到足够的B通知,则它意识到它正在将过多的通信量注入到结构中,并且减慢注入速率以停止拥塞的扩散。
[0371] 分区键字段(或PKey)与在L2链路层处的结构的分区有关。分区可用于限制被允许彼此通信的端点的集合。此外,可定义多个重叠的分区,在这些重叠的分区中,端点可以是多于一个分区的成员。字段的MSB用作成员资格指示符,因此,其余的15个位支持多达32767个分区。成员资格指示符位的值“1”指示正式成员,而“0”指示受限成员。
[0372] 熵字段用于分散式路由,在分散式路由中,由上方的L4传送层控制该字段的内容,并且该字段的内容在结构内从端到端保持恒定。通过使用该字段,向端点行进的分组可在所有的有效路径上散列以有助于扩散通信量并减缓拥塞。也可由L4实现使用熵来提供接收侧按比例缩放,在这种情况下,可由端点使用熵值以选择哪个接收队列和/或接收处理线程将用于处理分组。16B和10B头部格式分别提供位于第二头部的位[47:32]和位[15:8]处的16位和8位的熵。8B和9B格式不提供该特征。
[0373] 不是所有的路由模式都利用该熵字段。作为示例,用于特定拓扑的自适应路由可选择随机地选择路由选择并忽略该字段。对于确实使用它的其他路由模式,该字段的设置可以是与SLID和DLID位的组合那样粗粒度的,可以是与过程ID那样较细粒度的,或可以是结合存储器地址位的组合的非常细粒度的。
[0374] 8位年龄字段指示当分组跨越过结构时该分组的年龄,并且用于基于年龄的仲裁以提供全局公平性。当局部地使用公平仲裁时,某些拓扑(诸如,环面或网格)具有公知的公平性问题,这些公平性问题会导致分组等待时间的大的变化,尤其是在大尺寸网络下。基于年龄的仲裁不仅减小了分组等待时间变化,而且还降低了分组的平均等待时间。
[0375] 在16B头部分组格式中,年龄字段位于第二头部微片的位[55:48]处,16B头部分组格式是唯一支持年龄特征的格式。该字段的值从跳到跳改变,其中,每一个设备对年龄累积与它在离开之前在那个设备内存活的时间成比例的量。一旦该量达到可配置的饱和值,该年龄字段就充当跳计数,并且在每一个跳处递增1。每一个设备在向下游转发分组时的仲裁过程期间将分组的年龄考虑在内。如果端口接收到具有可由FM配置的最大可允许的限制,则该分组由于经不正确地编程的路由表而被视为逃离分组(runaway packet),并且被丢弃。随后,经由错误计数器来报告该错误条件。
[0376] 由“R”标识的字段包括预留以供未来使用的字段。在一个实施例中,预留字段位当由端点被注入到结构中时被置位为0,穿过结构时被交换机忽略且保持不由交换机改变,并且被接收端口忽略。
[0377] 每一个链路结构分组承载封装用于上方的L4层协议的分组的有效载荷部分。对于所有的格式,该有效载荷紧跟头部字段,该有效载荷可以是小到几字节至大到16K字节(或10KB MTU,如果适用)。经封装的L4分组包含其自身的头部和有效载荷的集合。L4分组的格式是协议特定的。由架构支持的L4协议的示例包括架构的原生的卸载协议、以太网、无限带宽和结构管理。如上文中所讨论,在每一个链路结构分组头部的L4类型字段中指定有效载荷正在承载的L4协议的类型。该经封装的L4分组的最后一个微片经常(但不是要求)包含不变的CRC(ICRC),从而不仅保护该L4分组,而且覆盖L2结构分组的不变的头部字段。
[0378] 具有线速和分组数据速率匹配的以太网封装
[0379] 可将各种类型的L4协议分组和帧封装在L2结构分组内,此L2结构分组随后沿一个或多个结构链路在多个结构端点之间传送,在所述一个或多个结构链路上,经封装的L4协议内容被解封以用于使用L4分组或帧进行进一步的传送和/或处理。除了对无限带宽分组的封装之外,架构的实施例也支持对以太网分组的封装。
[0380] 以太网是在计算机与设备之间部署的遍布的通信技术。架构支持对以太网分组的封装以及那些分组跨结构的传递。如下文所详述,架构指定那些以太网分组在L4传输层分组中的封装。
[0381] 结构-以太网网关负责在结构与实际的物理以太网之间转发以太网分组。结构-以太网网关可集成到结构交换机中或集成到常规的以太网交换机中,或者结构-以太网网关可作为独立式结构侧设备而存在。结构-以太网网关操作为架构内的端节点,同时提供与结构间的IO接口。
[0382] 在架构的结构拓扑的顶部之上,经L4封装的以太网分组跨结构的交换的模式叠加于一个或多个逻辑以太网网络拓扑。通过配置,可准许接口的子集在此子集的成员之间交换以太网分组,并且可准许其他接口的不相交的子集在它的成员之间交换以太网分组。每一个子集实际上是独立的逻辑以太网网络。使用以太网网关,外部以太网交换机可允许在那两个逻辑以太网网络之间交换分组。以太网地址至LID的映射、LID之间的路由路径以及以太网封装内的值确定了所准许的经L4封装的以太网分组的交换以及逻辑以太网与结构拓扑之间的对应关系。
[0383] 结构-以太网网关结构允许架构端节点通过主机架构接口访问逻辑以太网网络,并且此结构-以太网网关架构允许多个物理以太网扩展式LAN通过架构结构被互连。逻辑以太网网络的端节点可包括架构端节点和实际以太网端节点两者。
[0384] 以太网标准由IEEE在802LAN/MAN标准委员会中定义,更具体而言,在802.3工作组中定义。早期以太网中的物理链路是使用带有冲突检测的载波侦听多路访问(CSMA/CD)的共享链路。使用中继器(repeater)且随后使用透明桥将以太网网络延伸超出单个链路。此类桥更普遍地被称为以太网交换机。共享的物理链路由端节点与交换机之间的点对点链路替代。近期的以太网标准支持10千兆位/秒(Gb/s)、40Gb/s和100Gb/s的物理链路速度,诸如,2010年批准的IEEE 802.3ba 100GB/s标准。若干附加的100Gb/s和更高的规范当前在起草阶段,并且计划在未来将产生附加的高速以太网标准。
[0385] 由介质访问控制(MAC)地址指定以太网分组的目的地和源。这些地址由六个八位位组(octet)组成。第一个八位位组的最低阶位(位0)将多播MAC地址与单播MAC地址区分开。位值1用于多播MAC地址。多播MAC地址可仅用作目的地地址,并且它指定一组以太网端节点来接收此分组。广播MAC地址(ff:ff:ff:ff:ff:ff)是指定所有以太网端节点的组的特定多播MAC地址。
[0386] 第一个八位位组的次低阶位(位1)将局部管理的地址与全局唯一的地址区分开。位值1用于局部管理的MAC地址。对于全局唯一的MAC地址,前导的三个字节是组织唯一标识符(OUI),并且拖尾的三个字节是网络接口控制器(NIC)专用的。全局唯一MAC地址的块被指派给标准机构、装备销售商、组织以及个人。参照多播MAC地址使用局部管理的位是不一致的:广播和IPv6对此位进行置位,IPv4多播使用OUI 01:00:5e且不对此位进行置位。
[0387] 可根据局部策略来指派局部管理的MAC地址。具体而言,MAC地址可包含嵌入式信息,诸如,结构LID。此外,可将多个以太网MAC地址指派给特定的以太网接口。接口接收具有匹配所指派地址中的任一地址的目的地单播MAC地址的分组,并且可在将那些指派的地址作为源MAC地址的情况下来发送分组。
[0388] 协议允许将网络层地址解析到链路层地址。在TCP/IP网络中,用于IPv4的地址解析协议(ARP)或用于IPv6的邻居发现协议(NDP)与IP协议一起使用,以便通过广播包含接口的IP地址的请求且期望仅那个接口或用于那个接口的代理将以所需的MAC地址进行响应来发现IP接口的以太网MAC地址。将单个以太网MAC地址指派给每一个IP接口。使用相同以太网接口的多个IP接口能以它们各自的ARP响应中的相同以太网MAC地址来响应。
[0389] 以太网物理链路上的以太网分组由前导码(Preamble)和帧开始(Start-of-Frame,SoF)定界符作为前导。前导码由7个八位位组组成。SoF定界符由单个八位位组组成。以太网物理链路上的以太网分组由帧间分组间隙(Inter-Packet Gap,IPG)跟随。IPG必须取平均为最少是12个八位位组。
[0390] 以太网分组由头部、有效载荷以及帧校验序列(Frame Check Sequence,FCS)组成。头部由最少14个字节组成,这些字节由目的地MAC地址、源MAC地址和2-八位位组的EtherType(以太网类型)组成。EtherType标识有效载荷的协议。(IP EtherType为0x0800)。头部可由附加字段扩展,所述附加字段诸如,4-八位位组802.1q(VLAN)标签。(替代的编码以2-八位位组长度字段取代EtherType,并且通过IEEE 802.2的机制对有效载荷的协议编码。)标准的有效载荷至少由产生至少64个八位位组以及至多1500个八位位组的有效载荷的分组的足够字节组成。非标准的使用已允许具有多达9216个字节的有效载荷的巨型(jumbo)分组。FCS是涵盖了头部、有效载荷和FCS的32位CRC。
[0391] 原始和遍布形式的以太网交换是透明桥接。IEEE 802.1d以及后续的802.1w已使交换机之间的特定协议标准化来用于网络拓扑发现。这些协议的目的在于标识多个交换机和/或端节点之间的单个活跃路径来用于转发分组。活跃拓扑摆脱了环路,并且被表征为生成树(spanning-tree)。生成树具有根桥。所有经交换的分组可转发到根,且随后可离开此根向外转发。一旦分组开始被转发离开此根,此分组仅被转发离开此根。多播分组贯穿生成树的范围被转发。每当以太网网络的拓扑以可能导致无序的帧递送的方式改变时,交换机停止转发分组达足够的时间,使得所有飞行中的(in-flight)分组丢失而不是被无序地递送。
[0392] 可通过配置来填充用于透明桥的转发表;然而,典型地通过源MAC地址学习来填充这些转发表。在源地址学习中,在转发表中执行查找以获得到达交换机的每一个分组的源MAC地址。如果没有地址的条目,则创建条目,并且将接收接口存储在此条目内。当发现了针对对于分组的目的地MAC地址查找的那个条目时,将会将此分组转发到表条目中的接口。对于源MAC地址查找,如果转发表条目已经存在,则更新与此条目相关联的状态以支持存活时间(time-to-live)机制。网络拓扑中的特定接口的位置可改变,并且可发现改变的唯一方法在于,现有转发表条目是否被更新,或是否由于超时而被删除。当转发分组时,如果没有针对单播目的地MAC地址的转发表条目存在,则可贯穿生成树使此分组泛洪(flood),就像此分组是多播分组那样。来自响应于经泛洪的分组的分组中的源地址学习将提供针对此经泛洪的分组之后的后续分组的转发表条目。
[0393] 从1967年起虚拟机(VM)就已存在,远早于以太网的引入。在1999年,VMware引入了使x86执行虚拟化的它的第一批产品。对网络接口的虚拟化在软件中实现。PCI-SIG已对IO虚拟化(IO V)进行了标准化,此IO虚拟化允许I/O设备直接对接到多个VM内的多个OS实例。对于虚拟化的以太网接口,这要求I/O设备在多个VM实例之间对于单播和多播分组两者都交换分组。在此类设备内的交换机采用转发表来标识分组的一个或多个正确的目的地。
[0394] 虚拟机的重要能力在于迁移,在没有处理中断的情况下将虚拟机实例从一个物理机器移动至另一物理机器。对于此类迁移,VM在协议栈的所有可见的层处维持相同的网络地址是必要的。对寻址的拓扑约束(诸如,子网边界)已限制了VM迁移的地理范围。
[0395] 为了为此类迁移提供最大的灵活性,除了机器之外,还正在引入使网络虚拟化的技术和产品。诸如VXLAN(VMware、思科(Cisco)、思杰(Citrix)、红帽(Redhat))和NVGRE(微软、英特尔、惠普、戴尔)之类的协议利用附加的L2和L3头部来封装以太网分组,从而允许VM跨L3子网边界迁移。物理LAN看不见由VM使用的网络地址。管理程序(hypervisor)或虚拟化硬件去除封装,并且将分组递送至适当的VM。网络内的边缘设备封装并解封分组以与外部网络通信。网络和机器的虚拟化允许销售商在多租户云计算内提供计算机网络方面的更大的灵活性。
[0396] HFI设备驱动器与安装在每一个主机上的HFI接口相关联。HFI设备驱动器负责配置和管理每一个HFI(包括与每一个HFI相关联的(多个)结构至虚拟网络接口控制器(Fab-vNIC)接口)。在初始化期间,HFI驱动器在内核中创建虚拟以太网设备接口,这些虚拟以太网设备接口映射至每一个HFI中的(多个)Fab-vNIC接口。内核将这些设备接口连同可安装在主机上的任何其他以太网设备接口用于基于以太网的网络通信。
[0397] 在内核中,附加的网络接口可配置为从基本网络设备接口导出。对于基于Fab-vNIC的以太网网络设备接口,这包括使用Linux vconfig()来配置主机VLAN接口的能力,并包括出于实现增加的带宽和/或故障转移弹性目的使用Linux绑定(bonding)以将多个基于Fab-vNIC的以太网网络设备接口聚合在相同的主机上的能力。
[0398] 可经由DHCP动态地或经由标准网络配置文件机制静态地为基于Fab-vNIC的以太网网络设备接口配置IP地址,或将IP地址配置到Linux绑定接口。
[0399] 对于以太网寻址,由结构的以太网网关管理器将基本MAC地址指派给每一个HFI的Fab-vNIC接口。此地址可由内核用作被发射分组的源地址(SMAC)或用作所接收分组的目的地地址(DMAC)。可由内核将附加的MAC地址指派给网络设备接口。由HFI设备驱动器将指派给基于Fab-vNIC的以太网网络设备接口的附加的MAC地址注册到结构的以太网网关管理器。以太网网关管理器使用所注册的MAC地址来更新跨结构隧穿(tunnel)以太网分组所需的以太网地址至结构地址的映射。
[0400] 从架构的角度来看,以太网分组被封装在L2结构分组内,以便跨结构被隧穿。结构交换机提供跨结构的端对端路由而不检查结构分组内包含的以太网头部。在封装期间使用映射函数,此映射函数将计划的以太网目的地地址映射至跨结构适当地隧穿分组所需的结构地址参数的适当集合。
[0401] 在结构上根据结构分组校验和转发规则来路由经封装的以太网分组。以太网分组在结构上的所允许的交换的模式叠加于结构拓扑的顶部之上的逻辑以太网网络拓扑。在最简单的配置中,单个层2以太网广播域在整个结构上方成层。此配置允许在结构上的已配置为允许结构-以太网通信的所有节点之间的直接的全面互通(any-to-any)以太网连接性。在此类配置中,每一个结构主机可能能够将单个Fab-vNIC接口用于此结构主机的以太网通信的所有通信。在更复杂的配置中,两个或更多个以太网网络可叠加于结构拓扑。对于以太网网络拓扑,任何Fab-vNIC接口是来自经由外部以太网网络提供通信的任何以太网交换机的单个跳,并且这单个跳是来自无需穿过以太网交换机就可抵达的任何其他Fab-vNIC接口的单个跳。
[0402] 从路由的角度看,叠加在结构上的以太网网络导致此结构呈现与层2以太网交换机的那些特性类似的许多特性。逻辑交换机的部件包括逻辑输入端口、逻辑交叉、逻辑输出端口和内务处理(housekeeping)子系统。内务处理子系统担当负责对逻辑交换机操作的配置、监测和控制的管理器。
[0403] 在逻辑交换机模型中,结构主机上的Fab-vNIC网络设备接口以及在结构中存在的任何以太网网关端口表示逻辑交换机上的逻辑输入和输出端口。逻辑交换机的交叉由结构拓扑内由交换机进行的结构分组在结构端点之间的内部转发表示。结构以太网网关管理器提供对逻辑交换机操作的配置、管理和控制的内务管理功能。
[0404] 在一个实施例中,在使用10B或16B EN封装头部格式的结构分组中传送经封装的以太网数据。10B头部允许更高效的以太网数据传送,包括对维持以太网线速率的传送的支持。16B包括附加的头部字段以促进扩展的功能性,传送速率略有牺牲。
[0405] 在图50a和图50b中示出10B EN封装头部格式和16B EN封装头部格式的相应实施例。在10B和16B EN封装头部格式两者中,由头部的L4协议类型字段中的值00000000b标识含有经封装的以太网数据的分组。在这两种格式中的L2FP头部之后,在FP的有效载荷部分中为L4封装头部、含有原始以太网头部和有效载荷数据的字节流,随后是在以太网数据的末尾与L4ICRC32之间的0-7个字节的填补(pad),所述L4ICRC32是对FP头部和FP有效载荷(包括L4和以太网头部、有效载荷、任选的填补和尾部)的跳不变(hop-invariant)部分计算的32位不变的CRC。在分组的尾部字节中传送控制位以指示分组状态的末尾以及将必须在结构分组结构的有效载荷内在按字节的以太网有效载荷的末尾与ICRC之间添加的填补(如果有任何填补)的量。
[0406] 如图50a和图50b中所示,在前8个字节中的头部字段两者格式是相同的。这些头部字段中的第一个字段是20位SLID,此SLID标识将以太网分组引入到结构上的HFI或网关端点源,并且由结构管理器在初始化期间指派。此字段由标识微片中的整个FP内容的长度的11位长度字段跟随。20位DLID标识经封装的以太网分组在结构上的(多个)计划地址。目的地LID可对单个地址或聚合的地址(单播到HFI或网关)寻址,或可对多播组(多点分布)寻址。
[0407] F、B和RC字段用于流控制以及路由目的。F字段和B字段是可变字段,这意味着随着分组逐跳地移动通过结构,此分组中的初始值可能改变。作为可变字段,它们被排除在ICRC计算之外。对于以太网分组,在从端点发送到结构上时要使用的RC初始值是以管理方式(administratively)配置的。F和B的初始值由结构端口逻辑确定。
[0408] 5位SC(服务信道)可用于与结构上的其他通信量类型分开来对以太网通信量排定优先级。预期了用户可能希望与HPC和结构管理通信量分开来对以太网排定优先级,使得等待时间敏感的应用不会不利地受大量(可能是巨型大小的)以太网分组的并发传送的影响。像F字段和B字段那样,SC也是可变字段,并且类似地被排除在ICRC计算之外。对于以太网分组,在将分组发送到结构中时要使用的默认SC是以管理方式配置的。当在以太网头部内所包含的VLAN标签中指示优先级时,此优先级可用于选择初始SC值。
[0409] 如上文所述,对于在结构上被发送的经封装的以太网分组,L4类型被定义为00000000b;对于10B EN封装头部,这被编码在字节8的四个0位[7,2:0]中,而对于16B EN封装头部,它被编码为字节8的七个0位。PKey字段可用于以管理方式将以太网通信量与其他通信量类型分割开,以便在叠加在相同结构上的以太网之间提供隔离,或者用于其他分区目的。PKey字段对于10B头部是4位[6:3],而对于16B头部是16位。
[0410] 熵值包含在熵字段中,此熵字段允许不同的流跨结构在多个端点之间的有序多路径传送。也可使用熵以支持接收侧缩放。对于以太网分组,可通过存在于以太网分组的L2头部中的源和目的地MAC地址的散列函数来计算熵字段值,或通过设计成用于当跨结构的有序递送是重要的时候提供散列值的多样性同时对给定的分组流维持相同值的任何其他手段来计算熵字段值。熵字段对于10B头部是8位,而对于16B头部是16位。
[0411] 年龄字段仅存在于16B头部格式中。它由结构用于内部路由目的。主机端口和网关端口两者都不依赖于此字节的存在来进行以太网通信。年龄是可变字段,这意味着当分组逐跳地移动通过结构时分组中的初始值可能改变,并且此字段从ICRC计算中被排除。对于以太网分组,在将分组发送到结构上时要使用的初始年龄值是以管理方式配置的。以太网数据内的字段到初始的端点传送的年龄值之间没有暗含的相互关系或直接的映射关系。
[0412] 在结构分组中,L4头部在以太网数据之前。L4头部包含由以太网端点用于处理所接收的经封装以太网分组的控制信息。如图51中所示,具有两种用于经封装的以太网L4头部的格式。头部以低位优先(little-endian)格式定义。在第一格式中,12位被分配给组网关标识符(GGID)。在第二格式中,网关号与被分配给GGID的8位被一起包括。
[0413] 在所示实施例中,L4头部内的字段按如下方式定义:
[0414] ·GN_被包括标志(gni):当置位时,指示L4头部的格式包括网关号字段。
[0415] ·GGID_旁路标志(gb):当置位时,指示L4头部中的GGID不匹配指派给消息发送方的GGID。
[0416] ·网关号(GN):当GN_被包括标志置位时,网关号字段存在于L4头部中。GN字段可用于从GGID聚合内索引特定的网关接口。
[0417] ·GGID:标识将与以太网分组相关联的GGID。
[0418] L4头部中的附加位是预留的(R)。在发送时,它们应当置位为零,并且在接收时,应当被忽略。
[0419] 以太网头部和有效载荷作为字节流被封装在结构分组中,起始于以太网帧的L2头部的开始处的DMAC(目的地MAC地址)的第一字节,并且继续到以太网有效载荷的最后一个字节。以太网帧的L2头部包括48位DMAC(6个八位位组(字节)),随后是48位SMAC(源MAC地址),随后是用于以太网类型字段的2个八位位组(16位),总计14个八位位组。
[0420] 基于以太网数据的实际字节计数来发送经封装的以太网有效载荷。可在结构上发送短的以太网分组而无需填补以实现最少64个八位位组大小,从而改善了效率。当从结构转发到外部以太网链路时,在必要时,可由网关添加填补,从而符合标准以太网链路要求。
[0421] 为了合适地对准经封装的以太网分组内的ICRC的位置,在以太网有效载荷的最后一个有效字节之后一直到ICRC的第一个字节,可添加一些填补字节。需要添加的填补的量是有效以太网数据的字节长度以及所使用的(16B或10B)EN以太网头部格式的函数。在一个实施例中,在发送时,填补将被置位为零,并且在接收时将被忽略。预期填补值在跨结构的传送中是不变的,并且被包括在ICRC计算的范围内。
[0422] 不变的校验和(ICRC)的目的在于验证跨结构被发送的经封装的以太网分组的端对端完整性。ICRC取代以太网FCS用于经封装的以太网分组在结构上的传送;它不仅涵盖以太网数据,还涵盖围绕以太网数据的封装。
[0423] ICRC涵盖结构分组的全部,包括FP头部、L4头部、以太网数据(头部和有效载荷)、任何对准填补以及在尾部字节中传递的端对端信息。对不变的CRC的计算排除头部中可随跳动态地改变的可变字段。如先前所讨论,可变字段包括“F”字段、“B”字段、“SC”字段、“年龄”字段和“LT”字段。
[0424] 结构分组的最后一个微片中的尾部字节指示是否具有好的分组末尾,或是否具有与接收到的分组相关联的缺陷。对于好的分组末尾指示(LT值01),具有可用于传递端对端信息的6个附加的控制位。如图52中所示,经封装的以太网分组使用这些附加位中的三个位来指示在结构分组中的有效的有效载荷数据的末尾与ICRC之间必须插入多少对准填补字节(如果存在任何对准填补字节)的计数。其他3位是预留的。
[0425] 图53a示出经由以太网封装在结构5300上的示例性数据传送。在此示例下,在包括节点5308的第一结构端点处,以太网帧5303的输入流5302被封装到具有10B EN封装头部格式5306的L2结构分组5304中,经由结构5300被传送到包括结构交换机5310的第二结构端点,被解封,并且以太网帧的原始流被重新创建为以太网帧5312的输出流。使用以太网封装实现数据传送,使得从生成并处理以太网帧的流的实体的外表看,帧的传送经由以太网网络。
[0426] 一般而言,将作为网络栈操作集的部分、经由基于源端点处的软件或硬件的设施、在飞行中(on the fly)生成以太网帧。例如,最流行类型的网络通信量是IP分组,IP分组通常由网络栈中的基于软件的IP层结合数据从源端点到目的地端点的传送来生成。在以太网上传送的数据的常见示例是数据文件。
[0427] 在此示例中,节点5308正操作为用于一个或多个虚拟机的主机,而软件应用5314正在VM中的一个上运行。软件应用期望将数据传送到以太网端节点5315,此以太网端节点5315可以是计算机或服务器,或者在HPC环境中,可以是物理或虚拟计算机节点。出于说明性目的,在图53a中示出数据在源端点与目的地端点之间的单程传送;然而,特别是如果数据传送在客户机与服务器之间,则在使用IP通信量的一对端点之间的双向通信将是更一般的情况。
[0428] 一个或多个虚拟机通过使用虚拟机管理器(VMM)或管理程序来采用被映射至物理资源的虚拟资源,所述VMM或管理程序又包含运行于节点5308上的主机操作系统(OS)的应用。取决于在节点5308处提供的网络硬件设备,虚拟资源包括虚拟联网资源,诸如在PHY层或在MAC层上方的网络栈中的层。
[0429] 在常规VM使用中,将由VMM或管理程序以如下方式实现一个或多个虚拟NIC(vNIC):对于在VM上运行的OS,vNIC就像物理NIC。典型地,响应于来自软件应用5314的、经由网络连接来传送数据的请求,将由运行于VM上的OS中的联网软件来生成IP分组流。取决于对OS联网栈与vNIC联网栈之间的工作的勾画,将由OS或vNIC执行将IP分组封装到以太网帧中。随后,以太网帧将被向外发送出物理以太网接口(诸如,由物理NIC或网络适配器提供的物理以太网接口)。在一些配置下,NIC或网络适配器配置成执行将IP分组流封装到以太网帧流中的操作。相应地,在这些配置中,输入流5302将包括不伴随成帧(framing)的以太网分组,并且将不会在节点5308处采用下文中描述的以太网拆帧(deframing)操作。
[0430] 在以太网封装技术下,在通信地耦合至结构的架构的端点之间隧穿以太网帧内容。通过将以太网帧内容封装在结构分组5304中来促进此隧穿。在所示实施例中,由与HFI 5318对接的结构-vNIC(标记为Fab-vNIC)5316执行此封装操作。
[0431] 图55a示出阐释由源端点、结构和目的地端点结合图53a中阐释的以太网帧的传送来执行的操作的流程图5500。在框5502中,在Fab-vNIC 5316处接收以太网帧,并且按如下方式处理。进一步参考图54,当在Fab-vNIC 5316处接收到以太网帧5303的输入流5302时,以太网帧处于它们常规的格式,此常规格式包括12-八位位组帧间间隙5400、随后是7-八位位组以太网前导码以及1-八位位组起始帧定界符(SFD)5402。以太网帧中的这前20个八位位组之后的部分包括以太网分组数据,并且包括14八位位组的以太网头部5404、可变大小以太网有效载荷5406以及4八位位组的以太网FCS和帧末尾(EFD)定界符5408。
[0432] 如图54中所示并且如框5502中所描绘,在封装过程期间,帧间间隙5400和以太网前导码/SFD 5402丢失(或以其他方式被丢弃),并且剥离以太网FSC/EFD 5408,从而将以太网头部5404和以太网有效载荷5406保留为将封装在每一个结构分组5304中的仅有的以太网分组数据。
[0433] 在框5502之后,流程图继续进行到框5540,框5504包括多个子框5506、5508、5510和5512。采用子框操作以将以太网头部字段和以太网有效载荷封装到结构分组5304中。在图53a和流程图5500中所示的实施例中,结构分组5304具有10B EN以太网头部格式5306;然而,可对具有16B EN以太网头部格式的结构分组实现类似的操作。
[0434] 在子框5506中,确定结构目的地端点的DLID(可经由此DLID到达以太网目的地地址)以及结构源端点的SLID。Fab-vNIC具有对包括结构端点的MAC转发表(未示出)的访问权,此MAC转发表用于将经封装的以太网分组转发到以太网端点。在此示例中,以太网端点(由以太网目的地MAC地址(DMAC)标识)是以太网端节点5315。将DMAC用作对MAC转发表的查找输入,在图53a中所示的数据传送中,应用结构目的地端点是结构交换机5310,此结构交换机包括集成的轻量以太网网关5322。结构源端点是HFI 5318,因此,SLID是HFI 5318的SLID。随后,以所确定的DLID和SLID来填充DLID和SLID字段。
[0435] 随后,在子框5508中,用于包括以太网头部字段和以太网有效载荷的(将要)经封装的以太网内容的块将作为位流被连续地写入到结构分组5304的结构分组有效载荷中。一般而言,块大小可对应于如何将以太网内容缓冲在存储器中,例如,对于64位系统,每一个存储器块可以是64位。在所示实施例中,这些块是64位(64B)块;然而,这仅是示例性的,因为可使用其他块大小。
[0436] 在子框5510中,在适用时添加填补以填写结构分组5304,使得结构分组5304的大小落在8字节边界(微片的标称大小)上。随后,基于微片中结构分组5304的长度来更新长度字段值。在子框5512中,随后对结构分组5304内容中不包括不可变字段的部分计算32位L4ICRC32,并且以所计算的ICRC来更新对应的L4ICRC32字段值。这完成了框5504的操作。
[0437] 此刻,结构分组5304准备好经由结构5300被传送到结构交换机5310。然而,如上文中详述,结构分组自身不是整体上经由结构被传送,相反,如图53a中的结构5300内的微片流所描绘,结构分组内容作为被包括在每链路的LTP中的微片被传送。如框5514中所描绘,在一个实施例中,生成14-CRC LTP,它包括65/64B微片,此65/64B微片具有14B CRC以及附在微片15之后的2位信用边带数据。任选地,可使用具有16B CRC的标准检测LTP。也可以使用增强型检测LTP,但是,如下文所解释,由于14-CRC LTP和标准检测LTP具有与在高速以太网链路中的64位/66位块编码时相同的开销,因此相较于使用增强型检测LTP,人们更喜欢使用这些LTP格式。
[0438] 在框5516中,LTP被注入到结构5300中,并且如框5518中所示,结构分组5304的微片经由每链路的LTP被转发到对应于DLID的结构端点设备(结构交换机5310)。例如,出于简单和方便的目的,结构5300示出为云;然而,在内部,结构5300一般将包括经由多个链路而互连的多个交换机。如上文所讨论,取决于在沿路由路径的每一个交换机处的VL仲裁条件,对应于结构分组5304的微片最终可在不同的组中被传送。
[0439] 由目的地结构端点设备执行流程图5500中的其余操作。在框5520中,从结构5300接收LTP/微片,并且在框5522中,从这些LTP中提取64位微片内容,并且组合这些64位微片内容以重新创建结构分组5304的原始内容。由于第65位和CRC是用于LTP传送的额外数据,因此在框5522中,剥离这些数据。在框5524中,重新计算L4ICRC32,以便验证重新创建的结构分组5304的内容匹配它的原始内容。
[0440] 如由框5526所描绘,随后,使用在子框5528和5530中所描绘的操作来为每一个以太网分组重新生成原始的以太网分组内容。此过程开始于子框5528中,在子框5528中,经封装的以太网帧内容被解封,并且作为位流被写出。这基本上是图54中所示以及上文所讨论的过程的逆转。随后,在子框5530中,计算32位帧校验序列,并且将此FCS连同EOF标记一起附到以太网分组位流的末尾。
[0441] 此刻,以太网分组数据将匹配原始的以太网分组数据(如果在数据传送期间没有错误发生)。这也对应于当数据将进一步由PHY层处理时此数据在MAC层处的状态,所述PHY层由轻量以太网网关5322的底侧处的以太网接口的以太网发射PHY实现,所述轻量以太网网关与以太网交换机5324通信地耦合,所述以太网交换机5324设置在结构交换机5310与以太网端节点5315之间。
[0442] 以太网PHY通常配置成用于执行各种译码操作以促进数据在物理链路上的无错传送,所述译码操作诸如,位加扰以及添加用于辅助时钟恢复和对准的sync(同步)位。作为示例而非限制,在一些实施例中,各种软件和硬件部件配置成用于对接到高速以太网链路,诸如,10Gb/s、40Gb/s和100Gb/s。在IEEE标准802.3-2012条款82(章节六)下,40GBASE-R和100GBASE-R物理层设备采用PHY的物理译码子层(PCS)传输码中的64位/66位(64b/66b)块编码。
[0443] 图56(IEEE标准802.3-2012条款82(章节六)中的图82.5的重建)示出64b/66b块编码将如何被实现用于符合40GBASE-R和100GBASE-R物理层标准的以太网链路。每一个块由66个位组成。块的前两个位是同步头部(sync头部)。块是数据块或控制块。sync头部对于数据块是01,而对于控制块是10。由此,在块的这头两个位之间总是有转变。块的其余部分包含有效载荷。有效载荷经加扰,并且sync头部绕过加扰器。因此sync头部是块中仅有的总是保证包含转变的位置。代码的此特征用于获取块同步。
[0444] 数据块包含八个数据字符。控制块以8位块类型字段开始,此块类型字段指示块的其余部分的格式。对于包含开始、终止字符或经排序集合的控制块,那个字符由块类型字段暗示。其他控制字符在7位控制码中进行编码。每一个控制块编码八个字符。
[0445] 在图56中,标记为输入数据的列以缩写形式示出用于创建66位块的八个字符。这些字符是数据字符或控制字符,并且当跨XLGMII、CGMII传送这些字符时,相应地对于对应的TXC或RXC位进行置位。在输入数据列内,D0到D7是数据八位位组,并且在将对应的TXC或RXC位置位为零的情况下被传送。所有其他字符是控制字符,并且在对应的TXC或RXC位置位为1的情况下被传送。多个单个的位字段(图中没有标记的薄矩形)作为0被发送,并且在接收时被忽略。
[0446] 返回到流程图5500,在框5532处,将帧间间隙、以太网前导码和SFD前置于每一个以太网分组以建立对应的以太网帧,从而创建以太网帧位流。随后,在框5534中,完成目的地结构端点设备的操作,其中,根据采用支持使用64b/66b编码的以太网PHY的以太网网关的实施例,以太网帧位流被分区为64B块,并且sync头部(01或10,如果适用)被添加在66B编码格式的位0和位1处以创建64b/66b块。随后,64b/66b经编码的以太网帧被传送到下一跳,从而到达与MAC目的地地址相关联的以太网端点设备。在图53a的示例中,下一跳是以太网交换机5324。
[0447] 如上文所讨论,由结构交换机5310执行在流程图5500中由目的地结构端点执行的操作,在图57中示出其实施例。结构交换机5310是将结构交换机的操作和以太网网关的操作组合在集成单元中的混合式设备。在面向结构的侧,结构交换机5310包括耦合到内部交换机矩阵5702的多个外部交换机端口57001…5700n。内部交换机矩阵又通信地耦合到内部交换机端口5704,此内部交换机端口在内部结构交换机接口5706处与轻量以太网网关5322对接,所述内部结构交换机接口5706包括结构接收块5708和结构发射块5710。在面向以太网的侧,轻量以太网网关5322包括以太网接口5712,此以太网接口包括以太网发射端口5714和接收端口5716,所述以太网发射端口5714和接收端口5716配置成促进与耦合在以太网链路的相对端处的以太网设备(诸如,由以太网交换机5324描绘)之间的双向以太网通信。
[0448] 结合流程图5500的操作框5522,在外部交换机端口中的一个端口的输入端口(未示出)处接收LTP,并且将由与此输入端口相关联的逻辑执行操作框5524和5526。随后,将在结构接收框5708处接收结构分组内容,并且将由L4分组解封和添加FCS块5718执行操作框5526。随后,将由以太网发射端口5714中的逻辑和PHY电路执行框5532和5534的操作。
[0449] 图53a示意性地示出结合以太网源端点到目的地端点的数据传送对各种分组和以太网帧的格式化。以太网帧5303的输入流5302包括从对应于将从软件应用5314传送的文件的数据中生成的以太网分组数据。在成为以太网帧之前,将由运行于节点5308上的VM的OS的联网软件执行各种操作,诸如,层4、层3和层2操作。任选地,这些操作中的一些操作由Fab-vNIC 5316执行。以太网帧的输入流的以太网分组内容被提取并封装在结构分组5326的流中,一旦在结构交换机5310处重新创建结构分组5304,所述结构分组5326就被示出。轻量以太网网关5322的输出是具有64b/66b编码的以太网帧5328的流。当在以太网端节点5315处接收到之后,将执行适用的硬件和软件操作以提取以太网分组5330的流。将由较高的联网层级(如果适用)处理以太网分组数据,并且将执行附加的软件操作以将文件数据写入到存储器中,从而完成数据文件的传送。
[0450] 在图53b中示出在(与图52中所示的)逆向中的以太网源端点到目的地端点,在图55b中的流程图5550中示出对应的操作。如图所示,看向图53b的底部,由以太网端节点5315上的软件(未示出)生成以太网分组5332的流。以太网端节点5315支持40GBASE-R和
100GBASE-R物理层标准中的一项或多项,并且生成具有64b/66b块编码的以太网帧5334的输入流
[0451] 在流程图5550的第一个框5552处,在轻量以太网网关5322的以太网接收端口5716处接收来自以太网交换机5324的以太网帧。在接收端口的PHY处,剥离位的位置0和位置1处的sync位,从而将原始的64B块内容留在位[2:65]处,所述原始的64B块内容在64B块中被存储在位[0:63]。随后,丢弃帧间间隙、前导码和SFD,从而留下以太网头部字段以及具有FCS的有效载荷数据。
[0452] 如由框5554以及子框5556、5558、5560、5562和5564所描绘,下一组操作是将以太网头部字段和有效载荷封装到L2结构分组5304中,L2结构分组5304在此示例中具有10B EN以太网头部格式。在子框5556中,校验FCS,并且如果此FCS是好的,则剥离此FCS,从而留下包含以太网头部字段和有效载荷的以太网分组内容。这些操作由图57中的FCS校验和剥离块5720执行。
[0453] 在框5558中,确定结构目的地端点的DLID(可经由此DLID到达以太网目的地MAC地址)以及结构源端点的SLID。以与上文所述的框5506类似的方式进行这些确定。在此示例中,DMAC地址是Fab-vNIC 5316的虚拟MAC地址或与在节点5308上操作的vNIC相关联的另一虚拟MAC地址,而SMAC是轻量以太网网关5322的MAC地址。随后,所确定的DMAC和SMAC用作对适用的MAC至LID映射表的输入,从而返回适用的DLID和SLID,随后用所述适用的DLID和SLID来填充DLID和SLID头部字段。这些操作由图57中的MAC地址至LID映射块5722执行。
[0454] 随后,在子块5560中,连续地将64B块数据写入结构分组有效载荷字段以封装以太网内容(以太网头部字段和有效载荷)。在适用时,在子框5562中添加的填补,以及长度字段被相应地更新。在子框5564中,计算L4ICRC32,并且更新L4ICRC32字段。这些操作与上文所述的子框5508、5510和5512中的操作类似。在图57的实施例中,由L4分组封装块5724执行这些操作。
[0455] 在此阶段,完成了由轻量以太网网关5322执行的操作,并且结构分组5336的流在内部从结构发射块5710被转发到外部交换机端口中将用于将待经由LTP而传送的对应微片注入到结构5300中的一个外部交换机端口的输出端口(未示出)。如框5566中所描绘,以与上文中讨论的在框5514和5516中执行的操作类似的方式,在输出端口处,使用65/64B微片生成适用的14-CRC LTP或标准检测LTP,并且将此14-CRC LTP或标准检测LTP注入到结构5568中。同样,如之前所述,如框5570中所描绘,将微片转发到由DLID标识的适用的结构端点设备。
[0456] 由HFI 5318结合Fab-vNIC 5316来执行流程图5550的右手列中所示的其余操作。如之前所述,如框5572、5574和5576中所描绘,在HFI 5318处从结构5300接收具有对应于结构分组流5336的微片的微片的LTP,提取适用的微片以重新创建原始的结构分组内容,并且重新计算L4ICRC32并将此L4ICRC32与所传送的L4ICRC32比较以验证结构分组的数据是好的。这些操作对应于由结构链路端点设备(诸如,HFI或结构交换机)的输入端口执行的正常操作。
[0457] 结合接收到好的结构分组,在框5578中,经由在子框5580和5582中描绘的操作重新生成原始的以太网分组。首先,在子块5580中,解封经封装的以太网内容,并且以太网分组内容作为位流被写入存储器缓冲器。随后,子框5582中,计算32位FCS,并且将此32位FCS附到以太网分组内容的末尾,由此完成原始以太网分组的重新生成。
[0458] 取决于如何配置在节点5308上运行的Fab-vNIC 5316和其他软件部件,这可以是或可以不是处理的结尾。例如,一些VMM包括配置成用于具有不同能力的某些类型的物理以太网NIC的vNIC。较近期的以太网NIC可配置成支持硬件中的层1和层2操作两者(或利用由NIC主管的基于软件的操作以其他方式辅助)。此类以太网NIC可直接对接至VM层级处的层3或层4联网软件(诸如,OS联网栈的层3或层4)。结果,Fab-vNIC 5316可对接至层3或层4处的VM OS,从而将IP分组的流提供至OS联网栈,所述OS联网栈配置成执行进一步的处理以将所提取的文件数据写入存储器缓冲器。对于较不精细的以太网NIC,预期经由主机上的软件执行MAC层(层2)操作的全部或部分。相应地,Fab-vNIC 5316的输出将是以太网帧的流,诸如,由图53b中重新生成的以太网帧5334R的流描绘的以太网帧的流。
[0459] 为了促进以太网帧的重新生成,在框5584中执行附加操作,在框5584中,将帧间间隙、前导码、SFD前置于每一个以太网分组以重新生成以太网帧的流,随后,在内部(经由节点5318上的软件)将此以太网帧的流转发至与目的地MAC地址相关联的VM或vNIC,以进行进一步的处理来提取原始的文件数据。
[0460] 除了经由混合式结构交换机-以太网网关来采用以太网网关操作之外,还可将以太网网关实现为独立式设备或以太网网关还可与以太网交换机组合。例如,图53a和图53b中所示的第二以太网端节点5338耦合至以太网交换机5340,此以太网交换机5340包括全功能以太网网关5342。在所示配置中,全功能以太网网关5342包括结构端点设备,此结构端点设备经由结构交换机5344而耦合至结构5300。类似地,轻量以太网网关可实现为独立式结构端点设备。
[0461] 根据本文中公开的以太网封装技术的进一步的方面,以太网网关的实施例配置成支持线速和以太网分组数据速率匹配。更进一步而言,使用可靠的、较少损失的结构来支持线速和以太网分组数据速率匹配。线速匹配是指以太网链路和结构链路中的每一者的线速(也称为“线速率”、“传送速率”或“传送速度”)相同的配置。在一个实施例中,以太网链路包括由一个或多个现有的或未来的IEEE802.3标准定义的100Gb/s链路,并且结构链路类似地支持100Gb/s线速。在一个实施例中,由PHY用于以太网接口和结构接口的SERDES(串行化/解串行化)方案是相同的或采用同等的带宽。在一个实施例中,结构接口PHY和以太网PHY中的每一者都采用四通道链路。
[0462] 如上文所讨论,各种供应(provision)被包括在结构链路架构中以支持可靠且较少损失的结构。这些包括使用可靠的LTP以及基于信用的流控制。在以太网封装技术的一个实施例中,LTP采用具有2信用边带信道的14b CRC的LTP格式。在此格式下,每一个可靠的LTP中的两个位提供信用边带信道用于VL信用的交换。如本文中所使用,2个信用边带信道位也可以称为信用返回字段,并且以下列方式操作。
[0463] 如图58中所示,经由四个连续的有效LTP的组来传递VL信用信息,其中,组合4x 2信用边带信道位以形成8位信用消息5800。前五个位指定VL,而其余3个位指定根据表7的编码方案而返回的信用量。在一个实施例中,第一个组以链路传送初始化之后的第一个有效的可靠LTP开始。四个连续的有效可靠LTP的每一个后续组提供新的信用消息。如上文所讨论,可响应于检测到坏LTP而重传可靠的LTP。来自被丢弃的LTP的信用边带位不被包括在任何信用消息中,并且不作为四个连续的有效LTP的部分被计数。
[0464] 分组数据速率匹配对应于在链路上传输分组数据的速率。在以太网链路采用64b/66b块编码的情况下,开销位比数据位的比率为1:32。类似地,在具有两位信用边带信道的
14b CRC LTP中,开销位比数据位的比率为1:32。在这种情况下,具有32个开销位(16个微片类型位+14位CRC+2个信用边带位),而具有16x64=1024个数据位;32:1024=1:32。如果以太网链路和结构链路的线速匹配(例如,两者都为100Gb/s)且开销位比率匹配,则数据跨以太网网关流动的速率将类似地匹配。此外,由于用于LTP的开销的部分用于促进可靠的、较少损失的链路,因此使以太网分组数据能够以与在网关的以太网侧接收到以太网分组数据以及从网关的以太网侧发射以太网分组数据相同的速率来跨较少损失的结构被传送。
[0465] 在一些配置下,沿两个以太网端点之间的路由路径,可介入结构。在这种情况下,这两个结构端点将包括某种类型的以太网网关(独立式的或与结构交换机或其他结构设备集成)。在具有由本文中公开的实施例支持的匹配的线速和以太网分组数据速率匹配特征的以太网封装下,可使以太网分组数据以如下方式在两个以太网端点之间传送:从以太网端点的角度看,此方式好像沿着仅包括以太网链路的路由路径。
[0466] 图59示出根据一个实施例的、链路接口端口中包括发射端口5900和接收端口5902的所选择的方面。在先前的附图中示出图59中示出的各种元件,并且在本文中别处进一步详细地讨论这些元件。除了示出的元件之外,发射端口和接收端口两者都将包括由于绘图尺寸限制而未示出的附加的部件。
[0467] 发射端口5900和接收端口5902中的每一个都包括用于实施本文中讨论的用于实施发射端口操作的电路和逻辑。如上文中所呈现,并且如图2中所示,该架构采用链路结构子层、链路传送子层和PHY层。相应地,用于发射端口5900和接收端口5902中的每一个的电路和逻辑被描绘为被分割为促进对应的子层或层操作的块。对于发射端口5900,这些包括Tx链路结构子层电路和逻辑5904、Tx链路传送子层电路和逻辑5906以及Tx PHY电路和逻辑5908。类似地,接收端口5902包括Rx链路结构子层电路和逻辑5910、Rx链路传送子层电路和逻辑5912以及Rx PHY电路和逻辑5914。将理解,这些较大的电路和逻辑块的划分不是严格的,并且可跨多于一个的块或在另一块中实现给定的电路和逻辑块内示出的一些功能,并且图59中示出的配置仅是示例性的且不限于可实现的其他配置。
[0468] 以简化的形式示出Tx PHY电路和逻辑5908,包括四个发射机5916和Tx链路控制块1804的部分。一般而言,取决于该链路的PHY层配置,发射机5916可包括电气或光学发射机。
联网领域的普通技术人员将理解,Tx PHY电路和逻辑块将包括为了清楚起见而未示出的、用于实现发射侧PHY层操作的附加的电路和逻辑。这包括PHY层内的各种子层,这些子层用于促进结合高速互连来实现的各种特征以减少错误并增强传输特性。在一个实施例中,由Tx链路控制块1804中助益PHY层操作的部分来执行加扰以及64b/66b发射侧操作。
[0469] Tx链路传送子层电路和逻辑5906配置成实现本文中描述的链路传送子层操作的发射侧方面。这些包括用于捆包LTP、准备LTP流以换手至Tx PHY、以及支持响应于RetryReq的LTP重放的各种部件和逻辑块,包括重试逻辑5918、LTP捆包块5920、重放缓冲器1806以及NxtWrLTP和NxtTxLTP指针。此外,如由QoS块5922所描绘的,对于Tx链路传送子层实现Tx链路控制块1804的部分和QoS功能。
[0470] Tx链路结构子层电路和逻辑5904配置成实现本文中描述的链路结构子层操作的发射侧方面。用于促进这些操作的所示出的部件包括结构分组建立块5924、仲裁逻辑3400、信用管理器3002以及多个输出FIFO 3704,所述结构分组建立块5924包括配置成用于执行对以太网、无限带宽和原生架构分组的封装的L4封装子块5926。同样,如图所示,QoS逻辑5922的部分用于在链路结构子层处实现的QoS操作。
[0471] 以简化的形式示出Rx PHY电路和逻辑5914,该Rx PHY电路和逻辑5928包括四个接收机5028和Rx链路控制块1805的部分。一般而言,取决于链路的PHY层配置,接收机5928可包括电气或光学发射机,并且将配置成在该链路上接收来自发射机5916的信号。联网领域的普通技术人员将理解,Rx PHY电路和逻辑块将包括为了清楚起见而未示出的、用于实现接收侧PHY层操作的附加的电路和逻辑。这包括PHY层内的各种子层,这些子层用于促进结合高速互连来实现的各种特征以减少错误并增强传输特性。在一个实施例中,由Rx链路控制块1805中促进PHY层操作的部分来执行解扰以及(用于在以太网网关中采用的接收端口的)64b/66b接收侧操作。在不包括以太网网关的HIF和结构交换机处的接收端口不执行64b/66b接收侧操作。
[0472] Rx链路传送子层电路和逻辑5912配置成实现本文中描述的链路传送子层操作的接收侧方面。这些包括用于解包LTP、检测LTP CPC以及每通道的CPC错误、接收机抛弃模式和相关联的操作、以及QoS操作的各种部件和逻辑块。所示出的部件和块包括QoS逻辑5930、Rx抛弃块5934、LTP/通道错误检测块5934、LTP解包块5935、每通道以及每个XFR组CRC、Rx LTP序列寄存器以及NxtRxLTP指针。
[0473] Rx链路结构子层电路和逻辑5910配置成实现本文中描述的链路结构子层操作的接收侧方面。用于促进这些操作的所示出的部件和块包括结构分组重组块5938、信用返回块5942、输入FIFO 3906和QoS逻辑5930的部分,所述结构分组重组块5938包括L4分组解封装子块5940。此外,用于输入FIFO 3906的缓冲器空间的组织被描绘为采用三层式共享缓冲器组织方案5944,注意,同样可使用图31a和31b中示出的其他缓冲器组织方案以及本文中讨论的其他缓冲器组织方案。
[0474] 对于HFI和其他端点设备,发射和接收端口可包括用于对接至由其他外部部件执行的较高层的操作的附加的接口逻辑。出于说明性目的,通过Rx L4接口5946和Tx L4接口5948描绘这些接口,它们分别配置成用于与HFI或其他端点设备上的接收侧和发射侧层4逻辑和/或部件对接。
[0475] 图60示出根据一个实施例的多端口结构交换机6000。结构交换机6000包括16个结构接口端口6002,每一个结构接口端口6002都包括如上文参照图59所述的Rx端口5902和Tx端口5900。每一个Rx端口5902包括多个输入FIFO 3906,而每一个Tx端口5900包括多个输出FIFO 3704。如图所示,Rx端口5902和Tx端口5900耦合至交叉6004,该交叉6004配置成选择性地将接收端口的输出链接至发射端口的输入。除了图60中所示的部件之外,采用各种仲裁逻辑和QoS逻辑来控制交叉6004的端口映射,包括使用转发和路由表6006,该转发和路由表5106以与图38中所示且在上文中所讨论的转发和路由表3808类似的方式操作。
[0476] 图61示出流程图6100,该流程图5200描绘用于处置在接收端口处接收到的微片并在输入FIFO中缓冲它们的操作和逻辑。在框6102中,接收到作为LTP微片流的部分的微片,并且已执行PHY层处理以恢复LTP和微片数据,从而能够检查各个微片。在决策框6104中,作出微片是否是空闲微片或LF控制微片的判定。如上文中参照表1所讨论,以“000”开始(包括位65的微片类型位)的微片是空闲微片、LF命令微片或错误微片。假设微片不是这些中的任一个,则对侧决策框6104的回答为“否”,并且逻辑流至决策框6106,在框5206处,作出微片是头微片、体微片还是尾微片的判定。如上文中结合交织和抢占所讨论,大多数微片将是体微片,并且在框6108中,将这些微片添加至由当前VL标识的FIFO缓冲器中,在一个实施例中,该FIFO缓冲器由存储在当前VL寄存器中的指标标识。随后,逻辑返回至框6102以处置下一微片。
[0477] 如上文所讨论,可响应于以下各项来改变当前VL:新的头微片;对应于先前接收到其头微片的结构分组的尾微片;或VL标记(对于提供对使用VL标记的支持的实施例)。如框6110中所示,响应于在框6106中确定了微片是头微片,检查结构分组SC(以及对于经IB封装的FP,SL)字段以确定与结构分组相关联的虚拟通道,从而应用适用的QoS逻辑。例如,在一个实施例中,在图39中示出并在上文中讨论了这些操作。在框图6112中,将对应于所标识的VLr的指标写入到当前VL寄存器中以更新微片将被添加至其的当前VL。如果适用,也使VL栈进栈。随后,逻辑返回至框6102以处置下一微片。
[0478] 如上文中结合交织和抢占所讨论的,当使用头微片来改变当前VL时,使用尾微片以便通过出栈而使当前VL返回至先前的VL。相应地,响应于在决策框6106中检测到尾微片,逻辑继续至框6114,在框5214处,使VL栈出栈以更新当前VL寄存器。随后,逻辑返回至框6102以处置下一微片。
[0479] 返回到决策框6104,如果微片被标识为空闲微片或LF控制微片,则逻辑继续至决策框6116以判定微片是否是VL标记。如果不是,则在框6120中,执行由LF控制微片或空闲微片指定的(多个)适用的操作,并且逻辑返回至框6102以处置下一微片。然而,如果微片是包括VL标记的LF控制微片,则逻辑继续至框6118,在框5218中,以由VL标记标识的VL来更新当前VL寄存器,并且使VL栈入栈。随后,逻辑返回至框6102以处置下一微片。
[0480] 图62示出了具有示例性配置的节点6200,该示例性配置包括主机结构接口6202,该主机结构接口6202包括耦合至处理器6206的结构端口6204,该处理器6206又耦合至存储器6208。如图1中所示,系统节点可能具有各种配置,诸如但不限于由分立的单节点平台106、虚拟化平台110、多节点平台116和集成单节点平台120示出的那些配置。一般而言,每个节点配置将包括至少一个处理器、存储器以及具有图62中所示的类似的部件的至少一个HFI。
[0481] 结构端口6204包括具有与图59中所示的配置类似的配置的发射端口5900和接收端口5902。发射端口5900包括:Tx链路结构子层电路和逻辑5904,包括分区为多个发射VL缓冲器的发射缓冲器;Tx链路传送子层电路和逻辑5906;Tx PHY电路和逻辑5908,包括四个发射机5916;以及Tx链路控制块1804。接收端口5902包括:Rx链路结构子层电路和逻辑5910,包括分区为多个接收VL缓冲器的接收缓冲器;Rx链路传送子层电路和逻辑5912;Rx PHY电路和逻辑5928,包括四个接收机5928;以及Rx链路控制块1805。
[0482] HFI 6202进一步包括耦合至PCIe(外围组件互连快速)接口(I/F)6210的发射引擎6212和接收引擎6214。发射引擎6210包括发射缓冲器6216,在该发射缓冲器6216中,缓冲L4分组(例如,包括经封装的TCP/IP分组的以太网分组、无限带宽分组)和/或结构分组。在一个实施例中,用于发送缓冲器6216的存储器的全部或部分包括存储器映射的输入/输出(MMIO)地址空间,也称为编程IO(PIO)空间。MMIO使处理器6206能够经由例如直接存储器访问来执行对发射缓冲器6214的直接写入(DMA写入)。
[0483] 接收引擎6212包括接收缓冲器6218和DMA引擎6220。接收缓冲器用于缓冲接收端口5902的输出,接收端口5902可包括结构分组和/或L4分组。DMA引擎6220配置成执行DMA写入以将来自接收缓冲器6218的分组数据复制到存储器6208和/或处理器6206中的多个存储器高速缓存级中的一个。例如,在一些实施例中,以DMA方式将分组头部数据写入高速缓存,同时以DMA方式将分组有效载荷数据写入存储器。
[0484] 处理器6206包括CPU 6222,该CPU 6222包括多个处理器核6224,每一个处理器核都包括集成的第1级和第2级(L1/L2)高速缓存并耦合至一致性互连6226。耦合至存储器6208的存储器接口6228、集成输入/输出块(IIO)6230以及末级高速缓存(LLC)6232也耦合至一致性互连6226。IIO 6230在由处理器核、存储器和高速缓存所采用的一致性域与用于IO部件和IO接口(包括一对PCIe根复合体(RC)6234和6236)的非一致性域之间提供接口。如本领域公知,PCIe RC位于PCIe互连层次结构的顶部,多个PCIe接口和PCIe设备可耦合至PCIe RC,如PCIe接口6238、6240、6242和6244所示。如图所示,PCIe 6240耦合至HFI 6214的PCIe接口6202。
[0485] 在诸如图62中所示的一些实施例中,处理器6212采用芯片上系统(SoC)架构。在其他实施例中,PCIe相关的部件集成在IO芯片组等中。在其他实施例中,处理器6212以及一个或多个HFI 6202被集成在SoC上,诸如,由SoC6246的虚线轮廓所描绘。
[0486] 如进一步在图62中示出,软件应用5314和结构vNIC 5316包括在一个或多个处理器核6224上运行的软件组件或由运行在处理器6206上的操作系统主控的一个或多个虚拟机。除了这些软件组件之外,存在实现在存储器6208中的附加的软件组件和缓冲器,以促进在存储器6208(包括适用的多个高速缓存级)与发射引擎6210和接收引擎6212之间的数据传送。
[0487] 一般而言,在本文的附图中描绘的电路、逻辑和部件还可在各种类型的集成电路(例如,半导体芯片)和模块中实现,包括分立的芯片、SoC、多芯片模块以及包括对多个网络接口的支持的联网/链路接口芯片。此外,如本文中所使用,用于实施各种操作的电路和逻辑可经由嵌入式逻辑、嵌入式处理器、控制器、微引擎来实现,或以其他方式使用硬件、软件和/或固件的任何组合来实现。例如,通过各种逻辑块和/或电路描绘的操作可使用编程逻辑门等(包括但不限于,ASIC、FPGA、IP块库)来实现,或通过在包括处理器、处理器核、控制器、微控制器、微引擎等的一个或多个处理元件上执行的软件或固件指令中的一个或多个来实现。
[0488] 另外,本说明书的多个实施例的方面可以不仅在半导体芯片、SOC、多芯片模块等之内实现,而且还可在非瞬态的机器可读介质内实现。例如,上述设计可被存储在和/或嵌入在与用于设计半导体器件的设计工具相关联的非瞬态机器可读介质内。示例包括用VHSIC硬件描述语言(VHDL)语言、Verilog语言或SPICE语言、或其他硬件描述语言来格式化的网表(netlist)。一些网表的示例包括:行为级网表、寄存器传送级(RTL)网表、门级网表以及晶体管级网表。机器可读介质还包括具有诸如GDS-II文件之类的布局信息的介质。此外,用于半导体芯片设计的网表文件或其他机器可读介质可被用在模拟环境中以执行以上教导的方法。
[0489] 虽然参考特定实现方式描述了一些实施例,但根据一些实施例,其他实现方式也是可能的。另外,附图中所示的和/或本文中描述的元件或其他特征的布置和/或顺序不必以所示和所描述的特定方式来布置。根据一些实施例,许多其他布置是可能的。
[0490] 在附图中示出的每一个系统中,在一些情况下的每个元件可具有相同或不同的附图标记以表明所表示的元件可能不同和/或类似。但是,元件可以足够灵活以具有不同的实现方式,并与本文所示或所述的一些或所有系统一起操作。附图中示出的各种元件可以是相同或不同的。将哪个称为第一元件以及将哪个称为第二元件是任意的。
[0491] 在以上具体实施方式和权利要求中的诸如'n’,‘m’,‘k’之类的斜体字用于描绘整数,并且特定字母的使用不限于特定实施例。此外,在不同的权利要求中可使用相同字母以表示不同的整数,或者可使用不同的字母。此外,在具体实施方式中使用特定字母可能或可能不匹配在涉及具体实施方式中的相同主题的权利要求中使用的字母。
[0492] 在说明书和权利要求书中,可使用术语“耦合的”和“连接的”及其衍生词。应当理解,这些术语并不旨在作为彼此的同义词。相反,在特定实施例中,可以使用“连接的”来指示两个或更多个元件彼此直接物理和/或电接触。“耦合的”可意味着两个或更多个元件直接物理或电接触。然而,“耦合的”也可意味着两个或更多个元件彼此并不直接接触,但是仍然彼此协作或相互作用。
[0493] 实施例是本发明的实现或示例。说明书中对“实施例”、“一个实施例”、“一些实施例”或“其他实施例”的引用表示结合这些实施例描述的特定的特征、结构或特性被包括在本发明的至少一些实施例中,而不一定在所有的实施例中。各处出现的“实施例”、“一个实施例”或“一些实施例”不一定都指相同的实施例。
[0494] 并非本文中描述和示出的所有部件、特征、结构、特性等都需要被包括在特定实施例或多个实施例中。例如,如果说明书陈述“可”、“可能”或“能够”包括部件、特征、结构或特性,则不一定包括该特定的部件、特征、结构或特性。如果说明书或权利要求书提到“一”或“一个”元件,则这并不意味着仅有一个该元件。如果说明书或权利要求书引用“附加的”元件,则不排除有多于一个的该附加的元件。
[0495] 上文对本发明的所示出的本发明的各实施例的描述(包括在摘要所描述的内容)不是详尽的,也不将本发明限于上文所公开的精确形式。尽管为了说明,本文中描述了本发明的具体实施例以及示例,但是,如相关领域技术人员所理解,在本发明的范围内,各种等效的修改是可能的。
[0496] 可以根据上面的具体实施方式对本发明进行这些修改。所附权利要求书中所使用的术语不应该被理解为将本发明限制于说明书和附图中所公开的特定实施例。相反,本发明的范围完全由所附权利要求书来确定,权利要求书根据权利要求解释的建立的原则来解释。