用于对存储器缓冲区存取进行细粒度完成跟踪的技术的制作方法

文档序号:15615326发布日期:2018-10-09 21:13阅读:127来源:国知局

本发明是在政府支持下以国防部授予的合同号h98230a-13-d-0124完成的。政府对于本发明享有一定的权利。



背景技术:

高性能计算(hpc)通信方法典型地在用于远程直接存储器存取(rdma)的进程内暴露用户级存储器的区域。一些系统暴露存储器的相对较大的部分(例如,相对较大的缓冲区)用于远程存取(例如,通过远程计算设备),并且使用被称为本地管理的偏移量(lmo)的接收方管理的数据存取指针,以指示存储器缓冲区中的下一可用位置。然而,单单本地管理的偏移量无法指示远程存储器存取操作的完成状态,该远程存储器存取操作使得lmo前进到存储器缓冲区中的新位置。因此,一些系统另外使用被称为完成计数器(cc)的单独的指针,其指示从存储器缓冲区读取或写入存储器缓冲区的已完成字节的数量。然而,当多个远程存储器存取操作未决时,无序的消息和重传使得难以确定哪些未决的操作已经完成。因此,即使利用完成计数器,也可能无法确定存储器缓冲区的哪些区域已经稳定(即,不再由远程存储器存取操作存取)。一般地,进程仅能在lmo和cc相等时针对给定存储器缓冲区保证数据稳定性。因此,远程存取请求的持续到达可能导致cc持续地滞后于lmo,导致在确定存储器缓冲区的哪些部分不再被远程存取操作使用时有长的延迟。

附图说明

本文所描述的概念在附图中仅通过示例的方式而非通过限制的方式来进行说明。为了使说明简化和清晰,图中所示的元素不一定按比例绘制。在认为适当的情况下,附图标记在图中重复,以指示对应或相似的元素。

图1是用于执行对存储器缓冲区存取的细粒度跟踪的系统的至少一个实施例的简化框图;

图2是图1的系统中的计算设备的至少一个实施例的简化框图;

图3是可以由图1和图2的计算设备建立的环境的简化框图;

图4-图6是可以由图1和图2的计算交换机执行的、用于对存储器缓冲区存取的完成状态进行跟踪的方法的至少一个实施例的简化流程图;以及

图7-图10是在多个存储器存取操作由图1和图2的计算设备进行处理时对存储器缓冲区存取的完成进行跟踪的顺序阶段的简化框图。

具体实施方式

虽然本公开的概念易于进行各种修改和替代形式,但是其具体实施例已经在附图中通过示例的方式示出,并且将在本文中进行详细描述。然而,应当理解,并非旨在将本公开的概念限制为所公开的特定形式,而是相反,意图在于覆盖与本公开和所附权利要求一致的所有修改、等同方案以及替代方案。

说明书中对“一个实施例”、“实施例”、“说明性实施例”等的提及指示所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例可以或可以不一定包括该特定的特征、结构或特性。此外,这样的措辞不一定指代相同的实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否明确描述的其它实施例来实现这样的特征、结构或特性是在本领域技术人员的知识内的。另外,应当意识到,以“a、b以及c中的至少一个”的形式的列表中包括的项可以表示(a);(b);(c):(a和b);(a和c);(b和c);或(a、b以及c)。类似地,以“a、b或c中的至少一个”的形式列出的项可以表示(a);(b);(c);(a和b);(a和c);(b和c);或(a、b以及c)。

在一些情况下,所公开的实施例可以以硬件、固件、软件或其任何组合来实现。所公开的实施例还可以实现为由暂时性或非暂时性机器可读(例如,计算机可读)存储介质承载或存储在其上的指令,其可由一个或多个处理器读取并执行。机器可读存储介质可以体现为用于以机器可读的形式存储或传输信息的任何存储设备、机构、或其它物理结构(例如,易失性或非易失性存储器、介质盘或其它介质设备)。

在附图中,可以以具体的布置和/或排序示出一些结构特征或方法特征。然而,应当意识到,可能不需要这种具体的布置和/或排序。相反,在一些实施例中,这些特征可以以与说明性附图中所示的不同的方式和/或次序来布置。另外,在特定附图中包括结构或方法特征并不意味着暗指在所有实施例中都需要这样的特征,并且在一些实施例中可以不包括这样的特征或者可以将这样的特征与其它特征组合。

