首页> 中国专利> 使用不具有SFENCE的优化的PIO写入序列来发送分组

使用不具有SFENCE的优化的PIO写入序列来发送分组

摘要

用于使用不具有sfence的优化的PIO写入序列来发送分组的方法和装置。在支持乱序执行的处理器处接收用于将分组数据写入经编程的输入/输出(PIO)发送存储器的PIO写入指令的序列。以原始的顺序接收且乱序地执行PIO写入指令,每一条PIO写入指令将数据的存储单元写入存储缓冲器或将数据的存储块写入存储缓冲器。为存储缓冲器提供逻辑以检测存储块何时被填充,从而导致在那些存储块中的数据经由PCIe投递的写入而耗尽,所述PCIe投递的写入被写入由PIO写入指令定义的地址处的PIO发送存储器中的发送块。采用逻辑以检测分组的填充尺寸并检测分组的发送块何时已被填充,从而使分组数据能够有资格流出。

著录项

  • 公开/公告号CN106415515A

    专利类型发明专利

  • 公开/公告日2017-02-15

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN201580028295.6

  • 发明设计人 M·德伯格;Y·M·穆莎;

    申请日2015-06-05

  • 分类号G06F13/38;

  • 代理机构上海专利商标事务所有限公司;

  • 代理人黄嵩泉

  • 地址 美国加利福尼亚州

  • 入库时间 2023-06-19 01:31:14

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-06-25

    授权

    授权

  • 2017-03-15

    实质审查的生效 IPC(主分类):G06F13/38 申请日:20150605

    实质审查的生效

  • 2017-02-15

    公开

    公开

说明书

背景技术

近年来,对高性能计算(HPC)的使用和兴趣已出现大幅增长。过去,HPC通常与所谓的“超级计算机”相关联。超级计算机在20世纪60年代被引入,最初以及几十年来主要由Seymour Cray在以Seymour Cray的名字或首字母缩写命名的控制数据公司(CDC)、Cray研究所以及随后的多个公司制造。虽然20世纪70年代的超级计算机仅使用几个处理器,但在20世纪90年代,具有数千个处理器的机器开始出现,并且近来已经实现具有数十万个“现成”的处理器的大规模并行超级计算机。

存在许多类型的HPC架构,这些HPC架构以不同级别的规模和性能来实现并进行研究导向。然而,常见的思路在于,诸如处理器和/或处理器核之类的大量计算单元的互连来以并行的方式协作地执行任务。根据近来的芯片上系统(SoC)设计和提案,使用二维(2D)阵列、三维环(torus)、环或其他配置在单个SoC上实现大量的处理器核等。此外,研究人员已经提出了3D SoC,在3D soC下,100个或甚至1000个处理器核以3D阵列互连。在多个服务器板上的多个分开的多核处理器和SoC也可以紧密地间隔,多个服务器板又经由背板等通信地互连。另一常见的方法是在服务器的机架(例如,刀片服务器和模块)中互连多个计算单元。一度声称是世界上最快的超级计算机的IBM Sequoia(红杉)包括总计1572864个核的服务器刀片/模块的96个机架,并且当在峰值性能下操作时消耗巨额的7.9兆瓦。

HPC的性能瓶颈之一是由在计算节点之间的多个互连上传送数据引起的等待时间(latency)。典型地,这些互连以互连层次结构来构造,处理器/SoC内的最高速且最短的互连在此层次结构的顶部,而等待时间随着沿层次结构级别向下进展而增加。例如,在处理器/SoC级别之后,互连层次结构可包括处理器间的互连级别、板间的互连级别、以及将单独的服务器或单独服务器的聚合与其他机架中的服务器/聚合连接的一个或多个附加的级别。

最近,已引进了具有100千兆位/秒(100Gb/s)速度的互连链路,诸如,在IEEE 802.3bj草案标准中所指定,其定义了用于在背板和铜缆线上的100Gb/s操作的物理层(PHY)规范和管理参数。正在为HPC环境开发和设计包括具有类似速度(类似于100Gb/s)的链路的网格状互连结构。此类高速链路和互连的可用性将性能限制从结构移至分组的软件生成以及对往、返于互连而传送的分组数据的处置。

附图说明

随着通过在结合所附附图时参考以下具体实施方式使本发明的前述多个方面和许多伴随的优点变得更好地被理解,本发明的前述多个方面和许多伴随的优点将更容易领会,其中,遍及各个视图,除非另外指定,否则相同的参考编号指相同的部件:

图1是根据一个实施例的包括主机结构接口(HFI)的系统的示意图;

图2是根据一个实施例的、示出PIO发送存储器和SDMA存储器的各方面的示意图;

图3是示出PIO发送物理地址空间的示例的框图;

图4是示出在虚拟地址空间、设备物理地址空间与PIO发送存储器地址空间之间的示例性地址映射的框图;

图5是示出根据一个实施例的发送缓冲区的布局的框图;

图6a是示出图1的系统的选择性元件的进一步细节的示意图;

图6b是示出被写入到存储缓冲器且被转发至PIO发送存储器中的发射缓冲器的两个分组数据块的示意图;

图7a-7f是示出发送时间帧的示意图,所述发送时间帧对应于分组数据通过分组出口从存储器至PIO发送存储器的示例性传送;

图8a-8e是示出发送时间帧的示意图,所述发送时间帧对应于分组数据使用512位写入指令从存储器至PIO发送存储器的示例性传送;

图9a和图9b是分别示出具有和不具有sfence(存储屏障)的PIO发送写入的数据传送等待时间的比较的时间流图;

图10是根据一个实施例的出口块的示意图;

图11是示出在准备供向外流出到耦合至HFI的结构链路上的分组数据时实现的操作、阶段和状态的流程图;

图12是示出根据一个实施例的PIO发送地址FIFO和信用返回FIFO的示图;

图13是根据一个实施例的包括HFI的系统节点的示意图;

图14是包括两个HFI的ASIC的示意图。

具体实施方式

本文中描述用于使用不具有sfence的优化的PIO写入序列来发送分组的方法和装置的实施例。在以下描述中,阐述了许多具体细节以提供对本发明的实施例的透彻理解。然而,本领域技术人员将认识到,可不利用特定的细节中的一个或多个或利用其他方法、部件、材料等来实践本发明。在其他实例中,未详细地示出或描述公知的结构、材料或操作以避免使本发明的多个方面含糊。

为了清晰起见,也可以附图中部件的标签而不是以特定的附图标记来引用本文中附图中的各个部件。此外,能以后面跟随“(typ)”(意思是“典型的”)的附图标记示出指示特定类型的部件(与特定部件相对)的附图标记。将理解,这些部件的配置将是在附图中示出、但出于简洁和清楚的目的未标记的典型的或类似的部件。相反,“typ"不应理解为意指该部件、元件等典型地用于它的所公开的功能、实现、目的,等等。

图1示出本文中用于说明分组数据数据处置技术的多个方面的示例性系统100,所述分组数据处置技术促进系统存储器与结构接口之间增加的分组数据吞吐量。系统100包括主机结构接口(HFI)102,所述HFI 102经由外围组件网际快速(PCIe)互连105而耦合至主机处理器104,所述主机处理器104又经由存储器互连107而耦接至存储器106(它通常也被称为系统存储器)。HFI 102包括耦合至结构端口112的发射端口110的发射引擎108以及耦合至结构端口112的接收端口116的接收引擎114。发射引擎108和接收引擎114中的每一个也都耦合至PCIe接口(I/F)118,所述PCIe接口118经由PCIe互连105促进HFI 102与处理器104之间的通信。

发射引擎108包括:发送存储器120;发送直接存储器访问(发送DMA)块122,其包括多个发送DMA(SDMA)引擎123;缓冲器124;出口块126;以及信用返回机制127。接收引擎114包括Rx接收块128、接收缓冲器130、DMA引擎132、中央控制引擎(CCE)134、解析器136、流水线块的集合138以及接收寄存器阵列(Rcv阵列)140。

发射引擎108(也称为“发送”引擎)生成用于流出到结构链路(例如,耦合至发射端口110的结构链路,未示出)的分组。由发送引擎提供的两种不同的机制是PIO发送和发送DMA。

PIO发送是“经编程的输入输出(Programmed Input/Output)”发送的简称。PIO也为一些人所知为“存储器映射的输入/输出”(MMIO)。对于PIO发送,主机处理器104通过使用存储指令将分组的头部和有效载荷写入到存储器映射的发送缓冲器来生成分组。处理器将分组推入(push)到HFI 102,从这个意义上而言,PIO发送可视为分组“推入”。在发送存储器120中实现的发送缓冲器在适配器的物理地址空间中,使得对发送缓冲器的处理器写入转换为通过PCIe互连105和PCIe接口118被传送至发送存储器120的PCIe写入事务。

发送存储器120中的多个发送缓冲器加上用于将发送缓冲器信用往回返回至主机处理器104的机制被称为“发送上下文”。在一个实施例中,由HFI 102提供多达160个独立的发送上下文,从而允许PIO发送机制的多达160个并发的独立用户。通过直接将发送上下文映射至用户进程的虚拟地址映射中,可直接从用户模式软件来使用PIO发送。

PIO发送提供非常低的开销发送机制,该开销发送机制给所发送分组带来低等待时间和高消息速率。在适当的情况下,使用主机处理器104的写入-组合和存储缓冲器特征,以便将较小的写入聚合为PCIe互连和接口上的64B(字节)写入以改善带宽。由于主机处理器104涉及将分组字节写入到发送缓冲器(本质上为存储器复制),因此PIO发送机制是处理器密集型的(processor intensive)。这些性能特性使得为小至中尺寸的消息进行PIO发送高度优化。

发送直接存储器访问(缩写为发送DMA或SDMA)消除了处理器存储器复制,使得能以显著更低的处理器利用率将分组发送到发射引擎108。与在PIO发送机制中使用处理器写入将分组推入HFI 102不同,发送DMA块122中的SDMA引擎123直接从主机存储器106拉出(pull)分组头部和有效载荷以形成流出到结构链路的分组。在一个实施例中,发送DMA块122支持16个独立的SDMA引擎123,并且每一个SDMA引擎123都与其自身的SDMA队列相关联。

发送PIO和SDMA两者都使用存储和转发方法来发送分组。在分组能够开始从出口发出到链路之前,头部和有效载荷必须由发射引擎108上的发送缓冲器完全接收。为此目的,在HFI 102上提供发送缓冲器存储器,并且为发送PIO以及为SDMA提供分开的发送缓冲器存储器,如在图1中示出为发送存储器120和SDMA缓冲器124。在一个实施例中,此分区操作(partitioning)被硬连线到HFI设计中,并且不是软件可配置的。然而,可在软件控制下、以发送缓冲器信用的粒度将用于发送PIO的发送存储器120指派给发送上下文。类似地,能以相同的粒度将SDMA缓冲器124中的发送缓冲器存储器指派给SDMA引擎123。

