促进通过网络接口控制器(nic)进行高效主机存储器访问的系统和方法

文档序号:1909821 发布日期:2021-11-30 浏览:24次 >En<

阅读说明:本技术 促进通过网络接口控制器(nic)进行高效主机存储器访问的系统和方法 (System and method for facilitating efficient host memory access through a Network Interface Controller (NIC) ) 是由 I·戈罗德斯基 H·M·霍奇 T·J·约翰逊 于 2020-03-23 设计创作,主要内容包括:提供了一种能够进行高效存储器访问的网络接口控制器(NIC)。所述NIC可以配备有操作逻辑块、信令逻辑块和跟踪逻辑块。所述操作逻辑块可以维持与请求对所述NIC的主机设备的存储器段进行操作的包相关联的操作组。所述信令逻辑块可以确定与所述操作组相关联的包已经到达所述NIC还是已经离开所述NIC。此外,所述跟踪逻辑块可以确定已经发出用于释放所述存储器段的请求。然后,所述跟踪逻辑块可以确定与所述操作组相关联的至少一个包是否正在所述NIC中进行处理。如果没有与所述操作组相关联的包正在所述NIC中进行处理,则跟踪逻辑块可以通知所述主机设备可以释放所述存储器段。(A Network Interface Controller (NIC) capable of efficient memory access is provided. The NIC may be equipped with an operation logic block, a signaling logic block, and a tracking logic block. The operation logic may maintain an operation group associated with a packet requesting an operation on a memory segment of a host device of the NIC. The signaling logic may determine whether a packet associated with the operational group has arrived at the NIC or has left the NIC. Further, the tracking logic may determine that a request to release the memory segment has been issued. The trace logic may then determine whether at least one packet associated with the operational group is being processed in the NIC. If no packets associated with the operational group are being processed in the NIC, the trace logic may notify the host device that the memory segment may be freed.)

促进通过网络接口控制器(NIC)进行高效主机存储器访问的 系统和方法

背景技术

技术领域

本公开总体上涉及联网技术领域。更具体地,本公开涉及用于促进通过网络接口控制器(NIC)进行高效主机存储器访问的系统和方法。

相关技术

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

发明内容

提供了一种能够进行高效主机存储器访问的网络接口控制器(NIC)。所述NIC可以配备有操作逻辑块、信令逻辑块和跟踪逻辑块。所述操作逻辑块可以维持与请求对所述NIC的主机设备的存储器段进行操作的包相关联的第一操作组。所述信令逻辑块可以确定与所述第一操作组相关联的包已经到达所述NIC还是已经离开所述NIC。此外,所述跟踪逻辑块可以确定已经发出用于释放所述存储器段的请求。然后,所述跟踪逻辑块可以确定与所述第一操作组相关联的至少一个包是否正在所述NIC中进行处理。如果没有与所述第一操作组相关联的包正在所述NIC中进行处理,则跟踪逻辑块可以通知所述主机设备能够释放所述存储器段。

附图说明

图1示出了示例性网络。

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

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

图3A示出了通过NIC进行的示例性主机存储器访问。

图3B示出了在用于促进高效主机存储器访问的NIC中进行的示例性时期管理。

图4A示出了在用于促进高效主机存储器访问的NIC中进行的时期管理过程的流程图。

图4B示出了在NIC中进行的时期管理通知过程的流程图。

图5示出了配备有促进高效主机存储器访问的NIC的示例性计算机系统。

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

具体实施方式

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

概述

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

本文描述的实施例通过以下方式来解决高效处理与存储器访问相关联的迟发操作的问题:(i)维持与存储器映射相关联的操作组的未决操作计数;以及(ii)允许属于后一存储器映射的另一个操作组的操作在未决操作完成后继续进行。