如图1所示,用于执行对存储器缓冲区存取的细粒度跟踪的说明性系统100包括经由网络120进行通信的一组计算设备110。该组计算设备110包括计算设备112、114以及116。虽然在该组中示出了三个计算设备110,但是应当理解,在其它实施例中,该组可以包括不同数量的计算设备110。系统100可以位于数据中心并且代表一个或多个客户端设备(未示出)来提供存储和计算服务(例如,云服务)。这样做时,计算设备110中的一个或多个计算设备可以通过网络120来对计算设备110中的另一计算设备的存储器中的缓冲区进行存取。在操作中,存储器被远程存取的计算设备110维护计数器对的池和稳定指针。在操作中,计算设备110将计数器对分配给对存储器缓冲区进行存取的一个或多个请求。每个计数器对包括本地管理的偏移量(lmo)和完成计数器,本地管理的偏移量(lmo)指示针对与lmo相关联的(多个)请求被预留的存储器的总量(例如,字节数),完成计数器对结合请求被处理(例如,写入或读取)的实际数据量进行跟踪。通过将计数器对分配给不同的存储器存取请求,可以与在典型系统中相比更精确地且以更高的分辨率来跟踪该进程或请求的完成(即,与请求相关联的存取操作的完成)。特别地,通过利用不同的计数器对来跟踪不同的请求,与计数器对相关联的完成计数器最终可以到达存储器缓冲区中与对应的本地管理的偏移量相同的位置,而不是随着附加的请求被接收和服务而持续地“跟随”本地管理的偏移量。当完成计数器处于与本地管理的偏移量相同的位置时,在说明性实施例中,计算设备110将计数器对退回(retire),使其返回到待用于对其它存储器存取请求的进程进行跟踪的可用计数器对的池中。另外,通过如上所述地将计数器对退回,计算设备110可以更高效地识别存储器缓冲区中的不再被操作的区域,并且相应地更新稳定指针(sp),从而使得这些区域可用于由其它操作(例如,远程或本地的读取操作或写入操作)使用。为了进一步提高协调对存储器缓冲区的远程存取的效率,在说明性实施例中计算设备110包括专用电路,例如,用于执行上述功能的主机结构接口中的专用计数器逻辑单元,而不依赖于通用cpu来协调对存储器缓冲区的远程存取。

现在参考图2,计算设备110可以体现为能够执行本文所描述的功能的任何类型的计算设备,这些功能包括接收来自其它计算设备110的对存储器缓冲区进行存取的请求,使用多个计数器对来跟踪对存储器缓冲区的多个并发远程存储器存取的状态,以及维护指示存储器缓冲区中的已经稳定(即,不再被远程存储器存取进程操作)的区域的稳定指针。如图2所示,说明性计算设备110包括中央处理单元(cpu)202、主存储器204、输入/输出(i/o)子系统206、通信电路208以及一个或多个数据存储设备214。当然,在其它实施例中,计算设备110可以包括其它或附加的组件,例如,常见于计算机中的那些组件(例如,显示器、外围设备等)。另外,在一些实施例中,说明性组件中的一个或多个可以并入另一组件或以其它方式形成另一组件的一部分。例如,在一些实施例中,主存储器204、或其部分可以并入cpu202中。

cpu202可以体现为能够执行本文所描述的功能的任何类型的处理器。cpu202可以体现为单核或多核处理器、微控制器、或其它处理器或处理/控制电路。在一些实施例中,cpu202可以体现为、包括、或耦合到现场可编程门阵列(fpga)、专用集成电路(asic)、可重构硬件或硬件电路、或其它有助于本文所描述的功能的执行的专用硬件。类似地,主存储器204可以体现为能够执行本文所描述的功能的任何类型的易失性(例如,动态随机存取存储器(dram)等)或非易失性存储器或数据存储装置。在一些实施例中,主存储器204的全部或一部分可以集成到cpu202中。在操作中,主存储器204可以存储在操作期间使用的各种软件和数据,例如,请求数据、计数器数据、操作系统、应用、程序、库以及驱动程序。

i/o子系统206可以体现为有助于与cpu202、主存储器204以及计算设备110的其它组件的输入/输出操作的电路和/或组件。例如,i/o子系统206可以体现为或以其它方式包括存储器控制器中心、输入/输出控制中心、集成传感器中心、固件设备、通信链路(例如,点对点链路、总线链路、电线、电缆、光导、印刷电路板迹线等)和/或有助于输入/输出操作的其它组件和子系统。在一些实施例中,i/o子系统206可以形成片上系统(soc)的一部分,并且与cpu202、主存储器204以及计算设备110的其它组件中的一个或多个一起并入单个集成电路芯片。

通信电路208可以体现为能够通过网络120实现计算设备110与另一计算设备110之间的通信的任何通信电路、设备或其集合。通信电路208可以被配置为使用任何一种或多种通信技术(例如,有线或无线通信)以及相关联的协议(例如,以太网、wimax等)来实现这样的通信。

说明性通信电路208包括主机结构接口(hfi)210,其还可以被称为网络接口控制器(nic)。通信电路208可以位于与cpu202分离的硅上,或者通信电路208可以与cpu202一起包括在多芯片封装中,或者甚至包括在与cpu202相同的管芯上。hfi210可以体现为一个或多个附加板、子板、网络接口卡、控制器芯片、芯片组、诸如现场可编程门阵列(fpga)或专用集成电路(asic)的专用组件、或可以由计算设备110使用来与另一计算设备110连接并执行远程存储器存取操作的其它设备。在一些实施例中,hfi210可以体现为包括一个或多个处理器的片上系统(soc)的一部分,或者包括在另外包含一个或多个处理器的多芯片封装上。在一些实施例中,hfi210可以包括本地处理器(未示出)和/或本地存储器(未示出),这两者均在hfi210本地。在这样的实施例中,hfi210的本地处理器可以能够执行本文所描述的cpu202功能中的一个或多个功能。另外地或可替代地,在这样的实施例中,hfi210的本地存储器可以在板级、插口级、芯片级、和/或其它级集成到计算设备110的一个或多个组件中。在说明性实施例中,hfi210包括计数器逻辑单元212,其可以体现为能够使用多个计数器对来跟踪对存储器204的缓冲区的多个并发远程存取的状态并且维护指示存储器缓冲区中的已经稳定(例如,不再被远程存储器存取进程操作)的区域的稳定指针的任何电路或设备。在一些实施例中,计数器逻辑单元212可以体现为诸如fpga或asci的一个或多个专用组件,以比通用处理器更高效地执行计数器逻辑单元212的操作。