接收引擎114的基本功能是:将(从结构)传入的分组的头部和有效载荷分开,在接收端口116处接收,并且将分组头部和有效载荷数据写入到主机存储器106中。在一个实施例中,去往HFI 102的分组数据作为包括在接收端口116处接收的“微片”的数据单元的流(微片流)、经由结构的链路被传送,其中,微片重新组装为分组,随后,所述分组被转发至接收引擎114。传入分组数据首先在Rx接收块128处经处理,在Rx接收块128处,提取并校验分组的头部中的各种字段以确定分组的类型。分组数据(其数据有效载荷)在接收缓冲器130处经缓冲,同时分组头部被转发至解析器136,所述解析器136解析头部数据以提取此头部数据的目的地地址和其他字段数据,并且进一步的操作由流水线操作138执行。结合适用的流水线操作,分组数据从接收缓冲器130被读取,并经由DMA引擎132被转发,所述DMA引擎132配置成用于经由PCIe DMA写入来将分组数据转发至存储器106。

图1进一步描述用于示出由CLK1(时钟1)和CLK2(时钟2)描绘的两个时钟域的使用的竖直虚线146。在一些实施例中,用于PCIe接口118的时钟频率可与用于HFI组件的其余部分的时钟频率不同,并且单独的参考时钟用于每一个时钟域。尽管没有示出,但是在发射端口110和接收端口116内使用的时钟域也可与由发射引擎108和接收引擎114采用的时钟域分开。

图2示出发送PIO操作和SDMA操作的进一步的细节。如图所示,可结合发送PIO分组数据采用多达160个发送上下文。每一个发送上下文都包括分配给那个发送上下文的PIO发送存储器120的连续片段。因此,用于发送上下文的发送缓冲器在主机物理地址空间中将是连续的。此发送缓冲器至用户进程的用户虚拟地址空间的正常映射也将典型地是实质上连续的。在一个实施例中,发送缓冲器中的发送块包括64B块,使得每一个发送上下文包括n x 64B,其中n是>0的整数。在一个实施例中,发送块在64B边界上对齐,但是没有附加的对齐约束施加于发送缓冲器指派。在一个实施例中,为发送上下文分配的发送缓冲器的尺寸具有限值。例如,在一个实施例中,PIO发送存储器120的尺寸为1MB(1048576字节),并且最大发送缓冲器尺寸为64KB(n=1024)。

在一个实施例中,主机处理器104采用使用4KB页粒度的存储器分页。然而,至主机虚拟地址空间的发送缓冲器存储器映射不必以4KB页粒度进行。

此架构选择意味着,当发送缓冲器处于64B粒度时,主机处理器的4KB分页机制不足以在两个发送上下文之间提供保护。由HFI 102使用基址偏移和每个发送上下文的界限来实现简单的地址空间重新映射。这通过以下方式实现:将发送上下文号包括在用于访问用于特定上下文的发送缓冲器的物理地址中。由此,发送上下文号被包括在驱动器为用户进程设置的映射的物理地址中。HFI 102在对发送缓冲器的写入时使用此信息来标识正在被写入的发送上下文,并且使用那个值来查找那个发送上下文的信息,以便验证发送上下文具有对发送缓冲器存储器内的那个特定发送块的访问权,且随后将地址重新映射至到发送缓冲器存储器的索引。此方法允许每一个发送缓冲器的起始对齐至HFI的地址空间的4KB页,但仍以64B粒度共享发送缓冲器存储器。

如上文所讨论,每个发送缓冲器的发送缓冲器存储器的最小量为对应于一个发送块的64B(n=1)。每个发送缓冲器的发送缓冲器的最大量是64KB,64KB是1024个发送块。在一个实施例中,施加此限值以限制用于由PIO发送机制进行的寻址的物理地址映射的量。此外,多使用一个地址位以在作为新分组的起始(SOP)的发送块和非新分组的起始的发送块之间进行区分。此编码操作允许勾画出分组边界,并且提供对PIO发送机制的使用的正确性的健康校验。此外,SOP发送块中的前8B用于将逐缓冲器控制(Per BufferControl,PBC)信息传递至HFI 102。PBC是64位控制四字(QW),此控制四字不是分组数据自身的部分,但包含关于分组的重要控制信息。地址中的SOP位允许在对发送缓冲器的写入的传入流中定位PBC值。

在一个实施例中,在以下表1中定义并在图3中描绘PIO发送物理地址空间的解码。在图3中所示的实施例中,由PIO发送缓冲器存储器占据的物理地址空间的总量为32MB。

表1

图4中示出地址映射过程的三个示例。注意,这三个示例上下文在发送缓冲器存储器中是连续的,并且不在4KB页上对齐,但是在设备物理地址空间中由上下文号分开,使得它们可在不跨发送上下文共享的情况下被映射至主机虚拟地址空间。这种情况的极端示例是使用一个64B发送块的64个不同的发送上下文的64个用户进程,64个不同的发送上下文中的每一个都映射到PIO发送存储器120的发送缓冲器存储器的相同的4KB信息量(worth)上。

作为示例,考虑发送上下文0的地址映射。此发送上下文包括64个块或4KB的用户进程虚拟地址空间。上下文在设备物理地址空间的位[23:16]中进行编码,同时在虚拟至物理地址转换中,虚拟地址位[11:0]被保留。进一步注意到,如果发送上下文对应于新分组的起始,则位24被置位(‘1’),否则,位24被清除(‘0’)。物理地址至PIO发送存储器地址映射将上下文地址位[24:16]加到地址的上下文基准位[15:0]。如进一步所示,在虚拟存储器、物理存储器和PIO发送存储器中的每一者中,发送上下文的尺寸是相同的。为发送上下文1和发送上下文2采用类似的地址映射。

用于PIO发送的分组填充使用对映射至主机地址空间的发送缓冲器的主机处理器写入。此映射典型地配置为写入-组合,使得处理器写入在作为被投递的(posted)写入事务而通过PCIe向外推到HFI 102之前不被高速缓存,而是伺机被聚合到64B处理器存储缓冲器尺寸。

在一个实施例中,HFI架构以8B粒度采用PIO发送写入事务。相应地,每一个事务在尺寸上是8B的倍数,并且起始于8B对齐的地址。在一个实施例中,存在每一个写入不跨越64B边界的要求,以确保每一个写入被包含在64B发送块内。相应地,在一个实施例中,PIO发送采用尺寸为64B且为64B对齐的PCIe写入。

为实现最佳性能,推荐软件以升序地址顺序填充发送缓冲器,并且为64B传送进行优化。在一个实施例中,软件采用填补(padding)(如果适用)以将写入序列生成至64B的倍数,使得精确地填充用于PIO发送操作的所有发送块。由此,从指令的角度看,在开始向下一64B发送块写入并继续进行而到最后的64B发送块之前,软件应当写入一个64B发送块的全部。处理器写入-组合机制可对这些写入重排序,因此,HFI硬件不依赖于这些写入序列通过PCIe以此顺序到达。HFI硬件支持以8B级别对写入序列进行的任意重排序。可由软件使用sfence指令以将排序强加至写入序列。然而,由于sfence是昂贵的操作,因此,HFI硬件提供优化以便如下文所述消除对sfence的需求。

每一个发送上下文都提供映射至主机存储器的只写发送缓冲器。如先前所描述,发送缓冲器起始于4KB对齐的地址,尺寸高达64KB,并且为64B发送块的单位。PIO发送机制通过以FIFO顺序将分组写入到发送缓冲器来进行。在一个实施例中,通过以增加的地址顺序写入8B PBC,随后是头部,随后是有效载荷来填充每一个分组。由此序列占据的发送缓冲器的量被向上舍入到连续64B发送块的整数(围绕发送缓冲器存储器的连续求模方式),并且软件配置成补全其写入序列以精确地填充这些64B发送块的全部。

PBC是每一个PIO发送中的第一个64B发送块的前8B。最小的PIO发送是一个发送块,而最大支持的分组尺寸需要对应于128B+10KB MTU(最大传送单元)的162个发送块。线上的分组尺寸是4B的倍数,因此提供了关于如何更细粒度地使用64B发送块的灵活性。

·在PBC中的PbcLengthDWs字段中指定4B倍数的线上的分组长度。

·64B倍数的填充尺寸通过将PbcLengthDWs向上舍入到64B的倍数来确定。

·填充尺寸覆盖8B PBC以及分组长度以及任何所需的填补以使写入序列成为64B的倍数。64B填补要求简化了硬件实现,因为所有发送块被完全填充。此外,此方法通过以下方式改善性能:确保分组的最后部分的写入-组合存储器缓冲器被填充至64B,从而使其自动地耗尽至HFI而不使用显式的sfence指令。填补字节对流出到线的分组没有贡献。

在图5中示出根据一个实施例的发送缓冲器的布局。以类FIFO语义来使用此发送缓冲器存储器。FIFO顺序由用于发送缓冲器映射中的每一个分组的发送块的地址顺序确定。注意,以环绕(wrap-around)方式(实现为循环FIFO)来使用发送缓冲器。这意味着一旦软件在发送缓冲器中写入最后64B,它就需要将地址往回更新到发送缓冲器的基址。对于发送缓冲器的写入受制于信用限值和信用返回策略,以确保主机处理器不对仍用于还未流出到结构的先前分组的发送缓冲器块过度写入。类FIFO语义如下:

·分组以FIFO顺序填充,但是具有重新组装特征,所述重新组装特征应对在写入-组合实现中固有的写入的重排序。

·随后,以FIFO顺序发射分组。在发射之后,分组具有VL仲裁的资格。

·随后,分组从逐VL的发射FIFO流出,并且对于来自具有相同VL的相同上下文的分组将是有序的,但对于来自不同VL上的相同发送上下文的分组可能是乱序的。

·信用返回按原始的FIFO顺序。这意味着直到在那个发送上下文上的全部较早的分组已流出,乱序地流出的分组的信用才恢复。

写入-组合映射允许主机处理器对用于建立分组的写入重排序。在常规方法下,用于强加顺序的处理器架构机制是sfence指令。这确保了在sfence指令之前的所有写入在sfence指令之后的所有写入之前将变得对HFI可见。然而,此排序伴随着显著的成本,因为它需要在主机处理器中从CPU核的往返双程,所述CPU核将存储发布至集成式输入-输出块(IIO)中的排序点。这增加了显著的等待时间,并另外在确认sfence排序之前妨碍全部其他存储在CPU核中完成。CPU的乱序能力允许指令上的一些前向进展覆盖此等待时间,但是这些资源不久会耗尽,并且将有待恢复的未引退指令的显著的积压。HFI架构力图最小化或消除用于对写入-组合序列排序的sfence指令的需求。

