首页> 中国专利> 资源粒度大于信用粒度时的信用管理

资源粒度大于信用粒度时的信用管理

摘要

在一个实施例中,基于信用的流控制接口上的接收器配置成,当接收到导致缓冲存储器中较少未使用数据信用的数据有效载荷时,早期释放一个或多个数据信用,其中缓冲存储器以比数据信用粗的粒度分配。在另一个实施例中,头部信用和数据信用是基于实际的分组数据有效载荷大小而动态调整的。

著录项

  • 公开/公告号CN102037455A

    专利类型发明专利

  • 公开/公告日2011-04-27

    原文格式PDF

  • 申请/专利权人 苹果公司;

    申请/专利号CN200980117882.7

  • 发明设计人 J·王;陈宗建;

    申请日2009-12-09

  • 分类号

  • 代理机构中国国际贸易促进委员会专利商标事务所;

  • 代理人邹姗姗

  • 地址 美国加利福尼亚

  • 入库时间 2023-12-18 02:13:30

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-11-20

    授权

    授权

  • 2011-06-15

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

    实质审查的生效

  • 2011-04-27

    公开

    公开

说明书

技术领域

本发明涉及数字系统,更特别地涉及用于数字系统中接口的基于信用的流控制机制的信用管理。

背景技术

数字系统常常包括系统中集成电路(IC)之间、系统之间及有时候甚至是IC内的流控制的接口。一般而言,流控制机制的存在防止在接收器中出现缓冲超出限度或者其它数据损失情况。例如,一种普通的流控制机制是基于信用的。接口上的接收器可以广播其可用于各种类型发送的信用个数,而发送器可以记录这些信用。然后,发送器可以在接口上发送并为每次发送扣减信用。一旦信用用完,发送器就必须停止发送。当接收器完成所接收发送的处理后,就释放每次发送所消耗的信用,并将释放的信用发送回发送器。

接收器所广告的信用通常受处理该发送的接收器上可用资源约束。例如,通常提供缓冲来存储所接收的发送。可用的缓冲指示针对每种发送类型可以广告多少信用。在有些情况下,缓冲实现为存储器。如果存储器不能以与信用相同的粒度(granularity)(或者以更精细的粒度)分配,则导致存储器使用的低效。一般而言,完全存储器区组(granule)必须分配成存储任意数量的数据直到完全存储器区组。因为数据可以以小于存储器区组(或者以存储器区组的某个非整数倍)发送,所以可以广告的信用个数少于人们基于对存储器大小的了解可能猜到的。因此,接口上可以实现的带宽小于当存储器可以以更大粒度分配时有可能实现的带宽。

发明内容

在一种实施方式中,一种装置包括耦合到缓冲存储器的接收器。该接收器包括配置成管理用于接口的流控制信用的信用管理单元,其中接收器在使用过程中耦合到所述接口。接口上所接收的每个分组都包括分组头部并可选地包括分组数据。分组数据是关于流控制信用中的依赖于分组数据大小的数据信用而测量的,其中每个数据信用代表固定数量的数据字节。缓冲存储器配置成存储与由接收器在接口上所接收到的分组相对应的分组头部和分组数据,其中缓冲存储器可以由接收器按缓冲单元分配,其中缓冲单元是数据信用大小的N倍,其中N是大于1的整数。数据信用的总数等于缓冲存储器中可用于存储分组数据的缓冲单元的个数的N倍,而且,信用管理单元配置成,基于当分组数据未填满缓冲单元时不可用的数据信用的最大个数并且进一步基于允许同时传送(in flight)的分组个数,来保留总数据信用中的多个。信用管理单元配置成响应于接收导致少于不可用数据信用的最大个数的给定分组的分组数据而释放一个或多个数据信用。信用管理单元配置成在给定分组被消费之前释放一个或多个数据信用。还可构想对应的方法。