一个或多个说明性数据存储设备214可以体现为被配置用于数据的短期或长期存储的任何类型的设备,举例来说,例如存储器设备和电路、存储器卡、硬盘驱动器、固态驱动器或其它数据存储设备。每个数据存储设备214可以包括系统分区,其存储用于数据存储设备214的数据和固件代码。每个数据存储设备214还可以包括操作系统分区,其存储用于操作系统的数据文件和可执行文件。

另外,计算设备110可以包括一个或多个外围设备216。这些外围设备216可以包括计算设备中常见的任何类型的外围设备,例如,显示器、扬声器、鼠标、键盘、和/或其它输入/输出设备、接口设备、和/或其它外围设备。

如上所述,计算设备110说明性地经由网络120进行通信,网络120可以体现为任何类型的有线或无线通信网络,包括全球网络(例如,互联网)、局域网(lan)或广域网(wan)、蜂窝网络(例如,全球移动通信系统(gsm)、3g、长期演进(lte)、全球微波接入互操作性(wimax)等)、数字订户线(dsl)网络、电缆网络(例如,同轴网、光纤网等)或其任何组合。

现在参考图3,在说明性实施例中,计算设备110可以在操作期间建立环境300。说明性环境300包括网络通信器320和计数器管理器330。环境300的组件中的每个组件可以体现为硬件、固件、软件或其组合。因此,在一些实施例中,环境300的组件中的一个或多个组件可以体现为电路或电气设备的集合(例如,网络通信器电路320、计数器管理器电路330等)。应当意识到,在这样的实施例中,网络通信器电路320或计数器管理器电路330中的一个或多个可以形成通信电路208、hfi210、计数器逻辑单元212、cpu202、主存储器204、i/o子系统206、和/或计算设备110的其它组件中的一个或多个的一部分。在说明性实施例中,环境300包括请求数据302,其可以体现为指示计算设备110所服务的每个远程存储器存取请求的标识符(例如,进程编号、字母数字标签等)以及与请求关联地对存储器204进行存取的计算设备110的标识符(例如,介质访问控制(mac)地址、互联网协议(ip)地址等)的任何数据。另外,在说明性实施例中,环境300包括计数器数据304,其可以体现为指示一组计数器对、每个计数器对的状态(例如,在使用中、被退回等)、每个完成计数器和本地管理的偏移量在存储器缓冲区中的位置(例如,值)以及稳定指针的位置(例如,值)的任何数据。

在说明性环境300中,网络通信器320可以体现为硬件、固件、软件、虚拟化硬件、仿真架构、和/或如上所述的其组合,网络通信器320被配置为有助于分别去往和来自计算设备110的入站和出站网络通信(例如,网络业务、网络分组、网络流等),包括对存储器204的缓冲区进行存取的请求。为此,网络通信器320被配置为接收并处理来自一个系统或计算设备110的数据分组,并且准备并发送数据分组到另一计算设备110。因此,在一些实施例中,网络通信器320的功能的至少一部分可以由通信电路208执行,并且在说明性实施例中由hfi210执行。

计数器管理器330可以体现为硬件、固件、软件、虚拟化硬件、仿真架构、和/或如上所述的其组合,计数器管理器330被配置为建立计数器对的池(一组多个计数器对),使用多个计数器对来跟踪对存储器204的缓冲区的多个并发远程存取的状态,以及持续地更新指示存储器缓冲区中的已经稳定(例如,不再由远程存储器存取进程操作)的区域的稳定指针。为此,在说明性实施例中,计数器管理器330包括计数器池管理器332、本地管理的偏移量(lmo)管理器334、完成计数器管理器336以及稳定指针管理器338。在说明性实施例中,计数器池管理器332被配置为建立计数器对的池,确定每个计数器对的状态(例如,在使用中、被退回等),以及确定哪个计数器对要分配给远程存储器存取请求。在说明性实施例中,lmo管理器334被配置为针对在使用中(例如,分配给一个或多个远程存储器存取请求)的每个计数器对更新lmo的位置(例如,值)。这样做时,lmo管理器334可以识别与请求相关联的数据的量(例如,待写入或读取的数据的量)并且使对应的lmo的位置(例如,值)前进该量。在说明性实施例中,与远程存储器存取请求相关联的数据的量作为请求的参数被包括。