第一优化是消除分组内的sfence。在此,可由处理器对包括用于一个分组的PIO发送操作的写入重排序,并且HFI重新组装正确的顺序,并且提供机制来检测所有的写入何时到来使得分组填充是完整的且可发射分组。随着分组中的发送块的数量增加,此优化给予增加的益处。第二优化是消除分组之间的sfence,这要求HFI将来自不同的分组PIO发送的经交织的写入重新组装到它们相应的分组中。此优化对于短分组(诸如,配合到单个64B发送块中的常见的分组示例)是非常重要的。由HFI提供的机制涵盖这两种优化。

HFI通过解码地址来确定任何PIO发送写入的正确的数据布置。上下文在较高阶的地址位中是可用的,这确定了发送上下文对使用基址具有访问权的发送缓冲器部分并界定了已讨论的重新映射。地址的最低16位确定了被写入的数据在那个发送缓冲器内的布置。此方法确保了无论将写入向下重排序/拆分/合并至8B粒度,以8B粒度进行的那些写入总是正确地被写入到发送缓冲器存储器中的分组中。

图6a示出根据实施例的系统100的进一步细节。处理器104包括CPU 600,所述CPU 600包括支持乱序执行的多个处理器核。在一个实施例中,每一个物理处理器核都可实现为两个逻辑核,诸如,在公司的架构下所支持的那样。在一个实施例中,处理器104是64位处理器,并且每一个核都包括多个64位(64b)寄存器。处理器104还包括第2级(L2)高速缓存602和第1级(L1)高速缓存,所述L1高速缓存对于每一个核拆分为指令高速缓存604和数据高速缓存606。尽管为了简洁未示出,但是处理器也可采用跨处理器核被共享的末级高速缓存(LLC)。处理器104进一步包括经由存储缓冲器控制器逻辑609而受控的存储缓冲器608、IIO块610和PCIe接口612。处理器104的内部结构的一个实施例的进一步细节在图17中示出并在下文中描述。

在一个实施例中,存储器106、L2高速缓存602中的每一者都采用64字节高速缓存行,而存储缓冲器608采用64字节存储块。如进一步所示,在一个实施例中,使用“mov”指令,以64位(8字节)单位将数据从CPU 600中的64b寄存器写入到存储缓冲器608。为简单起见,在本文中的附图中,mov指令被标记为“mov.q”。任选地,可使用具有其他尺寸(诸如,16B和32B)的存储单元将数据写入到存储缓冲器608。如下文中更详细地所述,在一个实施例中,512位写入指令用于将64B数据写入到64B存储块,其中,每一个64B写入填充存储块。

PIO发送存储器120被描绘为包括两个发送上下文(发送上下文1和发送上下文2);然而,将会理解,在实际实现下,PIO发送存储器120一般将具有多得多的发送上下文(多达160个)。发送上下文被分配至软件应用(或以其他方式响应于分配发送上下文供由软件应用使用的请求)。在此示例中,软件应用‘A’被分配了发送上下文1,而软件应用‘B’被分配了发送上下文2。发送上下文1和2的尺寸分别为x个和y个64B发送块。在初始分配了发送上下文之后,发送上下文中的发送块中的每一个将是空的或“自由的”(例如,可用于添加数据)。在持续的操作期间,发送上下文被操作为循环FIFO,其中FIFO中的64B发送块从存储缓冲器608来填充,并且当分组被转发到出口块126(如下文所述,被称为使发送块流出)时所述FIFO中的64B发送块从FIFO中被去除,从而释放流出的发送块供重新使用。在FIFO的上下文下,每一个发送块都对应于FIFO槽,并且数据被添加之处的槽具有PIO发送存储器120中对应的存储器映射的地址。

每一个分组614都包括多个头部字段,这些头部字段包括PBC字段,各种头部字段(为简单起见相组合地示出)、PSM(性能比例消息传送)头部和PSM数据、以及ICRC(不变CRC)字段。如图所示,分组614的最小尺寸为64B,64B匹配存储缓冲器608中的存储块尺寸,并且匹配用于发送上下文FIFO中的每一个槽的64B发送块尺寸。

在持续的操作期间,将在CPU 600的核上执行软件指令以使存储器106中的分组数据的副本被写入到PIO发送存储器120中的发送上下文中。首先,分组数据以及对应的指令将从存储器106被复制到L2高速缓存602中,并且指令和数据从L2高速缓存602被复制到指令高速缓存604和数据高速缓存606。任选地,分组数据和指令可能已经驻留在L2高速缓存602中或驻留在指令高速缓存604和数据高速缓存606中。用于将分组数据从CPU 600的寄存器写入到存储缓冲器608中的8B存储单元的mov指令的序列在本文中示出为以分组成组;然而,将理解的是,处理器核正在连续地执行包含mov指令的指令线程。如图6b中所示,当用于将数据从处理器核寄存器复制(写入)到存储缓冲器608中的8B存储单元的mov指令被处理时,64B存储块被填充。在一个实施例中,存储缓冲器608以随机访问方式操作,在此方式下,存储块的地址与用于将数据存储在PIO发送存储器120中的寻址无关。在存储缓冲器控制逻辑609中实现存储缓冲器块填充检测机制以确定给定的64B存储块何时被填充。在检测到存储块被填充之后,通过执行从存储缓冲器608到PIO发送存储器120中合适的FIFO槽中的64B发送块的64B PCIe投递的写入来“耗尽”存储块。在本文中,使用术语“耗尽的(drained)”来表达由硬件(例如,存储缓冲器控制逻辑609)生成64B PCIe投递的写入,这与对缓冲器“转储清除(flushing)”相对,后者一般经由软件指令实现。

如图6b中所示,在时刻Tm,存储块616被检测为是完整的,从而导致存储块616经由对为发送上下文1分配的PIO发送存储器120中的发送缓冲器中的发送块618的64B>n,存储缓冲器608中的存储块620检测为被填充,从而导致存储块620经由对PIO发送存储器120中的发送块622的第二64B>

图7a-7f示出分组数据如何被添加到PIO发送存储器120且后续使用8B写入而流出到8B存储单元的示例性随时间推移的序列。图7a-7e中的每一个描绘存储缓冲器608和PIO发送缓冲器120的进一步细节。如上文所述,PIO发送缓冲器的存储器空间可分区为用于多达160个发送上下文的缓冲器。除了图6a和图6b中也示出且在上文中讨论的发送上下文1和2之外,图7a-7f中的每一个还描绘了发送上下文3和发送上下文4。发送上下文3和4说明共享PIO发送缓冲器120的缓冲器空间的附加的发送上下文。此外,以不同的交叉线图案描绘发送上下文3和4以指示这些发送上下文正在由在另一处理器核上运行的软件使用。一般而言,在多核CPU中,对应于各种任务和服务的指令线程被指派给多个处理器核并在多个处理器核之间分布。在一个实施例下,在软件应用之间共享PIO发送缓冲器120,所述软件应用包括包含这些指令线程的部分的组件、模块等。这些指令线程相对于在其他核上执行的指令线程同步地被执行,由此,可并发地实现多个软件应用以生成逐核地、异步地被添加到PIO发送缓冲器中的发送上下文的分组数据。相应地,虽然每一个核在一时刻仅可执行单条指令(诸如,mov),但是多个指令线程正在被并发地执行,从而导致与图7a-7f中所示的用于其他发送上下文(诸如,发送上下文3和4以及未示出的发送上下文)的那些类似的数据传送。为了支持这些并发且异步的数据传送,取决于特定的处理器架构,存储缓冲器可配置成用于在多个核之间共享,或可为每一个核分配私有存储缓冲器。

图7a对应于第一时间帧T1,在此第一时间帧T1,数据已被添加至对应于第一64B存储块700的全部8个8B存储单元,这导致64字节的数据被写入发送上下文1中的第三FIFO槽处的发送块。数据将被写入到的发送块将基于那个发送块的存储器映射的地址,所述存储器映射的地址基于PIO写入指令以及诸如图4中所示和上文中讨论的虚拟至物理至PIO发送存储器地址转换。这个发送块对应于具有j个块长的填充尺寸(包括填补,如果适用)的分组的第一个块。如上文所讨论,PBC头部包括在4B的倍数中指定分组长度的PbcLengthDWs字段。由发送上下文中的分组占据的空间的量(分组的填充尺寸)包括n个64B发送块(并由此包括n个FIFO槽),其中,通过将PbcLengthDWs字段值向上舍入到下一个64B的倍数来确定n。在图7a中所示的示例中,如从PbcLengthDWs字段值中所确定,j=n。

结合确定分组的填充尺寸,生成控制信息以标识最后的发送块,分组数据将被添加到所述最后的发送块以完成分组数据的整体(完整的分组)至PIO发送存储器120中的发送上下文的传送;在本文中的附图中,标识为正在用于存储还将被接收的分组数据的部分的发送块被标记为“将填充”(意思是将被填充)。在存储和转发实现方式下,直到整个分组内容被存储在PIO发送存储器120中,分组的数据才能够被转发至出口块126。由在发射引擎(未示出)中的逻辑中实现的完整分组检测机制使用PIO发送块出口控制信息,所述完整分组检测机制检测分组内容的整体(包括用于填满最后的发送块的任何适用的填补)何时已被写入PIO发送存储器120。在一个实施例中,此完整分组检测机制跟踪对应的FIFO槽中的发送块何时被填充,并且控制信息包括用于每一个分组的起始和结束FIFO槽的地址(或其抽象,诸如,发送块号或FIFO槽号)。一般而言,地址可相对于PIO发送存储器120的基址,或相对于与FIFO缓冲器相关联的发送上下文的基址。

在图7a-7f中,用于相应分组的mov指令示出为通过分组使用Pa-b标记方案来成组,其中,a对应于发送上下文,而b对应于分组被添加到发送上下文的原始顺序。使用此标记方案是为了说明目的以更好地解释分组如何被写入发送上下文;将理解的是,如上文中所讨论,数据被写入到PIO发送缓冲器120的实际位置将基于PIO写入指令以及地址转换方案。

虽然mov指令描绘为逐分组地被处理,但是这些指令的顺序对应于mov指令到达核的指令流水线的顺序。然而,支持乱序执行的处理器能以与指令到达的顺序不同的顺序来执行指令。在一些常规方法下,对于分组内的mov指令,准许乱序执行,但对于跨分组的mov指令不准许乱序执行。这通过使用SFENCE或sfence(存储屏蔽,在附图中也描绘为SFence)指令来促进,在SFENCE指令下,SFENCE指令之前的指令在此SFENCE指令之后的任何存储指令之前是全局可见的。结果,在常规方法下,直到进行中的分组的数据的全部已写入到存储缓冲器,在SFEMCE之后的mov指令中引用的分组数据才能够写入到存储缓冲器。为了实施此逻辑,会停止指令的执行,从而导致分组转发性能的降低。此外,SFENCE可用于以类似方式实施分组内的写入排序。如下文中所讨论,在图9a和图9b中示出比较具有和不具有sfence的PIO写入的说明。

