促进网络接口控制器(nic)中的高效包转发的系统和方法

文档序号:1895346 发布日期:2021-11-26 浏览:13次 >En<

阅读说明:本技术 促进网络接口控制器(nic)中的高效包转发的系统和方法 (System and method for facilitating efficient packet forwarding in a Network Interface Controller (NIC) ) 是由 R·L·阿尔弗森 P·昆都 D·罗威斯 D·C·休森 A·成 于 2020-03-23 设计创作,主要内容包括:提供了一种能够进行高效包转发的网络接口控制器(NIC)。所述NIC可以配备有主机接口、包生成逻辑块和转发逻辑块。在操作期间,所述包生成逻辑块可以经由所述主机接口从所述主机设备为远程设备获得消息。所述包生成逻辑块可以根据所述消息生成针对所述远程设备的多个包。然后,所述转发逻辑块可以基于有序传送来发送所述多个包的第一包子集。如果满足第一条件,则所述转发逻辑块可以基于无序传送来发送所述多个包的第二包子集。此外,如果满足第二条件,则所述转发逻辑块可以基于有序传送来发送所述多个包的第三包子集。(A Network Interface Controller (NIC) capable of efficient packet forwarding is provided. The NIC may be equipped with a host interface, packet generation logic, and forwarding logic. During operation, the packet generation logic may obtain a message from the host device for a remote device via the host interface. The packet generation logic may generate a plurality of packets for the remote device from the message. The forwarding logic block may then transmit a first subset of packets of the plurality of packets based on the in-order delivery. The forwarding logic block may send a second subset of packets of the plurality of packets based on out-of-order delivery if a first condition is satisfied. Further, the forwarding logic may send a third subset of the plurality of packets based on the in-order delivery if the second condition is satisfied.)

促进网络接口控制器(NIC)中的高效包转发的系统和方法

背景技术

技术领域

本公开总体上涉及联网技术领域。更具体地,本公开涉及用于促进在网络接口控制器(NIC)中进行高效包转发的系统和方法。

相关技术

随着支持网络的设备和应用变得越来越普遍,各种类型的流量以及不断增加的网络负载继续要求底层网络架构提供更高的性能。例如,诸如高性能计算(HPC)、流媒体和物联网(IOT)等应用可以产生具有鲜明特征的不同类型的流量。因此,除了诸如带宽和延迟等传统网络性能指标外,网络架构师仍继续面临诸如可扩展性、多功能性和效率等挑战。

发明内容

提供了一种能够进行高效包转发的网络接口控制器(NIC)。所述NIC可以配备有主机接口、包生成逻辑块和转发逻辑块。所述主机接口可以使主机设备耦接。在操作期间,所述包生成逻辑块可以经由所述主机接口从所述主机设备为远程设备获得消息。所述包生成逻辑块可以根据所述消息生成针对所述远程设备的多个包。然后,所述转发逻辑块可以基于有序传送来发送所述多个包的第一包子集。如果满足第一条件,则所述转发逻辑块可以基于无序传送来发送所述多个包的第二包子集。此外,如果满足第二条件,则所述转发逻辑块可以基于有序传送来发送所述多个包的第三包子集。

附图说明

图1示出了示例性网络。

图2A示出了具有多个NIC的示例性NIC芯片。

图2B示出了NIC的示例性架构。

图3A示出了NIC中到无序包转发的示例性切换。

图3B示出了NIC中到有序包转发的示例性切换。

图4A示出了用于在NIC中进行输入输出输入(IOI)包转发的消息选择过程的流程图。

图4B示出了NIC中的IOI包转发过程的流程图。

图4C示出了NIC中用于最后一个包的IOI包转发过程的流程图。

图5示出了配备有促进高效包转发的NIC的示例性计算机系统。

在这些附图中,相同的附图标记指代相同的附图元素。

具体实施方式

对所公开实施例的各种修改对于本领域技术人员来说将是显而易见的,并且在不脱离本公开的精神和范围的情况下,本文定义的一般原理可以应用于其他实施例和应用。因此,本发明不限于所示实施例。

概述