在说明性实施例中,完成计数器管理器336被配置为更新在使用中(例如,分配给一个或多个远程存储器存取请求)的每个计数器对的位置(例如,值)。这样做时,当远程存储器存取请求被完成时,完成计数器管理器336可以使完成计数器前进与对应的远程存储器存取请求相关联的数据的量。完成计数器管理器336可以这样来确定对应的远程存储器存取请求何时已完成:通过将初始指定为请求的参数的数据的量与实际被处理(例如,由通信电路208接收并且写入到存储器204中的缓冲区,或者从缓冲区读取并且由通信电路208发送)的数据的量进行比较,通过接收来自计算设备110的本地软件栈的、请求完成的消息,和/或通过接收来自远程计算设备110的、对存储器204进行了远程存取的类似消息。在说明性实施例中,稳定指针管理器338被配置为持续地更新稳定指针的位置(例如,值),以指示存储器缓冲区中的不再被远程计算设备110操作(例如,写入或从其读取)的区域。在说明性实施例中,稳定指针管理器338可以响应于检测到计数器对已被退回(例如,当完成计数器等于计数器对的本地管理的偏移量时)而确定是否使稳定指针前进。在其它实施例中,稳定指针管理器338可以周期性地(例如,以预定义的频率)确定是否使稳定指针前进,而不是响应于计数器对的退回来这样做。

应当意识到,计数器池管理器332、lmo管理器334、完成计数器管理器336以及稳定指针管理器338中的每一个可以单独地体现为硬件、固件、软件、虚拟化硬件、仿真架构、和/或其组合。例如,计数器池管理器332可以体现为硬件组件,而lmo管理器334、完成计数器管理器336以及稳定指针管理器338体现为虚拟化硬件组件或体现为硬件、固件、软件、虚拟化硬件、仿真架构、和/或其组合的一些其它组合。

现在参考图4,在使用中,计算设备110可以执行用于对存储器缓冲区存取的完成状态进行跟踪的方法400。方法400开始于框402,其中计算设备110确定是否执行完成跟踪。在说明性实施例中,如果计算设备110上电并且通过网络120与至少一个其它计算设备110通信,则计算设备110确定执行完成跟踪。在其它实施例中,计算设备110可以基于其它准则来确定是否执行完成跟踪。无论如何,响应于执行完成跟踪的确定,方法400前进到框404,其中计算设备建立计数器对的池。在建立计数器对的池时,计算设备110可以预留存储器或识别寄存器来存储每个计数器对的完成计数器和本地管理的偏移量的值。在说明性实施例中,在建立计数器对的池时,计算设备110建立至少两个计数器对,如框406中所指示的。因此,如下文更详细地说明的,计算设备110能够独立地跟踪多个并发远程存储器存取请求的完成状态。如框408中所指示的,在建立至少两个计数器对时,计算设备110可以建立预定义数量的计数器对(例如,在配置文件中指定的计数器对的数量等)。如框410中所指示的,计算设备110可以根据期望的跟踪粒度来建立多个计数器对。例如,如果计算设备110的管理员确定期望独立地跟踪特定数量(例如,三个)的并发远程存储器存取请求的完成状态,则管理员可以指定该数量(例如,通过用户接口),并且计算设备110可以建立对应数量的计数器对。另外地或可替代地,如框412中所指示的,计算设备110可以根据可用跟踪器资源的量来建立该数量的计数器对,例如,可用于(例如,在专用计数器逻辑单元212)存储每个计数器对的完成计数器和本地管理的偏移量的值的寄存器的数量或存储器的量。如框414中所指示的,在建立计数器对的池时,计算设备110建立每个计数器对的本地管理的偏移量和完成计数器。在说明性实施例中,计算设备110使用hfi210的专用计数器电路(例如,计数器逻辑单元212)来建立计数器对的池,如框416所指示的。在建立计数器对时,计算设备110可以将本地管理的偏移量和完成计数器的初始值(例如,位置)设定为可用于远程存取的存储器缓冲区的开头位置(例如,存储器204的开始地址)。

仍然参考图4,计算设备110另外建立稳定指针来指示存储器缓冲区中的未进行远程存取请求操作的区域,如框418中所指示的。在说明性实施例中,在建立稳定指针时,计算设备110将稳定指针的值设定为等于在框404中建立的完成计数器和本地管理的偏移量的值(例如,以指向存储器缓冲区的开始地址)。在说明性实施例中,计算设备110使用hfi210的专用计数器电路(例如,计数器逻辑单元212)来建立稳定指针,如框420中所指示的。随后,在框422中,计算设备110接收来自远程计算设备110的(例如,通过网络120)对存储器缓冲区进行存取的请求。这样做时,计算设备110可以接收写入存储器缓冲区或从存储器缓冲区进行读取的请求,如框424中所指示的。此外,如框426中所指示的,计算设备110可以接收要被操作(例如,写入或读取)的数据的量(例如,字节数)的指示作为请求的参数。随后,方法400前进到图5的框428,其中计算设备110确定是否将未使用的计数器对分配给请求。

现在参考图5,在确定是否将未使用的计数器对分配给请求时,计算设备110可以确定未使用的计数器对在池中是否可用,如框430中所指示的。另外地或可替代地,计算设备110可以确定预定义数量的请求或数据的量是否与当前活跃的计数器对相关联,如框432所指示的。例如,在一些实施例中,如果已经接收到新请求并且计数器对可用且当前未分配给任何远程存储器存取请求,则计算设备110可以确定将当前可用的计数器对分配给请求(例如,“贪婪算法”)。相比而言,在其它实施例中,仅当当前分配的计数器对(如果有)当前各自对阈值数量(例如,多于一个)的远程存储器存取请求或与任何数量的远程存储器存取请求相关联的阈值量的数据(例如,阈值数量的字节)进行跟踪并且至少一个未使用的计数器对在池中可用时,计算设备110才可以将未使用的计数器对分配给新接收到的请求。在说明性实施例中,如框434中所指示的,计算设备110利用hfi210的专用计数器电路(例如,计数器逻辑单元212)来执行是否分配未使用的计数器对的确定。