根据本文中公开的实施例的多个方面,去除了对SFENCE指令的常规使用,使得来自分开的分组的存储指令可乱序地执行,使得在完成存储在先的(以所接收的指令顺序)第一分组之前,第二分组在存储缓冲器中的存储可开始。在图7a中描绘这种情况的示例,其中,乱序地且在用于分组P1-1的最后两个“mov.q”指令之前执行用于分组P1-2的第一“mov.q”指令,从而导致用于存储块706中的第一个8B存储单元的数据被写入到存储缓冲器608。在第一时间帧的终结处,已使用j-1个64B PCIe投递的写入将分组数据写入前j-1个发送块(如由用于分组P1-1的存储块700和存储块702所示)的发送上下文1。如上所述,结合每一个64B PCIe投递的写入,释放耗尽的存储缓冲器608中对应的块;在图7b中示出此释放的状态,图7b描绘第二时间帧T2。在本文中的附图中,64B>

在此第二时间帧期间,为分组P1-1添加对应于存储块704(在此示例中,其包括填补)的两个其余的存储单元的数据,并且经由64B PCIe投递的写入将来自存储块704的数据写入发送上下文1,所述64B PCIe投递的写入完成将完整的分组数据写入PIO发送存储器。这导致分组完成状态,此刻,分组准备好进行分组发射仲裁,如在图10和图11中所示且在下文中进一步详细地所描述。此外,在时间帧T2期间,数据被写入到存储块706、708和710中的每一个存储块,从而填满存储块706和708,同时经由乱序执行,用于填充存储块708的最后一个存储单元的mov指令被临时跳过,如图所示。如图所示,PBC头部中的PbcLengthDWs值指示分组填充尺寸将是三个64B发送块。在填充了存储块706和710中的每一个存储块之后,这些存储块耗尽,并且对应的数据经由64B>

为减少混乱,示出每一条mov指令或mov指令集合的结果的箭头中的一些箭头未包括在图7c-7f中;相反,所包括的箭头可能仅示出对新存储缓冲器块的第一个写入以及最后一个被写入的块。如图7c中所示,在第三时间帧T3期间,分组P1-2的其余数据被写入到数据块708,从而导致这个存储块数据耗尽且被写入到PIO发送存储器120中的分组P1-2的中间发送块。这完成了分组P1-2至PIO发送存储器的传送,由此,分组P1-2为发射仲裁作好准备。此外,对应于待添加至发送上下文2的第一分组(分组P2-1,具有两个64B发送块的填充尺寸和长度)的数据开始被写入存储块712和714,同时使用乱序执行开始将发送上下文1的第三分组P1-3的数据写入到存储块716。

图7d示出在时间帧T4期间数据传送的状态。在此时间帧期间,分组P2-1的最后16个字节被写入到存储缓冲器608,从而导致存储块714经由64B>4中,还已经添加了用于两个附加的分组P2-2和P1-4的mov指令。分组P2-2是待添加至发送上下文2的第二个分组,并且具有k个64B块的尺寸且不需要任何填补。分组P1-4是待添加至发送上下文1的第四个分组,并且将具有64B的最小尺寸。如由存储块720和722所示,分组P2-2的前k-1个存储块已添加至存储缓冲器608,并经由k-1个64B>

图7e示出在时间帧T5期间的传送状态。分组P2-2的最后8个字节被写入到存储块724,并且此存储块经由对PIO发送存储器120中的分组P2-2的最后一个发送块的64B>

在此示例中待添加的最后一个分组是分组P2-3,此分组P2-3具有192B(3x64B)的长度且不需要任何填补。此传送通过首先将分组数据的这192B写入到存储缓冲器608中的存储块728、730和732来实施。在完成了用于每一个存储块的8条mov指令之后,结合对PIO发送存储器120的发送上下文2中为分组P2-3分配的相应的发送块的64B PCIe投递的写入使存储块耗尽。在完成了最后一个64B PCIe投递的写入之后,分组写入完成机制检测分组2-3整体已被写入PIO发送存储器120,由此,分组P2-3也标记为被填充完整且可用于发射仲裁。同样,已由VL仲裁器选择P1-1用于流出,并且分组P1-1的发送块以FIFO顺序流出。

在所示实施例中,在用于分组P2-3的最后一条mov.q指令之后,添加SFENCE指令。这是为了在存储块728、730和732中的任一者被转储清除之前,将分组P2-3的所有数据写入到存储块728、730和732。如果用于后续分组的写入指令立即跟随指令线程,则不必使用SFENCE,因为指令应当填充每一个适用的存储块,从而导致存储块在被转储清除之前被耗尽。

除了上文内容之外,在时间帧T5期间,分组P1-2和分组P2-1中的每一个已完全流出,并且它们对应的发送块已被清除(注意,在时间帧T5的早期部分期间,分组P2-1也曾被选择用于流出)。如下文中参照图11和图14所述,当发送块状态被清除时,如果没有占据较低的FIFO槽的还未达到被清除状态的发送块,则将返回用于对应于被清除的发送块的发送上下文的信用。在此示例中,此条件对于发送上下文2为真,但对发送上下文1不为真,因为分组P1-1仍正在流出,并且还未达到被清除状态。结果,为发送上下文2返回两个信用,而此刻不为发送上下文1返回信用。如下文中详述,在一个实施例中,返回包括11位运行计数的绝对信用值;在图7e的示例中,假定在分组P2-1被清除之前,发送上下文2的运行计数处于0,由此,所返回的运行计数绝对信用值为2。

图7f示出在时间帧T6期间的传送状态。在此时间帧期间,分组P1-3和P2-2开始流出,而分组P1-1完成流出,并且分组P1-1的发送块被清除。此刻,为发送上下文1返回用于分组P1-1和P1-2两者的信用,总计j+3个信用,其中,相对于最后一次为发送上下文1返回信用,运行计数器值将已增加j+3。在所示示例中,先前的运行计数为2(对应于发送上下文1的前2个空FIFO槽),由此,所返回的运行计数绝对信用值为2+j+3。此外,已接收并处理用于在时间帧T5期间发送的分组P2-1的发送块的两个信用,并且对应的FIFO槽被标记为自由。

根据一个实施例,可采用PIO写入指令以便一次将512位(64B)写入存储缓冲器608,使得单条PIO写入指令将导致完成对存储块的填充。在一个实施例中,这通过使用512b写入指令来促进,所述512b写入指令由公司的高级向量扩展512(AVX-512)支持。英特尔AVX-512以512位宽的32个向量寄存器为特征,使得能够将512位的数据从这些寄存器移动到存储块608中。注意,使用英特尔AVX-512仅是示例性的,并且不旨在限制为可使用的支持512位写入的其他现有的和将来的处理器。

图8a-8e示出示例性随时间推移的序列,所述序列示出分组数据如何添加至PIO发送存储器120以及后续如何使用对存储块的512位写入来流出。在此示例中,用于每一个分组的写入指令的序列描绘为mov512.q指令以指示正在从CPU 600a中的512b寄存器移动512位的数据。由于正在执行512b mov,因此指令的数量显著地少于使用8B mov。如之前所述,以“X”描绘SFENCE以指示这是在常规方法下SFENCE将放置在的位置。

在图8a中,示出在时间帧T1期间执行的操作。此外,用于分组P1-1、P1-2、P2-1、P1-3、P2-2和P1-4的序列的mov>1期间将可能还没被接收到,相反在接近数据被描绘为正在被写入存储缓冲器608的时刻的稍后时间帧期间被接收。出于说明性和比较性目的,在图7a-7f以及图8a-8e中描绘相同的帧序列,但是在这两个示例之间,发送块中的一些块被写入的顺序不同。

在时间帧T1期间,由CPU>

在时间帧T2期间,如在图8b中所示,执行用于分组P1-2的最后一条mov512.q指令,从而首先将数据移动至存储块710,随后,存储块710经由64B>

在图8c中描绘的时间帧T3期间,执行用于写入第一个发送块的mov512.q指令,从而导致存储块715经由64B>3期间,分组P1-1已被选择用于流出,并且分组P1-1的流出在进行中。

在图8d中描绘的时间帧T4期间,执行对应于分组P1-4的单条mov512.q,从而首先将此分组数据的全部写入到存储块714,并随后经由64B>

如上文所讨论,在时间帧T3期间,分组P1-1的分组数据开始流出。在时间帧T4期间,流出已完成,并且发送块被标记为被清除。根据上文讨论的实施例,此刻将返回2+j个信用的绝对信用返回计数(假定先前已返回用于未示出的发送上下文1的所有在先分组的信用)。然而,如下文中在讨论信用返回机制中所讨论,在一些实施例中,跨多个分组聚合信用,并且直到自最后一个信用返回起达到信用的阈值才返回信用。在此示例中,阈值还待达到,从而导致此刻没有返回信用。

在图8e中描绘的时间帧T5期间,分组P1-2和P2-1中的每一个已完成流出并被标记为被清除,同时分组P2-2已被选择用于流出且开始流出。可在每个发送上下文的基础上配置经聚合的信用返回,使得它可用于一些发送上下文而不用于其他上下文。此外,可在每个发送上下文的基础上配置经聚合的信用阈值。相应地,在此示例中,已达到用于发送上下文1的经聚合的信用阈值,由此经由信用返回块127来返回运行返回信用计数值2+j+3。此外,发送上下文2不是正在采用经聚合的信用阈值,由此,2个信用的运行返回信用计数值被返回。在一个实施例中,可在通过PCIe对存储器的单个DMA写入中发送用于多个发送上下文的运行信用计数值。

图9a和图9b分别示出对应于使用具有和不具有SFENCE指令的64B PCIe投递的写入进行的分组数据传送的数据流时间线。当从存储缓冲器608(存储缓冲器608是处理器核的部分)耗尽时,它首先被转发至IIO 610,如图6a和图6b中所示。在IIO处具有一些附加的等待时间,因为除了本文中所讨论的PCIe投递的写入请求之外,它还必须处置其他IO请求。值得注意的是,IIO返回对于每一条sfence指令的sfence确收(ack)。这防止乱序的指令跨sfence执行,从而潜在地导致直到用于分组的所有指令在sfence之前已被执行的延迟。在去除对sfence的使用的本文中的实施例下,防止这些潜在的延迟发生,从而优化PIO发送块写入效率。

图10示出根据实施例的出口块126的进一步细节。在块1000中跟踪来自(多达)160个发送上下文中的每一个的头分组状态,同时在块1002中跟踪16个SDMA队列中的每一个的头分组状态。块1000和1002将输入提供给轮循发射仲裁器1004,所述轮循发射仲裁器1004将输出提供给逐VL的发射FIFO 1006,所述逐VL的发射FIFO 1006的输出作为对VL仲裁器1008的输入被接收。VL仲裁器将输入控制提供给多路复用器(Mux)1010,所述Mux 1010耦合至PIO发送存储器120和SDMA存储器124中的每一个。出口块126进一步包括处理块1012、1014和1018以及出口FIFO 1016。