本公开描述了促进在网络接口控制器(NIC)中进行高效包转发的系统和方法。NIC允许主机与数据驱动的网络进行通信。网络可以通过维持各个包流的状态信息以快速、有效的拥塞控制来适应动态数据流量。更具体地,注入交换机网络中的包可以被分类到流中,这些流可以映射到它们的层2、层3或其他特定于协议的报头信息。每个流可以用交换机的输入端口本地的不同标识符进行标记,并设置有特定于流的输入缓冲区,以便每个流可以单独进行流控制。另外,相应流中的包可以在到达网络的出口点时进行确认,而确认的包可以沿着相同的数据路径以相反的方向被发送回所述流的入口点。因此,每个交换机都可以获得其正在转发的活动包流的状态信息,并且可以执行高响应性、特定于流的流控制。这种流控制可以允许网络以更高的容量操作,同时提供通用的流量工程能力。

本文描述的实施例通过以下方式来解决高效转发有序包流的问题:(i)按顺序转发所述流中的初始的一组包和最后的一组包;以及(ii)针对所述流中的其余包切换到无序转发。通过这种方式,NIC可以促进有序传送所述流中的第一个包和最后一个包,并无序传送所述流中的中间包。

在操作期间,可以在NIC的源设备上运行的应用程序可以发出指示对远程目标设备的存储器位置进行数据操作(例如,远程直接存储器访问(RDMA)的“GET”或“PUT”命令)的消息。源设备和目标设备的NIC可以分别被称为源NIC和目标NIC。操作可以是幂等操作或非幂等操作。幂等操作可以执行一次以上,而不会导致错误。另一方面,非幂等操作可以执行一次。将非幂等操作执行一次以上可能会导致错误。通常,如果幂等RDMA操作没有完成,则目标设备的软件(例如,操作系统)可以重放所述操作,而不是目标NIC执行所述操作。

指示操作的消息可以是可以经由多个包传输的大消息。消息语义可能需要有序地传送这些包。例如,与存储器访问相关的消息可能需要按顺序传送包。然而,有序传送可能会产生大量的开销(诸如通过预定路径进行传输、严格执行按顺序进行包传输以及对乱序包进行包丢弃),这可能会导致数据转发效率低下。因此,有序传送大消息会对性能产生不利影响。

为了解决这一问题,源NIC可以对消息使用有序包传送和无序包传送两者,以提高性能,同时保持消息边界的顺序。特别地,如果消息是针对幂等操作,则NIC可以基于无序传送来发送其中一些包。在操作期间,源NIC可能会接收到大于最大发射单元(MTU)的消息。因此,源NIC可以基于MTU根据消息生成多个包。由于多个包可以在其各自的有效载荷中包括消息的一部分,因此这些包可以被称为包流。然后,源NIC可以确定消息(或包流中的包)的大小是否大于大小阈值。在一些实施例中,大小阈值可以对应于传输时间大于源NIC与目标NIC之间往返时间(RTT)两倍的大小。NIC可以基于RTT和有效带宽动态地确定阈值。当第一响应返回到NIC时,NIC可以基于未完成的有序包的数量和大小来测量RTT和有效带宽。

如果消息大小大于大小阈值,则源NIC可以对包流启动输入输出输入(IOI)包传输。为了促进IOI包传输,源NIC可以转发初始的一组包以进行有序传送。这些包中的每一个都可以包括序列号和指示按顺序传送的指示符。目标NIC可以接收一个或多个包,并发出对应的响应。由于这些包是有序包,因此响应也可以是累积响应。然而,由于响应可能不是有序的,因此源NIC会接收到任何一个响应。基于接收到的第一响应,源NIC可以确定目标NIC已成功接收到所述响应的序列号以内的所有包。

然后,源NIC可以针对后续包切换到无序传送。当剩余包的数量变得小于切换阈值(即,消息结尾的包)时,源NIC可以切换回有序传送。在一些实施例中,切换阈值可以指示未完成包的数量。未完成的包是源NIC尚未接收到响应的包。为了进一步确保最后一个包按顺序传送,源NIC可以不发送包流中的最后一个包,直到源NIC已经接收到对所有无序包的响应。通过这种方式,源NIC可以使用IOI包传输,其可以结合有序包传送和无序包传送两者,从而促进对大消息进行高效包转发。