在框436中,方法400基于计算设备110是否被确定为将未使用的计数器对分配给新接收到的请求而沿着两条路径之一前进。如果计算设备110被确定为分配未使用的计数器对,则方法400前进到框438,其中计算设备110将新分配的计数器对的本地管理的偏移量和完成计数器设定为活跃(例如,当前分配的)计数器对(如果有)的最大本地管理的偏移量,如框440中所指示的。另外,在说明性实施例中,并且如框442中所指示的,计算设备110使与新分配的计数器对相关联的本地管理的偏移量前进要被操作的数据的量(例如,在请求中指示的数据的量,如结合图4的框426所描述的)。如框444中所指示的,在说明性实施例中,计算设备110使用hfi210的专用计数器电路(例如,计数器逻辑单元212)来分配未使用的计数器对。返回参考框436,如果计算设备110相反被确定为不将未使用的计数器对分配给请求,则方法400进行到框446,其中计算设备110使活跃计数器对的本地管理的偏移量前进要被操作的数据的量(例如,在请求中指示的数据的量,如结合图4的框426所描述的)。这样做时,计算设备110使当前在使用中的本地管理的偏移量中的在存储器缓冲区中向前最远(例如,具有最大值)的本地管理的偏移量前进。在说明性实施例中,计算设备110使用hfi210的专用计数器电路(例如,计数器逻辑单元212)使本地管理的偏移量前进,如框450中所指示的。无论计算设备110是分配未使用的计数器对还是已经在使用中的计数器对,方法400随后都前进到图6的框452,其中计算设备110对存储器缓冲区进行操作以完成请求以及可能未决的任何其它先前接收到的请求。

现在参考图6,在说明性实施例中,在对存储器缓冲区进行操作时,计算设备110可以接收数据并且将与(多个)请求相关联的数据写入存储器缓冲区,如框454中所指示的。如框456中所指示的,计算设备110可以另外地或可替代地根据一个或多个接收到的请求从存储器缓冲区读取数据并且发送所读取的数据。在说明性实施例中,在对存储器缓冲区进行操作时,计算设备110使每个活跃的计数器对的完成计数器在相关联的数据被写入存储器缓冲区或从存储器缓冲区读取时前进,如框458中所指示的。另外,在说明性实施例中,计算设备110将其中完成计数器等于对应的本地管理的偏移量的任何计数器对退回,如框460中所指示的。此外,如框462中所指示的,计算设备110将稳定指针设定到存储器缓冲区中的已经完成了远程存取操作(例如,无数据被远程计算设备写入或读取)的部分。如框464中所指示的,在说明性实施例中,计算设备110使用hfi210的专用计数器电路(例如,计数器逻辑单元212)来管理计数器对和稳定指针。随后,方法400循环回到框422,其中计算设备110等待来自远程计算设备110的对存储器缓冲区进行存取的另一请求。

现在参考图7,在跟踪一组示例远程存储器缓冲区存取请求的一个阶段700中,计算设备110已经接收到对存储器204的缓冲区进行写入的两个单独的远程存储器存取请求r0和r1。两个计数器对之一已经被分配用于跟踪这两个存取请求的完成。因此,所分配的计数器对的lmo(即,lmo1)已经前进了待写入存储器缓冲区的字节数,而对应的cc(即,cc1)尚未前进,因为请求r0和r1中的任一个均没有完成。另外,稳定指针位于存储器缓冲区的开头处。现在参考图8,在后续阶段800中,计算设备110已经接收到两个附加的存取请求r2和r3,并且存取请求r1已经完成。因此,计算设备110已经使cc1前进由r1操作的数据的量,并且计算设备110已经将来自池中的其它可用计数器对分配用于跟踪r2和r3的完成。这样做时,计算设备110初始地将lmo(即,lmo0)和对应的cc(即,cc0)设定为lmo1的位置,并且然后使lmo0前进要由r2和r3操作的数据的量(例如,字节数)。现在参考图9,在后续阶段900中,r0请求已经完成,并且计算设备110已经使cc1前进针对r0请求在存储器缓冲区中操作的数据的量。响应于cc1现在等于lmo1的确定,计算设备110退回计数器对(即,cc1和lmo1),并且将其返回到可用(即,被退回的)计数器对的池。另外,假定没有远程存储器存取请求对存储器缓冲区的开头与cc0的位置之间的区域进行操作,计算设备110使稳定指针前进到cc0的位置。现在参考图10,在后续阶段1000中,计算设备110接收另一存取请求r4。作为响应,计算设备110将先前退回的计数器对lmo1和cc1分配给该请求。这样做时,计算设备110初始地将lmo1和cc1的值设定为lmo0的值,并且然后使lmo1前进要针对r4请求进行操作的数据的量。

示例

以下提供本文公开的技术的说明性示例。该技术的实施例可以包括以下描述的示例中的任何一个或多个及其任何组合。

