促进将包高效地注入网络接口控制器(nic)中的输出缓冲区中的系统和方法
阅读说明:本技术 促进将包高效地注入网络接口控制器(nic)中的输出缓冲区中的系统和方法 (System and method to facilitate efficient injection of packets into output buffers in a Network Interface Controller (NIC) ) 是由 A·M·巴塔耶纳 T·L·科特 V·张 D·C·休森 P·昆都 E·P·伦德贝格 于 2020-03-23 设计创作,主要内容包括:提供了一种能够将包高效地注入输出缓冲区中的网络接口控制器(NIC)。所述NIC可以配备有输出缓冲区、多个注入器、优先化逻辑块和选择逻辑块。所述多个注入器可以共享所述输出缓冲区。所述优先化逻辑块可以基于与相应注入器相关联的高水位和低水位来确定与所述注入器相关联的优先级。然后,所述选择逻辑块可以从所述多个注入器中确定与缓冲区类相关联的注入器子集并且确定所述注入器子集是否包括高优先级注入器。在识别所述注入器子集中包括高优先级注入器后,所述选择逻辑块可以选择所述高优先级注入器以用于将包注入所述输出缓冲区。(A Network Interface Controller (NIC) capable of efficiently injecting packets into an output buffer is provided. The NIC may be equipped with an output buffer, a plurality of injectors, a prioritization logic block, and a selection logic block. The plurality of injectors may share the output buffer. The prioritization logic may determine a priority associated with a respective injector based on the high and low water levels associated with the injector. The selection logic block may then determine a subset of injectors from the plurality of injectors that are associated with a buffer class and determine whether the subset of injectors includes a high priority injector. Upon identifying that a high priority injector is included in the subset of injectors, the selection logic block may select the high priority injector for injecting packets into the output buffer.)
背景技术
技术领域
本公开总体上涉及联网技术领域。更具体地,本公开涉及用于促进将包高效地注入网络接口控制器(NIC)中的输出缓冲区中的系统和方法。
相关技术
随着支持网络的设备和应用变得越来越普遍,各种类型的流量以及不断增加的网络负载继续要求底层网络架构提供更高的性能。例如,诸如高性能计算(HPC)、流媒体和物联网(IOT)等应用可以产生具有鲜明特征的不同类型的流量。因此,除了诸如带宽和延迟等传统网络性能指标外,网络架构师仍继续面临诸如可扩展性、多功能性和效率等挑战。
发明内容
提供了一种能够将包高效地注入输出缓冲区中的网络接口控制器(NIC)。所述NIC可以配备有输出缓冲区、多个注入器、优先化逻辑块和选择逻辑块。所述多个注入器可以共享所述输出缓冲区。所述优先化逻辑块可以基于与相应注入器相关联的高水位和低水位来确定与所述注入器相关联的优先级。然后,所述选择逻辑块可以从所述多个注入器中确定与缓冲区类相关联的注入器子集并且确定所述注入器子集是否包括高优先级注入器。在识别所述注入器子集中包括高优先级注入器后,所述选择逻辑块可以选择所述高优先级注入器以用于将包注入所述输出缓冲区。
附图说明
图1示出了示例性网络。
图2A示出了具有多个NIC的示例性NIC芯片。
图2B示出了NIC的示例性架构。
图3A示出了NIC中的输出缓冲区中的示例性包注入。
图3B示出了用于将包注入NIC中的输出缓冲区中的示例性仲裁过程。
图4A示出了用于将包注入NIC中的输出缓冲区中的优先级分配过程的流程图。
图4B示出了用于将包注入NIC中的输出缓冲区中的仲裁过程的流程图。
图5示出了配备有促进将包高效地注入输出缓冲区中的NIC的示例性计算机系统。
在这些附图中,相同的附图标记指代相同的附图元素。
具体实施方式
对所公开实施例的各种修改对于本领域技术人员来说将是显而易见的,并且在不脱离本公开的精神和范围的情况下,本文定义的一般原理可以应用于其他实施例和应用。因此,本发明不限于所示实施例。
概述
本公开描述了促进将包高效地注入网络接口控制器(NIC)中的输出缓冲区中的系统和方法。NIC允许主机与数据驱动的网络进行通信。网络可以通过维持各个包流的状态信息以快速、有效的拥塞控制来适应动态数据流量。更具体地,注入交换机网络中的包可以被分类到流中,这些流可以映射到它们的第2层、第3层或其他协议特定报头信息。每个流可以用交换机的输入端口本地的不同标识符进行标记,并设置有流特定输入缓冲区,以便每个流可以单独进行流控制。另外,相应流中的包可以在到达网络的出口点时进行确认,而确认的包可以沿着相同的数据路径以相反的方向被发送回所述流的入口点。因此,每个交换机都可以获得其正在转发的活动包流的状态信息,并且可以执行高响应性、流特定流控制。这种流控制可以允许网络以更高的容量操作,同时提供通用的流量工程能力。
本文描述的实施例通过以下方式来解决将包从多个注入器高效地分配到NIC的共享输出缓冲区的问题:(i)基于相应注入器对缓冲区的占用情况来确定所述注入器的优先级;以及(ii)基于类和所确定的优先级在注入器之间进行仲裁。注入器可以是NIC的任何元件,可以将流量注入缓冲区中。
在操作期间,NIC可以从NIC的主机设备接收命令。NIC的主机接口可以将NIC与主机设备耦接,并促进主机设备与NIC之间的通信。命令可以是立即数据命令(IDC)或直接存储器存取(DMA)命令。携带与命令相关联的数据的命令可以是IDC。另一方面,具有指向相关数据的指针的命令被称为DMA命令(DMAC)(例如,远程DMA(RDMA)的“GET”或“PUT”命令)。此外,基于命令生成的流量可以指派到不同的类,诸如流量整形类或缓冲区类。每个缓冲区类可以与一个或多个注入器相关联。另一方面,一个注入器可以分配到一个缓冲区类。因此,对于同一个缓冲区类,多个注入器可以并行发送包。
然而,注入器可以共享公共输出缓冲区。因此,如果大量注入器共享缓冲区,则由于流量的不均匀性和随机性,一个注入器可能会占用缓冲区的很大一部分。相比之下,另一个注入器可能无法获得足够的缓冲区容量。因此,缓冲区可能会导致一些注入器的利用率不足,而导致其他注入器遇到瓶颈。此外,缓冲区可能会在注入器和注入器的缓冲区类之间不公平地共享。
为了解决这一问题,NIC可以在注入器之间进行仲裁,从而使得缓冲区的容量得到公平分配。缓冲区可以被划分为多个单元格。相应的单元格可以具有固定的大小(例如,2048个字节)。注入器可以以单元格大小的粒度将流量插入缓冲区中。为了确保将缓冲区容量公平地分配到注入器,NIC可以基于一个或多个选择标准来选择注入器以用于将流量插入下一个可用单元格中。选择标准可以允许NIC选择订阅不足(或未充分利用)的注入器并避免选择订阅过度(或过度利用)的注入器。另外,NIC还可以区分IDC与DMAC。此外,NIC可以选择注入器以确保缓冲区容量在缓冲区类之间的公平分配。在一些实施例中,注入器可以是消息切分单元(MCU)模块,所述消息切分单元模块可以将消息分割为与最大发射单元(MTU)相对应的大小的包。
在操作期间,NIC可以基于与注入器相关联的限制(例如,可以分配到注入器的最大缓冲区容量)为相应注入器分配优先级。NIC可以确定与注入器相关联的命令类型。由于DMAC在缓冲区中停留的时间通常较长(例如,由于存在用于获得相关联数据的附加存储器存取),因此NIC可以对DMAC使用每个注入器的限制,并对IDC命令使用整体限制。基于所述限制,NIC可以确定注入器的高水位和低水位,所述高水位和低水位可以分别用于确定订阅过多和订阅不足。高水位可以指示容量可能接近限制。另一方面,低水位可以指示容量可能显著小于限制。
然后,NIC可以确定缓冲区中当前被来自注入器的数据占用的单元格数量。如果被占用的单元格表示的容量大于或等于高水位,则NIC可以为注入器指派低优先级。另一方面,如果被占用的单元格表示的容量小于或等于低水位,则NIC可以为注入器指派高优先级。NIC可以通过重复这一过程为每个注入器分配优先级。然后,NIC可以执行两阶段仲裁过程,以便为缓冲区中的下一个可用单元格选择注入器。在第一阶段,NIC可以选择缓冲区类(例如,基于加权轮询选择)。
在选择缓冲区类后,NIC可以识别与缓冲区类相关联的相应注入器。然后,NIC可以确定所识别的注入器是否包括具有高优先级的注入器。如果识别出的注入器包括具有高优先级的至少一个注入器,则NIC可以选择所述注入器。然而,为了从多个这样的注入器中进行选择,NIC可以使用诸如轮询选择和第一可用选择等选择策略来选择注入器之一。另一方面,如果识别出的注入器仅包括具有低优先级的注入器,则NIC可以基于选择策略来选择这些注入器之一。为了确保优先级不会长时间分配到一个注入器,NIC可以定期扰动优先级。通过这种方式,NIC可以促进以高效的方式将包分配到共享输出缓冲区。
本发明的一个实施例提供了一种NIC,所述NIC可以配备有输出缓冲区、多个注入器、优先化逻辑块和选择逻辑块。所述多个注入器可以共享所述输出缓冲区。所述优先化逻辑块可以基于与相应注入器相关联的高水位和低水位来确定与所述注入器相关联的优先级。然后,所述选择逻辑块可以从所述多个注入器中确定与缓冲区类相关联的注入器子集并且确定所述注入器子集是否包括高优先级注入器。在识别所述注入器子集中的高优先级注入器后,所述选择逻辑块可以选择所述高优先级注入器以用于将包注入所述输出缓冲区。
在本实施例的变体中,如果所述注入器子集不包括高优先级注入器,则所述选择逻辑块可以选择低优先级注入器以用于将包注入所述输出缓冲区。
在本实施例的变体中,所述优先化逻辑块可以确定与相应注入器相关联的命令类型。如果所述命令类型为立即数据命令(IDC),则所述优先化逻辑块可以基于全局限制来确定所述高水位和所述低水位。另一方面,如果所述命令类型为直接存储器存取(DMA)命令,则所述优先化逻辑块可以基于特定于所述注入器的限制来确定所述高水位和所述低水位。
在进一步变体中,所述命令是经由快速外围部件互连(PCIe)接口而向所述NIC发出的。
在本实施例的变体中,所述优先化逻辑块可以获得所述缓冲区中被来自相应注入器的数据占用的单元数量。
在进一步变体中,如果所述单元数量小于或等于所述低水位,则所述优先化逻辑块可以为所述注入器指派高优先级。另一方面,如果所述单元数量大于或等于所述高水位,则所述优先化逻辑块可以为所述注入器指派低优先级。
在本实施例的变体中,在检测到优先级被重置后,所述优先化逻辑块可以为所述注入器指派高优先级。此外,如果与所述注入器相关联的定时器已到期,则所述优先化逻辑块可以为所述注入器指派低优先级。
在本实施例的变体中,所述选择逻辑块可以从为所述NIC启用的一组缓冲区类中选择所述缓冲区类。
在本实施例的变体中,注入器可以是消息切分单元(MCU),用于根据向所述NIC发出的命令生成包。
在本实施例的变体中,所述输出缓冲区被划分为多个单元格。注入所述包于是可以包括将所述包注入下一个可用单元格中。
在本公开中,结合图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中的输出缓冲区中的示例性包注入。在该示例中,主机设备300可以包括NIC 320。NIC 320的主机接口322可以将NIC 320与设备300耦接并促进设备300与NIC 320之间的通信。NIC 320可以包括MCU 324,所述MCU可以包括多个MCU模块312、314、416和318。MCU 324中的MCU模块可以将流量注入共享输出缓冲区328中。因此,MCU 324中的MCU模块可以是缓冲区328的注入器。由MCU 324注入的流量可以属于不同的缓冲区类。每个缓冲区类可以与一个或多个MCU模块相关联。另一方面,一个MCU模块可以分配到一个缓冲区类。因此,对于同一个缓冲区类,多个MCU模块可以并行注入包。
然而,由于MCU模块可以共享缓冲区328,因此由于流量的不均匀性和随机性,一个MCU模块可能会占用缓冲区328的很大一部分。相比之下,另一个MCU模块可能无法获得足够的缓冲区容量。因此,缓冲区328可能会导致一些MCU模块的利用率不足,而导致其他MCU模块遇到瓶颈。此外,缓冲区328可能会在MCU模块和MCU模块的缓冲区类之间不公平地共享。
为了解决这一问题,NIC 320可以配备有仲裁器326,所述仲裁器可以在MCU 324中的MCU模块之间进行仲裁,从而使得缓冲区328的容量得到公平分配。缓冲区328可以被划分为多个单元格。相应的单元格可以具有固定的大小。相应的MCU模块(诸如MCU模块312)可以以单元格大小的粒度将流量插入缓冲区328中。为了确保将缓冲区328的容量公平地分配到MCU模块,仲裁器326可以基于一个或多个选择标准来选择MCU模块用于将流量插入下一个可用单元格330中。选择标准可以允许仲裁器326选择订阅不足的MCU模块并避免选择订阅过度的MCU模块。
此外,仲裁器326还可以区分IDC与DMAC。假设IDC 342被分配到MCU模块312并且DMAC 344被分配到MCU模块318。由于DMAC 344可以在缓冲区328中停留较长时间,因此仲裁器326可以使用特定于MCU模块312的限制(例如,可以分配到MCU模块的缓冲区328的最大单元格数)来确定是否选择MCU模块312。另一方面,仲裁器326可以使用与IDC相关联的全局限制来确定是否选择MCU模块318。此外,仲裁器326可以选择MCU模块以确保缓冲区容量在缓冲区类之间的公平分配。
图3B示出了用于将包注入NIC中的输出缓冲区中的示例性仲裁过程。为了促进将包高效地注入缓冲区328中,仲裁器326可以基于与MCU 324中的相应MCU模块相关联的限制为所述MCU模块分配优先级。仲裁器326可以确定MCU模块312与IDC 342相关联。因此,仲裁器326可以基于与IDC相关联的全局限制来确定MCU模块312的高水位和低水位。然后,仲裁器326可以确定缓冲区中当前被来自MCU模块312的数据占用的单元格数量。被占用单元格的数量(或计数)可以被称为被占用单元格计数(OCC)。如果MCU模块312的OCC大于或等于高水位,则仲裁器326可以为MCU 312指派低优先级。另一方面,如果MCU模块312的OCC小于或等于低水位,则仲裁器326可以为MCU模块312指派高优先级。
类似地,仲裁器326可以通过重复这一过程来为MCU模块314、316和318分配优先级。例如,仲裁器326可以确定MCU模块318与DMAC 344相关联。因此,仲裁器326可以基于与MCU模块318相关联的限制来确定MCU模块318的高水位和低水位。然后,仲裁器326可以确定MCU模块318的OCC。如果MCU模块318的OCC大于或等于高水位,则仲裁器326可以为MCU 318指派低优先级。另一方面,如果MCU模块318的OCC小于或等于低水位,则仲裁器326可以为MCU模块318指派高优先级。
然后,仲裁器326可以执行两阶段仲裁过程360,以便为缓冲区328中的下一个可用单元格330选择MCU模块。仲裁过程360可以包括第一阶段仲裁362和第二阶段仲裁364。在仲裁362中,仲裁器326可以在NIC 320中启用的缓冲区类中选择缓冲区类(例如,基于加权轮询选择)。在一些实施例中,NIC 320可以支持N个预定义的缓冲区类(例如,10个类),每个类可以对应于与图2B中的流量整形器248相关联的流量整形类。缓冲区类可以在有足够的资源可用于该缓冲区类时启用。这样的资源可以包括与图2B的重试缓冲区272和源表276相关联的传输信用、以及该缓冲区类的缓冲区328的可用性。源表276可以包括以下一项或多项:源包表(SPT)、源消息表(SMT)、以及源连接表(SCT)。
NIC 320可以启用缓冲区类352、354和356。缓冲区类352可以包括MCU模块312和314;缓冲区类354可以包括MCU模块316;并且缓冲区类356可以包括MCU模块318。通过对缓冲区类352、354和356应用仲裁362,仲裁器326可以选择缓冲区类352。然后,仲裁器326可以识别MCU模块312和314与缓冲区类352相关联。然后,仲裁器326可以对MCU模块312和314应用仲裁364。仲裁364可以选择具有高优先级的MCU模块(如果适用的话)。否则,仲裁364可以选择具有低优先级的MCU模块。
相应地,仲裁器326可以确定MCU模块312和314是否包括具有高优先级的MCU模块。例如,如果MCU模块312具有高优先级,则仲裁器326可以选择MCU模块312。另一方面,如果MCU模块312和314具有低优先级,则仲裁器326可以基于选择策略来选择MCU模块312和314之一。如果选择了MCU模块312,则MCU模块312可以将与命令342相关联的包注入单元格330中。应当注意,如果命令342大于MTU(例如,具有大量数据的PUT命令),则MCU模块312可以基于命令342生成多个包。在注入包后,MCU模块312可以获得与命令342相关联的下一个包。随后,MCU模块312可以再次接受仲裁360。
为了确保优先级不会长时间分配到一个MCU模块,仲裁器326可以定期扰动优先级。例如,可以重置优先级(例如,定期地或基于NIC被重置)。一旦重置,就可以为相应的MCU模块指派高优先级。另一方面,相应的MCU模块可以与优先级定时器相关联。如果定时器到期,则可以为对应的MCU模块指派低优先级。这种扰动可以减轻MCU模块在相当长的时间内保持高优先级并对仲裁360的公平性产生不利影响的效果。通过确保仲裁360的公平性,NIC320可以促进以高效的方式将包注入缓冲区328。
图4A示出了用于将包注入NIC中的输出缓冲区中的优先级分配过程的流程图。在操作期间,NIC可以确定与注入器相关联的命令(操作402)。然后,NIC可以确定所述命令是否是DMA命令(操作404)。如果所述命令是DMA命令,则NIC可以基于注入器特定限制来确定高水位和低水位(操作416)。另一方面,如果所述命令不是DMA命令(例如,IDC),则NIC可以基于全局限制来确定高水位和低水位(操作406)。随后,NIC可以确定是否已触发了重置(操作408)。如果尚未触发重置,则NIC还可以确定与注入器相关联的定时器是否已到期(操作410)。
如果定时器尚未到期,则NIC可以确定与注入器相关联的OCC是否大于或等于高水位(操作412)。如果OCC不大于或等于高水位,则NIC可以确定OCC是否小于或等于低水位(操作414)。如果已触发了重置(操作408)或OCC小于或等于低水位(操作414),则NIC可以为注入器指派高优先级(操作420)。另一方面,如果相关联的定时器已到期(操作410)或OCC大于或等于高水位(操作412),则NIC可以为注入器指派低优先级(操作418)。
图4B示出了用于将包注入NIC中的输出缓冲区中的仲裁过程的流程图。在操作期间,NIC可以确定启用的缓冲区类(操作452)并基于类选择策略来选择缓冲区类(操作454)。然后,NIC可以识别与缓冲区类相关联的注入器(操作456)并确定所选择的注入器中是否存在任何高优先级注入器(操作458)。如果所选择的注入器中存在至少一个高优先级注入器,则NIC可以基于注入器选择策略从高优先级注入器中选择注入器(操作460)。否则,NIC可以基于注入器选择策略从低优先级注入器中选择注入器(操作462)。
示例性计算机系统
图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可以包括仲裁逻辑块530,如结合图3A和图3B所描述的。仲裁器逻辑块530可以包括跟踪逻辑块532、优先级逻辑块534和选择逻辑块536。
跟踪逻辑块532可以跟踪NIC 520的相应注入器(例如,MCU模块)的OCC。优先级逻辑块534可以基于与相应注入器相关联的命令类型来确定所述注入器的高水位和低水位。然后,优先级逻辑块534可以确定优先级并将优先级指派给相应的注入器,如结合图4A所描述的。选择逻辑块536可以基于优先级和相应注入器的缓冲区类来选择注入器以用于将包注入共享输出缓冲区中,如结合图4B所描述的。
总之,本公开描述了一种促进将包高效地注入输出缓冲区中的NIC。所述NIC可以配备有输出缓冲区、多个注入器、优先化逻辑块和选择逻辑块。所述多个注入器可以共享所述输出缓冲区。所述优先化逻辑块可以基于与相应注入器相关联的高水位和低水位来确定与所述注入器相关联的优先级。然后,所述选择逻辑块可以从所述多个注入器中确定与缓冲区类相关联的注入器子集并且确定所述注入器子集是否包括高优先级注入器。在识别所述注入器子集中的高优先级注入器后,所述选择逻辑块可以选择所述高优先级注入器以用于将包注入所述输出缓冲区。
上述方法和过程可以由硬件逻辑块、模块、逻辑块或装置来执行。硬件逻辑块、模块、逻辑块或装置可以包括但不限于专用集成电路(ASIC)芯片、现场可编程门阵列(FPGA)、在特定时间执行代码的专用或共享处理器、以及现在已知或以后开发的其他可编程逻辑设备。硬件逻辑块、模块或装置在被激活时执行其内包括的方法和过程。
本文描述的方法和过程也可以体现为代码或数据,该代码或数据可以存储在存储设备或计算机可读存储介质中。当处理器读取并执行所存储的代码或数据时,处理器可以执行这些方法和过程。
本发明的实施例的前述描述是仅出于说明和描述的目的而呈现的。所述描述并非旨在是穷举的或将本发明限制为所公开的形式。相应地,对于本领域普通技术人员而言,许多的修改和变化将是显而易见的。另外,以上公开内容并非旨在限制本发明。本发明的范围由所附权利要求限定。
- 上一篇:一种医用注射器针头装配设备
- 下一篇:访问控制方法、设备及存储介质