在操作期间,NIC可以处理具有操作的命令(例如,远程直接存储器访问(RDMA)的“GET”或“PUT”命令),所述操作可以对主机设备的存储器进行访问。NIC的主机接口可以将NIC与主机设备耦接,并促进主机设备的存储器与NIC之间的通信。如果命令是RDMA命令,则发出命令的进程可以在源设备上操作,并且接收命令的主机设备可以是目标设备。源设备和目标设备的NIC可以被称为源NIC和目标NIC。所述进程可以将源设备的本地存储器地址映射到目标设备的、可以是虚拟存储器地址的对应存储器地址。这允许进程发出可以直接在目标设备的存储器中执行操作的命令。

在完成其操作后,所述进程可以释放映射。因此,与目标设备的存储器地址相关联的存储器位置可以从进程中释放(或解放),并且可以重新分配给另一个进程。然而,如果所述进程是分布式进程,则从所述进程发出的操作可以从不同的源设备发出。因此,存储器释放信息可以在不同的源设备之间进行分配。然而,在分配信息的同时,释放信息可能不是全局可见的。因此,对已释放存储器进行访问的一些操作仍可能是从尚未接收到释放信息的源设备发出的。由于这些操作尝试对存储器进行访问的时间较晚(例如,较晚的读取或写入),因此这些操作可以被称为迟发操作。与迟发操作相关联的包可以被称为迟发包。迟发操作可以在目标设备的处理流水线中,并且可以尝试对已释放存储器进行访问。

为了解决这一问题,目标NIC可以通过转储清除目标NIC的处理流水线来保护存储器免受迟发操作的影响。在一些实施例中,NIC可以维持两个时期(epoch)。各个时期可以表示一个操作组,所述操作组可以与具有可以在对应存储器映射可能保持有效的同时对目标设备的存储器进行访问的操作的包相关联。所述时期可以包括指示操作组的包数量(或计数)的计数器。所述时期可以在NIC中基于时期标识符来表示。例如,可以通过NIC中的单个位(例如,使用单个位寄存器)来识别两个时期。当在目标NIC处注册存储器映射时,可以激活时期(例如,通过在寄存器中设置对应的值)。然后,在NIC中的元件或单元之间分配对应的时期标识符。

当包进入目标NIC的包处理流水线时,目标NIC可以利用当前时期为包加标签,并且随后使当前时期的计数器递增。另一方面,当包离开包处理流水线时,目标NIC可以使包中指示的时期的计数器递减。因此,计数器可以指示目标NIC的包处理流水线中的当前时期(即,当前操作组)的包数量。如果进程发出释放存储器的请求,则在获得释放信息后,目标NIC可以切换(或转换)时期。这样一来,已经与所释放的存储器相关联的时期可以变为前一时期,而新的时期可以变为当前时期。与前一时期相关联的计数器可以被称为前一计数器,而与当前时期相关联的计数器可以被称为当前计数器。

然后,可以基于当前计数器来跟踪进行存储器访问的所有后续包。然而,与前一时期相关联并在处理流水线中的迟发包仍然可以基于前一时期的计数器进行跟踪。当与前一时期相关联的迟发包离开处理流水线时,目标NIC可以继续使前一计数器递减。在前一计数器变为零之前,存储器可能不会被释放。这可以允许流水线中的包完成它们各自的操作。当前一计数器变为零时,目标NIC可以确定从处理流水线中转储清除了迟发包。然后,目标NIC可以通知目标设备可以释放存储器,以便与当前时期相关联的操作可以对存储器进行访问。由于针对具有这些操作的包的当前计数器已经是递增的,因此当存储器访问操作完成并且相关联的包可以离开处理流水线时,目标NIC可以使当前计数器递减。

本发明的一个实施例提供了一种NIC,所述NIC可以配备有操作逻辑块、信令逻辑块和跟踪逻辑块。所述操作逻辑块可以维持与请求对所述NIC的主机设备的存储器段进行操作的包相关联的第一操作组。所述信令逻辑块可以确定与所述第一操作组相关联的包已经到达所述NIC还是已经离开所述NIC。此外,所述跟踪逻辑块可以确定已经发出用于释放所述存储器段的请求。然后,所述跟踪逻辑块可以确定与所述第一操作组相关联的至少一个包是否正在所述NIC中进行处理。如果没有与所述第一操作组相关联的包正在所述NIC中进行处理,则跟踪逻辑块可以通知所述主机设备可以释放所述存储器段。