出口块126负责仲裁来自160个发送上下文和16个SDMA引擎的分组,并且用于选择下一个可用、完整的分组以从此分组的发送缓冲器存储器发射到逐VL的发射FIFO 1006中。逐VL的发射FIFO是深的以使VL之间的阻塞最小化,并且逐VL的发射FIFO仅包含用于分组的控制信息,包括指向PIO发送存储器120和SDMA存储器124中的分组的指针。实际的分组数据路径不流经逐VL的发射FIFO 1006,相反,这些FIFO用于将逐VL的输入提供给VL仲裁器1008,所述VL仲裁器1008跨发射FIFO执行VL仲裁以选择下一个将流出的分组。这使出口块126开始经由mux 1010从PIO发送存储器120或SDMA存储器124取回那个分组的数据,随后,在处理框1012中应用分组完整性校验。最后,分组出口流水线执行对分组的任何必要的修改(例如,在处理框1014中的HCRC/ICRC插入、在出口FIFO 1016中的FIFO缓冲以及在处理框1018中的PBC去除和分组成帧以供流出),并将此分组呈现至结构端口112。

在一个实施例中,发射引擎108支持8个数据VL和1个管理VL。然而,这仅是示例性和非限制性的。当使用PBC头部中的VL字段来构建分组时,通过软件将分组指派给虚拟通道(VL)。

在一个实施例中,使用PIO发送被发送至发送上下文的分组将按由那些分组的布置所限定顺序被发射到发送上下文的发送缓冲器中。这被称为“原始程序顺序”。实质上这意味着虽然甚至当使用由处理器的写入-组合特征提供的松散的排序语义时存在填充发送缓冲器已重新组装程序的原始分组顺序的灵活性,但是发送缓冲器起FIFO的作用。出于此排序的讨论的目的,本质点在于软件在发送上下文上选择分组顺序,并且发送上下文维持那个分组顺序一直到分组发射。

一旦通过PIO发送或SDMA将完整的分组填充到发送缓冲器中,可由发射引擎发射分组。从发送缓冲器对分组的发射将分组置于逐VL的FIFO上。相同的VL的分组的发射顺序指定伴随那个VL的分组将流出到链路的顺序。通过VL仲裁算法来确定选择在逐VL的FIFO的头处的分组的顺序。

注意,软件可通过一个发送上下文上的PIO发送来以不同的VL发送分组。类似地,它可通过一个SDMA队列上的SDMA来以不同VL发送分组。此实现方式甚至当分组处于不同的VL上时也保持通过发送上下文或SDMA队列而一直到发射点的分组顺序。然而,发射以外则由于逐VL的发射FIFO而没有保证的排序,并且至链路的实际流出顺序将取决于VL仲裁的细节。

在一个实施例下,将以原始的程序顺序使用于相同的发送上下文的、待使用相同的VL发射的分组流出。同时,可使使用不同的VL被发射的分组乱序地流出,使得如果将通过不同的VL来发射这些分组,则较晚写入的分组将领先(proceed)较早写入的分组。

在一个实施例中,在上文限定的排序以外,HFI不提供关于发射顺序的保证。例如,分组在任何SDMA队列上的发射顺序不由HFI参照任何其他SDMA上的分组或参照使用PIO发送而发送的任何分组来排序。此外,分组在任何发送上下文上的发射顺序不由HFI参照任何其他发送上下文上的分组或参照使用SDMA而发送的任何分组来排序。

图11是示出在准备供向外流出到耦合至HFI的结构链路上的分组数据时实现的操作、阶段和状态的流程图。在分组填充阶段1102期间,正在经由PIO发送或SDMA机制、以分组数据来填充发送存储器。当全部分组数据缓冲在发送存储器中时,分组完成状态1104发生。此刻,分组填充完成,并且有资格发射。分组发射1106是分组从发送存储器发射到逐VL的发射FIFO上的时刻。在此阶段期间,分组数据仍占据发送缓冲器状态,但是在发射时,分组现在准备好流出,并且分组相对于那个相同的VL上的其他分组的顺序被建立。

在分组VL仲裁1108期间,在逐VL的发射FIFO的头处的分组在它们之间仲裁,并且由VL仲裁算法选择一个分组以流出到链路。在分组流出1110期间,从发送存储器(PIO发送存储器120或SDMA存储器124,如果适用)读取经由VL仲裁而选择的分组的分组数据,并且在块1012中执行分组完整性校验以确定分组数据是否有效。未通过完整性校验的分组被丢弃,而好的分组流出到链路,这可包括HCRC和ICRC的插入(如果需要)以及在出口FIFO1016中的缓冲。

下一阶段是分组被清除1112。当分组已清除发送缓冲器且发送缓冲器可用于重新使用时,此状态发生。相应地,在返回信用框1114中,经由信用返回机制127返回用于发送缓冲器的一个或多个信用,并且被清除的发送块变得可用于以新分组数据来填充。然而要注意,实现方式可将信用返回和发送缓冲器重新使用向下优化至发送块级别,使得在分组的整体已流出到链路之前可重新使用一些发送块。这可以是其中发送缓冲器资源有限的重要的实现方式。此外,如上文所解释,虽然可清除发送块,但是如果存在在FIFO中在所述发送块下方的还未被清除的其他发送块,则直到那些块也被清除才将返回所述块的信用。

信用返回机制

PIO发送机制使用信用返回机制来确保在先前的分组清除发送缓冲器之前不由软件覆写发送缓冲器块。在一个实施例中,发送信用处于64B粒度,并且一个发送信用对应于一个(64B)发送块。有序地返回用于发送上下文的发送信用,并且软件以环绕式FIFO方式使用发送缓冲器存储器。发送信用核算(accounting)使用绝对编号,使得HFI可在任何时刻、以更新的值来覆写信用返回信息而不损失发送信用。信用返回也提供状态信息,并且这通过相继的信用返回写入来覆写。当遭遇错误时,强制信用返回使错误指示置位,并且发送上下文被置于错误状态,并且直到由主机系统软件将发送上下文从错误状态恢复才将调度进一步的信用返回写入。这确保可由主机软件观察并适当地处理信用返回位置中的错误指示而没有被覆写的风险。

简而言之,通过维持已被消耗的信用数量的运行计数以及已被释放的信用数量的运行计数来实现信用跟踪。当前被占据的信用的数量则为这些计数之间的差值。如上文所述,这些是随着信用被消耗或释放而适当地简单递增的绝对计数器。

在初始化之后,发送缓冲器将是空的,并且用于那个缓冲器的所有发送信用可用于软件。在一个实施例中,可指派给发送上下文的发送信用的最大数目为1024,1024对应于用于发送缓冲器的64KB最大尺寸。在一个实施例中,11位计数器用于跟踪信用信息。此方法使用一个额外的位,使得计数器在值上可相差完整的1024值。这也允许使其中0个信用可用以及1024个信用可用的情况意义分明。对计数器数学执行对2048求模(modulo 2048)。例如,对11位计数器的进展(advance)以及11位计数器的差执行对2048求模。

更详细地,软件和硬件两者各自都针对每一个上下文维持11位计数器以跟踪信用使用。软件计数器被称为填充计数器。硬件计数器被称为自由计数器。硬件以适当的间隔将其计数器值直接存储器访问(DMA)到保持在主机存储器中的影子自由计数器,使得软件具有对信用返回的可见性。最初,两个计数器都是0,并且没有发送信用在使用。所使用的信用的数量被计算为填充计数器减去自由计数器,再对2048求模。可用的信用的数目则是发送上下文中信用的总数目减去所使用信用的数目。当这两个计数器具有相同值时,上下文是空的,并且此发送上下文的发送信用的全部都可用于供软件来填充。在将发送块写入到发送上下文之前,软件校验可用的信用。随着软件填充发送块,它递增它的填充计数器再对2048求模以指示软件已使用信用的当前程度。当软件没有可用的信用时,它将等待信用释放出来。软件可监测主机存储器中的影子自由计数器以确定信用何时释放。

以下示出对应于信用跟踪的抽象模型的伪代码。

伪代码列举1

#如果由足够的空间,则此方法以num_credites填充发送缓冲器并返回“真”。否则,它返回“假”。

#如果具有将流出的分组,则此方法使那个分组流出,释放它的信用,并且返回指示信用数目的值。否则,它返回“假”。

在一个实施例中,发送信用返回经聚合以减少PCIe和消耗的存储器带宽。以被称为SendCtxtCreditCtrl.Threshold的信用阈值对每一个发送上下文编程。发送上下文维持跟踪还未流出到结构的最旧的(就发送缓冲器内的地址顺序而言)发送块的计数器值。如上文所讨论,当在单个发送缓冲器中使用多个VL时,发送块的流出可能是乱序的。为了解决此情况,采用硬件状态来跟踪乱序流出,使得可提供有序的信用返回。用于这个最旧的发送块的计数器之间的差减去自由计数器的硬件副本为还未返回至软件的待定的自由信用的数量。当此值匹配或超出阈值时,为那个发送上下文发起发送信用返回。

此信用返回方法使高达阈值的信用驻留在硬件中,并且不提供保证所有信用都可返回的方法。这对于任何特定的发送已清除发送缓冲器是个问题。具有所提供的若干方法来解决此问题:

·在许多情况下,主机软件可使用信用返回阈值机制,并且将不介意特定的PIO发送是否已清除发送缓冲器。

·主机可使用SendCtxtCreditStatus寄存器从适配器寄存器读取用于发送上下文的当前的信用值。

·主机可写入SendCtxtCreditForce寄存器以强制为发送上下文调度信用返回。

·允许主机经由被称为PbcCreditReturn的PBC位来请求用于特定的PIO发送的信用返回。

此外,当在特定的发送上下文上返回信用时,主机软件可为中断进行布置。

在一些实施例中,可实现早信用返回机制,所述早信用返回机制允许一承诺分组流出但在分组实际已清除发送缓冲器之前就更激进地将信用返回至主机。这允许主机在下一分组上开始以优化信用返回等待时间并减少发送缓冲要求。构思在于,当出口正使用于发送缓冲器的先前占据者的发送缓冲器耗尽时,主机可开始填充下一分组。采用硬件互锁以确保先前分组不会被覆写,并且也实现速率匹配的出口FIFO,使得能以结构线速率使先前分组耗尽。在实现问题的情况下,可在每个上下文的基础上禁用此机制。这对于在每个上下文的发送信用为低(例如,当使用大量上下文以及较大的MTU尺寸时)的情况下改善性能是重要的优化。

提供逐发送上下文配置位(SendCtxtCreditCtrl.EarlyReturn)以启用或禁用早信用返回。当启用时,可在早期(即,在清除那个发送块的分组流出之前)由硬件释放单独的发送块,并且这些早期释放的信用使通常的信用返回算法被返回。信用返回阈值机制仍适用。