在一种实施方式中,一种装置包括耦合到缓冲存储器的接收器。该接收器包括配置成管理用于接口的流控制信用的信用管理单元,其中接收器在使用过程中耦合到该接口。接口上所接收的每个分组都包括头部并可选地包括数据。头部是关于用于接口上流控制的一个或多个头部信用而测量的,而数据是关于用于接口上流控制的一个或多个数据信用而测量的。每个数据信用代表固定数量的数据字节。缓冲存储器配置成存储与由接收器在接口上所接收到的分组相对应的分组头部和分组数据。信用管理单元配置成响应于一个或多个所接收到的分组中分组数据的大小而动态地调整用于存储分组头部的第一缓冲存储器数量和用于存储分组数据的第二缓冲存储器数量,而且其中,信用管理单元配置成响应于该动态调整而在接口上将数据信用和头部信用释放到发送器。

附图说明

以下具体描述参考附图,现在简要地描述附图。

图1是数字系统的一个实施例的框图。

图2是存储器缓冲分配的一个实施例的框图。

图3是图1所示接收器的一个实施例的框图。

图4是例示了在图1所示的系统的初始化过程中,图3所示的接收器的一个实施例的操作的流程图。

图5是例示了响应于在图1所示的系统中接收到分组,图3所示的接收器的一个实施例的操作的流程图。

图6是例示了响应于分组被图1所示系统中的目标消费,图3所示的接收器的一个实施例的操作的流程图。

图7是图1所示的接收器的另一实施例的框图。

图8是例示了在图1所示的系统的初始化过程中,图7所示的接收器的一个实施例的附加操作的流程图。

图9是例示了响应于在图1所示的系统中接收到分组,图7所示的接收器的一个实施例的附加操作的流程图。

图10和11是例示了图7所示的接收器的一个实施例的附加细节的伪码。

尽管本发明容易进行各种修改及可选形式,但其特定实施例作为例子在附图中示出并将在此具体描述。但是,应当指出,附图和对其的具体描述不是要将本发明限制到所公开的特定形式,相反,本发明是要覆盖属于如由所附权利要求定义的本发明的主旨与范围的所有修改、等价物与可选方式。在此所使用的标题仅仅是为了组织的目的,而不是意味着要用于限制描述的范围。如贯穿本申请所使用的,“可以”一词是以允许的含义(即,意味着有潜力)而不是以强制的含义(即,意味着必须)使用的。类似地,“包括”一词意味着包括但不限于。

具体实施方式

现在转向图1,示出了系统10的一个实施例的框图。在所例示的实施例中,系统10包括发送器12、接收器14、缓冲存储器16及可选地还有分组目标18。发送器耦合到接口20,接收器14也耦合到该接口。缓冲存储器16耦合到接收器14和目标18。

发送器12配置成维护头部信用和数据信用,其中头部信用和数据信用指示接收器14当前能够接受多少分组头部和分组数据流量。例如,在图1中,发送器12可以包括头部信用寄存器22和数据信用寄存器24。在系统10的初始化过程中,而且有可能在操作过程中接口20被复位的其它点处,接收器14可以确定广告给发送器12的头部信用和数据信用的个数。发送器12可以利用所广告的信用来初始化寄存器22和24。当发送器12发送分组头部和分组数据时,发送器12可以扣减被所发送的头部和数据消费的信用。接收器14可以将释放后的信用发送回发送器12,然后发送器12可以将释放的信用添加到寄存器22和24。因此,在任何给定的时间点,响应于寄存器22和24中的信用,发送器12可以控制通过接口20发送多少信息。例如,如果没有足够的信用可用于给定的发送,则发送器12可以延迟发送,直到可以获得所需数量的信用。

一般而言,广告信用是指接收器14通知发送器12可用的信用个数的任何机制。类似地,释放信用可以指用于确定经互连20上的发送所消费的信用可以返回到发送器12的任何机制及用于返回它们的机制。基于接口20的定义,用于执行广告和释放的机制是特定于实现的,但通常可以包括在接口20上从接收器14到发送器12的发送。例如,分组可以定义成发送释放的信用,或者在用于所有分组的头部中的字段可以包括释放的信用。发送释放的信用的分组可以在初始化过程中发送,以便广告期望数量的信用。如果广告了比可以在分组字段中发送的信用多的信用,则可以发送多个分组。

