促进网络接口控制器(nic)中的数据请求管理的系统和方法

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

阅读说明:本技术 促进网络接口控制器(nic)中的数据请求管理的系统和方法 (System and method for facilitating data request management in a Network Interface Controller (NIC) ) 是由 A·M·巴塔耶纳 T·L·科特 D·C·休森 T·J·约翰逊 于 2020-03-23 设计创作,主要内容包括:提供了一种能够促进高效数据请求管理的网络接口控制器(NIC)。NIC可以配备有命令队列、消息切分单元(MCU)和流量管理逻辑块。在操作期间,命令队列可以存储通过主机接口发出的命令。然后,MCU可以确定命令的类型和命令的响应的长度。如果命令是数据请求,流量管理逻辑块可以确定响应的长度是否在阈值内。如果长度超过阈值,则流量管理逻辑块可以对命令进行速度调整使得响应在阈值内。(A Network Interface Controller (NIC) capable of facilitating efficient data request management is provided. The NIC may be equipped with a command queue, a message slicing unit (MCU), and traffic management logic. During operation, the command queue may store commands issued through the host interface. The MCU may then determine the type of command and the length of the command&#39;s response. If the command is a data request, the traffic management logic block may determine whether the length of the response is within a threshold. If the length exceeds the threshold, the traffic management logic may speed-adjust the command so that the response is within the threshold.)

促进网络接口控制器(NIC)中的数据请求管理的系统和方法

发明人:Abdulla M.Bataineh(A·M·巴塔耶纳)、Thomas L.Court(T·L·科特)、David Charles Hewson(D·C·休森)及Timothy J.Johnson(T·J·约翰逊)

背景

技术领域

本公开总体上涉及联网技术领域。更具体地,本公开涉及用于促进具有高效数据请求管理的网络接口控制器(NIC)的系统和方法。

相关技术

随着支持网络的设备和应用变得越来越普遍,各种类型的流量以及不断增加的网络负载继续对底层网络架构提出更多的性能要求。例如,诸如高性能计算(HPC)、媒体流化和物联网(IoT)的应用可以生成具有独特特性的不同类型的流量。因此,除了常规网络性能指标(诸如带宽和延迟)之外,网络架构还继续面临诸如可扩展性、通用性和效率的挑战。

发明内容

提供了一种能够促进高效数据请求管理的网络接口控制器(NIC)。NIC可以配备有命令队列、消息切分单元(MCU)和流量管理逻辑块。在操作期间,命令队列可以存储通过主机接口发出的命令。然后,MCU可以确定命令的类型,并根据该命令生成一组请求数据包。对于相应的请求数据包,MCU可以确定请求数据包的响应(例如,响应数据包)的长度。如果命令是数据请求,流量管理逻辑块可以确定响应的长度是否在阈值内。如果长度超过阈值,则流量管理逻辑块可以对命令进行速度调整(pace)使得响应在阈值内。

附图说明

图1示出了示例性网络。

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

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

图3示出了NIC中的示例性高效数据请求管理。

图4A示出了NIC中的示例性数据请求节流过程的流程图。

图4B示出了用于促进NIC中数据请求节流的示例性仲裁过程的流程图。

图5示出了配备有促进高效数据请求管理的NIC的示例性计算机系统。

在附图中,相同的附图标记表示相同的附图元素。

具体实施方式

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

概述

本公开描述了促进网络接口控制器(NIC)中的高效数据请求管理的系统和方法。NIC允许主机与数据驱动的网络进行通信。

本文描述的实施例通过(i)在NIC中识别数据请求并确定相对应的响应的大小,以及(ii)在需要的情况下,在NIC处对请求的速率进行节流以将相对应的响应的速率限制在阈值内,来解决由数据请求和响应的相应大小方面的差异引起的网络拥塞的问题。

在操作期间,可以在发起方计算设备上运行的用户过程可以生成数据请求(例如,远程直接存储器访问(RDMA)的“GET”命令),并将该请求插入到NIC的命令队列中。该过程可以通知NIC关于插入的情况,例如通过更新写入指针。NIC可以获取请求并发起请求的转发(例如,在消息或数据包中)。然而,NIC可以以比相对应的响应被返回的速率更高的速率处理和转发请求。例如,请求在大小方面可以相对较小(例如,48字节长),而相对应的响应在大小方面可以显著较大(例如,2048字节长)。

因此,请求可能需要NIC的1个时钟周期来发出,但响应消息可能需要NIC的50个时钟周期来将响应数据写入到NIC的主机设备的存储器中。因此,请求和相对应的响应之间在大小和处理时间方面可能存在1:50的差异。如果NIC继续在每个时钟周期发出请求,则当响应返回时,由于响应的显著较大的大小,网络中可能存在拥塞。特别地,如果NIC继续接收大量数据,则相对应的反向压力可能导致网络中的显著拥塞。响应越大,输入队列可能变得越拥塞。

为了解决这个问题,NIC可以配备请求管理系统,该请求管理系统可以检查从命令队列中获得的相应命令,以确定该命令是否是数据请求。如果命令是数据请求(例如,GET命令),则NIC可以基于所请求的数据的量确定相对应的响应的大小。然后,NIC可以确定可能由响应生成的潜在进入数据速率。随后,NIC确定潜在进入数据速率是否在阈值内。在一些实施例中,可以基于NIC能够吸收响应的速率来设置阈值。以这样的方式,允许发出请求的速率由NIC控制为使得该速率与NIC能够吸收响应的带宽相匹配。

本发明的一个实施例提供了NIC。NIC可以配备有命令队列、消息切分单元(MCU)和流量管理逻辑块。在操作期间,命令队列存储通过主机接口发出的命令。然后,MCU可以确定命令的类型,并根据该命令生成一组请求数据包。对于相应的请求数据包,MCU可以确定请求数据包的响应(例如,响应数据包)的长度。如果命令是数据请求,流量管理逻辑块确定响应的长度是否在阈值内。如果长度超过阈值,则流量管理逻辑块对命令进行速度调整使得响应在阈值内。

在关于这个实施例的变型中,数据请求可以是远程直接存储器访问(RDMA)GET命令。

在关于这个实施例的变型中,MCU可以将数据请求划分成一系列子请求,并将相应的子请求包括在请求数据包中。流量整形逻辑块然后可以独立地管理相应的子请求。

在关于这个实施例的变型中,MCU可以生成与命令相关联的数据包。NIC还可以包括将数据包转发到交换机结构的网络接口。

在关于这个实施例的变型中,MCU可以是驻留在NIC上的多个MCU中的一个。流量管理逻辑块然后可以在多个MCU之间进行仲裁,以选择用于转发命令的MCU。

在另外的变型中,流量管理逻辑块可以通过选择多个MCU中的用于转发第二命令的第二MCU、并响应于命令的响应的长度落入阈值内来选择用于转发命令的MCU,来对命令进行速度调整。

在另外的变型中,NIC还可以包括多个流队列。相应的流队列可以对应于NIC中的唯一的流。另外,可以将相应的流队列分配给多个MCU单元中的MCU单元。

在关于这个实施例的变型中,阈值可以对应于NIC能够处理响应的速率。以这样的方式,NIC可以以与NIC能够处理响应的速率相匹配的速率发出命令。

在本公开中,结合图1的描述与网络架构相关联,并且结合图2A及其后的描述提供了关于与支持高效数据请求管理的NIC相关联的架构和操作的更多细节。

在本公开中,数据包流量也可以被称为“数据包流”,或者简称为“流”。由流所经过的数据路径连同由交换机维护的其配置信息可以被称为“流通道”。而且,术语“缓冲器”和“队列”在本公开中可互换使用。

图1示出了促进流通道的示例性网络。在这个示例中,交换机的网络100(其也可以称为“交换机结构”)可以包括交换机102、104、106、108和110。主机设备114和116可以分别配备NIC 124和126。如果主机设备114发出命令,并且主机设备116是该命令的目标方,则NIC 124和126可以分别被称为源NIC和目标NIC。

示例性NIC架构

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

在一些实施例中,HI 210可以是外围组件互连(PCI)或快速外围组件互连(PCIe)接口。HI 210可以通过主机连接201耦接到主机,该主机连接可以包括能够以高达每通道25Gbps的信令速率操作的N个(例如,在一些芯片中,N可以是16)PCIe Gen 4通道。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可以为幂等性操作提供重试机制。另外,基于连接的错误检测和重试机制可以用于可能操纵目标状态的有序操作。NIC 202的硬件可以保持重试机制所需的状态。以这样的方式,NIC 202可以消除来自主机(例如软件)的负担。规定重试机制的策略可以由主机通过驱动软件指定,从而确保NIC 202中的灵活性。

另外,NIC 202可以促进触发操作、用于卸载的通用机制以及依赖性操作序列(诸如批量数据集合)的进度。NIC 202可以支持促进由图1的交换机结构100向主机116上运行的应用提供结构通信服务的应用编程接口(API)(例如,libfabric API)。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可以是被提供用于缓冲阈值量(例如,1微秒)的延迟带宽的PFC缓冲器。HNI220还可以包括分别用于管理出来的和进入的数据包的控制发送单元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可以代表不同的引擎(诸如OXE240、入站传送引擎(IXE)250和事件引擎(EE)216)提供虚拟到物理地址转换。ATU212可以保持大的转换高速缓存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还可以保持用于出站命令的状态信息,并在返回响应时更新状态信息。PCT 270还可以保持数据包状态信息(例如,允许响应与请求相匹配)、消息状态信息(例如,跟踪多数据包消息的进度)、发起者完成状态信息和重试状态信息(例如,保持如果请求或响应丢失的情况下重试命令所需的信息)。如果在阈值时间内没有返回响应,则相对应的命令可以存储在重试缓冲器272中。PCT 270可以分别基于源表276和目标表278促进用于发起者和目标命令的连接管理。例如,PCT 270可以更新其源表276,以跟踪可靠递送数据包和消息完成通知的必要状态。PCT 270可以将出站数据包转发到HNI 220,该HNI 220将数据包存储在出站队列222中。

NIC 202还可以包括IXE 250,如果NIC 202是目标或目的地,则该IXE 250提供数据包处理。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响应),则该数据包可以被传递到OXE 240。NIC 202还可以包括EE 216,该EE 216可以从NIC 202中的其他模块或单元接收生成事件通知的请求。事件通知可以指定生成填充事件或计数事件。EE 216可以管理位于主机处理器存储器内的事件队列,它将完整的事件写入该队列。EE 216可以将计数事件转发给CQ单元230。