注意,软件用于确保具有指派给它希望发送的分组的发送上下文的足够的信用。如果具有指派给特定分组的发送上下文的不足的信用,则足够的信用将从不变得可用于发射分组。一种方法是软件基于指派给发送上下文的发送块的数量来限制分组尺寸。这种计算应当考虑,用于上下文的高达信用阈值的信用可能驻留在硬件中,并且直到未来的发送块流出才将自动地返回所述信用。

在一个实施例中,发送信用返回实现为至64B高速缓存行对齐的地址的对主机存储器的64B写入。对此的理由是避免存储器上来自IIO的读取-修改-写入操作,因为这些操作添加附加的等待时间,并且可能影响对主机存储器访问的流水线化。然而,这意味着信用返回消耗附加的PCIe带宽。虽然这通过发送信用返回聚合减缓,但是期望在可能的情况下进一步减少这种情况。在一个实施例中,如下文中所述,这经由跨发送上下文组使用聚合的信用来促进。

在一个实施例中,每一个11位返回值与上下文状态组合,并且以预留位填补以实现64位值。在一个实施例中,64位值支持多达8个信用返回,所述8个信用返回将打包为用于组信用返回的64B写入。

用于减少信用返回开销的一种技术是跨发送上下文组来聚合信用返回。想法在于,发送上下文可成组在一起,随后利用对主机存储器的单个64B写入来执行用于上下文组的信用返回。在一个实施例中,160个发送上下文聚合为8个连续发送上下文的集合,总计20个集合。然而,可使用发送上下文的其他聚合。

8个发送上下文的集合尺寸允许20个不同的集合,并具有针对每一个集合独立地指定成组的能力。集合号S包含发送上下文8S至8S+7,包含8S和8S+7。在表2中示出用于一个实施例的集合映射。20个集合的选择给予40个、80个和160个发送上下文的典型配置中的合理的灵活性。在具有减少数量的发送上下文的配置中,当取决于所需要的成组来选择要使用哪些发送上下文时,软件获得附加的灵活性。可独立地将每一个集合配置为表3中示出的配置。

集合号集合中的发送上下文00至718至1519152至159

表2

值(B)组的数目每组的发送上下文(G)081(即,没有实际成组)142224318(即,最大成组)

表3

伴随着最小值1,集合具有每组有1个发送上下文(即,没有实际成组)的8个组。这给予了完全的灵活性,因为那个集合中的每一个发送上下文将具有独立的信用返回。伴随着最大值3,集合具有包含全部8个发送上下文的1个组,并且为所有8个发送上下文聚合信用返回。相应地,由那8个发送上下文共享用于那个集合的信用返回的主机存储器页。注意,仅那个页的只读映射是需要的,因为软件不写入信用返回位置。取决于那8个发送上下文的信用返回算法如何彼此相互作用,最大组尺寸8给予高达8x的信用返回带宽降低。

每一个发送上下文都具有SendCtxtCreditReturnAddr寄存器,所述SendCtxtCreditReturnAddr寄存器指定主机物理地址以及用于那个发送上下文的信用返回的TPH信息。当使用发送上下文成组时,信用返回使用SendCtxtCreditReturnAdd寄存器,所述SendCtxtCreditReturnAdd寄存器属于触发了信用返回的上下文。在一个实施例中,软件用于对用于具有相同地址的组中的全部上下文的SendCtxtCreditReturnAdd寄存器编程。

当由特定的发送上下文(表示为N)发起信用返回时,通过使发送上下文号右移位3来将发送上下文映射至集合号(S)。集合号用于查找每个集合的配置状态,并且给出如表3的最左边列中所示的值B。B是区分同一组中的发送上下文的发送上下文号的最低有效位的数量。那个组中的发送上下文的数量为G且等于1<<B,并且取表3的最右边列中的值。此集合中的最低发送上下文号被称为M,并且具有值(N>>B)<<B,该值是最低有效的B个位被清除的值N。在一个实施例中,信用返回如下所述实现:使用一个64B写入为G个发送上下文聚合信用返回。在用于上下文号M(组中最低编号的上下文)的SendCtxtCreditReturnAddr寄存器中指定返回的地址,同时此信用返回的G个发送上下文从M至M+G-1编号,包含M和M+G-1。组中的每一个发送上下文的信用信息是QW,利用G,此类值打包为64B信用返回写入。对于范围[0,G-1]中的I,所返回的信用用于发送上下文号M+1,并且信用以索引(M+I)&0x7被置入QW。由此,此索引简单地由发送上下文号的最低的3个位指定,并且无论G的值如何,特定发送上下文的信用返回值总是在64B信用返回中中的相同位置中,从而消除了实现方式中的移位操作。信用返回值中未使用的QW以值0x0填充。

在表4中总结了信用返回值的所有组合。存在针对至64B信用返回的不同索引值的8列。索引0对应于字节0至7,索引1对应于字节8至15,以此类推。每一行描绘针对那个特定的G值(其是每个组的发送上下文的数量)的信用返回值的一个组合。空单元格指示未使用的QW,并且这些孔单元格具有零值。符号CRx(其中x在0至7的范围内)指示上下文的信用返回值,并且最低的3个有效位等于x。每一个CRx QW值具有由表2定义的格式。例如,当G为1时,具有一个信用返回值,并且此信用返回值将取决于发送上下文号而在8个位置中的一个位置中。当G为8时,具有8个信用返回值,并且全部8个位置都被使用。

表4

当为发送上下文组返回信用时,用于组中的每一个发送上下文的自由计数器更新至以DMA方式传送至保持在主机存储器中的影子副本的信用计数器值。此方法意味着,当一个发送上下文基于它的阈值来触发针对组的信用返回时,在最大可能的程度上为那个组中的所有其他发送上下文提供信用返回。假定发送块流出跨组的成员合理地被交织,则此方法整体上降低了针对所述组的发送信用更新的频率。注意,为了使此机制是有效的,阈值需要大于最大分组中的发送块的数量。

图12示出根据一个实施例的PIO发送地址FIFO 1200和信用返回FIFO 1202的示例性配置,所述信用返回FIFO 1202用于使用绝对信用来支持PIO写入管理。在生成PIO发送存储器写入的软件的管理下,为存储器106中的每一个发送上下文实现PIO发送地址FIFO 1400。如上文中所讨论,在一个实施例中,结合FIFO语义来使用11位运行计数器以跟踪可用的信用(其对应于每一个发送上下文内可用的发送块)。随着指令的每一个发送块信息量被生成和转发供由处理器核执行,软件增加其用于发送块将被写入到的发送上下文的运行计数。同时,在接收端上,信用返回机制127维持所返回的绝对信用的11位运行计数。随着信用被返回,运行计数进展。FIFO使用循环FIFO语义,在循环FIFO语义下,一旦计数器达到2047,它就返回至0。软件也保持跟踪用于每一个发送上下文的绝对返回信用。只要所发送的绝对运行计数与所返回的绝对运行计数之间的差小于发送上下文的尺寸,软件就可生成附加的PIO发送存储器写入。一旦差异达到所发送的上下文的尺寸,分组数据至发送上下文的写入就暂停,直到经由信用返回机制127接收到经更新的绝对运行计数为止。

示例性HFI实现架构

图13示出了具有示例性配置的系统节点1300,所述示例性配置包括主机结构接口102,所述主机结构接口102包括耦合至处理器1306的结构端口112,所述处理器1306又耦合至存储器106。结构端口112包括具有与图1中所示的配置类似的高层级配置的发射端口110和接收端口116。发射端口110包括:Tx链路结构子层电路和逻辑1310,包括划分成多个发送VL缓冲器的发送缓冲器(Tbuf);Tx链路传送子层电路和逻辑1312;Tx PHY电路和逻辑1314,包括四个发射机1316;以及Tx链路控制块1317。接收端口116包括:Rx链路结构子层电路和逻辑1318,包括划分成多个接收VL缓冲器的接收缓冲器(Rbuf);Rx链路传送子层电路和逻辑1320;Rx PHY电路和逻辑1322,包括四个接收机1324;以及Rx链路控制块1325。

以简化的形式示出Tx PHY电路和逻辑1314,包括四个发射机1316和Tx链路控制块2017的部分。一般而言,取决于该链路的PHY层配置,发射机1316可包括电气或光学发射机。联网领域的普通技术人员将理解,Tx PHY电路和逻辑块将包括为了清楚起见而未示出的、用于实现发射侧PHY层操作的附加的电路和逻辑。这包括PHY层内的各种子层,这些子层用于促进结合高速互连来实现的各种特征以减少错误并增强传输特性。

以简化的形式示出Rx PHY电路和逻辑1322,该Rx PHY电路和逻辑1322包括四个接收机1324和Rx链路控制块2025的部分。一般而言,取决于链路的PHY层配置,接收机1324可包括电气或光学发射机,并且将配置成在该链路上接收来自发射机1316的信号。联网领域的普通技术人员将理解,Rx PHY电路和逻辑块将包括为了清楚起见而未示出的、用于实现接收侧PHY层操作的附加的电路和逻辑。这包括PHY层内的各种子层,这些子层用于促进结合高速互连来实现的各种特征以减少错误并增强传输特性。

HFI 1302进一步包括耦合至PCIe接口118的发射引擎108和接收引擎114。发射引擎108和接收引擎114中的每一者都以类似于如上文中所述的图1中的发射引擎108和接收引擎114的方式来配置。

处理器1306包括CPU 1326,该CPU 1326包括多个处理器核1328,每一个处理器核都包括集成的第1级和第2级(L1/L2)高速缓存并耦合至一致性互连1330。在所示实施例中,存储缓冲器(St.Bf.)也示出为耦合至每一个核1328;任选地,可跨处理器中的全部处理器核或处理器核的部分来共享存储缓冲器。也耦合至一直性互连1330的是耦合至存储器106的存储器接口1332、集成输入/输出块(IIO)1334以及末级高速缓存(LLC)1336。IIO 1334在由处理器核、存储器和高速缓存所采用的一致性域与用于IO部件和IO接口(包括一对PCIe根复合体(RC)1338和1340)的非一致性域之间提供接口。如本领域公知,PCIe RC位于PCIe互连层次结构的顶部,多个PCIe接口和PCIe设备可耦合至PCIe RC,如PCIe接口1342、1344、1346和1348所示。如图所示,PCIe 1344耦合至HFI 102的PCIe接口118。

在诸如图13中所示的一些实施例中,处理器1306采用SoC架构。在其他实施例中,PCIe相关的组件集成在耦合至处理器的IO芯片组等中。在其他实施例中,处理器1306以及一个或多个HFI 102被集成在SoC上,诸如,由SoC 1350的虚线轮廓所描绘。同样,如图所示,第二HFI 102示出为耦合至PCIe接口1346,其中,虚线轮廓指示这是任选的配置。在一个实施例中,如图14中所示,在ASIC(专用集成电路)1400上实现多个HFI。