一般来说,在接口20上发送的分组可以包括头部(其定义分组的类型并且可以提供其它控制信息),而且可以可选地包括数据(或者“有效载荷”)。头部的大小可以是固定的,因此,每个头部在其被发送器12发送时可以消费一个头部信用。其它实施例可以实现可变大小的头部,而且,给定分组所需的头部信用的个数可以依赖其头部的大小。数据有效载荷的大小可以是可变的。因此,数据信用可以定义成表示固定数量的数据字节(称为“数据单元”),而且给定分组所需的数据信用的个数可以是有效载荷的大小除以数据信用的大小。数据信用的大小可以是接口20定义的一部分。例如,在一个实施例中,接口20可以是快速外围部件互连(PCIe)接口,而数据信用可以代表16个字节。

接收器14包括信用管理单元26,而且可以包括一个或多个信用寄存器28,用来存储由信用管理单元26管理用于发送器12的信用所使用的值。以下提供各种实施例的附加细节。接收器14还可以包括在接口20上通信、与缓冲存储器16通信等的各种其它电路。此外,尽管图1例示了发送器12发送到接收器14,但在接口20上通信可以是双向的。即,发送器功能可以存在于接口20的两侧,而且接收器功能也可以存在于两侧。在讨论中为了简化,本说明书将指示发送器12发送到接收器14的情况,但是应当理解,分组可以从图1的接收器14一侧发送到发送器12一侧。

在所例示的实施例中,接口20可以包括一对单向、点对点的链接。分组可以在该链接上发送。在其它实施例中,接口20可以具有其它定义。例如,接口20可以是总线,具有地址和数据发送。地址发送可以是通过地址信用(类似于头部信用)来流控制的,而数据发送可以是通过数据信用来流控制的。基于接口20的定义,任何信用集合都可以使用。一般来说,信用集合可以称为流控制信用。

一般来说,目标18可以指消费来自缓冲存储器16的分组的任何电路。目标18可以是包括接收器14的设备的一部分(例如,IC)或者可以是独立的。例如,接收器14可以是接收分组并在另一个接口上转发它们的开关,在这种情况下,对来自缓冲存储器16的分组的消费可以是在该另一接口上对分组的转发。

缓冲存储器16可以包括接收器14可以访问的任何类型的存储器。例如,缓冲存储器16可以包括耦合到存储器控制器的系统存储器,例如动态随机存取存储器(DRAM),其中存储器控制器配置成与DRAM连接。例如,可以支持各种DRAM存储器模块,例如单个内嵌存储器模块(SIMM)、双内嵌存储器模块(DIMM)等。任何DRAM技术都可以使用(例如,同步DRAM(SDRAM)、双数据率(DDR)SDRAM、DDR2SDRAM、DDR3SDRAM、Rambus DRAM(RDRAM)等)。在此类实施例中,接收器14可以对存储器控制器产生将分组头部和分组数据写到存储器16的写命令。目标18可以对存储器控制器产生读取分组头部和分组数据的读命令。在其它实施例中,缓冲存储器16可以包括接收器14私有的存储器,或者被接收器14和系统10中一个或多个其它接收器和/或发送器共用的存储器。缓冲存储器16可以包括例如高速缓冲存储器或者其它专用的缓冲存储器。在有些实施例中,缓冲存储器16可以包括静态RAM(SRAM)。

缓冲存储器16可以分配成存储分组头部和分组数据。具体而言,缓冲存储器16可以以比数据信用(和/或头部信用,在有些实施例中)粗的粒度分配。缓冲存储器16可以以在此称为缓冲单元(BU)的区组分配。因此,在图1中,示出了头部BU 30和数据BU 32。本说明书的其余部分可以使用其中头部信用具有与BU相同的粒度而数据信用的粒度更细的实施例。但是,还构想其中头部信用粒度也比BU更细且类似于数据信用机制的机制可以用于头部信用的实施例。