示例1包括一种用于跟踪对存储器缓冲区的存取的完成的计算设备,该计算设备包括:存储器缓冲区;以及主机结构接口,其包括计数器逻辑单元,其中,计数器逻辑单元用于:建立针对存储器缓冲区的多个计数器对,其中,每个计数器对包括本地管理的偏移量和完成计数器;接收来自远程计算设备的对存储器缓冲区进行存取的请求,其中,请求包括待读取或写入的数据的量;将多个计数器对中的一个计数器对分配给请求;使所分配的计数器对的本地管理的偏移量前进待读取或写入的数据的量;以及在数据被从存储器缓冲区读取或被写入存储器缓冲区时使所分配的计数器对的完成计数器前进。

示例2包括示例1的主题,并且其中,计数器逻辑单元还用于:确定所分配的计数器对的完成计数器是否等于所分配的计数器对的本地管理的偏移量;以及响应于完成计数器等于本地管理的偏移量的确定,将所分配的计数器对退回。

示例3包括示例1和示例2的主题,并且其中,计数器逻辑单元还用于对稳定指针进行设定,以指示存储器缓冲区中的针对远程计算设备的所有存储器存取请求已经被完成的区域。

示例4包括示例1-3中的任一示例的主题,并且其中,请求是第一请求,所分配的计数器对是第一计数器对,并且计数器逻辑单元还用于:接收对存储器缓冲区进行存取的第二请求;响应于第一计数器对尚未被退回并且第二计数器对可用的确定,将第二计数器对分配给第二请求;以及将第二计数器对的完成计数器和本地管理的偏移量设定为第一计数器对的本地管理的偏移量。

示例5包括示例1-4中的任一示例的主题,并且其中,计数器逻辑单元还用于,在与第二请求相关联的数据被从存储器缓冲区读取或被写入存储器缓冲区时使第二计数器对的完成计数器前进。

示例6包括示例1-5中的任一示例的主题,并且其中,计数器逻辑单元还用于:接收对存储器缓冲区进行存取的第二请求;确定预定义数量的存取请求是否已经与计数器对相关联;以及响应于预定义数量的存取请求尚未与计数器对相关联的确定,将计数器对分配给接收到的第二请求。

示例7包括示例1-6中的任一示例的主题,并且其中,计数器逻辑单元还用于,使计数器对的本地管理的偏移量前进在第二请求中待读取或写入的数据的量。

示例8包括示例1-7中的任一示例的主题,并且其中,建立多个计数器对包括建立预定义数量的计数器对。

示例9包括示例1-8中的任一示例的主题,并且其中,建立多个计数器对包括根据期望的粒度来建立多个计数器对。

示例10包括示例1-9中的任一示例的主题,并且其中,建立多个计数器对包括根据可用跟踪器资源的量来建立多个计数器对。

示例11包括示例1-10中的任一示例的主题,并且还包括一个或多个处理器;其中,主机结构接口位于与计算设备的一个或多个处理器分离的芯片上。

示例12包括示例1-11中的任一示例的主题,并且还包括一个或多个处理器;其中,主机结构接口与计算设备的一个或多个处理器被包括在多芯片封装中。

示例13包括示例1-12中的任一示例的主题,并且还包括一个或多个处理器;其中,主机结构接口被集成到一个或多个处理器中的至少一个处理器中。

示例14包括示例1-13中的任一示例的主题,并且还包括:一个或多个处理器;以及存储器;其中,存储器缓冲区位于存储器中。

示例15包括一种用于跟踪对存储器缓冲区的存取的完成的方法,该方法包括:由计算设备建立针对存储器缓冲区的多个计数器对,其中,每个计数器对包括本地管理的偏移量和完成计数器;由计算设备接收来自远程计算设备的对存储器缓冲区进行存取的请求,其中,请求包括待读取或写入的数据的量;由计算设备将计数器对中的一个计数器对分配给请求;由计算设备使所分配的计数器对的本地管理的偏移量前进待读取或写入的数据的量;以及由计算设备在数据从存储器缓冲区被取或被写入存储器缓冲区时使所分配的计数器对的完成计数器前进。

示例16包括示例15的主题,并且还包括:由计算设备确定所分配的计数器对的完成计数器是否等于所分配的计数器对的本地管理的偏移量;以及由计算设备并且响应于完成计数器等于本地管理的偏移量的确定而将所分配的计数器对退回。

示例17包括示例15和示例16的主题,并且还包括对稳定指针进行设定,以指示存储器缓冲区中的针对远程计算设备的所有存储器存取请求已经被完成的区域。

示例18包括示例15-17中的任一示例的主题,并且其中,请求是第一请求,并且所分配的计数器对是第一计数器对,该方法还包括:由计算设备接收对存储器缓冲区进行存取的第二请求;由计算设备响应于第一计数器对尚未被退回并且第二计数器对可用的确定而将第二计数器对分配给第二请求;以及由计算设备将第二计数器对的完成计数器和本地管理的偏移量设定为第一计数器对的本地管理的偏移量。

示例19包括示例15-18中的任一示例的主题,并且还包括:由计算设备在与第二请求相关联的数据被从存储器缓冲区读取或被写入存储器缓冲区时使第二计数器对的完成计数器前进。