在本实施例的变体中,响应于与所述第一操作组相关联的包到达所述NIC,所述跟踪逻辑块可以使与所述第一操作组相关联的第一计数器递增。另一方面,响应于与所述第一操作组相关联的包离开所述NIC,所述跟踪逻辑块可以使所述第一计数器递减。

在进一步变体中,所述跟踪逻辑块可以基于所述第一计数器的值来确定没有与所述第一操作组相关联的包正在所述NIC中进行处理。

在进一步变体中,所述信令逻辑块可以基于检测到对所述存储器段的操作的启动或完成而分别生成用于使所述第一计数器递增或递减的信号。所述操作可以在所述第一操作组的包中指示。

在进一步变体中,所述操作的完成可以包括检测到所述操作的错误。

在本实施例的变体中,在检测到用于释放所述存储器段的请求后,所述操作逻辑块可以从第一操作组切换到与在所述释放之后请求对所述存储器段进行操作的包相关联的第二操作组。

在进一步变体中,所述跟踪逻辑块可以响应于与所述第二操作组相关联的包到达所述NIC而使与所述第二操作组相关联的第二计数器递增。

在本实施例的变体中,如果与所述第一操作组相关联的至少一个包正在所述NIC中进行处理,则所述跟踪逻辑块可以不通知所述主机设备可以释放所述存储器段。

在本实施例的变体中,与所述第一操作组相关联的相应包可以对应于从在远程设备上运行的进程发出的操作。所述存储器段可以被分配到所述进程。

在本实施例的变体中,所述跟踪逻辑块可以基于经由以下之一向所述NIC发出的命令来确定已经发出用于释放所述存储器段的所述请求:快速外围部件互连(PCIe)接口和计算快速链路(CXL)接口。

在本公开中,结合图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)接口或计算快速链路(CXL)接口。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之间的通信。设备300可以包括存储器设备302(例如,动态随机访问存储器(DRAM)模块)。NIC 320可以包括OXE 324、IXE 326和ATU 328。在操作期间,NIC 320可以处理具有操作的命令,所述操作可以对设备300的存储器设备302进行访问。发出命令的进程可以被分配到存储器设备302中的存储器段304。所述进程可以将存储器段304的存储器地址映射到所述进程的源设备的对应本地存储器地址。

在完成其操作后,所述进程可以释放映射。因此,存储器段304可以从进程中释放(或解放),并且可以重新分配给另一个进程。但是,对于分布式进程,释放信息可能不是全局可见的。因此,仍然可能发出对存储器段304进行访问的一些迟发操作。因此,当进程释放存储器段304时,NIC 320可以在处理流水线中具有多个包。相关联的迟发操作可能会尝试对可能已重新指派给另一个进程的存储器段304进行访问。

为了解决这一问题,NIC 320可以通过转储清除NIC 320的处理流水线来保护存储器段304免受迟发操作的影响。NIC 320可以维持两个时期342和346。时期342和346可以分别包括计数器344和348。各个时期可以在NIC 320中基于时期标识符来表示。例如,可以通过NIC 320中的单个位来识别时期342和346。相应地,时期342和346的标识符可以分别为0和1。当存储器段304被分配给进程时,NIC 320可以接收用于在进程的本地存储器地址与存储器段304的存储器地址之间进行映射的注册请求。

在接收到请求后,ATU 328可以为操作组激活时期342,所述操作组可以与具有可以在对应存储器映射保持有效的同时对存储器段304进行访问的操作的包相关联。时期342的激活也可以特定于进程。时期342的激活可以包括利用时期342的标识符为后续包加标签。计数器344可以指示操作组的包数量。当时期342被激活时,时期标识符可以在NIC 320中的元件或单元(诸如OXE 324和IXE 326)之间进行分配。在接收到包时,NIC 320可以使计数器344递增。另一方面,当包离开包处理流水线时,NIC 320可以使计数器344递减。因此,计数器344可以指示在NIC 320的包处理流水线中的时期342的包数量。