因为BU粒度比DU粒度粗,所以缓冲存储器16可能没有完全用于存储数据。图2是针对其中BU是DU大小的4倍的情况例示了少于完全使用的例子的框图。一般来说,其它实施例可以包括大小为DU大小的N倍的BU,其中N是大于1的整数。在有些实施例中,N可以是2的幂。

总的来说,各种分组的数据有效载荷可以在0到M个DU之间,其中M是大于0的整数。M的大小可以是依赖实现的,而且可以依赖于接口20的定义(例如,接口20可以定义每分组的最大数据有效载荷大小)。但是,M和N不必然有任何特定的关系。即,对于给定的分组,M/N不必是整数。

图2在右侧例示了BU,虚线向内延伸到本例中所存储的数据有效载荷。在左侧,实线例示了DU。如以上所提到的,在这个例子中,每个BU有4个DU。图2中示出了5DU有效载荷40。前4个DU存储在BU0中并且占用了整个BU。第5个DU存储在BU1中。由于缓冲存储器16分配成以BU粒度存储有效载荷数据,因此整个BU1都分配给有效载荷40,使得在BU1中有3个DU未用。以另一种方式看,在对应于有效载荷40的分组被消费之前,缓冲存储器的这3个DU都是不可用的,而且从根本上可能关于被发送器12用于发送有效载荷40所消费的DU(及由此数据信用)的个数构成计数误差。即,发送器12消费了5个信用来发送有效载荷40,但有效载荷40实际上占用了缓冲存储器16的8个信用。

图2中例示了另一个有效载荷42,在这个例子中它是4个DU。因此,有效载荷42存储在BU2中,而且没有未使用的DU。还示出了第三个有效载荷44,它是6个DU,因此在图2中占用了BU3和BU4的2个DU。因此,缓冲存储器16中又有2个DU是没有使用的。通常,一个分组可以占用多达P个BU,其中,如果有效载荷不恰好是N个DU的整数倍,则最后一个被占用的BU中的一个或多个DU可能是没有使用的。在其它情况下,未使用的DU可能存在于被有效载荷占用的BU的开始(例如,如果有效载荷不需要与BU的开始对准),或者在开始和末尾都存在。在任何一种情况下,基于对应于BU(N)的DU个数,都可以定义用于数据有效载荷的最大可能误差。如果一个DU占用了一个BU,则发生最大误差,因此,对于给定的有效载荷,最大误差是N-1个DU(或者N-1个数据信用)。

因此,对于可分配用于存储分组数据的给定的Y个BU,少于YN个数据信用广告给发送器12。信用管理单元26可以保留可以别的方式广告的数据信用,以确保在缓冲存储器16中不会发生溢出。具体而言,最坏情况的总误差会在每个数据有效载荷都引起最大误差(N-1)的时候出现。如果可以发送至多C个分组(例如,头部信用的个数是C),则最坏情况的总误差可以是C-1乘以N-1。使用C-1是因为最后的数据有效载荷的误差是不可检测的,因为发送器12在头部信用用完之后不能再发送另一个分组。

当接收到具有数据有效载荷的给定分组时,如果有效载荷引起少于最大误差的误差,则有些数据信用可以立即被释放(在分组被消费之前)。即,缓冲存储器16中用于数据有效载荷的未使用DU少于信用管理单元26没有广播到发送器12的保留信用的数量。例如,在图2中,有效载荷42实现了零误差,因此响应于接收到有效载荷42,三(N-1-0)个数据信用可以被释放。有效载荷44实现了2个误差,因此响应于接收到有效载荷44,一(N-1-2)个数据信用可以被释放。