本发明的一个实施例提供了一种NIC,所述NIC可以配备有主机接口、包生成逻辑块和转发逻辑块。所述主机接口可以使主机设备耦接。在操作期间,所述包生成逻辑块可以经由所述主机接口从所述主机设备为远程设备获得消息。所述包生成逻辑块可以根据所述消息生成针对所述远程设备的多个包。然后,所述转发逻辑块可以基于有序传送来发送所述多个包的第一包子集。如果满足第一条件,则所述转发逻辑块可以基于无序传送来发送所述多个包的第二包子集。此外,如果满足第二条件,则所述转发逻辑块可以基于有序传送来发送所述多个包的第三包子集。

在本实施例的变体中,所述包生成逻辑块可以确定所述消息的大小大于第一阈值。

在本实施例的变体中,触发所述第一条件可以包括从所述远程设备接收对所述第一包子集中的一个包的响应。

在本实施例的变体中,触发所述第二条件可以包括确定所述第三包子集中的包数量小于第二阈值。

在进一步变体中,所述第二阈值指示所述第一包子集和所述第二包子集中的未完成包的数量。

在本实施例的变体中,所述转发逻辑块可以识别所述第三包子集中的最后一个包,并且不发送所述最后一个包,直到接收到对所述第二包子集中所有包的相应响应为止。

在本实施例的变体中,所述第一包子集、所述第二包子集和所述第三包子集可以以非重叠顺序发送。

在本实施例的变体中,所述转发逻辑块可以维持指示所述第一包子集和所述第三包子集中未完成包的数量的第一计数器。所述转发逻辑块还可以维持指示所述第二包子集中未完成包的数量的第二计数器。

在本实施例的变体中,所述转发逻辑块可以在所述第一包子集和所述第三包子集中的相应包中设置标志。所述标志可以指示需要有序地传送包。

在本实施例的变体中,所述消息对应于RDMA命令。

在本公开中,结合图1的描述与网络架构有关,并且结合图2A及之后的描述提供了关于与支持对幂等操作进行高效管理的NIC相关联的架构和操作的更多细节。

图1示出了示例性网络。在该示例中,交换机网络100(也可以被称为“交换机结构”)可以包括交换机102、104、106、108和110。每个交换机在交换机结构100内可以具有唯一的地址或ID。各种类型的设备和网络可以耦接到交换机结构。例如,存储阵列112可以经由交换机110耦接到交换机结构100;基于无限带宽(IB)的HPC网络114可以经由交换机108耦接到交换机结构100;诸如主机116等多个终端主机可以经由交换机104耦接到交换机结构100;并且IP/以太网网络118可以经由交换机102耦接到交换机结构100。通常,交换机可以具有边缘端口和结构端口。边缘端口可以耦接到结构外部的设备。结构端口可以经由结构链路耦接到结构内的另一个交换机。通常,流量可以经由边缘交换机的入口端口注入到交换机结构100中,并经由另一个(或同一个)边缘交换机的出口端口离开交换机结构100。入口链路可以将边缘设备(例如,HPC终端主机)的NIC耦接到边缘交换机的入口边缘端口。然后,交换机结构100可以将流量传输到出口边缘交换机,所述出口边缘交换机进而可以经由另一个NIC将流量传送到目的地边缘设备。

示例性NIC架构

图2A示出了具有多个NIC的示例性NIC芯片。参考图1中的示例,NIC芯片200可以是为主机116设计的定制专用集成电路(ASIC)以与交换机结构100一起工作。在该示例中,芯片200可以提供两个独立的NIC 202和204。芯片200的各个NIC可以配备有主机接口(HI)(例如,用于连接到主机处理器的接口)和一个高速网络接口(HNI),以用于与耦接到图1的交换机结构100的链路进行通信。例如,NIC 202可以包括HI 210和HNI 220,并且NIC 204可以包括HI 211和HNI 221。

在一些实施例中,HI 210可以是外围部件互连(PCI)接口或快速外围部件互连(PCIe)接口。HI 210可以经由主机连接201耦接到主机,所述主机连接可以包括N个(例如,在一些芯片中N可以是16)PCIe Gen 4通道,能够以高达每通道25Gbps的信令速率进行操作。HNI 210可以促进高速网络连接203,这样可以与图1的交换机结构100中的链路进行通信。HNI 210可以使用M个(例如,在一些芯片中M可以是4)全双工串行通道以100Gbps或200Gbps的总速率进行操作。M个通道中的每一个都可以分别基于非归零(NRZ)调制或脉冲幅度调制4(PAM4)以25Gbps或50Gbps的速率进行操作。HNI 220可以支持电气和电子工程师协会(IEEE)802.3基于以太网的协议、以及为更高速率的小消息提供支持的增强型帧格式。