示例20包括示例15-19中的任一示例的主题,并且还包括:由计算设备接收对存储器缓冲区进行存取的第二请求;由计算设备确定预定义数量的存取请求是否已经与计数器对相关联;以及由计算设备响应于预定义数量的存取请求尚未与计数器对相关联的确定而将计数器对分配给接收到的第二请求。

示例21包括示例15-20中的任一示例的主题,并且还包括,由计算设备使计数器对的本地管理的偏移量前进在第二请求中待读取或写入的数据的量。

示例22包括示例15-21中的任一示例的主题,并且其中,建立多个计数器对包括建立预定义数量的计数器对。

示例23包括示例15-22中的任一示例的主题,并且其中,建立多个计数器对包括根据期望的粒度来建立多个计数器对。

示例24包括示例15-23中的任一示例的主题,并且其中,建立多个计数器对包括根据可用跟踪器资源的量来建立多个计数器对。

示例25包括示例15-24中的任一示例的主题,并且其中,建立多个计数器对包括利用计算设备的主机结构接口的专用计数器电路来建立多个计数器对。

示例26包括示例15-25中的任一示例的主题,并且还包括利用专用计数器电路来对稳定指针进行设定,以指示存储器缓冲区中的针对远程计算设备的所有存储器存取请求已经被完成的区域。

示例27包括示例15-26中的任一示例的主题,并且其中,将计数器对中的一个计数器对分配给请求包括利用专用计数器电路将计数器对中的一个计数器对分配给请求。

示例28包括示例15-27中的任一示例的主题,并且其中,使所分配的计数器对的本地管理的偏移量前进待读取或写入的数据的量包括:利用专用计数器电路使所分配的计数器对的本地管理的偏移量前进待读取或写入的数据的量。

示例29包括示例15-28中的任一示例的主题,并且其中,在数据被从存储器缓冲区读取或被写入存储器缓冲区时使所分配的计数器对的完成计数器前进包括:利用专用计数器电路在数据被从存储器缓冲区读取或被写入存储器缓冲区时使所分配的计数器对的完成计数器前进。

示例30包括一种或多种机器可读存储介质,包括存储于其上的多个指令,该多个指令响应于被执行而使计算设备执行示例15-29中的任一示例的方法。

示例31包括一种用于跟踪对存储器缓冲区的存取的完成的计算设备,该计算设备包括一个或多个处理器;一个或多个存储器设备,其中存储有多个指令,该多个指令当被执行时使得计算设备执行示例15-29中的任一示例的方法。

示例32包括一种用于跟踪对存储器缓冲区的存取的完成的计算设备,该计算设备包括用于执行15-29中的任一示例的方法的模块。

示例33包括一种跟踪对存储器缓冲区的存取的完成的计算设备,该计算设备包括:计数器管理器电路,其用于建立针对存储器缓冲区的多个计数器对,其中,每个计数器对包括本地管理的偏移量和完成计数器;网络通信器电路,其用于接收来自远程计算设备的对存储器缓冲区进行存取的请求,其中,该请求包括待读取或写入的数据的量;其中,计数器管理器电路还用于将计数器对中的一个计数器对分配给请求,使所分配的计数器对的本地管理的偏移量前进待读取或写入的数据的量,以及在数据被从存储器缓冲区读取或被写入存储器缓冲区时使所分配的计数器对的完成计数器前进。

示例34包括示例33的主题,并且其中,计数器管理器电路还用于:确定所分配的计数器对的完成计数器是否等于所分配的计数器对的本地管理的偏移量;以及响应于完成计数器等于本地管理的偏移量的确定,将所分配的计数器对退回。

示例35包括示例33和示例34的主题,并且其中,计数器管理器电路还用于对稳定指针进行设定,以指示存储器缓冲区中的针对远程计算设备的所有存储器存取请求已经被完成的区域。

示例36包括示例33-35中的任一示例的主题,并且其中,请求是第一请求,所分配的计数器对是第一计数器对,网络通信器还用于接收对存储器缓冲区进行存取的第二请求;并且计数器管理器电路还用于响应于第一计数器对尚未被退回并且第二计数器对可用的确定而将第二计数器对分配给第二请求;以及将第二计数器对的完成计数器和本地管理的偏移量设定为第一计数器对的本地管理的偏移量。

示例37包括示例33-36中的任一示例的主题,并且其中,计数器管理器电路还用于,在与第二请求相关联的数据被从存储器缓冲区读取或被写入存储器缓冲区时使第二计数器对的完成计数器前进。

示例38包括示例33-37中的任一示例的主题,并且其中,网络通信器电路还用于接收对存储器缓冲区进行存取的第二请求,并且计数器管理器电路还用于确定预定义数量的存取请求是否已经与计数器对相关联;以及响应于确定预定义数量的存取请求尚未与计数器对相关联,将计数器对分配给接收到的第二请求。

示例39包括示例33-38中的任一示例的主题,并且其中,计数器管理器电路还用于,使计数器对的本地管理的偏移量前进在第二请求中待读取或写入的数据的量。

示例40包括示例33-39中的任一示例的主题,并且其中,建立多个计数器对包括建立预定义数量的计数器对。

示例41包括示例33-40中的任一示例的主题,并且其中,建立多个计数器对包括根据期望的粒度来建立多个计数器对。

