资源粒度大于信用粒度时的信用管理的制作方法

文档序号:6593602阅读:146来源:国知局
专利名称:资源粒度大于信用粒度时的信用管理的制作方法
技术领域
本发明涉及数字系统,更特别地涉及用于数字系统中接口的基于信用的流控制机制的信用管理。
背景技术
数字系统常常包括系统中集成电路(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和M。当发送器12发送 分组头部和分组数据时,发送器12可以扣减被所发送的头部和数据消费的信用。接收器14 可以将释放后的信用发送回发送器12,然后发送器12可以将释放的信用添加到寄存器22 和24。因此,在任何给定的时间点,响应于寄存器22和M中的信用,发送器12可以控制通 过接口 20发送多少信息。例如,如果没有足够的信用可用于给定的发送,则发送器12可以 延迟发送,直到可以获得所需数量的信用。
一般而言,广告信用是指接收器14通知发送器12可用的信用个数的任何机制。类 似地,释放信用可以指用于确定经互连20上的发送所消费的信用可以返回到发送器12的 任何机制及用于返回它们的机制。基于接口 20的定义,用于执行广告和释放的机制是特定 于实现的,但通常可以包括在接口 20上从接收器14到发送器12的发送。例如,分组可以 定义成发送释放的信用,或者在用于所有分组的头部中的字段可以包括释放的信用。发送 释放的信用的分组可以在初始化过程中发送,以便广告期望数量的信用。如果广告了比可 以在分组字段中发送的信用多的信用,则可以发送多个分组。
一般来说,在接口 20上发送的分组可以包括头部(其定义分组的类型并且可以提 供其它控制信息),而且可以可选地包括数据(或者“有效载荷”)。头部的大小可以是固定 的,因此,每个头部在其被发送器12发送时可以消费一个头部信用。其它实施例可以实现 可变大小的头部,而且,给定分组所需的头部信用的个数可以依赖其头部的大小。数据有效 载荷的大小可以是可变的。因此,数据信用可以定义成表示固定数量的数据字节(称为“数 据单元”),而且给定分组所需的数据信用的个数可以是有效载荷的大小除以数据信用的大 小。数据信用的大小可以是接口 20定义的一部分。例如,在一个实施例中,接口 20可以是 快速外围部件互连(PCIe)接口,而数据信用可以代表16个字节。
接收器14包括信用管理单元沈,而且可以包括一个或多个信用寄存器观,用来存 储由信用管理单元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不必然有任何特定的关系。S卩,对于给 定的分组,M/N不必是整数。
图2在右侧例示了 BU,虚线向内延伸到本例中所存储的数据有效载荷。在左侧,实 线例示了 DU。如以上所提到的,在这个例子中,每个BU有4个DU。图2中示出了 5DU有效 载荷40。前4个DU存储在BUO中并且占用了整个BU。第5个DU存储在BUl中。由于缓 冲存储器16分配成以BU粒度存储有效载荷数据,因此整个BUl都分配给有效载荷40,使 得在BUl中有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-I个DU (或者N-I个数据信用)。
因此,对于可分配用于存储分组数据的给定的Y个BU,少于Y * N个数据信用广告 给发送器12。信用管理单元沈可以保留可以别的方式广告的数据信用,以确保在缓冲存储 器16中不会发生溢出。具体而言,最坏情况的总误差会在每个数据有效载荷都引起最大误 差(N-I)的时候出现。如果可以发送至多C个分组(例如,头部信用的个数是C),则最坏情 况的总误差可以是C-I乘以N-1。使用C-I是因为最后的数据有效载荷的误差是不可检测 的,因为发送器12在头部信用用完之后不能再发送另一个分组。
当接收到具有数据有效载荷的给定分组时,如果有效载荷引起少于最大误差的误 差,则有些数据信用可以立即被释放(在分组被消费之前)。即,缓冲存储器16中用于数 据有效载荷的未使用DU少于信用管理单元沈没有广播到发送器12的保留信用的数量。 例如,在图2中,有效载荷42实现了零误差,因此响应于接收到有效载荷42,三(N-1-0)个 数据信用可以被释放。有效载荷44实现了 2个误差,因此响应于接收到有效载荷44,一 (N-1-2)个数据信用可以被释放。
一旦分组被消费,就有可能再次需要保留的信用(因为接收到的下一个分组可能 有实现最大个数的未使用DU的有效载荷)。因此,真正被发送器消费的剩余信用可以在分 组被消费的时候释放。即,在分组被消费时所释放的信用个数等于对应于有效载荷的实际 信用个数减去当分组被接收时所释放的信用个数。
通过释放对应于未实现的误差的信用,有可能发送由于缺少可用数据信用而延迟 的附加分组。即,接口 20上的带宽可以被更有效地利用。
图3是接收器14的一个实施例更具体的框图,对于引起少于未使用DU的最大个 数的未使用DU的数据有效载荷实现数据信用的早期释放。在所例示的实施例中,示出了信 用管理单元沈,它耦合到最大DU误差寄存器28A和释放的数据信用(DCrs)寄存器^B。寄 存器^A-28B可以是图1所示的Cr寄存器观的一部分。在图3中示出的还有DCr FIFO 28C,它可以实现为一个或多个Cr寄存器观或者实现为FIFO存储器或者其它存储器。可 选地,DCr FIFO 28C可以不实现,而且作为代替,存储在其中的数据可以利于所接收到的分 组列队(例如,在缓冲存储器16中)。
信用管理单元沈可以参考未使用DU的最大个数来计算在各个点要释放的信用。 最大DU误差寄存器28A可以存储这个值。或者信用管理单元沈可以产生该值,或者该值 可以通过软件编程到寄存器^A中。在有些实施例中,DU和BU都可以是固定的,并且可以 硬编码到信用管理单元26中,从而可以去掉寄存器28L·
在一个实施例中,信用管理单元沈可以在释放的数据信用寄存器28B中累积要发 送到发送器12的释放信用。信用管理单元沈可以使用任何机制来确定何时发送所释放的 信用。例如,释放的信用可以在一累积够某个数量的信用(例如,超过可编程的阈值)时、 在自上次发送释放信用起经过某个时间段之后就发送、或者利用所经过时间和释放信用的 个数的组合,等等。类似的寄存器可以用于累积释放的头部信用,或者可以使用同一个寄存 器中的字段。
DCr FIFO 28C可以为存储在缓冲存储器16中的每个分组存储多个数据信用 (#DCrs)。当分组从缓冲存储器中被消费时,对应数量的数据信用可以从DCr FIFO 28C读取并释放。信用管理单元26可以根据发送分组所消费的数据信用的总数和响应于接收到 分组而释放的数据信用的个数来为每个接收到的分组计算数据信用的个数。
图4是例示了在系统10的初始化过程中接收器14的一个实施例的操作的流程 图。尽管为了方便理解而以特定次序示出了各个块,但也可以采用其它次序。块可以在接 收器14内按组合逻辑并行执行。整体来看,块、块的组合和/或流程图可以在多个时钟周 其月上传送(pipeline) ο
基于要广告到发送器12的头部信用个数(header_CreditS)和每BU的DU个数 (N),信用管理单元沈可以确定总的潜在的DU误差(DU_Err)。具体而言,DU_Err是由(N-I) * (header_credits-l)给出的(块50)。信用管理单元沈可以确定要广告到发送器12的 DU(数据信用)个数(DU_Adv)。具体而言,DU_Adv可以计算为缓冲存储器16中DU的总数 (N *分配来存储分组数据的BU个数)减去在块50所确定的DU_Err (块52)。有效地,DU_ Err可以是保留用来处理可能在缓冲存储器16的BU中引起的未使用DU的数据信用个数。 信用管理单元26可以广告头部信用和用于数据信用的DU_Adv(块54)。此外,信用管理单 元沈还可以在寄存器28A中将MaX_DU_Err设置为N-I,并且还在寄存器28B指将释放的数 据信用初始化为零(块56)。
图5是例示了响应于在接口 20上接收到分组,接收器14的一个实施例的操作的 流程图。尽管为了方便理解而以特定次序示出了各个块,但也可以采用其它次序。块可以 在接收器14内按组合逻辑并行执行。整体来看,块、块的组合和/或流程图可以在多个时 钟周期上传送。
信用管理单元沈可以确定有效载荷中所实现的数据误差(即,存储有效载荷数 据的BU中未使用的DU个数)(块60)。信用管理单元沈可以确定未实现的数据误差等于 Max_DU_Err减去实现的数据误差(块62)。未实现的数据误差是当接收到分组时可以被释 放的数据信用的个数。信用管理单元沈可以将未实现的数据误差加到释放的DCr寄存器 ^B中释放的数据信用(块64)。此外,信用管理单元沈还可以在DCr FIFO 28C中存储当 分组从缓冲存储器16消费时要释放的数据信用的个数(块66)。具体而言,写到FIFO的个 数是与有效载荷相对应的数据信用的实际个数减去未实现的数据误差。
图6是例示了响应于分组从缓冲存储器16被消费,接收器14的一个实施例的操 作的流程图。一般来说,当分组被目标18从缓冲存储器16读取或者分组不再需要存储在缓 冲存储器16中(例如,分组已经被丢掉)时,该分组被消费。尽管为了方便理解而以特定 次序示出了各个块,但也可以采用其它次序。块可以在接收器14内按组合逻辑并行执行。 整体来看,块、块的组合和/或流程图可以在多个时钟周期上传送。
信用管理单元沈可以从DCr FIFO 28C的条目读取数据信用的个数,而且可以将 数据信用的个数添加到寄存器^B中释放的数据信用,从而释放数据信用(块70和72)。 在一个实施例中,分组可以按照接收次序被消费,而且数据信用的个数可以从FIFO的头读 取。如果分组以不同的次序被消费,则可以提供FIFO中到期望条目的偏移量。
应当指出,与为每个有效载荷保留的最大个数相比,图4至6例示了基于BU中未 使用DU的实际个数与数据信用早期释放相关的操作。接收器14和/或信用管理单元沈 也可以包括以上所述在每个点处的附加操作。
除了或者代替以上所讨论的数据信用的早期释放,接收器14的另一实施例可以实现适应性的信用管理。利用适应性的信用管理,接收器14试图将分配给头部的缓冲存储 器16和分配给数据的缓冲存储器16与实际在接口 20上接收的流量匹配。即,当数据有效 载荷的大小增加时,有更多的数据信用和更少的头部信用可以允许更有效地使用接口带宽 (因为每个分组仍然只需要一个头部信用,但有效载荷需要多个数据信用)。当数据有效 载荷的大小减小时,有更少的数据信用和更多的头部信用可以允许更有效地使用接口带宽 (因为对于每个分组所需头部信用与所需数据信用之比增加了)。
因此,信用管理单元沈可以监视由接收器14所接收的数据有效载荷的大小,并且 可以动态修改分配给头部的缓冲存储器的量(例如,头部BU 30的大小)和分配给数据有 效载荷的缓冲存储器的量(例如,数据BU 32的大小)。可选地,分配给头部的存储器的量 可以大到足以容纳期望的最大数量的头部,但信用可以管理成增加或减少发送器可使用的 头部信用的个数和数据信用的个数。这种动态信用管理仍然可以允许对缓冲存储器16更 有效的利用,因为头部信用的个数影响基于BU中未使用的DU要保留的数据信用的个数,如 前面所讨论的。
在一个实施例中,可以针对数据有效载荷大致在期望的有效载荷大小中间的分组 初始化头部和数据信用(及对应的缓冲存储器分配)。例如,在一个实施例中,接口 20可以 是PCIe接口,而数据有效载荷的大小可以在0到256字节之间,且信用可以针对1 字节 的有效载荷初始化。然后,可以响应于在操作过程中所经历的有效载荷的实际大小而执行 动态调整。
图7是接收器14的一个实施例更具体的框图,用于实现动态信用管理的一个实施 例及前面讨论过的数据信用的早期释放。如前面所讨论的,图7的实施例可以包括寄存器 28A和28B及FIFO 28C.此外,还包括释放的头部信用(HCrs)寄存器^D、最大额外头部 信用(MaxExHead)寄存器^E、最大召回(recall)头部信用(MaxRecHead)寄存器^F、挂 起的(pending)头部信用(PendHeadCr)寄存器^G、挂起的数据信用(PendDataCr)寄存 器观!1、实现的数据信用(RlzdDataCr)寄存器和实现的头部信用(RlzdHeadCr)寄存器 ^J,这些寄存器全部都耦合到信用管理单元沈,如图7所示。
释放的头部信用寄存器28D可以类似于寄存器^B,但还可以累积已经释放的头 部信用。可选地,如前面所提到的,如果期望的话,释放的头部信用和释放的数据信用可以 累积在同一寄存器的两个字段中。MaxExHead和MaxRecHead寄存器28E-28F可以设置关于 动态信用管理的界限。这些寄存器可以如下面所讨论的那样由信用管理单元26自动设置, 或者如果期望的话可以由软件编程。具体而言,可以通过扣留(withhold)数据信用来分配 的附加头部信用的最大个数是由MaxExHead寄存器^E指示的。可以被扣留以便释放附加 数据信用的头部信用的最大个数是由MaxRecHead寄存器28F指示的。
挂起的头部信用和挂起的数据信用寄存器^G_28H可以累积计划的头部和数据 信用调整以及为满足计划调整而请求的释放的头部或数据信用。这些累积可以在当动态 调整发生的时候执行,以便捕捉没有在动态调整中处理的信用。例如,在一个实施例中,一 个头部信用的增加需要3个数据信用的减少。如果还没有三个数据信用可用,则可用的数 据信用可以累积到寄存器^H中。挂起的头部和数据信用可以是带符号的值,以允许捕捉 所需信用,该所需信用可以通过随后释放的信用获得。实现的数据信用和头部信用寄存器 28I-28J存储带符号的实现的头部信用调整和数据信用调整。
现在转向图8,示出了例示在系统10初始化过程中接收器14的一个实施例执行适 应性信用管理的操作的高级流程图。对于也实现数据信用的早期释放的实施例,图8的操 作可以是图4的操作的附加。尽管为了方便理解而以特定次序示出了各个块,但也可以采 用其它次序。块可以在接收器14内按组合逻辑并行执行。整体来看,块、块的组合和/或 流程图可以在多个时钟周期上传送。
信用管理单元沈可以将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内 按组合逻辑并行执行。整体来看,块、块的组合和/或流程图可以在多个时钟周期内传送。
一般来说,信用管理单元沈可以根据其数据有效载荷的大小而将分组归到4类中 的一类,而且可以根据类别来调整信用。因此,本实施例可以基于每个接收到的分组进行调 整。根据期望,其它实施例可以对两个或更多个分组监视分组的大小,以便进行调整。
如果分组不包括数据有效载荷(判决块90,“是”分支),则分组是CatO分组,而 且不做调整。如果分组包括的数据有效载荷小于或者等于中等大小分组数据有效载荷的 1/2 (例如,以上提到的PCIe实施例中的64个字节)(判决块92,“是”分支),则分组是Catl 分组。针对Catl分组的数据有效载荷相对小,因此减少数据信用并增加头部信用可以导 致更好的接口带宽利用(块94)。如果分组包括在中等大小分组的1/2和中等大小分组的 11/2之间的数据有效载荷(判决块96,“是”分支),则分组是Cat2分组。在Cat2中,分组 数据有效载荷大致是中等大小。在Cat2大小范围之内,初始的头部和数据信用大致是正确 的。如果挂起的和实现的信用非零,则信用管理单元可以沿最近调整的相反方向调整信用 (块98)。即,如果最近的调整是增加头部信用并减少数据信用,则信用管理单元可以增加 数据信用并减少头部信用。如果最近的调整是减少头部信用并增加数据信用,则信用管理 单元可以减少数据信用并增加头部信用。最后,如果数据有效载荷大(大于中等大小分组 的1.5倍,判决块96,“否”分支),则分组是Cat3分组。大的有效载荷(Cat3)分组可以受 益于更多的数据信用和更少的头部信用,因此信用管理单元26可以减少头部信用并增加 数据信用(块100)。
应当指出,如果MaxHeadCr和MaxRecHead寄存器^F_28G用于对动态信用调整设置界限,则图9的操作可能受到限制(即,如果调整会破坏MaxHeadCr和MaxRecHead寄存 器^F-28G设置的界限,则信用不能象所示出的那样进行调整)。
图10和11示出了针对一个实施例更具体地例示图9的操作的伪码。图7所示 的寄存器名称在伪码中例示。此外,为了伪码中的方便,对头部和数据信用使用向量化的 标记。具体而 H,adaptive_credits 定义为{adaptive_header_credits, adaptive_data_ credits}且 pending—credits 定义为{PendHeadCr, PendDataCr}。 adaptive—credits 是 (Bjftijf ^) 禾口^fiSi言用 O 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-I,其它实施例可以有头部信用 对数据信用的不同比率。
最后,在图 10 中,计算中间值 remaining_pending_d。remaining_pending_d 应 当小于或者等于0并且小于3。在一个实施例中,如果PendHeadCr是负的,则remaining, pending_d 是 0。
图11例示了基于图10中确定的适应性信用和释放信用对可实现信用的计算。同 样,图11的例子是基于3个数据信用等于1个头部信用,这允许在任何给定的时间点有1 或2个数据信用挂起。最后,在图11中示出了对寄存器^B、28D* ^GISJ的更新,其中 “+=”代表将寄存器的当前值递增等号右侧的值,而“_ =”代表将寄存器的当前值递减等 号右侧的值。
一旦完全理解了以上的公开内容,各种变化与修改就将对本领域技术人员变得显 而易见。以下权利要求是要解释为包含所有这种变化和修改。1权利要求
1.一种装置,包括接收器,包括配置成管理用于接口的流控制信用的信用管理单元,在使用过程中该接 收器耦合到所述接口,其中在所述接口上接收到的每个分组都包括分组头部并可选地包括 分组数据,而且其中分组数据是关于流控制信用中依赖于分组数据大小的数据信用而测量 的,其中每个数据信用代表固定个数的数据字节;及缓冲存储器,耦合到所述接收器并且配置成存储与由所述接收器在所述接口上接收到 的分组相对应的分组头部和分组数据,其中所述缓冲存储器能由所述接收器按缓冲单元进 行分配,所述缓冲单元是数据信用大小的N倍,其中N是大于1的整数;及其中,数据信用的总数等于所述缓冲存储器中能用于存储分组数据的缓冲单元个数的 N倍,而且其中,所述信用管理单元配置成,基于当分组数据没有填满缓冲单元时不可用的 数据信用的最大个数而且进一步基于允许同时传送的分组个数,来保留总数据信用中的多 个,而且其中,所述信用管理单元配置成,响应于接收到导致少于不可用数据信用的最大个 数的给定分组的分组数据,而释放一个或多个数据信用,其中所述信用管理单元配置成在 所述给定分组被消费之前释放一个或多个数据信用。
2.如权利要求1所述的装置,其中所述信用管理单元配置成响应于对给定分组的消费 而释放附加的数据信用,其中附加的数据信用的个数等于与所述给定分组的分组数据相对 应的数据信用的个数减去响应于接收到所述给定分组而释放的一个或多个数据信用。
3.如权利要求1所述的装置,其中所述接收器配置成在对所述装置的初始化过程中在 所述接口上向发送器广告数据信用的个数,其中所广告的数据信用的个数不大于数据信用 的总数减去保留的数据信用。
4.如权利要求1所述的装置,其中,对于给定分组不可用的数据信用的最大个数等于N-I。
5.如权利要求1所述的装置,其中,所述信用管理单元配置成响应于监视所接收到的 分组中包括的分组数据的大小,来动态地调整用于存储分组头部的第一缓冲存储器数量和 用于存储分组数据的第二缓冲存储器数量。
6.一种方法,包括从接口接收分组,其中所述分组包括分组数据,该分组数据基于其大小而在所述接口 上消费发送器处的一个或多个数据信用,其中每个数据信用都代表固定个数的数据字节;将所述分组数据存储在缓冲存储器中,其中所述缓冲存储器能分配成按缓冲单元存储 分组数据,所述缓冲单元是数据信用大小的N倍,其中N是大于1的整数,而且其中,响应 于所述分组数据没有填满分配成存储该分组数据的缓冲单元,至多有N-I个数据信用不可 用;及响应于接收到所述分组并且在该分组被消费之前,确定所述分组数据导致少于N-I个 不可用的数据信用,并且响应于该确定而释放不可用的一个或多个数据信用。
7.如权利要求6所述的方法,还包括从数据信用的总数中保留多个数据信用,其中所 述数据信用的总数等于所述缓冲存储器中能用于存储分组数据的缓冲单元的个数的N倍, 其中所述多个数据信用的个数是基于当分组数据没有填满缓冲单元时不可用的N-I个数 据信用并且还进一步基于允许同时传送的分组个数。
8.如权利要求7所述的方法,还包括在初始化过程中在所述接口上向发送器广告数据信用的个数,其中所广告的数据信用的个数不大于所述数据信用的总数减去所保留的数据信用。
9.如权利要求6所述的方法,还包括响应于对分组的消费而释放附加的数据信用,其 中所述附加的数据信用的个数等于与给定分组的分组数据相对应的数据信用的个数减去 响应于接收到所述给定分组而释放的一个或多个数据信用。
10.如权利要求6所述的方法,还包括向发送器发送对释放的数据信用的指示。
11.一种装置,包括接收器,包括配置成管理用于接口的流控制信用的信用管理单元,在使用过程中该接 收器耦合到所述接口,其中在所述接口上接收到的每个分组都包括头部并可选地包括数 据,而且其中头部是关于用于所述接口上的流控制的一个或多个头部信用而测量的,而数 据是关于用于所述接口上的流控制的一个或多个数据信用而测量的,每个数据信用代表固 定个数的数据字节;及缓冲存储器,耦合到所述接收器并且配置成存储与由所述接收器在所述接口上接收到 的分组相对应的分组头部和分组数据;及其中所述信用管理单元配置成,响应于一个或多个所接收到的分组中分组数据的大 小,来动态调整用于存储分组头部的第一缓冲存储器数量和用于存储分组数据的第二缓冲 存储器数量,而且其中,所述信用管理单元配置成响应于该动态调整而在所述接口上向发 送器释放数据信用和头部信用。
12.如权利要求11所述的装置,其中,所述信用管理单元增加第一数量并减少第二数 量,而且其中,所述信用管理单元配置成扣留与被消费的分组相对应的一个或多个数据信 用,并且配置成释放一个或多个头部信用以实现修改。
13.如权利要求12所述的装置,其中,头部信用代表N-I乘以由数据信用代表的固定个 数的数据字节,而且其中,所述信用管理单元配置成扣留N-I个数据信用以释放一个头部 fe用。
14.如权利要求12所述的装置,其中,所述信用管理单元配置成,响应于接收到分组数 据大小小于第一阈值的一个或多个分组,而增加第一数量并减少第二数量。
15.如权利要求11所述的装置,其中,所述信用管理单元减少第一数量并增加第二数 量,而且其中,所述信用管理单元配置成扣留与被消费的分组相对应的一个或多个头部信 用,并且配置成释放一个或多个数据信用,以便在发送器处实现调整。
16.如权利要求15所述的装置,其中,所述信用管理单元配置成,响应于接收到分组数 据大小大于第二阈值的一个或多个分组,而减少第一数量并增加第二数量。
17.如权利要求11所述的装置,其中,所述信用管理单元配置成,响应于接收到分组数 据大小大于第一阈值并且小于第二阈值的一个或多个分组,来执行与最近所执行的调整相 反的调整。
18.如权利要求11所述的装置,其中,所述信用管理单元配置成确定第一数量的最小 值和第一数量的最大值,而且其中,所述信用管理单元配置成根据该最小值和最大值限制 第一数量和第二数量的动态修改。
19.一种在配置成管理用于接口的流控制信用的接收器中的方法,其中在使用过程中 该接收器耦合到所述接口,其中在所述接口上接收到的每个分组都包括头部并可选地包括数据,而且其中所述头部是关于用于所述接口上的流控制的头部信用而测量的,而且其中 数据是关于用于所述接口上的流控制的一个或多个数据信用而测量的,每个数据信用代表 固定个数的数据字节,该方法包括动态调整头部信用的第一数量和数据信用的第二数量,该动态调整是响应于一个或多 个所接收到的分组中的分组数据的大小的;及响应于该动态调整,在所述接口上向发送器释放数据信用和头部信用。
20.如权利要求19所述的方法,其中,所述动态调整包括增加第一数量并减少第二数 量,而且其中,释放包括扣留与被消费的分组相对应的一个或多个数据信用而释放一个或 多个头部信用,以便在所述发送器处实现调整。
21.如权利要求19所述的方法,其中,所述动态调整包括减少第一数量并增加第二数 量,而且其中,释放包括扣留与被消费的分组相对应的一个或多个头部信用而释放一个或 多个数据信用,以便在所述发送器处实现调整。
全文摘要
在一个实施例中,基于信用的流控制接口上的接收器配置成,当接收到导致缓冲存储器中较少未使用数据信用的数据有效载荷时,早期释放一个或多个数据信用,其中缓冲存储器以比数据信用粗的粒度分配。在另一个实施例中,头部信用和数据信用是基于实际的分组数据有效载荷大小而动态调整的。
文档编号G06F13/38GK102037455SQ200980117882
公开日2011年4月27日 申请日期2009年12月9日 优先权日2008年12月29日
发明者J·王, 陈宗建 申请人:苹果公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1