NIC中的请求管理

图3示出了NIC中的示例性高效数据请求管理。如果主机过程生成数据请求,诸如GET命令,则该过程可以将该请求写入命令队列232中的一个。该过程可以通过更新命令队列232的写入指针来通知NIC 202关于插入的情况。NIC 202可以获取该请求并发起转发该请求。然而,NIC 202可能以比相对应的响应被返回的速率更高的速率处理和转发请求。例如,请求可能需要NIC 202的1个时钟周期来发出,但是响应消息可能需要NIC 202的50个时钟周期来获得所请求的数据。因此,请求和相对应的响应之间在大小和处理时间方面可能存在1:50的差异。如果NIC 202继续在每个时钟周期发出请求,则当响应返回时,由于响应的显著较大的大小,可能存在拥塞。

为了解决这个问题,OXE 240可以检查从命令队列232获得的相应命令(诸如请求312),以确定请求312是否是数据请求。在一些实施例中,OXE 240可以执行深度数据包检查(例如,通过检查请求312的有效载荷内的内部报头)来确定请求312的命令类型。NIC 202也可以基于MPI匹配来确定类型。在确定请求312是数据请求时,OXE 240可以基于由请求312请求的数据量来确定相对应的响应的大小。然后,OXE 240可以确定可能由响应生成的潜在进入数据速率。随后,OXE 240可以确定潜在进入数据速率是否在阈值内。在一些实施例中,可以基于NIC 202能够吸收或处理响应的速率来设置阈值。