如图13中进一步所示,软件应用1352包括在处理器核1328中的一个或多个或由运行在处理器1306上的操作系统主管的一个或多个虚拟机上运行的软件组件。除了这些软件组件之外,存在实现在存储器106中的附加的软件组件和缓冲器,以促进在存储器106(包括适用的多个高速缓存级)与发射引擎108和接收引擎114之间的数据传送。

在以下众多条款中阐述本文中所述主题的进一步的方面:

1.一种方法,包括:

接收经编程的输入/输出(PIO)写入指令的序列,所述PIO写入指令用于将存储在存储器中的相应分组的分组数据写入到网络适配器上的PIO发送存储器;

将所述PIO写入指令的序列作为支持乱序执行的处理器上的指令线程来执行,其中PIO写入指令的执行使数据被写入到存储缓冲器中的存储单元,所述存储单元成组为包括存储单元行的存储块,其中,所述PIO写入指令的部分被乱序地执行,从而导致在所述存储块被填充之前,数据被写入到不同存储块中的存储单元;

检测存储块何时被填充;以及

响应于检测到存储块被填充,经由对所述PIO发送存储器中的缓冲器的投递的写入来使所述存储块中的数据耗尽。

2.如条款1所述的方法,其中,所述存储器采用64字节(64B)高速缓存行,每一个存储块包括64字节数据,并且所述投递的写入包括64B PCIe(外围组件互连快速)投递的写入。

3.如条款1或2所述的方法,其中,所述处理器包括64位处理器,并且每一个存储单元包括使用单条指令从所述处理器中的64位数据寄存器写入到存储单元的64位数据。

4.如前述条款中的任一项所述的方法,其中,所述PIO写入指令的序列被接收为针对每一个相应分组的一个或多个对齐的64B写入的顺序的组,所述方法进一步包括:

生成分组;

确定所述分组具有不是64字节的倍数的长度;

将填补添加至所述分组以将所述分组的长度扩展至64字节的倍数;以及

生成包括一个或多个对齐的64B写入序列的PIO写入指令,所述一个或多个对齐的64B写入序列包括所述分组数据并包括填补。

5.如前述条款中的任一项所述的方法,其中,所述处理器采用写入-组合,并且其中,执行乱序的PIO写入指令导致数据以非顺序的次序被写入到存储块内的存储单元。

6.如前述条款中的任一项所述的方法,其中,所PIO发送存储器分区为多个发送上下文,每一个发送上下文组织为发送块的序列,所述方法进一步包括:

接收用于以顺序的次序将分组的数据写入到多个顺序的发送块的PIO写入指令的序列;以及

以非顺序的次序将所述分组的所述数据写入到所述顺序的发送块。

7.如条款6所述的方法,进一步包括:

检测所述多个顺序的发送块中的全部都已由所述分组数据填充;以及

一旦所述多个发送块中的全部被填充,则使所述多个发送块中的数据能够流出。

8.一种非暂态机器可读介质,具有存储于其上的指令,所述指令当在处理器上执行时使包括支持乱序执行的处理器的计算机实现前述条款中的任一项的方法。

9.一种方法,包括:

接收经编程的输入/输出(PIO)写入指令的序列,所述PIO写入指令用于将存储在存储器中的相应分组的分组数据写入网络适配器上的PIO发送存储器,每一个PIO写入指令定义包含所述数据的存储器中的高速缓存行的位置以及所述数据将被写入到的所述PIO发送存储器中的发送块的存储器映射的地址;

将所述PIO写入指令的序列作为支持乱序执行的处理器上的指令线程来执行,其中PIO写入指令的执行使数据被写入到存储缓冲器中的存储块,其中,所述PIO写入指令的部分被乱序地执行,从而导致所述数据以与接收到所述PIO写入指令不同的顺序被写入到存储块;

检测存储块何时被填充;以及

响应于检测到存储块被填充,经由对所述PIO发送存储器中的发送块的投递的写入使所述存储块中的所述数据耗尽,所述PIO发送存储器中的发送块位于用于将所述数据写入所述发送块的所述PIO写入指令中包含的地址处。

10.如条款9所述的方法,其中,所述PIO写入指令包括512位写入指令,并且存储器高速缓存行、存储块和发送块中的每一者都具有64字节的尺寸。

11.如条款10所述的方法,其中,投递的写入包括64字节(64B)PCIe(外围组件互连快速)投递的写入。

12.如条款9-11中的任一项所述的方法,进一步包括:

将所述PIO发送存储器分区为多个发送上下文;

为每一个发送上下文采用先进先出(FIFO)存储方案,在所述FIFO方案下,给定分组的数据被存储在一个或多个顺序的发送块中,其中,用于将多个分组的分组数据写入相同的发送上下文的PIO写入指令以原始的FIFO顺序来顺序地成组,并且其中,使所述多个分组的分组数据能够以与所述原始的FIFO顺序不同的顺序被写入到发送块。

13.如条款12所述的方法,进一步包括:

检测所述一个或多个顺序的发送块中的全部都已由给定分组的所述分组数据填充;以及

一旦所述多个发送块中的全部已被填充,则使所述给定分组的数据能够流出。

14.如条款13所述的方法,进一步包括:

以用于标识与分组相关联的虚拟通道(VL)的VL标记对每一个分组中的头部字段编码;

使利用相同的发送上下文内的不同VL的分组能够打乱FIFO顺序乱序地流出;以及

为与所述相同的发送上下文内的相同的VL相关联的分组的数据的流出实施FIFO排序。

15.一种非暂态机器可读介质,具有存储于其上的指令,所述指令当在处理器上执行时使包括支持乱序执行的处理器的计算机实现条款8-14中的任一项的方法。

16.一种装置,包括:

处理器,所述处理器具有支持乱序执行的多个处理器核,并且包括存储器接口、至少一个存储缓冲器以及第一PCIe(外围组件互连快速)接口;

第二PCIe接口,经由PCIe互连而耦合至所述处理器的所述第一PCIe接口;以及

发射引擎,所述发射引擎可操作地耦合至所述第二PCIe接口并包括经编程的输入/输出(PIO)发送存储器,

其中所述处理器包括用于以下操作的电路和逻辑:

接收经编程的输入/输出(PIO)写入指令的序列,所述PIO写入指令用于当耦合至所述存储器接口时将存储在存储器中的相应分组的分组数据写入所述PIO发送存储器;

将所述PIO写入指令的序列作为处理器核上的指令线程来执行,其中PIO写入指令的执行使数据被写入到存储缓冲器中的存储单元,所述存储单元成组为包括存储单元行的存储块,其中,所述PIO写入指令的部分被乱序地执行,从而导致在所述存储块被填充之前,数据被写入到不同存储块中的存储单元;

检测存储块何时被填充;以及

响应于检测到存储块被填充,经由通过所述PCIe互连发送的、对所述PIO发送存储器中的缓冲器的PCIe投递的写入来使所述存储块中的数据耗尽。

17.如条款16所述的装置,其中,所述存储器采用64字节(64B)高速缓存行,每一个存储块包括64字节数据,并且所述投递的写入包括64B PCIe(外围组件互连快速)投递的写入。

18.如条款16或17所述的装置,其中,所述处理器包括64位处理器,并且每一个存储单元包括使用单条指令从所述处理器中的64位数据寄存器写入到存储单元的64位数据。

19.如条款16-18中的任一项所述的装置,其中,所述处理器采用写入-组合,并且其中,执行乱序的PIO写入指令导致数据以非顺序的次序被写入到存储块内的存储单元。

20.如条款16-19中的任一项所述的装置,其中,所述PIO发送存储器分区为多个发送上下文,每一个发送上下文组织为发送块的序列,所述装置进一步包括用于以下操作的电路和逻辑:

接收用于以顺序的次序将分组的数据写入到多个顺序的发送块的PIO写入指令的序列;以及

以非顺序的次序将所述分组的所述数据写入到所述顺序的发送块。

21.如条款20所述的装置,进一步包括用于以下操作的电路和逻辑:

检测所述多个顺序的发送块中的全部都已由所述分组数据填充;以及

一旦所述多个发送块中的全部被填充,则使所述多个发送块中的数据能够流出。

22.如条款21所述的装置,进一步包括用于以下操作的电路和逻辑:

检查多个顺序的发送块中的第一个发送块中的数据以确定所述分组的长度;以及

确定将采用多少个顺序的发送块来存储所述分组的数据。

23.一种装置,包括:

处理器,所述处理器具有支持乱序执行的多个处理器核,并且包括存储器接口、至少一个存储缓冲器以及第一PCIe(外围组件互连快速)接口;

第二PCIe接口,经由PCIe互连而耦合至所述处理器的所述第一PCIe接口;以及

发射引擎,所述发射引擎可操作地耦合至所述第二PCIe接口并包括经编程的输入/输出(PIO)发送存储器,

其中所述处理器包括用于以下操作的电路和逻辑:

接收经编程的输入/输出(PIO)写入指令的序列,所述PIO写入指令用于将存储在存储器中的相应分组的分组数据写入PIO发送存储器,每一个PIO写入指令定义包含所述数据的存储器中的高速缓存行的位置以及所述数据将被写入到的所述PIO发送存储器中的发送块的存储器映射的地址;

将所述PIO写入指令的序列作为处理器核上的指令线程来执行,其中PIO写入指令的执行使数据被写入到存储缓冲器中的存储块,其中,所述PIO写入指令的部分被乱序地执行,从而导致所述数据以与所述PIO写入指令被接收的顺序不同的顺序被写入存储块;

检测存储块何时被填充;以及

响应于检测到存储块被填充,经由对所述PIO发送存储器中的发送块的投递的写入使所述存储块中的所述数据耗尽,所述PIO发送存储器中的发送块位于用于将所述数据写入所述发送块的所述PIO写入指令中包含的地址处。

24.如条款23所述的装置,其中,所述PIO写入指令包括512位写入指令,并且存储器高速缓存行、存储块和发送块中的每一者都具有64字节的尺寸,并且其中,所述PCIe投递的写入包括64字节PCIe投递的写入。

25.如条款23或24所述的装置,进一步包括用于以下操作的电路和逻辑:

将所述PIO发送存储器分区为多个发送上下文;

为每一个发送上下文采用先进先出(FIFO)存储方案,在所述FIFO方案下,给定分组的数据被存储在一个或多个顺序的发送块中;

检测所述一个或多个顺序的发送块中的全部都已由给定分组的所述分组数据填充;以及

一旦所述多个发送块中的全部已被填充,则使所述给定分组的数据能够流出。

其中,用于将多个分组的分组数据写入相同的发送上下文的PIO写入指令以原始的FIFO顺序来顺序地成组,并且其中,使所述多个分组的分组数据能够经由所述PIO写入指令的乱序执行、以与所述原始的FIFO顺序不同的顺序被写入发送块。

