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

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

摘要

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

著录项

  • 公开/公告号CN102298563A

    专利类型发明专利

  • 公开/公告日2011-12-28

    原文格式PDF

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

    申请/专利号CN201110266364.0

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

    申请日2009-12-09

  • 分类号

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

  • 代理人邹姗姗

  • 地址 美国加利福尼亚

  • 入库时间 2023-12-18 04:04:27

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-04-09

    授权

    授权

  • 2012-02-15

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

    实质审查的生效

  • 2011-12-28

    公开

    公开

说明书

本发明是申请号为200980117882.7、申请日为2009年12月9日、 发明名称为“资源粒度大于信用粒度时的信用管理”的发明专利申请 的分案申请。

技术领域

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

背景技术

数字系统常常包括系统中集成电路(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,少于 Y*N个数据信用广告给发送器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可以包括加上或者减去信 用。在本实施例中,最近的调整是通过将挂起的头部信用和实现的头 部信用求和并将它们与零做比较来检测的。

如可以从图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的更新,其中“+=”代 表将寄存器的当前值递增等号右侧的值,而“-=”代表将寄存器的当前 值递减等号右侧的值。

一些实施例可以包括如下编号的条目所阐述的特征:

1、一种装置,包括:

接收器,包括配置成管理用于接口的流控制信用的信用管理单 元,在使用过程中该接收器耦合到所述接口,其中在所述接口上接收 到的每个分组都包括头部并可选地包括数据,而且其中头部是关于用 于所述接口上的流控制的一个或多个头部信用而测量的,而数据是关 于用于所述接口上的流控制的一个或多个数据信用而测量的,每个数 据信用代表固定个数的数据字节;及

缓冲存储器,耦合到所述接收器并且配置成存储与由所述接收器 在所述接口上接收到的分组相对应的分组头部和分组数据;及

其中所述信用管理单元配置成,响应于一个或多个所接收到的分 组中分组数据的大小,来动态调整用于存储分组头部的第一缓冲存储 器数量和用于存储分组数据的第二缓冲存储器数量,而且其中,所述 信用管理单元配置成响应于该动态调整而在所述接口上向发送器释放 数据信用和头部信用。

2、如条目1所述的装置,其中,所述信用管理单元增加第一数 量并减少第二数量,而且其中,所述信用管理单元配置成扣留与被消 费的分组相对应的一个或多个数据信用,并且配置成释放一个或多个 头部信用以实现修改。

3、如条目2所述的装置,其中,头部信用代表N-1乘以由数据 信用代表的固定个数的数据字节,而且其中,所述信用管理单元配置 成扣留N-1个数据信用以释放一个头部信用。

4、如条目2或3所述的装置,其中,所述信用管理单元配置成, 响应于接收到分组数据大小小于第一阈值的一个或多个分组,而增加 第一数量并减少第二数量。

5、如条目1至4中任一项所述的装置,其中,所述信用管理单 元减少第一数量并增加第二数量,而且其中,所述信用管理单元配置 成扣留与被消费的分组相对应的一个或多个头部信用,并且配置成释 放一个或多个数据信用,以便在发送器处实现调整。

6、如条目5所述的装置,其中,所述信用管理单元配置成,响 应于接收到分组数据大小大于第二阈值的一个或多个分组,而减少第 一数量并增加第二数量。

7、如条目1至6中任一项所述的装置,其中,所述信用管理单 元配置成,响应于接收到分组数据大小大于第一阈值并且小于第二阈 值的一个或多个分组,来执行与最近所执行的调整相反的调整。

8、如条目1至7中任一项所述的装置,其中,所述信用管理单 元配置成确定第一数量的最小值和第一数量的最大值,而且其中,所 述信用管理单元配置成根据该最小值和最大值限制第一数量和第二数 量的动态修改。

9、一种在配置成管理用于接口的流控制信用的接收器中的方法, 其中在使用过程中该接收器耦合到所述接口,其中在所述接口上接收 到的每个分组都包括头部并可选地包括数据,而且其中所述头部是关 于用于所述接口上的流控制的头部信用而测量的,而且其中数据是关 于用于所述接口上的流控制的一个或多个数据信用而测量的,每个数 据信用代表固定个数的数据字节,该方法包括:

动态调整头部信用的第一数量和数据信用的第二数量,该动态调 整是响应于一个或多个所接收到的分组中的分组数据的大小的;及

响应于该动态调整,在所述接口上向发送器释放数据信用和头部 信用。

10、如条目9所述的方法,其中,所述动态调整包括增加第一数 量并减少第二数量,而且其中,释放包括扣留与被消费的分组相对应 的一个或多个数据信用而释放一个或多个头部信用,以便在所述发送 器处实现调整。

11、如条目9或10所述的方法,其中,所述动态调整包括减少 第一数量并增加第二数量,而且其中,释放包括扣留与被消费的分组 相对应的一个或多个头部信用而释放一个或多个数据信用,以便在所 述发送器处实现调整。

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

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号