可以基于与请求312相关联的流,将请求312分配给流队列236中的流队列320。OXE240可以从流队列320获得请求312,并将请求312提供给已经被分配给流队列320的MCU模块302(例如,在MCU 246中)。类似地,OXE 240可以从相应的流队列获得请求314和316,并将请求312分别提供给MCU模块304和306。应当注意的是,MCU 246可以包括多个MCU模块,该多个模块中的每一个可以对应于流队列236中的流队列。

MCU模块302可以保持未完成数据包(诸如与请求312相关联的数据包)的OrdPktActive计数。MCU模块302可以在为消息构造数据包时使OrdPktActive计数递增,并且在MCU模块302观察到由PCT 270处理的响应时使该计数递减。当OrdPktActive计数超过寄存器中定义的阈值时,MCU模块302可以停止请求数据包的生成。阈值可以指示适当的限制。由于对请求的速率进行节流依赖于相应请求的预期响应长度,所以MCU模块302可以确定用于请求312的、指示响应数据包长度的RspPktLen值。MCU模块302可以基于请求312的有效载荷(例如,所请求的数据的量)来计算RspPktLen。

在一些实施例中,流量整形器248可以确定从MCU 246中的哪个MCU模块获取要发送的下一数据包。流量整形器248可以基于来自链路伙伴的优先级流控制、不同流量整形类别之间的带宽共享、以及类别内的MCU模块之间的带宽共享,来选择MCU模块。通过在MCU模块之间进行仲裁,流量整形器248可以对请求数据包进行节流(或定速),以匹配相对应的响应的预期速率。以这样的方式,流量整形器248可以管理由主机上运行的应用所利用的出站和入站带宽。由于应用可以使用数据传送(例如,PUT命令)和数据请求(例如,GET命令)的组合来执行批量数据传输,所以流量整形器248可以将PUT请求和GET响应分类为消耗用于出站数据包的带宽,并且可以将这些的总和分配给带宽策略。