NIC 202可以支持以下一项或多项:基于消息传递接口(MPI)的点对点消息传递、远程存储器访问(RMA)操作、批量数据集体操作的卸载和进度、以及以太网包处理。当主机发出MPI消息时,NIC 202可以匹配对应的消息类型。此外,NIC 202可以针对MPI实施紧迫协议和约定协议两者,从而从主机卸载对应的操作。

此外,NIC 202所支持的RMA操作可以包括PUT、GET和原子存储器操作(AMO)。NIC202可以提供可靠的传输。例如,如果NIC 202是源NIC,则NIC 202可以为幂等操作提供重试机制。此外,基于连接的错误检测和重试机制可以用于可能操纵目标状态的有序操作。NIC202的硬件可以维持重试机制所需的状态。通过这种方式,NIC 202可以减轻主机(例如,软件)上的负担。决定重试机制的策略可以由主机通过驱动程序软件来指定,从而确保NIC202的灵活性。

此外,NIC 202可以促进触发操作、通用卸载机制以及依赖性操作序列(诸如批量数据集体)的进度。NIC 202可以支持应用编程接口(API)(例如,libfabric API),以促进由图1的交换机结构100向在主机116上运行的应用程序提供结构通信服务。NIC 202还可以支持低级别网络编程接口,诸如Portals API。另外,NIC 202可以提供高效的以太网包处理,所述以太网包处理在NIC 202为发送方时可以包括有效发射,在NIC 202为目标时可以包括流操纵,以及校验和计算。此外,NIC 202可以支持虚拟化(例如,使用容器或虚拟机)。

图2B示出了NIC的示例性架构。在NIC 202中,HNI 220的端口宏可以促进低级别以太网操作,诸如物理编码子层(PCS)和媒体访问控制(MAC)。另外,NIC 202可以提供对链路层重试(LLR)的支持。传入包可以由解析器228解析并存储在缓冲区229中。缓冲区229可以是PFC缓冲区,所述PFC缓冲区被供应用于缓冲阈值量(例如,一微秒)的延迟带宽。HNI 220还可以包括分别用于管理传出包和传入包的控制发射单元224和控制接收单元226。

NIC 202可以包括命令队列(CQ)单元230。CQ单元230可以负责获取并发出主机端命令。CQ单元230可以包括命令队列232和调度器234。命令队列232可以包括分别用于启动器命令(PUT、GET等)和目标命令(Append、Search等)的两组独立的队列。命令队列232可以被实施为在NIC 202的存储器中维持的循环缓冲区。在主机上运行的应用程序可以直接写入命令队列232。调度器234可以包括分别用于启动器命令和目标命令的两个单独的调度器。启动器命令基于散列函数被分类到流队列236中。流队列236之一可以分配到唯一的流。此外,CQ单元230可以进一步包括触发操作模块238,所述触发操作模块负责对触发命令进行排队和分派。

出站传输引擎(OXE)240可以从流队列236中拉取命令,以对其进行处理以供分派。OXE 240可以包括地址转换请求单元(ATRU)244,所述地址转换请求单元可以将地址转换请求发送到地址转换单元(ATU)212。ATU 212可以代表不同的引擎提供虚拟到物理地址的转换,所述不同的引擎诸如OXE 240、入站传输引擎(IXE)250和事件引擎(EE)216。ATU 212可以维持较大的转换缓存214。ATU 212既可以自己执行转换,也可以使用基于主机的地址转换服务(ATS)执行转换。OXE 240还可以包括消息切分单元(MCU)246,所述消息切分单元可以将大的消息分割为与最大发射单元(MTU)相对应的大小的包。MCU 246可以包括多个MCU模块。当MCU模块可用时,MCU模块可以从指派的流队列中获得下一个命令。接收到的数据可以写入数据缓冲区242中。后,MCU模块可以将包报头、对应的流量分类和包大小发送到流量整形器248。整形器248可以确定由MCU 246提出的哪些请求可以进入网络。