如果进程请求释放存储器段304,则进程可以向NIC 320提供释放信息。在一些实施例中,释放信息可以包括可以由进程发出的命令。命令可以启动“等待”转储清除处理流水线中的包。在接收到释放信息后,ATU 328可以切换(或转换)时期并激活时期346。因此,时期346可以变为当前时期,并且时期342可以变为前一时期。然后,可以基于计数器348来跟踪进行存储器访问的所有后续包。然而,与前一时期相关联并在处理流水线中的迟发包仍然可以基于计数器344进行跟踪。当与时期342相关联的迟发包离开NIC 320的处理流水线时,ATU 328可以继续使计数器344递减。当计数器344变为零时,ATU 328可以经由HI 322(例如,基于PCIe写入)通知设备300已经转储清除了处理流水线。

然后,设备300可以释放存储器段304。然后,可以将存储器段304的一部分(或其全部)包括在分配给另一个进程的存储器段306中。计数器348于是可以表示从该另一个进程发出的包。由于针对所述另一个进程的包的计数器348已经是递增的,因此当存储器访问操作完成并且相关联的包离开处理流水线时,ATU 328可以使计数器348递减。当所述另一个进程释放存储器段306时,ATU 328可以通过切换到时期342来重复切换过程。通过这种方式,ATU 328可以在时期342与346之间进行转换以识别和跟踪NIC 320中的迟发包,从而促进在转储清除流水线时释放存储器段。

IXE 326可以包括解析器332和分派器334,如结合图2B所描述的。当解析器332从ATU 328接收到关于时期342的时期触发的信息时,解析器332可以存储所述信息。当包到达NIC 320时,解析器332可以利用时期342的标识符为包加标签。标签可以在包穿过NIC 320的处理流水线的同时保持与包相关联。如果解析器332通过处理流水线将包转发到另一个处理单元(诸如MST和LPE),则解析器332可以向ATU 328发送时期特定的递增信号(例如,特定于时期342的信号)。即使包经历故障,解析器332也可以发送信号。然而,如果包被丢弃,则解析器332可能不会发送信号。

分派器334可以基于从NIC 320的其他模块或单元(诸如MST和LPE)接收的包的报头中的时期标识符来识别时期342。分派器344可以针对相应的包向ATU 328发送时期特定的递减信号,所述包可以包括对存储器段304的写操作。这种操作在NIC 320为目标NIC时可以包括PUT请求,或者在NIC 320为源NIC时可以包括GET响应。即使包经历故障,分派器334也可以发送信号。错误的示例可以包括由另一个单元检测到的错误、或操作错误,诸如地址转换错误。

分派器334可以由于读操作或写操作而生成递减信号。分派器334可以将与读操作和写操作相关联的各个递减信号相加以便为ATU 328生成组合递减信号。OXE 324可以基于从IXE 326接收的包的报头中的时期标识符来识别时期342。OXE 324可以针对相应的包向ATU 328发送时期特定的递减信号,所述包可以包括对存储器段304的读操作。即使包经历故障,OXE 324也可以发送信号。通过这种方式,ATU 328可以从OXE 324和IXE 326接收递增信号和递减信号,并相应地调整计数器344的值以跟踪时期342的包。

图3B示出了在用于促进高效主机存储器访问的NIC中进行的示例性时期管理。假设与时期342相关联的包312和314到达NIC 320并进入处理流水线370。相应地,ATU 328可以将计数器344递增到值2。随后,基于指令,ATU 328可以切换时期并激活时期346。当NIC320接收到包316和318时,ATU 328可以将计数器348递增到值2(用虚线表示)。当包312离开处理流水线370时。因此,ATU 328可以将计数器344递减到值1。ATU 328可以继续这个过程直到计数器344变为零。然后,ATU 328可以通知主机设备300已经从处理流水线370中转储清除了迟发包并且可以释放存储器段304。