一旦分组被消费,就有可能再次需要保留的信用(因为接收到的下一个分组可能有实现最大个数的未使用DU的有效载荷)。因此,真正被发送器消费的剩余信用可以在分组被消费的时候释放。即,在分组被消费时所释放的信用个数等于对应于有效载荷的实际信用个数减去当分组被接收时所释放的信用个数。

通过释放对应于未实现的误差的信用,有可能发送由于缺少可用数据信用而延迟的附加分组。即,接口20上的带宽可以被更有效地利用。

图3是接收器14的一个实施例更具体的框图,对于引起少于未使用DU的最大个数的未使用DU的数据有效载荷实现数据信用的早期释放。在所例示的实施例中,示出了信用管理单元26,它耦合到最大DU误差寄存器28A和释放的数据信用(DCrs)寄存器28B。寄存器28A-28B可以是图1所示的Cr寄存器28的一部分。在图3中示出的还有DCr FIFO 28C,它可以实现为一个或多个Cr寄存器28或者实现为FIFO存储器或者其它存储器。可选地,DCr FIFO 28C可以不实现,而且作为代替,存储在其中的数据可以利于所接收到的分组列队(例如,在缓冲存储器16中)。

信用管理单元26可以参考未使用DU的最大个数来计算在各个点要释放的信用。最大DU误差寄存器28A可以存储这个值。或者信用管理单元26可以产生该值,或者该值可以通过软件编程到寄存器28A中。在有些实施例中,DU和BU都可以是固定的,并且可以硬编码到信用管理单元26中,从而可以去掉寄存器28A。

在一个实施例中,信用管理单元26可以在释放的数据信用寄存器28B中累积要发送到发送器12的释放信用。信用管理单元26可以使用任何机制来确定何时发送所释放的信用。例如,释放的信用可以在一累积够某个数量的信用(例如,超过可编程的阈值)时、在自上次发送释放信用起经过某个时间段之后就发送、或者利用所经过时间和释放信用的个数的组合,等等。类似的寄存器可以用于累积释放的头部信用,或者可以使用同一个寄存器中的字段。