随后,可以将所选择的包发送到包和连接跟踪(PCT)270。PCT 270可以将包存储在队列274中。PCT 270还可以维持出站命令的状态信息,并在返回响应时更新状态信息。PCT270还可以维持包状态信息(例如,允许将响应与请求匹配)、消息状态信息(例如,跟踪多包消息的进度)、启动器完成状态信息、以及重试状态信息(例如,维持在请求或响应丢失时对命令进行重试所需的信息)。如果在阈值时间内未返回响应,则可以将对应的命令存储在重试缓冲区272中。PCT 270可以促进分别基于源表276和目标表278对启动器命令和目标命令进行连接管理。例如,PCT 270可以更新其源表276,以跟踪可靠地传送包和消息完成通知所需的状态。PCT 270可以将传出包转发到HNI 220,所述HNI将包存储在出站队列222中。

NIC 202还可以包括IXE 250,所述IXE在NIC 202为目标或目的地时提供包处理。IXE 250可以从HNI 220获得传入包。解析器256可以解析传入包并将对应的包信息传递到列表处理引擎(LPE)264或消息状态表(MST)266以进行匹配。LPE 264可以将传入消息与缓冲区进行匹配。LPE 264可以确定每个消息要使用的缓冲区和起始地址。LPE 264还可以管理用于表示缓冲区的列表条目池262、以及意外消息。MST 266可以存储匹配结果和生成目标端完成事件所需的信息。MST 266可以由不受限制的操作使用,包括多包PUT命令以及单包和多包GET命令。

随后,解析器256可以将包存储在包缓冲区254中。IXE 250可以获得匹配结果以进行冲突检查。然后,DMA写入和AMO模块252可以向存储器发出由写入和AMO操作生成的更新。如果包包括生成目标端存储器读操作的命令(例如,GET响应),则可以将所述包传递到OXE240。NIC 202还可以包括EE 216,所述EE可以从NIC 202中的其他模块或单元接收生成事件通知的请求。事件通知可以指定生成填充事件或计数事件。EE 216可以管理位于主机处理器存储器内的事件队列,其将完整事件写入所述主机处理器存储器。EE 216可以将计数事件转发到CQ单元230。

NIC中的高效包转发

图3A示出了NIC中到无序包转发的示例性切换。在该示例中,设备302和304可以经由交换机结构310彼此耦接。设备302和304可以分别配备有NIC 320和330。HNI 322和332可以分别将NIC 320和330耦接到交换机结构310。NIC 320可以配备有PCT 324和OXE 326,并且NIC 330可以配备有PCT 334和IXE 336。

在操作期间,可以在设备320上运行的应用程序可以发出可以指示对设备330进行数据操作(例如,RDMA操作)的消息340。消息340的大小可以大于MTU。因此,NIC 320可以基于MTU根据消息340生成多个包370,以在交换机结构310上发送消息340。消息340的语义可能需要有序地传送包370。例如,如果消息340涉及DMA操作,则包370可能需要按顺序传送。然而,包370的有序传送可能会产生大量的开销,诸如通过交换机结构310中的预定路径进行传输、严格执行从NIC 320按顺序进行包传输、以及在NIC 330处对乱序包进行包丢弃。因此,包370的有序传送会对数据传输的性能产生不利影响。

为了解决这一问题,NIC 320可以对包370使用有序传送和无序传送两者,以提高性能,同时保持消息340的边界的顺序。由于包370中的每一个都可以在其各自的有效载荷中包括消息340的一部分,因此包370也可以被称为包流370。然后,NIC 320可以确定消息340(或包流370中的包)的大小是否大于大小阈值。大小阈值可以对应于传输时间大于经由交换机结构310的RTT两倍的大小。NIC 320可以基于由HNI 322转发的并发消息达到的带宽和响应的时延来动态调整大小阈值。

如果消息大小大于大小阈值,则NIC 320的OXE 326可以对包流370启动IOI包传输。为了促进IOI包传输,OXE 326可以转发初始的一组包342和344以进行有序传送。这些包中的每一个都可以包括与消息340相关联的序列号和指示执行无序传送的指示符。包342和344各自的报头可以包括可以指示有序传送的差分服务代码点(DSCP)值。

例如,NIC 320可以在报头中设置标志以指示NIC 330应当检查包342和344的报头中的序列号以对它们进行排序。相应地,当NIC 330接收到包342和344时,NIC 330可以检查包342和344各自的序列号,并按顺序对它们进行处理。NIC 330还可以发出对应的响应。由于这些包是有序包,因此响应也可以是累积响应。然而,由于响应可能不是有序的,因此NIC320会接收到由NIC 330发出的任何一个响应。