26.如条款25所述的装置,进一步包括用于以下操作的电路和逻辑:

以用于标识与分组相关联的虚拟通道(VL)的VL标记对每一个分组中的头部字段编码;

使利用相同的发送上下文内的不同VL的分组能够打乱FIFO顺序乱序地流出;以及

为与所述相同的发送上下文内的相同的VL相关联的分组的数据的流出实施FIFO排序。

27.一种装置,包括:

PCIe(外围组件互连快速)接口;

发射引擎,所述发射引擎包括:

经编程的输入/输出(PIO)发送存储器,可操作地耦合至所述PCIe接口;以及

出口块,可操作地耦合至所述PIO发送存储器;以及

网络端口,所述网络端口包括可操作地耦合至所述出口块的发射端口,其中所述发射引擎进一步包括用于以下操作的电路和逻辑:

将所述PIO发送存储器分区为多个发送上下文,每一个发送上下文都包括多个顺序的发送块;

经由PCIe互连,从耦合至所述PCIe接口的处理器接收传入的PCIe投递的写入,每一个PCIe投递的写入包含对应于存储在耦合至所述处理器的存储器中的分组的分组数据并经由PIO写入指令被写入单个发送块,其中给定分组的分组数据被写入一个发送块或多个顺序的发送块,其中,使将被写入多个顺序的发送块的分组的分组数据能够被乱序地接收;

检测分组的多个顺序的发送块何时已被填充;以及

当用于分组的所述顺序的发送块中的全部被检测为被填充时,将所述多个顺序的发送块中的分组数据标记为有资格流出到所述出口块。

28.如条款27所述的装置,进一步包括用于以下操作的电路和逻辑:实现仲裁器以从已被填充的所述多个发送上下文中的分组之间选择分组,用于从所述出口块流出到所述发射端口。

29.如条款27或28所述的装置,其中,所述发射引擎进一步包括发送直接存储器访问(SDMA)存储器以及多个SDMA引擎,所述SDMA引擎配置成用于使用DMA传送从耦合至所述处理器的存储器拉取数据以将数据写入到所述SDMA存储器中的缓冲器。

30.如条款27-29中的任一项所述的装置,其中,所述PCIe接口包括第一PCIe接口,所述装置进一步包括:

处理器,所述处理器具有支持乱序执行的多个处理器核,并且包括存储器接口、至少一个存储缓冲器以及第二PCIe(外围组件互连快速)接口,所述第二PCIe接口经由PCIe互连而耦合至所述第一PCIe接口;进一步包括用于以下操作的电路和逻辑:

接收PIO写入指令的序列,所述PIO写入指令用于当耦合至所述存储器接口时将存储在存储器中的相应分组的分组数据写入所述PIO发送存储器;

将所述PIO写入指令的序列作为处理器核上的指令线程来执行,其中PIO写入指令的执行使数据被写入到存储缓冲器中的存储单元,所述存储单元成组为包括存储单元行的存储块,其中,所述PIO写入指令的部分被乱序地执行,从而导致在所述存储块被填充之前,数据被写入到不同存储块中的存储单元;

检测存储块何时被填充;以及

响应于检测到存储块被填充,经由通过所述PCIe互连发送的、对所述PIO发送存储器中的缓冲器的PCIe投递的写入来使所述存储块中的数据耗尽。

31.如条款27-30中的任一项所述的装置,其中,所述装置包括主机结构接口,所述主机结构接口进一步包括:

接收引擎,耦合至所述PCIe接口;以及

接收端口,耦合至所述接收引擎。

32.如条款31所述的装置,其中,所述装置包括多个主机结构接口,所述多个主机结构接口具有为条款31的主机结构接口定义的配置。

33.一种装置,包括:

处理器,所述处理器具有支持乱序执行的多个处理器核,并且包括存储器接口、至少一个存储缓冲器以及第一PCIe(外围组件互连快速)接口;

第二PCIe接口,经由PCIe互连而耦合至所述处理器的所述第一PCIe接口;以及

发射引擎,所述发射引擎可操作地耦合至所述第二PCIe接口并包括经编程的输入/输出(PIO)发送存储器,

其中所述处理器进一步包括用于以下操作的设备:

接收经编程的输入/输出(PIO)写入指令的序列,所述PIO写入指令用于当耦合至所述存储器接口时将存储在存储器中的相应分组的分组数据写入所述PIO发送存储器;

将所述PIO写入指令的序列作为处理器核上的指令线程来执行,其中PIO写入指令的执行使数据被写入到存储缓冲器中的存储单元,所述存储单元成组为包括存储单元行的存储块,其中,所述PIO写入指令的部分被乱序地执行,从而导致在所述存储块被填充之前,数据被写入到不同存储块中的存储单元;

检测存储块何时被填充;以及

响应于检测到存储块被填充,经由通过所述PCIe互连发送的、对所述PIO发送存储器中的缓冲器的PCIe投递的写入来使所述存储块中的数据耗尽。

34.如条款33所述的装置,其中,所述存储器采用64字节(64B)高速缓存行,每一个存储块包括64字节数据,并且所述投递的写入包括64B PCIe(外围组件互连快速)投递的写入。

35.如条款33或34所述的装置,其中,所述处理器包括64位处理器,并且每一个存储单元包括使用单条指令从所述处理器中的64位数据寄存器写入到存储单元的64位数据。

36.如条款33-35中的任一项所述的装置,其中,所述处理器采用写入-组合,并且其中,执行乱序的PIO写入指令导致数据以非顺序的次序被写入到存储块内的存储单元。

37.如条款33-36中的任一项所述的装置,其中,所述PIO发送存储器分区为多个发送上下文,每一个发送上下文组织为发送块的序列,所述装置进一步包括用于以下操作的设备:

接收用于以顺序的次序将分组的数据写入到多个顺序的发送块的PIO写入指令的序列;以及

以非顺序的次序将所述分组的所述数据写入到所述顺序的发送块。

38.如条款37所述的装置,进一步包括用于以下操作的设备:

检测所述多个顺序的发送块中的全部都已由所述分组数据填充;以及

一旦所述多个发送块中的全部被填充,则使所述多个发送块中的数据能够流出。

39.如条款38所述的装置,进一步包括用于以下操作的设备:

检查多个顺序的发送块中的第一个发送块中的数据以确定所述分组的长度;以及

确定将采用多少个顺序的发送块来存储所述分组的数据。

一般而言,在本文的附图中描绘的电路、逻辑和部件还可在各种类型的集成电路(例如,半导体芯片)和模块中实现,包括分立的芯片、SoC、多芯片模块以及包括对多个网络接口的支持的联网/链路接口芯片。此外,如本文中所使用,用于实施各种操作的电路和逻辑可经由嵌入式逻辑、嵌入式处理器、控制器、微引擎来实现,或以其他方式使用硬件、软件和/或固件的任何组合来实现。例如,通过各种逻辑块和/或电路描绘的操作可使用编程逻辑门等(包括但不限于,ASIC、FPGA、IP块库)来实现,或通过在包括处理器、处理器核、控制器、微控制器、微引擎等的一个或多个处理元件上执行的软件或固件指令中的一个或多个来实现。

另外,本说明书的多个实施例的方面可以不仅在半导体芯片、SOC、多芯片模块等之内实现,而且还可在非瞬态的机器可读介质内实现。例如,上述设计可被存储在和/或嵌入在与用于设计半导体器件的设计工具相关联的非瞬态机器可读介质内。示例包括以VHSIC硬件描述语言(VHDL)语言、Verilog语言或SPICE语言或其他硬件描述语言格式化的网表。一些网表的示例包括:行为级网表、寄存器传送级(RTL)网表、门级网表以及晶体管级网表。机器可读介质还包括具有诸如GDS-II文件之类的布局信息的介质。此外,用于半导体芯片设计的网表文件或其他机器可读介质可被用在模拟环境中以执行以上教导的方法。

虽然参考特定实现方式描述了一些实施例,但是根据一些实施例,其他实现方式也是可能的。另外,附图中所示的和/或本文中描述的元件或其他特征的布置和/或顺序不必以所示和所描述的特定方式来布置。根据一些实施例,许多其他布置是可能的。

在附图中示出的每一个系统中,在一些情况下的每个元件可具有相同或不同的附图标记以表明所表示的元件可能不同和/或类似。但是,元件可以足够灵活以具有不同的实现方式,并与本文所示或所述的一些或所有系统一起操作。附图中示出的各种元件可以是相同或不同的。将哪个称为第一元件以及将哪个称为第二元件是任意的。

在上述具体实施方式以及权利要求书中的斜体字母(诸如,‘M’、‘G’、‘B’、‘n’、‘m’、‘k’等)用于描绘整数,并且特定字母的使用不限于特定的实施例。此外,在不同的权利要求中可使用相同字母以表示不同的整数,或者可使用不同的字母。此外,在具体实施方式中使用特定字母可能或可能不匹配在涉及具体实施方式中的相同主题的权利要求中使用的字母。

在说明书和权利要求书中,可使用术语“耦合的”和“连接的”及其衍生词。应当理解,这些术语并不旨在作为彼此的同义词。相反,在特定实施例中,可以使用“连接的”来指示两个或更多个元件彼此直接物理和/或电接触。“耦合的”可意味着两个或更多个元件直接物理或电接触。然而,“耦合的”也可意味着两个或更多个元件彼此并不直接接触,但是仍然彼此协作或相互作用。

实施例是本发明的实现方式或示例。说明书中对“实施例”、“一个实施例”、“一些实施例”或“其他实施例”的引用表示结合这些实施例描述的特定的特征、结构或特性被包括在本发明的至少一些实施例中,而不一定在所有的实施例中。各处出现的“实施例”、“一个实施例”或“一些实施例”不一定都指相同的实施例。

并非本文中描述和示出的所有部件、特征、结构、特性等都需要被包括在特定的一个或多个实施例中。例如,如果说明书陈述“可”、“可能”或“能够”包括部件、特征、结构或特性,则不一定包括该特定的部件、特征、结构或特性。如果说明书或权利要求书提到“一”或“一个”元件,则这并不意味着仅有一个该元件。如果说明书或权利要求书引用“附加的”元件,则不排除有多于一个的该附加的元件。

上文对本发明的所示出的本发明的各实施例的描述(包括在摘要中描述的内容)不是详尽的,也不旨在将本发明限于所公开的精确形式。尽管为了说明,本文中描述了本发明的具体实施例以及示例,但是,如相关领域技术人员所理解,在本发明的范围内,各种等效的修改是可能的。

可以根据上面的具体实施方式对本发明进行这些修改。所附权利要求书中所使用的术语不应该被理解为将本发明限制于说明书和附图中所公开的特定实施例。相反,本发明的范围完全由所附权利要求书来确定,权利要求书根据权利要求解释的既定原则来解释。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号