在这个示例中,流量整形器248可以分别从MCU模块302、304和306获得请求312、314和316的相应OrdPktActive和RspPktLen。流量整形器248可以确定对请求312的响应在阈值内。因此,流量整形器248可以基于仲裁来选择MCU模块302、获得请求312、并将请求312放置在输出缓冲器242中以便进行转发。然而,流量整形器248可以确定对请求314的响应可以超过阈值。因此,流量整形器248可以基于仲裁跳过MCU模块304,从而避免选择用于进行转发的MCU模块304。

随后,流量整形器248可以确定对请求316的响应在阈值内。流量整形器248然后可以基于仲裁来选择MCU模块306、获得请求316、并将请求316放置在输出缓冲器242中。当对请求314的响应长度落入基于仲裁过程的阈值内时,流量整形器248可以选择用于转发请求314的MCU模块304。以这样的方式,MCU模块302、304和306可以处理请求,诸如GET命令,并且流量整形器248在MCU模块302、304和306之间进行仲裁的情况下对它们进行速度调整。由于MCU模块提供请求,通过对MCU模块进行速度调整,流量整形器248可以对请求进行速度调整。

图4A示出了NIC中的示例性数据请求节流过程的流程图。在操作期间,NIC的OXE可以从流队列获得命令(操作402)。OXE然后可以确定命令的类型(操作404)并检查该命令是否是数据请求(例如GET命令)(操作406)。随后,OXE可以确定数据请求的响应大小(操作408)并确定数据请求的响应长度是否在阈值内(操作410)。在一些实施例中,OXE中的MCU模块可以为命令计算RspPktLen,并将RspPktLen提供给数据包整形器,该数据包整形器又可以确定响应长度是否在阈值内。如果响应长度在阈值内,则OXE可以对数据请求进行速度调整(例如,通过对数据请求的传输速率进行节流)(操作412)。另一方面,如果响应长度在阈值内,OXE可以提供数据请求用于进行跟踪和转发(操作414)。

图4B示出了用于促进NIC中数据请求节流的示例性仲裁过程的流程图。在操作期间,NIC的流量整形器确定MCU模块中数据请求的存在(操作452)。在一些实施例中,MCU模块可以向流量整形器提供与数据请求相关联的信息,诸如RspPktLen,从而向流量整形器通知关于数据请求的存在。流量整形器然后可以基于响应长度来确定数据请求是否需要速度调整(操作454)。如果不需要速度调整,则流量整形器可以选择用于进行转发的MCU模块(操作456)。然而,如果数据请求需要速度调整,则流量整形器可以避免选择用于进行转发的MCU模块(操作458),并继续对后续MCU模块进行仲裁(操作460)。可以根据NIC的仲裁策略选择后续的MCU模块。仲裁策略的示例包括但不限于循环(round bin)选择、基于负载的选择、基于优先级的选择和基于可用性的选择。

示例性计算设备

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

计算机系统550可以配备有耦接NIC 520的主机接口,该NIC 520有助于有效的数据请求管理。NIC 520可以向计算机系统550提供一个或多个HNI。NIC 520可以通过NIC中的一个耦接到交换机502。如结合图2B所述,NIC 520可以包括OXE逻辑块530。OXE逻辑块530可以包括可以获得命令(诸如GET或PUT命令)的MCU逻辑块532。该命令可以由应用572经由主机接口发出。MCU逻辑块532可以确定命令的类型和命令的响应的长度。MCU逻辑块532可以将这些信息片段提供给OXE逻辑块530的流量整形逻辑块534。流量整形逻辑块534还可以包括速度调整逻辑块536和仲裁逻辑块538。速度调整逻辑块536可以基于命令的类型和命令的响应的长度来确定命令是否需要速度调整。仲裁逻辑块538可以在MCU逻辑块532的一组MCU之间进行仲裁。如果命令需要速度调整,则仲裁逻辑块538可以避免选择相对应的MCU,从而对NIC 520中的数据请求进行速度调整。

总之,本公开描述了一种促进高效数据请求管理的NIC。NIC可以驻留在计算机系统中,该计算机系统还可以包括处理器、存储器设备和被配置为耦接NIC的主机接口。NIC可以配备有命令队列、MCU和流量管理逻辑块。在操作期间,命令队列存储通过主机接口发出的命令。然后,MCU可以确定命令的类型和命令的响应的长度。如果命令是数据请求,流量管理逻辑块确定响应的长度是否在阈值内。如果长度超过阈值,则流量管理逻辑块对命令进行速度调整使得响应在阈值内。

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

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

对本发明的实施例的前述描述仅出于说明和描述的目的而呈现。它们并不旨在是穷举性或将本发明限制于所公开的形式。因此,许多修改和变化对于本领域技术人员来说是显而易见的。附加地,以上公开并不旨在限制本发明。本发明的范围由所附权利要求限定。

18页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用混合现实系统在虚拟三维空间中管理和显示网页

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!

技术分类