假设NIC 320接收到响应350,所述响应可以是对包344的响应。基于响应350的序列号,NIC 320可以确定直到包344的所有包(即,包342和344)已经被NIC 330接收。在接收到响应350后,PCT 324可以通知OXE 326直到包344的所有包已经被NIC 330接收。因此,OXE326可以针对后续包346和348切换到无序传送。

在一些实施例中,OXE 326可以维持有序包和无序包各自的计数器。例如,OXE 326可以在发送包342和344中的每一个时使有序包计数器(OPC)递增,并在从PCT 324接收到关于响应350的通知时使OPC递减。由于响应350可以确认包342和344两者,因此响应350可以使OXE 326将OPC递减两次。OXE 326还可以维持无序包计数器(UPC)。OXE 326可以在发送包346和348中的每一个时使UPC递增。基于OPC和UPC,OXE 326可以分别跟踪未完成的有序包和无序包的数量。

当剩余包的数量变得小于切换阈值时,NIC 320可以切换回有序传送。图3B示出了NIC中到有序包转发的示例性切换。如果OXE 326已经发送了未完成的无序包452、356和356,则UPC的值可以为3。另一方面,OXE 326可以确定消息340使包358和360剩下。因此,剩余包的数量可以为2个。在发送每个无序包时,OXE 326可以确定剩余包的数量是否已经变得小于切换阈值。切换阈值可以对应于OPC值和UPC值的组合(例如,总和)。

在发送包356时,OXE 326可以确定剩余包的数量(在该示例中为2个)已经变得小于UPC的值(在该示例中为3个)。因此,OXE 326可以确定剩余的包358和360对应于消息340的结尾。因此,OXE 326可以切换回有序传送。相应地,OXE 326可以通过在包358的报头中设置对应的标志、基于有序传送来发送包358。当NIC 330接收到包358时,NIC 330基于标志确定包358需要进行有序处理。然后,NIC 330可以处理包358的报头中的序列号。

为了进一步确保可以作为最后一个包的包360按顺序进行传送,OXE 326可以不发送包360,直到NIC 320接收到对所有无序包的响应(即,UPC的值变为0)。OXE 326可以针对包352、354和356中的每一个的响应而使UPC递减。结果,UPC的值可以变为0,并且OXE 326可以发送包360。通过这种方式,NIC 320可以使用IOI包传输,其可以结合有序包传送和无序包传送两者,从而促进对消息340进行高效包转发。

图4A示出了用于在NIC中进行输入输出输入(IOI)包转发的消息选择过程的流程图。在操作期间,NIC可以为远程设备获得消息(操作402),并基于有序传送来启动对消息进行包转发(操作404)。然后,NIC可以基于初始响应(例如,在NIC处接收到的第一响应)动态地确定阈值(操作406),并确定剩余包的大小是否大于阈值(操作408)。由于尚未触发IOI,因此仍然可以将剩余包视为有序包。如果大小大于阈值,则NIC可以对后续包启动IOI转发(操作410)。另一方面,如果大小小于或等于阈值,则NIC可以继续基于有序传送进行包转发(操作412)。

图4B示出了NIC中的IOI包转发过程的流程图。在操作期间,NIC可以获得消息(操作452)并为包生成包流(操作454)。然后,NIC可以从包流中选择包并将包流标记为有序(例如,通过在包中设置标志)(操作456)。随后,NIC可以基于有序转发策略来发送包(操作458)。有序转发策略可以规定有序包可能如何经由网络进行转发,诸如网络中的转发路径和对应的转发参数。

然后,NIC可以检查是否已经接收到响应(操作460)。如果NIC尚未接收到响应,则NIC可以继续从包流中选择下一个包并将包流标记为有序(操作456)。另一方面,在接收到响应后,NIC可以确定剩余包的大小是否大于阈值(操作462),如结合图4A所描述的。如果发送的包的大小大于阈值,则NIC可以切换到无序传送(操作464)。相应地,NIC可以从包流中选择下一个包并将包流标记为无序(例如,通过不在包中设置标志)(操作466)。随后,NIC可以基于无序转发策略来发送包(操作468)。无序转发策略可以规定无序包可能如何进行转发,诸如负载均衡和多路径转发。