示例42包括示例33-41中的任一示例的主题,并且其中,建立多个计数器对包括根据可用跟踪器资源的量来建立多个计数器对。

示例43包括示例33-42中的任一示例的主题,并且还包括:包括专用计数器电路的主机结构接口,其中,建立多个计数器对包括利用专用计数器电路来建立多个计数器对。

示例44包括示例33-43中的任一示例的主题,并且其中,计数器管理器电路还用于利用专用计数器电路来对稳定指针进行设定,以指示存储器缓冲区中的针对远程计算设备的所有存储器存取请求已经被完成的区域。

示例45包括示例33-44中的任一示例的主题,并且其中,将计数器对中的一个计数器对分配给请求包括利用专用计数器电路将计数器对中的一个计数器对分配给请求。

示例46包括示例33-45中的任一示例的主题,并且其中,使所分配的计数器对的本地管理的偏移量前进待读取或写入的数据的量包括利用专用计数器电路使所分配的计数器对的本地管理的偏移量前进待读取或写入的数据的量。

示例47包括示例33-46中的任一示例的主题,并且其中,在数据被从存储器缓冲区读取或被写入存储器缓冲区时使所分配的计数器对的完成计数器前进包括,利用专用计数器电路在数据被从存储器缓冲区读取或被写入存储器缓冲区时使所分配的计数器对的完成计数器前进。

示例48包括一种用于跟踪对存储器缓冲区的存取的完成的计算设备,该计算设备包括:用于建立针对存储器缓冲区的多个计数器对的电路,其中,每个计数器对包括本地管理的偏移量和完成计数器;用于接收来自远程计算设备的对存储器缓冲区进行存取的请求的电路,其中,请求包括待读取或写入的数据的量;用于将计数器对中的一个计数器对分配给请求的模块;用于使所分配的计数器对的本地管理的偏移量前进待读取或写入的数据的量的电路;以及用于在数据被从存储器缓冲区读取或被写入存储器缓冲区时使所分配的计数器对的完成计数器前进的电路。

示例49包括示例48的主题,并且还包括:用于确定所分配的计数器对的完成计数器是否等于所分配的计数器对的本地管理的偏移量的电路;以及用于响应于完成计数器等于本地管理的偏移量的确定而将所分配的计数器对退回的电路。

示例50包括示例48和示例49的主题,并且还包括用于对稳定指针进行设定的电路,以指示存储器缓冲区中的针对远程计算设备的所有存储器存取请求已经被完成的区域。

示例51包括示例48-50中的任一示例的主题,并且其中,请求是第一请求,并且所分配的计数器对是第一计数器对,该计算设备还包括:用于接收对存储器缓冲区进行存取的第二请求的电路;用于响应于第一计数器对尚未被退回并且第二计数器对可用的确定而将第二计数器对分配给第二请求的模块;以及用于将第二计数器对的完成计数器和本地管理的偏移量设定为第一计数器对的本地管理的偏移量的电路。

示例52包括示例48-51中的任一示例的主题,并且还包括:用于在与第二请求相关联的数据被从存储器缓冲区读取或被写入存储器缓冲区时使第二计数器对的完成计数器前进的电路。

示例53包括示例48-52中的任一示例的主题,并且还包括:用于接收对存储器缓冲区进行存取的第二请求的电路;用于确定预定义数量的存取请求是否已经与计数器对相关联的电路;以及用于响应于预定义数量的存取请求尚未与计数器对相关联的确定而将计数器对分配给接收到的第二请求的模块。

示例54包括示例48-53中的任一示例的主题,并且还包括:用于使计数器对的本地管理的偏移量前进在第二请求中待读取或写入的数据的量的电路。

示例55包括示例48-54中的任一示例的主题,并且其中,用于建立多个计数器对的电路包括用于建立预定义数量的计数器对的电路。

示例56包括示例48-55中的任一示例的主题,并且其中,用于建立多个计数器对的电路包括用于根据期望的粒度来建立多个计数器对的电路。

示例57包括示例48-56中的任一示例的主题,并且其中,用于建立多个计数器对的电路包括用于根据可用跟踪器资源的量来建立多个计数器对的电路。

示例58包括示例48-57中的任一示例的主题,并且其中,用于建立多个计数器对的电路包括用于建立多个计数器对的主机结构接口的专用计数器电路。

示例59包括示例48-58中的任一示例的主题,并且还包括用于对稳定指针进行设定的专用计数器电路,以指示存储器缓冲区中的针对远程计算设备的所有存储器存取请求已经被完成的区域。

示例60包括示例48-59中的任一示例的主题,并且其中,用于将计数器对中的一个计数器对分配给请求的电路包括用于将计数器对中的一个计数器对分配给请求的专用计数器电路。

示例61包括示例48-60中的任一示例的主题,并且其中,用于使所分配的计数器对的本地管理的偏移量前进待读取或写入的数据的量的电路包括用于使所分配的计数器对的本地管理的偏移量前进待读取或写入的数据的量的专用计数器电路。

示例62包括示例48-61中的任一示例的主题,并且其中,用于在数据被从存储器缓冲区读取或被写入存储器缓冲区时使所分配的计数器对的完成计数器前进的电路包括:用于在数据被从存储器缓冲区读取或被写入存储器缓冲区时使所分配的计数器对的完成计数器前进的专用计数器电路。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1