DCr FIFO 28C可以为存储在缓冲存储器16中的每个分组存储多个数据信用(#DCrs)。当分组从缓冲存储器中被消费时,对应数量的数据信用可以从DCr FIFO 28C读取并释放。信用管理单元26可以根据发送分组所消费的数据信用的总数和响应于接收到分组而释放的数据信用的个数来为每个接收到的分组计算数据信用的个数。

图4是例示了在系统10的初始化过程中接收器14的一个实施例的操作的流程图。尽管为了方便理解而以特定次序示出了各个块,但也可以采用其它次序。块可以在接收器14内按组合逻辑并行执行。整体来看,块、块的组合和/或流程图可以在多个时钟周期上传送(pipeline)。

基于要广告到发送器12的头部信用个数(header_credits)和每BU的DU个数(N),信用管理单元26可以确定总的潜在的DU误差(DU_Err)。具体而言,DU_Err是由(N-1)(header_credits-1)给出的(块50)。信用管理单元26可以确定要广告到发送器12的DU(数据信用)个数(DU_Adv)。具体而言,DU_Adv可以计算为缓冲存储器16中DU的总数(N分配来存储分组数据的BU个数)减去在块50所确定的DU_Err(块52)。有效地,DU_Err可以是保留用来处理可能在缓冲存储器16的BU中引起的未使用DU的数据信用个数。信用管理单元26可以广告头部信用和用于数据信用的DU_Adv(块54)。此外,信用管理单元26还可以在寄存器28A中将Max_DU_Err设置为N-1,并且还在寄存器28B指将释放的数据信用初始化为零(块56)。

图5是例示了响应于在接口20上接收到分组,接收器14的一个实施例的操作的流程图。尽管为了方便理解而以特定次序示出了各个块,但也可以采用其它次序。块可以在接收器14内按组合逻辑并行执行。整体来看,块、块的组合和/或流程图可以在多个时钟周期上传送。

信用管理单元26可以确定有效载荷中所实现的数据误差(即,存储有效载荷数据的BU中未使用的DU个数)(块60)。信用管理单元26可以确定未实现的数据误差等于Max_DU_Err减去实现的数据误差(块62)。未实现的数据误差是当接收到分组时可以被释放的数据信用的个数。信用管理单元26可以将未实现的数据误差加到释放的DCr寄存器28B中释放的数据信用(块64)。此外,信用管理单元26还可以在DCr FIFO 28C中存储当分组从缓冲存储器16消费时要释放的数据信用的个数(块66)。具体而言,写到FIFO的个数是与有效载荷相对应的数据信用的实际个数减去未实现的数据误差。

图6是例示了响应于分组从缓冲存储器16被消费,接收器14的一个实施例的操作的流程图。一般来说,当分组被目标18从缓冲存储器16读取或者分组不再需要存储在缓冲存储器16中(例如,分组已经被丢掉)时,该分组被消费。尽管为了方便理解而以特定次序示出了各个块,但也可以采用其它次序。块可以在接收器14内按组合逻辑并行执行。整体来看,块、块的组合和/或流程图可以在多个时钟周期上传送。

信用管理单元26可以从DCr FIFO 28C的条目读取数据信用的个数,而且可以将数据信用的个数添加到寄存器28B中释放的数据信用,从而释放数据信用(块70和72)。在一个实施例中,分组可以按照接收次序被消费,而且数据信用的个数可以从FIFO的头读取。如果分组以不同的次序被消费,则可以提供FIFO中到期望条目的偏移量。

应当指出,与为每个有效载荷保留的最大个数相比,图4至6例示了基于BU中未使用DU的实际个数与数据信用早期释放相关的操作。接收器14和/或信用管理单元26也可以包括以上所述在每个点处的附加操作。

除了或者代替以上所讨论的数据信用的早期释放,接收器14的另一实施例可以实现适应性的信用管理。利用适应性的信用管理,接收器14试图将分配给头部的缓冲存储器16和分配给数据的缓冲存储器16与实际在接口20上接收的流量匹配。即,当数据有效载荷的大小增加时,有更多的数据信用和更少的头部信用可以允许更有效地使用接口带宽(因为每个分组仍然只需要一个头部信用,但有效载荷需要多个数据信用)。当数据有效载荷的大小减小时,有更少的数据信用和更多的头部信用可以允许更有效地使用接口带宽(因为对于每个分组所需头部信用与所需数据信用之比增加了)。

因此,信用管理单元26可以监视由接收器14所接收的数据有效载荷的大小,并且可以动态修改分配给头部的缓冲存储器的量(例如,头部BU 30的大小)和分配给数据有效载荷的缓冲存储器的量(例如,数据BU 32的大小)。可选地,分配给头部的存储器的量可以大到足以容纳期望的最大数量的头部,但信用可以管理成增加或减少发送器可使用的头部信用的个数和数据信用的个数。这种动态信用管理仍然可以允许对缓冲存储器16更有效的利用,因为头部信用的个数影响基于BU中未使用的DU要保留的数据信用的个数,如前面所讨论的。

在一个实施例中,可以针对数据有效载荷大致在期望的有效载荷大小中间的分组初始化头部和数据信用(及对应的缓冲存储器分配)。例如,在一个实施例中,接口20可以是PCIe接口,而数据有效载荷的大小可以在0到256字节之间,且信用可以针对128字节的有效载荷初始化。然后,可以响应于在操作过程中所经历的有效载荷的实际大小而执行动态调整。

图7是接收器14的一个实施例更具体的框图,用于实现动态信用管理的一个实施例及前面讨论过的数据信用的早期释放。如前面所讨论的,图7的实施例可以包括寄存器28A和28B及FIFO 28C。此外,还包括释放的头部信用(HCrs)寄存器28D、最大额外头部信用(MaxExHead)寄存器28E、最大召回(recall)头部信用(MaxRecHead)寄存器28F、挂起的(pending)头部信用(PendHeadCr)寄存器28G、挂起的数据信用(PendDataCr)寄存器28H、实现的数据信用(RlzdDataCr)寄存器28I和实现的头部信用(RlzdHeadCr)寄存器28J,这些寄存器全部都耦合到信用管理单元26,如图7所示。

释放的头部信用寄存器28D可以类似于寄存器28B,但还可以累积已经释放的头部信用。可选地,如前面所提到的,如果期望的话,释放的头部信用和释放的数据信用可以累积在同一寄存器的两个字段中。MaxExHead和MaxRecHead寄存器28E-28F可以设置关于动态信用管理的界限。这些寄存器可以如下面所讨论的那样由信用管理单元26自动设置,或者如果期望的话可以由软件编程。具体而言,可以通过扣留(withhold)数据信用来分配的附加头部信用的最大个数是由MaxExHead寄存器28E指示的。可以被扣留以便释放附加数据信用的头部信用的最大个数是由MaxRecHead寄存器28F指示的。

挂起的头部信用和挂起的数据信用寄存器28G-28H可以累积计划的头部和数据信用调整以及为满足计划调整而请求的释放的头部或数据信用。这些累积可以在当动态调整发生的时候执行,以便捕捉没有在动态调整中处理的信用。例如,在一个实施例中,一个头部信用的增加需要3个数据信用的减少。如果还没有三个数据信用可用,则可用的数据信用可以累积到寄存器28H中。挂起的头部和数据信用可以是带符号的值,以允许捕捉所需信用,该所需信用可以通过随后释放的信用获得。实现的数据信用和头部信用寄存器28I-28J存储带符号的实现的头部信用调整和数据信用调整。

现在转向图8,示出了例示在系统10初始化过程中接收器14的一个实施例执行适应性信用管理的操作的高级流程图。对于也实现数据信用的早期释放的实施例,图8的操作可以是图4的操作的附加。尽管为了方便理解而以特定次序示出了各个块,但也可以采用其它次序。块可以在接收器14内按组合逻辑并行执行。整体来看,块、块的组合和/或流程图可以在多个时钟周期上传送。

信用管理单元26可以将MaxExHead寄存器28A初始化为所允许的最大头部个数(#CMD)减去为中等大小的分组所分配的头部信用个数(header_credits)。#CMD可以是硬件最大值,或者可以由软件根据头部BU 30的分配来编程。例如对于中等大小的分组,头部信用的个数可以等于数据BU的个数除以二。因此,附加头部信用的最大个数可以是头部BU 30中剩余的、还未分配的空间(块80)。召回的头部信用的最大个数(被动态移除以便允许附加数据信用的头部信用-MaxRecHead)可以初始化为目前头部信用的一半或者头部信用减去缓冲存储器16中数据BU总数除以4的整数部分中的最小值(块82)。头部信用个数的一半可以被选择作为用于最大分组的合理个数。对于这种实施例,数据BU个数除以4可以是最小值,因为最大数据有效载荷是4个BU。应当指出,在一个实施例中,如果头部信用的初始个数小于或者等于2,则最大召回头部信用可以设置成零。当有两个或者一个头部信用时,不能通过减少头部信用来实现任何好处,因为头部信用的缺乏可能阻止附加数据信用的使用。信用管理单元26可以广告头部信用的个数和DU_Adv数据信用(块84)。

现在转向图9,示出了接收器14的一个实施例响应于接收到分组的操作的高级流程图。对于也实现数据信用的早期释放的实施例,图9的操作可以是图5操作的附加。尽管为了方便理解而以特定次序示出了各个块,但也可以采用其它次序。块可以在接收器14内按组合逻辑并行执行。整体来看,块、块的组合和/或流程图可以在多个时钟周期内传送。

一般来说,信用管理单元26可以根据其数据有效载荷的大小而将分组归到4类中的一类,而且可以根据类别来调整信用。因此,本实施例可以基于每个接收到的分组进行调整。根据期望,其它实施例可以对两个或更多个分组监视分组的大小,以便进行调整。

如果分组不包括数据有效载荷(判决块90,“是”分支),则分组是Cat0分组,而且不做调整。如果分组包括的数据有效载荷小于或者等于中等大小分组数据有效载荷的1/2(例如,以上提到的PCIe实施例中的64个字节)(判决块92,“是”分支),则分组是Cat1分组。针对Cat1分组的数据有效载荷相对小,因此减少数据信用并增加头部信用可以导致更好的接口带宽利用(块94)。如果分组包括在中等大小分组的1/2和中等大小分组的11/2之间的数据有效载荷(判决块96,“是”分支),则分组是Cat2分组。在Cat2中,分组数据有效载荷大致是中等大小。在Cat2大小范围之内,初始的头部和数据信用大致是正确的。如果挂起的和实现的信用非零,则信用管理单元可以沿最近调整的相反方向调整信用(块98)。即,如果最近的调整是增加头部信用并减少数据信用,则信用管理单元可以增加数据信用并减少头部信用。如果最近的调整是减少头部信用并增加数据信用,则信用管理单元可以减少数据信用并增加头部信用。最后,如果数据有效载荷大(大于中等大小分组的1.5倍,判决块96,“否”分支),则分组是Cat3分组。大的有效载荷(Cat3)分组可以受益于更多的数据信用和更少的头部信用,因此信用管理单元26可以减少头部信用并增加数据信用(块100)。

应当指出,如果MaxHeadCr和MaxRecHead寄存器28F-28G用于对动态信用调整设置界限,则图9的操作可能受到限制(即,如果调整会破坏MaxHeadCr和MaxRecHead寄存器28F-28G设置的界限,则信用不能象所示出的那样进行调整)。

图10和11示出了针对一个实施例更具体地例示图9的操作的伪码。图7所示的寄存器名称在伪码中例示。此外,为了伪码中的方便,对头部和数据信用使用向量化的标记。具体而言,adaptive_credits定义为{adaptive_header_credits,adaptive_data_credits}且pending_credits定义为{PendHeadCr,PendDataCr}。adaptive_credits是(可能调整的)头部和数据信用。 releasing_header_credits和releasing_data_credits是目前被释放的信用。如前面所描述的,对于给定的分组,当实现的数据误差小于最大误差时,releasing_data_credits可以包括早先释放的数据信用。这两个释放信用变量还包括由于从缓冲存储器16的分组消费而释放的信用。

图10例示了adaptive_credits的生成。总的来说,如果还没有到达界限,则adaptive_credits等于pending_credits。否则,依赖于所接收到的分组的类别(并且,在Cat2分组的情况下,还依赖于最近的调整),adaptive_credits可以包括pending_credits加上或者减去信用。在本实施例中,最近的调整是通过将挂起的头部信用和实现的头部信用求和并将它们与零做比较来检测的。

如可以从图10看到的,在本实施例中,1个头部信用等于3个数据信用。因此,增加1个头部信用就减去了3个数据信用,反之亦然。基于N-1,其它实施例可以有头部信用对数据信用的不同比率。

最后,在图10中,计算中间值remaining_pending_d。remaining_pending_d应当小于或者等于0并且小于3。在一个实施例中,如果PendHeadCr是负的,则remaining_pending_d是0。

图11例示了基于图10中确定的适应性信用和释放信用对可实现信用的计算。同样,图11的例子是基于3个数据信用等于1个头部信用,这允许在任何给定的时间点有1或2个数据信用挂起。最后,在图11中示出了对寄存器28B、28D和28G-28J的更新,其中“+=”代表将寄存器的当前值递增等号右侧的值,而“-=”代表将寄存器的当前值递减等号右侧的值。

一旦完全理解了以上的公开内容,各种变化与修改就将对本领域技术人员变得显而易见。以下权利要求是要解释为包含所有这种变化和修改。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号