然后,NIC可以检查剩余包的数量是否小于阈值(操作470)。如果剩余包的数量不小于阈值,则NIC可以继续从包流中选择下一个包并将包流标记为无序(操作466)。另一方面,如果剩余包的数量小于阈值,则NIC可以切换到有序传送(操作472)。如果发送的包的大小小于或等于阈值(操作462),则消息对于IOI来说可能太小。相应地,NIC可以将流中的剩余包标记为有序(操作474),并基于有序转发策略和最终包策略来发送剩余包(操作476)。最终包策略可以规定最后一个包可以进行转发。

图4C示出了NIC中用于最后一个包的IOI包转发过程的流程图。该转发过程可以符合最终包策略。在操作期间,NIC可以识别剩余的最后一个包(操作482),并确定UPC的值是否已经变为零(即,对所有无序包的响应都已被接收)(操作484)。如果UPC的值不为零,则NIC可以不发送最后一个包(操作486),并继续确定UPC的值是否已经变为零(操作484)。另一方面,如果UPC的值已经变为零,则NIC可以基于有序转发策略来发送剩余的最后一个包(操作488)。

示例性计算机系统

图5示出了配备有促进高效包转发的NIC的示例性计算机系统。计算机系统550包括处理器552、存储器设备554和存储设备556。存储器设备554可以包括易失性存储器设备(例如,双列直插式存储器模块(DIMM))。此外,计算机系统550可以耦接到键盘562、指向设备564和显示设备566。存储设备556可以存储操作系统570。应用程序572可以在操作系统570上操作。

计算机系统550可以配备有使促进高效数据请求管理的NIC 520耦接的主机接口。NIC 520可以向计算机系统550提供一个或多个HNI。NIC 520可以经由HNI之一耦接到交换机502。NIC 520可以包括IOI逻辑块530,如结合图3A和图3B所描述的。IOI逻辑块530可以包括监测逻辑块532、包生成逻辑块534、转发逻辑块536和切换逻辑块538。监测逻辑块532可以确定消息的包是否调用IOI转发。

包生成逻辑块534(例如,在NIC 520中的MCU中)可以根据消息生成包流。转发逻辑块536(例如,在NIC 520中的OXE中)可以基于IOI转发来转发消息的包,如结合图4B和图4C所描述的。监测逻辑块532还可以确定是否已经接收到针对初始包的响应。监测逻辑块532可以维持消息的OPC和UPC的值。切换逻辑块536(例如,在NIC 520中的OXE中)可以确定是否为IOI转发在有序传送与无序传送之间进行切换。

总之,本公开描述了一种促进高效包转发的NIC。所述NIC可以配备有主机接口、包生成逻辑块和转发逻辑块。所述主机接口可以使主机设备耦接。在操作期间,所述包生成逻辑块可以经由所述主机接口从所述主机设备为远程设备获得消息。所述包生成逻辑块可以根据所述消息生成针对所述远程设备的多个包。然后,所述转发逻辑块可以基于有序传送来发送所述多个包的第一包子集。如果满足第一条件,则所述转发逻辑块可以基于无序传送来发送所述多个包的第二包子集。此外,如果满足第二条件,则所述转发逻辑块可以基于有序传送来发送所述多个包的第三包子集。

上述方法和过程可以由硬件逻辑块、模块、逻辑块或装置来执行。硬件逻辑块、模块、逻辑块或装置可以包括但不限于专用集成电路(ASIC)芯片、现场可编程门阵列(FPGA)、在特定时间执行代码的专用或共享处理器、以及现在已知或以后开发的其他可编程逻辑设备。硬件逻辑块、模块或装置在被激活时执行其内包括的方法和过程。

本文描述的方法和过程也可以体现为代码或数据,该代码或数据可以存储在存储设备或计算机可读存储介质中。当处理器读取并执行所存储的代码或数据时,处理器可以执行这些方法和过程。

本发明的实施例的前述描述是仅出于说明和描述的目的而呈现的。所述描述并非旨在是穷举的或将本发明限制为所公开的形式。相应地,对于本领域普通技术人员而言,许多的修改和变化将是显而易见的。另外,以上公开内容并非旨在限制本发明。本发明的范围由所附权利要求限定。

21页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于促进网络中的全局公平性的系统和方法

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!