图4A示出了在用于促进高效主机存储器访问的NIC中进行的时期管理过程的流程图。在操作期间,NIC可以激活时期(操作402)。然后,NIC可以确定包操作信号(操作404)。如果所述信号代表操作或对应于操作的包的到达,则NIC可以使当前计数器(即,与激活的时期相关联)递增(操作406)。另一方面,如果所述信号代表离开,则NIC可以使当前计数器递减(操作408)。

随后,NIC可以确定是否已触发了等待(操作410)。如果尚未触发等待,则NIC可以继续确定包操作信号(操作404)。如果已经触发了等待,则NIC可以转换时期(操作412)。转换可以使当前时期变为前一时期,并且使另一时期变为新的当前时期。然后,NIC可以在等待时段期间确定包操作信号(操作414)。如果所述信号代表到达,则NIC可以使新的当前计数器(即,与最新激活的时期相关联)递增(操作416)。

另一方面,如果所述信号代表离开,则NIC可以使前一计数器递减(操作418)。随后,NIC可以确定是否已经转储清除了处理流水线(即,前一计数器的值已变为零)(操作420)。如果没有转储清除处理流水线,则NIC可以在等待时段期间继续确定包操作信号(操作414)。另一方面,如果转储清除了处理流水线,则NIC可以通知主机设备可以释放存储器段以进行后续分配(操作422)。NIC可以继续确定包操作信号(操作404)。

图4B示出了在NIC中进行的时期管理通知过程的流程图。在操作期间,NIC的操作单元(例如,OXE或IXE)可以基于广播信息来确定当前时期(操作452),并识别与存储器操作(例如,读取或写入)相关联的包(操作454)。然后,所述单元可以确定操作是否成功(操作456)。如果操作不成功,则所述单元可以确定包是否被丢弃(操作458)。如果操作成功(操作456)或者包没有被丢弃(操作458),则所述单元可以基于发送时期特定的信号(操作460)。所述信号可以指示将时期计数器递增还是递减,如结合图3A所描述的。如果包被丢弃(操作458),则单元可以不发送信号(操作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(例如,在NIC 520的ATU中)和信令逻辑块540(例如,在NIC 520的OXE或IXE中)。操作逻辑块530可以维持NIC 520的时期或操作组,并且可以包括跟踪逻辑块532、计数器逻辑块534和等待逻辑块536。

信令逻辑块540可以向操作逻辑块530发送信号,所述信号指示包到达或离开NIC520的处理流水线。跟踪逻辑块532可以跟踪包处理流水线中与时期相关联的包。计数器逻辑块534可以基于来自信令逻辑块540的信号而使计数器递增或递减。等待逻辑块536可以确定已经触发了等待指令。相应地,等待逻辑块536可以转换NIC 520的时期。然后,计数器逻辑块534可以基于来自信令逻辑块540的信号而使新时期的计数器递增并使前一时期的计数器递减。当前一时期的计数器变为零时,跟踪逻辑块532可以通知计算机系统550已经转储清除了处理流水线。

总之,本公开描述了一种NIC,所述NIC促进从所述NIC进行高效存储器访问。所述NIC可以配备有操作逻辑块、信令逻辑块和跟踪逻辑块。所述操作逻辑块可以维持与请求对所述NIC的主机设备的存储器段进行操作的包相关联的第一操作组。所述信令逻辑块可以确定与所述第一操作组相关联的包已经到达所述NIC还是已经离开所述NIC。此外,所述跟踪逻辑块可以确定已经发出用于释放所述存储器段的请求。然后,所述跟踪逻辑块可以确定与所述第一操作组相关联的至少一个包是否正在所述NIC中进行处理。如果没有与所述第一操作组相关联的包正在所述NIC中进行处理,则跟踪逻辑块可以通知所述主机设备可以释放所述存储器段。

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

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

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

20页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:在网络接口控制器(NIC)中促进对幂等操作进行高效管理的系统和方法

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!