一种数据缓存方法及装置转让专利

申请号 : CN201410542710.7

文献号 : CN105573711B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赵姣赖明亮田浩暄常艳蕊

申请人 : 深圳市中兴微电子技术有限公司

摘要 :

本发明公开了一种数据缓存方法,依据信元的输入端口号将所述信元存储至对应的先入先出队列;当前第K周期确定待出队信元能够出队,调度所述待出队信元出队,获取所述待出队信元占用的拼接单元数目的实际值,将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器;其中,所述确定待出队信元能够出队是依据第K‑1周期的第一反压计数值小于等于第一预设门限值进行的,所述第K‑1周期的第一反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K‑2周期的第一反压计数值得到。本发明还同时公开了一种数据缓存装置。

权利要求 :

1.一种数据缓存方法,其特征在于,所述方法包括:

依据信元的输入端口号将所述信元存储至对应的先入先出队列;

当第K周期确定待出队信元能够出队,调度所述待出队信元出队,获取所述待出队信元占用的拼接单元数目的实际值,将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器;

其中,所述确定待出队信元能够出队是依据第K-1周期的第一反压计数值小于等于第一预设门限值进行的,所述第K-1周期的第一反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第一反压计数值得到;K为正整数。

2.根据权利要求1所述方法,其特征在于,所述依据信元的输入端口号将所述信元存储至对应的先入先出队列之前,所述方法还包括:提取所述信元携带的信元长度信息及信元版本信息,并依据所述信元长度信息及信元版本信息获取所述信元占用的缓存单元数目。

3.根据权利要求1或2所述方法,其特征在于,所述依据信元的输入端口号将所述信元存储至对应的先入先出队列包括:依据信元的输入端口号,获取所述输入端口号对应的先入先出队列的尾指针、入队子指针及空闲地址,将所述信元按照长度为每个地址所占用的缓存单元的数目存储至所述先入先出队列,读取所述信元占用的有效缓存单元,若所述有效缓存单元没有跨地址,更新所述先入先出队列的入队子指针,释放所述空闲地址;若所述信元占用的有效缓存单元跨地址,更新所述先入先出队列的尾指针及入队子指针。

4.根据权利要求2所述方法,其特征在于,调度所述待出队信元出队后,所述方法还包括:依据所述待出队信元占用的拼接单元的实际数目及所述待出队信元占用的缓存单元的数目对所述第一反压计数值进行校正。

5.根据权利要求1或2所述方法,其特征在于,所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器,包括:查找写入指针,依据所述待出队信元占用的拼接单元的实际数目,将所述信元存储至与所述写入指针对应的寄存器中,若所述寄存器中包含有效信元,以拼接单元为单位将所述待出队信元与所述有效信元进行拼接,记录信元拼接信息,并更新写入指针。

6.一种数据缓存装置,其特征在于,所述装置包括:缓存模块及处理模块;其中,所述缓存模块,用于依据信元的输入端口号将所述信元存储至对应的先入先出队列;

所述处理模块,用于在当第K周期确定待出队信元能够出队,调度所述待出队信元出队,获取所述待出队信元占用的拼接单元数目的实际值,将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器以进行数据传输;

其中,所述确定待出队信元能够出队是依据第K-1周期的第一反压计数值小于等于第一预设门限值进行的,所述第K-1周期的第一反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第一反压计数值得到;K为正整数。

7.根据权利要求6所述装置,其特征在于,所述装置还包括:获取模块,用于提取所述信元携带的信元长度信息及信元版本信息,并依据所述信元长度信息及信元版本信息获取所述信元占用的缓存单元数目。

8.根据权利要求7所述装置,其特征在于,所述装置还包括:校正模块,用于依据所述待出队信元占用的拼接单元的实际数目及所述待出队信元占用的缓存单元的数目对所述第一反压计数值进行校正。

9.一种数据缓存方法,其特征在于,所述方法包括:

还原以信元拼接的方式拼接的数据为独立信元;

依据信元的输出端口号将所述信元存储至对应的先入先出队列;

当第K周期确定待出队信元能够出队,调度所述待出队信元出队;

其中,所述确定待出队信元能够出队是依据第K-1周期的第二反压计数值小于等于第二预设门限值进行的,所述第K-1周期的第二反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第二反压计数值得到;K为正整数。

10.根据权利要求9所述方法,其特征在于,还原以信元拼接的方式拼接的数据为独立信元,包括:依据所述数据中携带的信元拼接信息,还原以信元拼接的方式拼接的数据为独立信元。

11.一种数据缓存装置,其特征在于,所述装置包括:还原模块、存储模块及调度模块;

其中,

所述还原模块,用于还原以信元拼接的方式拼接的数据为独立信元;

所述存储模块,用于依据信元的输出端口号将所述信元存储至对应的先入先出队列;

所述调度模块,用于在当第K周期确定待出队信元能够出队,调度待出队信元出队;

其中,所述确定待出队信元能够出队是依据第K-1周期的第二反压计数值小于等于第二预设门限值进行的,所述第K-1周期的第二反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第二反压计数值得到;K为正整数。

说明书 :

一种数据缓存方法及装置

技术领域

[0001] 本发明涉及数据通信技术领域,尤其涉及分组交换网络中的一种数据缓存方法及装置。

背景技术

[0002] 在数据通信领域,分组交换网络中交换网元芯片的数据缓存空间的效率和规模以及数据总线的宽度对于芯片的性能和面积功耗至关重要。为了节省内部总线资源和缓存资源,提高交换效率,一般将数据报文切割为一定数量的信元后,传输到交换网元芯片进行信元交换和复制处理,然后重组为数据报文。信元经过自动寻址查询,输入端和输出端缓存后,由入端口进入出端口,完成转发和复制功能,如图1为大规模交换网络数据处理示意图。信元作为最小传输和交换单位,有定长和变长两种处理方式,变长信元较之定长信元对于缓存资源和总线资源的利用率更高,一般采用变长信元处理方式。
[0003] 交换网元芯片中的信元缓存主要用于信元等待自动寻址处理结果及调度输出的过程中信元体数据的存储,在网络无流量压力的情况下,缓存空间所需的规模较小;但是在网络出现拥塞的情况时,需要吸纳百米光纤上的串行数据报文。缓存空间按照交换网元芯片交换能力计算,以避免在网络拥塞的情况下出现大规模丢包。现有的信元缓存方式一般是根据链路数量和光纤的长度以及数据传输速率,换算出一个带有冗余的存储空间,但是随着交换网规模和数据速率的提高,缓存空间资源也必须相应提高,例如数据速率由12.5G提高到25G时,缓存空间的容量必须加倍才能保证无丢失转发。而且在变长信元交换的大前提下,缓存资源的利用率也偏低,在最小信元存储的情况下,小于50%,如图2所示为不同长度的网元存储空间利用率示意图。
[0004] 综上所述,提供一种应用于分组交换网络的数据缓存方法及装置以提高缓存资源和总线资源的利用率,已成为亟待解决的问题。

发明内容

[0005] 有鉴于此,本发明实施例期望提供一种数据缓存方法及装置,能够有效的提高缓存资源和总线资源的利用率。
[0006] 为达到上述目的,本发明的技术方案是这样实现的:
[0007] 本发明实施例提供了一种数据缓存方法,所述方法包括:
[0008] 依据信元的输入端口号将所述信元存储至对应的先入先出队列;
[0009] 当前第K周期确定待出队信元能够出队,调度所述待出队信元出队,获取所述待出队信元占用的拼接单元数目的实际值,将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器;
[0010] 其中,所述确定待出队信元能够出队是依据第K-1周期的第一反压计数值小于等于第一预设门限值进行的,所述第K-1周期的第一反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第一反压计数值得到;K为正整数。
[0011] 上述方案中,所述依据信元的输入端口号将所述信元存储至对应的先入先出队列之前,所述方法还包括:提取所述信元携带的信元长度信息及信元版本信息,并依据所述信元长度信息及信元版本信息获取所述信元占用的缓存单元数目。
[0012] 上述方案中,所述依据信元的输入端口号将所述信元存储至对应的先入先出队列包括:
[0013] 依据信元的输入端口号,获取所述输入端口号对应的先入先出队列的尾指针、入队子指针及空闲地址,将所述信元按照长度为每个地址所占用的缓存单元的数目存储至所述先入先出队列,读取所述信元占用的有效缓存单元,若所述有效缓存单元没有跨地址,更新所述先入先出队列的入队子指针,释放所述空闲地址;若所述信元占用的有效缓存单元跨地址,更新所述先入先出队列的尾指针及入队子指针。
[0014] 上述方案中,调度所述待出队信元出队后,所述方法还包括:
[0015] 依据所述待出队信元占用的拼接单元的实际数目及所述待出队信元占用的缓存单元的数目对所述第一反压计数值进行校正。
[0016] 上述方案中,所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器,包括:
[0017] 查找写入指针,依据所述待出队信元占用的拼接单元的实际数目,将所述信元存储至与所述写入指针对应的寄存器中,若所述寄存器中包含有效信元,以拼接单元为单位将所述待出队信元与所述有效信元进行拼接,记录信元拼接信息,并更新写入指针。
[0018] 本发明实施例还提供了一种数据缓存装置,所述装置包括:缓存模块及处理模块;其中,
[0019] 所述缓存模块,用于依据信元的输入端口号将所述信元存储至对应的先入先出队列;
[0020] 所述处理模块,用于在当前第K周期确定待出队信元能够出队,调度所述待出队信元出队,获取所述待出队信元占用的拼接单元数目的实际值,将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器以进行数据传输;
[0021] 其中,所述确定待出队信元能够出队是依据第K-1周期的第一反压计数值小于等于第一预设门限值进行的,所述第K-1周期的第一反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第一反压计数值得到;K为正整数。
[0022] 上述方案中,所述装置还包括:获取模块,用于提取所述信元携带的信元长度信息及信元版本信息,并依据所述信元长度信息及信元版本信息获取所述信元占用的缓存单元数目。
[0023] 上述方案中,所述装置还包括:校正模块,用于依据所述待出队信元占用的拼接单元的实际数目及所述待出队信元占用的缓存单元的数目对所述第一反压计数值进行校正。
[0024] 本发明实施例还提供了一种数据缓存方法,所述方法包括:
[0025] 还原以信元拼接的方式拼接的数据为独立信元;
[0026] 依据信元的输出端口号将所述信元存储至对应的先入先出队列;
[0027] 当前第K周期确定待出队信元能够出队,调度所述待出队信元出队;
[0028] 其中,所述确定待出队信元能够出队是依据第K-1周期的第二反压计数值小于等于第二预设门限值进行的,所述第K-1周期的第二反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第二反压计数值得到;K为正整数。
[0029] 上述方案中,还原以信元拼接的方式拼接的数据为独立信元,包括:
[0030] 依据所述数据中携带的信元拼接信息,还原以信元拼接的方式拼接的数据为独立信元。
[0031] 本发明实施例还提供了一种数据缓存装置,所述装置包括:还原模块、存储模块及调度模块;其中,
[0032] 所述还原模块,用于还原以信元拼接的方式拼接的数据为独立信元;
[0033] 所述存储模块,用于依据信元的输出端口号将所述信元存储至对应的先入先出队列;
[0034] 所述调度模块,用于在当前第K周期确定待出队信元能够出队,调度待出队信元出队;
[0035] 其中,所述确定待出队信元能够出队是依据第K-1周期的第二反压计数值小于等于第二预设门限值进行的,所述第K-1周期的第二反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第二反压计数值得到;K为正整数。
[0036] 本发明实施例所提供的数据缓存方法及装置,依据信元的输入端口号将所述信元存储至对应的先入先出队列(FIFO,First In First Out);当前第K周期确定待出队信元能够出队,调度所述待出队信元出队,获取所述待出队信元占用的拼接单元数目的实际值,将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器;其中,所述确定待出队信元能够出队是依据第K-1周期的第一反压计数值小于等于第一预设门限值进行的,所述第K-1周期确定的第一反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第一反压计数值得到。如此,通过将信元以信元拼接的方式存储至与总线位宽相同的寄存器,提高了总线的利用率;并通过对信元出队前的主动反压处理,保证了交换网元芯片的信元交换效率和准确性。

附图说明

[0037] 图1为大规模交换网络数据处理示意图;
[0038] 图2为不同长度的网元存储空间利用率示意图;
[0039] 图3为本发明实施例一数据缓存方法示意图;
[0040] 图4为本发明信元缓存示意图;
[0041] 图5为本发明信元拼接示意图;
[0042] 图6为本发明实施例二数据缓存方法示意图;
[0043] 图7为本发明实施例一数据缓存装置组成结构示意图;
[0044] 图8为本发明实施例二数据缓存装置组成结构示意图。

具体实施方式

[0045] 在本发明实施例中,依据信元的输入端口号将所述信元存储至对应的先入先出队列;当前第K周期确定待出队信元能够出队,调度所述待出队信元出队,获取所述待出队信元占用的拼接单元数目的实际值,将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器以进行数据传输;其中,所述确定待出队信元能够出队是依据第K-1周期的第一反压计数值小于等于第一预设门限值进行的,所述第K-1周期确定的第一反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第一反压计数值得到;K为正整数。
[0046] 图3为本发明实施例一数据缓存方法流程示意图,在信元缓存输入端,如图3所示,本实施例数据缓存方法流程包括:
[0047] 步骤301:依据信元的输入端口号将所述信元存储至对应的先入先出队列;
[0048] 本步骤之前,所述方法还包括:提取所述信元的信元头中携带的信元长度及信元版本等信息,并依据所述信元长度信息及信元版本信息获取所述信元占用的缓存单元数目;
[0049] 这里,所述缓存单元为随机存储器(RAM,Random Access Memory)每个地址的N分之一,即:将RAM划分为固定的N份,每一份为一个缓存单元;N为正整数;N值可依据数据的转发速率等进行设定;
[0050] 所述依据信元的输入端口号将所述信元存储至对应的先入先出队列的同时,所述方法还包括:将所述信元的信元信息存储至所述对应的先入先出队列;其中,所述信元信息包括:所述信元的长度、信元版本及所述信元占用的缓存单元数目。
[0051] 进一步的,本步骤具体包括:依据信元的输入端口号,获取所述输入端口号对应的先入先出队列的尾指针、入队子指针及空闲地址,将所述信元按照长度为每个地址所占用的缓存单元的数目存储至所述先入先出队列,读取所述信元占用的有效缓存单元,若所述有效缓存单元没有跨地址,更新所述先入先出队列的入队子指针,释放所述空闲地址;若所述信元占用的有效缓存单元跨地址,更新所述先入先出队列的尾指针及入队子指针;如图4所示为本发明信元缓存示意图;
[0052] 其中,所述将所述信元按照长度为每个地址所占用的缓存单元的数目存储至所述先入先出队列,包括:
[0053] 确定所述先入先出队列为空或者所述尾指针中的缓存单元已经写满时,将所述信元由高位到低位划分为与所述缓存单元位宽相同的M组数据,并按由高位到低位的顺序将所述信元写入空闲地址;
[0054] 确定所述先入先出队列不为空或者所述尾指针中的缓存单元未写满时,将所述信元由高位到低位划分为与所述缓存单元位宽相同的M组数据,并依据入队子指针的位置,按由高位到低位的顺序写入所述信元的M组数据,入队子指针的位置写入信元最高位所在的一组划分数据,所述空闲地址编号为入队子指针减1的缓存单元写入所述信元划分的最后一组数据;
[0055] 这里,所述M值与一个地址所包含的缓存单元的数目相同,即M=N;所述M为正整数;
[0056] 所述信元占用的有效缓存单元为:所述信元实际占用的缓存单元;
[0057] 所述有效缓存单元没有跨地址包括:所述信元实际占用的缓存单元个数与入队子指针相加不大于M,且所述入队子指针非0;
[0058] 所述信元占用的有效缓存单元跨地址包括:所述先入先出队列为空,或者所述尾指针中的缓存单元已经写满,或者,所述信元实际占用的缓存单元个数与入队子指针相加大于M;
[0059] 当所述信元实际占用的缓存单元的数目小于M时,所述信元的最后一组划分数据无效。
[0060] 步骤302:当前第K周期确定待出队信元能够出队,调度所述待出队信元出队,获取所述待出队信元占用的拼接单元数目的实际值,将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器;
[0061] 这里,所述拼接单元的位宽为一个缓存单元位宽的X分之一,具体可依据数据的转发速率等进行设定,既要保证在最少寄存器的条件下数据无丢失,又要保证总线资源充分被利用,不出现空拍;X为正整数;
[0062] 所述确定待出队信元能够出队是依据第K-1周期的第一反压计数值小于等于第一预设门限值进行的,所述第K-1周期的第一反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第一反压计数值得到;K为正整数;
[0063] 其中,所述第一反压计数值用作判断是否允许所述队列中的待出队信元在下个周期出队的依据;
[0064] 所述第K-1周期的第一反压计数值=第K-2周期的第一反压计数值+上一个出队信元出队时占用拼接单元数目的估计值-每周期总线可传输的拼接单元数目;
[0065] 所述上一个出队信元出队时占用拼接单元数目的估计值=所述上一个出队信元占用的缓存单元的数目与所述X的乘积。
[0066] 当K值为1时,即所述先入先出队列中第一个待出队信元出队时,由于此前并无任何其他信元的出队,因此所述第一反压计数值一直为0,可直接进行所述待出队信元的出队及后续操作;
[0067] 当K值为2时,即所述先入先出队列中第一个待出队信元已出队,由于在第一个待出队信元出队前并不存在其他信元的出队,即第K-2周期的第一反压计数值为0,因此,可直接依据第一个待出队信元占用拼接单元数目的估计值及每周期总线可传输的拼接单元数目获取第1个周期的第一反压计数值,并依据第1个周期的第一反压计数值判断是否允许下一个待出队信元出队。
[0068] 进一步的,当第K-1周期的第一反压计数值大于第一预设门限值时,不允许所述队列中待出队信元在第K周期出队,依据每周期总线可传输的拼接单元数目传输所述寄存器中数据,直至第G周期的第一反压计数值小于等于第一预设门限值时,确定第G+1周期所述待出队信元能够出队;其中,G为大于K的正整数。
[0069] 进一步的,调度所述待出队信元出队包括:依据出队端口号,获取对应的先入先出队列的头指针、次头指针及出队子指针,依据所述队列中待出队信元所占用的缓存单元数目及出队子指针,计算将要读取的缓存单元的编号范围及个数,将所述待出队信元占用的缓存单元中的数据重新组合为一个信元,更新出队子指针为原出队子指针与所述信元占用的缓存单元的数目相加后的值,如果所述相加后的值大于N,更新为所述相加后的值减去N的值,若出队子指针与所述信元占用的缓存单元的数目相加不大于N,无须更新头指针;若出队子指针与所述信元占用的缓存单元的数目相加大于N,更新头指针为所述次头指针;其中,所述待出队信元为所述先入先出队列的首信元;
[0070] 这里,所述出队端口号与所述输入端口号相同。
[0071] 进一步的,调度所述待出队信元出队后,所述方法还包括:
[0072] 依据所述待出队信元占用的拼接单元数目的实际值,对第一反压计数值进行校正;这里,由于所述待出队信元占用的拼接单元数目的实际值,通常小于等于所述待出队信元占用拼接单元数目的估计值,因此,当所述实际值与所述估计值不同时,所述校正包括:将第一反压计数值减去所述估计值与所述实际值的差值。利用校正后的第一反压计数值与所述第一预设门限值进行比较,判断是否允许队列中待出队信元下一个周期出队。
[0073] 进一步的,在本发明实施例中包括两个或两个的寄存器组成一个寄存器组;
[0074] 所述寄存器包含Y个虚拟单元,即所述寄存器被划分成Y个虚拟单元,所述虚拟单元的位宽与一个拼接单元的位宽相同;
[0075] 将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器包括:
[0076] 获取寄存器组中的写入指针,依据所述待出队信元占用的拼接单元的实际数目,将所述信元存储至与所述写入指针对应的寄存器中,若所述寄存器中包含有效信元,以拼接单元为单位将所述待出队信元与所述有效进行拼接,记录信元拼接信息,更新写入指针为所述待出所占用的拼接单元的个数与原写入指针相加的值,当所述相加的值大于等于Y时,将所述相加的值减去Y作为新的写入指针;其中,所述写入指针以拼接单元为步进值;如图5所示为本发明信元拼接示意图;
[0077] 这里,所述信元拼接信息包括:拼接位置、信元头标识、信元尾标识及信元有效标识;其中,所述拼接位置标识两个信元的边界;
[0078] 在本发明实施例中所述寄存器设置允许最多两个不同的信元进行拼接,因此,所述信元有效标识包括第一信元有效标识及第二信元有效标识,当寄存器中第二个信元尚未输入,所述寄存器包含的虚拟单元尚未写满时,第二信元有效标识则是无效的。
[0079] 进一步的,当所述寄存器组中寄存器含有有效的信元数据时,将所述寄存器组中读出指针对应的寄存器中所有数据输出至信元缓存输出端,携带所述信元拼接信息;如图5所示,读出指针以寄存器为单元变化,寄存器0的数据输出后,读出指针指向寄存器1。
[0080] 图6为本发明实施例二数据缓存方法示意图,在信元缓存输出端,如图6所示,本实施例数据缓存方法流程包括:
[0081] 步骤601:还原以信元拼接的方式拼接的数据为独立信元;
[0082] 这里,当输出寄存器中输出的数据时,首先需执行的为还原以信元拼接的方式拼接的数据为独立信元;
[0083] 本步骤具体包括:依据所述数据中携带的信元拼接信息,还原以信元拼接的方式拼接的数据为独立信元;
[0084] 其中,所述信元拼接信息包括:拼接位置、信元头标识、信元尾标识及信元有效标识;其中,所述拼接位置标识两个信元的边界。
[0085] 步骤602:依据信元的输出端口号将所述信元存储至对应的先入先出队列;
[0086] 本步骤之前,所述方法还包括:提取所述信元的信元头中携带的信元长度及信元版本等信息,并依据所述信元长度信息及信元版本信息获取所述信元占用的缓存单元数目;
[0087] 这里,所述缓存单元为RAM每个地址的N分之一,即将RAM划分为固定的N份,每一份为一个缓存单元;N为正整数;N值可依据数据的转发速率等进行设定;
[0088] 所述依据信元的输出端口号将所述信元存储至对应的先入先出队列的同时,所述方法还包括:将所述信元的信元信息存储至所述对应的先入先出队列;其中,所述信元信息包括:所述信元的长度、信元版本及所述信元占用的缓存单元数目。
[0089] 进一步的,本步骤具体包括:依据信元的输出端口号,获取所述输出端口号对应的先入先出队列的尾指针、入队子指针及空闲地址,将所述信元按照长度为每个地址所占用的缓存单元的数目存储至所述先入先出队列,读取所述信元占用的有效缓存单元,若所述有效缓存单元没有跨地址,更新所述先入先出队列的入队子指针,释放所述空闲地址;若所述信元占用的有效缓存单元跨地址,更新所述先入先出队列的尾指针及入队子指针;
[0090] 其中,所述将所述信元按照长度为每个地址所占用的缓存单元的数目存储至所述先入先出队列,包括:
[0091] 确定所述先入先出队列为空或者所述尾指针中的缓存单元已经写满时,将所述信元由高位到低位划分为与所述缓存单元位宽相同的M组数据,并按由高位到低位的顺序将所述信元写入空闲地址;
[0092] 确定所述先入先出队列不为空或者所述尾指针中的缓存单元未写满时,将所述信元由高位到低位划分为与所述缓存单元位宽相同的M组数据,并依据入队子指针的位置,按由高位到低位的顺序写入所述信元的M组数据,入队子指针的位置写入信元最高位所在的一组划分数据,所述空闲地址编号为入队子指针减1的缓存单元写入所述信元划分的最后一组数据;
[0093] 这里,所述M值与一个地址所包含的缓存单元的数目相同,即M=N;所述M为正整数;
[0094] 所述信元占用的有效缓存单元为:所述信元实际占用的缓存单元;
[0095] 所述有效缓存单元没有跨地址为包括:所述信元实际占用的缓存单元个数与入队子指针相加不大于M,且所述入队子指针非0;
[0096] 所述信元占用的有效缓存单元跨地址包括:所述先入先出队列为空,或者所述尾指针中的缓存单元已经写满,或者,所述信元实际占用的缓存单元个数与入队子指针相加大于M;
[0097] 当所述信元实际占用的缓存单元的数目小于M时,所述信元的最后一组划分数据无效。
[0098] 步骤603:当前第K周期确定待出队信元能够出队,调度所述待出队信元出队;
[0099] 这里,所述确定待出队信元能够出队是依据第K-1周期的第二反压计数值小于等于第二预设门限值进行的,所述第K-1周期的第二反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第二反压计数值得到;K为正整数;
[0100] 其中,所述拼接单元的位宽为一个缓存单元位宽的X分之一,具体可依据数据的转发速率等进行设定,既要保证在最少寄存器的条件下数据无丢失,又要保证总线资源充分被利用,不出现空拍;X为正整数;
[0101] 所述第二反压计数值用作判断是否允许所述队列中的待出队信元在下个周期出队的依据;
[0102] 所述第K-1周期的第二反压计数值=第K-2周期的第二反压计数值+上一个出队信元出队时占用拼接单元数目的估计值-每周期总线可传输的拼接单元数目;
[0103] 所述上一个出队信元出队时占用拼接单元数目的估计值=所述上一个出队信元占用的缓存单元的数目与所述X的乘积。
[0104] 当K值为1时,即所述先入先出队列中第一个待出队信元出队时,由于此前并无任何其他信元的出队,因此所述第二反压计数值一直为0,可直接进行所述待出队信元的出队及后续操作;
[0105] 当K值为2时,即所述先入先出队列中第一个待出队信元已出队,由于在第一个待出队信元出队前并不存在其他信元的出队,即第K-2周期的第二反压计数值为0,因此,可直接依据第一个待出队信元占用拼接单元数目的估计值及每周期总线可传输的拼接单元数目获取第1个周期的第二反压计数值,并依据第1个周期的第二反压计数值判断是否允许下一个待出队信元出队。
[0106] 进一步的,当第K-1周期的第二反压计数值大于第二预设门限值时,不允许所述队列中待出队信元在第K周期出队,依据每周期总线可传输的拼接单元数目传输所述寄存器中数据,直至第G周期的第二反压计数值小于等于第二预设门限值时,确定第G+1周期所述待出队信元能够出队;其中,G为大于K的正整数。
[0107] 进一步的,调度所述待出队信元出队包括:依据出端口号,获取对应的先入先出队列的头指针、次头指针及出队子指针,依据所述队列中待出队信元所占用的缓存单元数目及出队子指针,计算将要读取的缓存单元的编号范围及个数,将所述待出队信元占用的缓存单元中的数据重新组合为一个信元传输至总线上,更新出队子指针为原出队子指针与所述信元占用的缓存单元的数目相加后的值,如果所述相加后的值大于N,更新为所述相加后的值减去N的值,若出队子指针与所述信元占用的缓存单元的数目相加不大于N,无须更新头指针;若出队子指针与所述信元占用的缓存单元的数目相加大于N,更新头指针为所述次头指针;其中,所述待出队信元为所述先入先出队列的首信元;
[0108] 这里,所述出端口号与所述输出端口号相同。
[0109] 进一步的,调度所述待出队信元出队后,所述方法还包括:
[0110] 获取所述待出队信元占用的拼接单元数目的实际值,并依据所述实际值对第二反压计数值进行校正;这里,由于所述待出队信元占用的拼接单元数目的实际值,通常小于等于所述待出队信元占用拼接单元数目的估计值,因此,当所述实际值与所述估计值不同时,所述校正包括:将第二反压计数值减去所述估计值与所述实际值的差值。利用校正后的第二反压计数值与所述第二预设门限值进行比较,判断是否允许队列中待出队信元下一个周期出队。
[0111] 图7为本发明实施例一数据缓存装置组成结构示意图,如图7所示,所述装置包括:缓存模块71及处理模块72;其中,
[0112] 所述缓存模块71,用于依据信元的输入端口号将所述信元存储至对应的先入先出队列;
[0113] 所述处理模块72,用于在当前第K周期确定待出队信元能够出队,调度所述待出队信元出队,获取所述待出队信元占用的拼接单元数目的实际值,将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器以进行数据传输;
[0114] 其中,所述确定待出队信元能够出队是依据第K-1周期的第一反压计数值小于等于第一预设门限值进行的,所述第K-1周期的第一反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第一反压计数值得到;K为正整数;
[0115] 所述缓存单元为RAM每个地址的N分之一,即将RAM划分为固定的N份,每一份为一个缓存单元;N为正整数;N值可依据数据的转发速率等进行设定;
[0116] 所述拼接单元的位宽为一个缓存单元位宽的X分之一,具体可依据数据的转发速率等进行设定,既要保证在最少寄存器的条件下数据无丢失,又要保证总线资源充分被利用,不出现空拍;X为正整数。
[0117] 进一步的,所述装置还包括:获取模块73,用于提取所述信元的信元头中携带的信元长度信息及信元版本信息,并依据所述信元长度信息及信元版本信息获取所述信元占用的缓存单元数目;
[0118] 相应的,所述缓存模块71,还用于将所述信元的信元信息存储至所述对应的先入先出队列;其中,所述信元信息包括:所述信元的长度、信元版本及所述信元占用的缓存单元数目。
[0119] 进一步的,所述缓存模块71依据信元的输入端口号将所述信元存储至对应的先入先出队列,包括:
[0120] 所述缓存模块71依据信元的输入端口号,获取所述输入端口号对应的先入先出队列的尾指针、入队子指针及空闲地址,将所述信元按照长度为每个地址所占用的缓存单元的数目存储至所述先入先出队列,读取所述信元占用的有效缓存单元,若所述有效缓存单元没有跨地址,更新所述先入先出队列的入队子指针,释放所述空闲地址;若所述信元占用的有效缓存单元跨地址,更新所述先入先出队列的尾指针及入队子指针;
[0121] 其中,所述缓存模块71将所述信元按照长度为每个地址所占用的缓存单元的数目存储至所述先入先出队列,包括:
[0122] 确定所述先入先出队列为空或者所述尾指针中的缓存单元已经写满时,将所述信元由高位到低位划分为与所述缓存单元位宽相同的M组数据,并按由高位到低位的顺序将所述信元写入空闲地址;
[0123] 确定所述先入先出队列不为空或者所述尾指针中的缓存单元未写满时,将所述信元由高位到低位划分为与所述缓存单元位宽相同的M组数据,并依据入队子指针的位置,按由高位到低位的顺序写入所述信元的M组数据,入队子指针的位置写入信元最高位所在的一组划分数据,所述空闲地址编号为入队子指针减1的缓存单元写入所述信元划分的最后一组数据;
[0124] 这里,所述M值与一个地址所包含的缓存单元的数目相同,即M=N;所述M为正整数;
[0125] 所述信元占用的有效缓存单元为:所述信元实际占用的缓存单元;
[0126] 所述有效缓存单元没有跨地址为包括:所述信元实际占用的缓存单元个数与入队子指针相加不大于M,且所述入队子指针非0;
[0127] 所述信元占用的有效缓存单元跨地址包括:所述先入先出队列为空,或者所述尾指针中的缓存单元已经写满,或者,所述信元实际占用的缓存单元个数与入队子指针相加大于M;
[0128] 当所述信元实际占用的缓存单元的数目小于M时,所述信元的最后一组划分数据无效。
[0129] 进一步的,所述第K-1周期的第一反压计数值用作判断是否允许所述队列中的待出队信元在第K周期出队的依据;
[0130] 所述第K-1周期的第一反压计数值=第K-2周期的第一反压计数值+上一个出队信元出队时占用拼接单元数目的估计值-每周期总线可传输的拼接单元数目;
[0131] 所述上一个出队信元出队时占用拼接单元数目的估计值=所述上一个出队信元占用的缓存单元的数目与所述X的乘积。
[0132] 当K值为1时,即所述先入先出队列中第一个待出队信元出队时,由于此前并无任何其他信元的出队,因此所述第一反压计数值一直为0,可直接进行所述待出队信元的出队及后续操作;
[0133] 当K值为2时,即所述先入先出队列中第一个待出队信元已出队,由于在第一个待出队信元出队前并不存在其他信元的出队,即第K-2周期的第一反压计数值为0,因此,可直接依据第一个待出队信元占用拼接单元数目的估计值及每周期总线可传输的拼接单元数目获取第1个周期的第一反压计数值,并依据第1个周期的第一反压计数值判断是否允许下一个待出队信元出队。
[0134] 进一步的,所述处理模块72,还用于当第K-1周期的第一反压计数值大于第一预设门限值时,不允许所述队列中待出队信元在第K周期出队,依据每周期总线可传输的拼接单元数目传输所述寄存器中数据,直至第G周期的第一反压计数值小于等于第一预设门限值时,确定第G+1周期所述待出队信元能够出队;其中,G为大于K的正整数。
[0135] 进一步的,所述处理模块72调度所述待出队信元出队包括:依据出队端口号,获取对应的先入先出队列的头指针、次头指针及出队子指针,依据所述队列中待出队信元所占用的缓存单元数目及出队子指针,计算将要读取的缓存单元的编号范围及个数,将所述待出队信元占用的缓存单元中的数据重新组合为一个信元,更新出队子指针为原出队子指针与所述信元占用的缓存单元的数目相加后的值,如果所述相加后的值大于N,更新为所述相加后的值减去N的值,若出队子指针与所述信元占用的缓存单元的数目相加不大于N,无须更新头指针;若出队子指针与所述信元占用的缓存单元的数目相加大于N,更新头指针为所述次头指针;其中,所述待出队信元为所述先入先出队列的首信元;
[0136] 这里,所述出队端口号与所述输入端口号相同。
[0137] 进一步的,所述装置还包括:校正模块74,用于依据所述待出队信元占用的拼接单元的实际数目及所述待出队信元占用的缓存单元的数目对所述第一反压计数值进行校正;
[0138] 这里,由于所述待出队信元占用的拼接单元数目的实际值,通常小于等于所述待出队信元占用拼接单元数目的估计值,因此,当所述实际值与所述估计值不同时,所述校正包括:将第一反压计数值减去所述估计值与所述实际值的差值。利用校正后的第一反压计数值与所述第一预设门限值进行比较,判断是否允许队列中待出队信元下一个周期出队。
[0139] 进一步的,在本发明实施例中包括两个或两个的寄存器组成一个寄存器组;
[0140] 所述寄存器包含Y个虚拟单元,即所述寄存器被划分成Y个虚拟单元,所述虚拟单元的位宽与一个拼接单元的位宽相同;
[0141] 所述处理模块72将所述待出队信元以信元拼接的方式存储至与总线位宽相同的寄存器包括:
[0142] 所述处理模块72获取寄存器组中的写入指针,依据所述待出队信元占用的拼接单元的实际数目,将所述信元存储至与所述写入指针对应的寄存器中,若所述寄存器中包含有效信元,以拼接单元为单位将所述待出队信元与所述有效进行拼接,记录信元拼接信息,更新写入指针为所述待出所占用的拼接单元的个数与原写入指针相加的值,当所述相加的值大于等于Y时,将所述相加的值减去Y作为新的写入指针;其中,所述写入指针以拼接单元为步进值;
[0143] 这里,所述信元拼接信息包括:拼接位置、信元头标识、信元尾标识及信元有效标识;其中,所述拼接位置标识两个信元的边界;
[0144] 在本发明实施例中所述寄存器设置允许最多两个不同的信元进行拼接,因此,所述信元有效标识包括第一信元有效标识及第二信元有效标识,当寄存器中第二个信元尚未输入,所述寄存器包含的虚拟单元尚未写满时,第二信元有效标识则是无效的。
[0145] 进一步的,所述处理模块72,还用于确定所述寄存器组中寄存器含有有效的信元数据时,将所述寄存器组中读出指针对应的寄存器中所有数据输出至信元缓存输出端,携带所述信元拼接信息;如图5所示,读出指针以寄存器为单元变化,寄存器0的数据输出后,读出指针指向寄存器1。
[0146] 图8为本发明实施例二数据缓存装置组成结构示意图,如图8所示,所述装置包括:还原模块81、存储模块82及调度模块83;其中,
[0147] 所述还原模块81,用于还原以信元拼接的方式拼接的数据为独立信元;
[0148] 所述存储模块82,用于依据信元的输出端口号将所述信元存储至对应的先入先出队列;
[0149] 所述调度模块83,用于在当前第K周期确定待出队信元能够出队,调度待出队信元出队;
[0150] 其中,所述确定待出队信元能够出队是依据第K-1周期的第二反压计数值小于等于第二预设门限值进行的,所述第K-1周期的第二反压计数值根据上一个出队信元出队时占用拼接单元数目的估计值、每周期总线可传输的拼接单元数目及第K-2周期的第二反压计数值得到;K为正整数。
[0151] 进一步的,所述还原模块81还原以信元拼接的方式拼接的数据为独立信元包括:
[0152] 所述还原模块81依据所述数据中携带的信元拼接信息,还原以信元拼接的方式拼接的数据为独立信元;
[0153] 其中,所述信元拼接信息包括:拼接位置、信元头标识、信元尾标识及信元有效标识;其中,所述拼接位置标识两个信元的边界。
[0154] 进一步的,所述装置还包括:提取模块84,用于提取所述信元的信元头中携带的信元长度及信元版本等信息,并依据所述信元长度信息及信元版本信息获取所述信元占用的缓存单元数目;
[0155] 这里,所述缓存单元为RAM每个地址的N分之一,即将RAM划分为固定的N份,每一份为一个缓存单元;N为正整数;N值可依据数据的转发速率等进行设定;
[0156] 相应的,所述存储模块82,还用于将所述信元的信元信息存储至所述对应的先入先出队列;其中,所述信元信息包括:所述信元的长度、信元版本及所述信元占用的缓存单元数目。
[0157] 进一步的,所述存储模块82依据信元的输出端口号将所述信元存储至对应的先入先出队列,包括:
[0158] 所述存储模块82依据信元的输出端口号,获取所述输出端口号对应的先入先出队列的尾指针、入队子指针及空闲地址,将所述信元按照长度为每个地址所占用的缓存单元的数目存储至所述先入先出队列,读取所述信元占用的有效缓存单元,若所述有效缓存单元没有跨地址,更新所述先入先出队列的入队子指针,释放所述空闲地址;若所述信元占用的有效缓存单元跨地址,更新所述先入先出队列的尾指针及入队子指针;
[0159] 其中,所述存储模块82将所述信元按照长度为每个地址所占用的缓存单元的数目存储至所述先入先出队列,包括:
[0160] 所述存储模块82确定所述先入先出队列为空或者所述尾指针中的缓存单元已经写满时,将所述信元由高位到低位划分为与所述缓存单元位宽相同的M组数据,并按由高位到低位的顺序将所述信元写入空闲地址;
[0161] 所述存储模块82确定所述先入先出队列不为空或者所述尾指针中的缓存单元未写满时,将所述信元由高位到低位划分为与所述缓存单元位宽相同的M组数据,并依据入队子指针的位置,按由高位到低位的顺序写入所述信元的M组数据,入队子指针的位置写入信元最高位所在的一组划分数据,所述空闲地址编号为入队子指针减1的缓存单元写入所述信元划分的最后一组数据;
[0162] 这里,所述M值与一个地址所包含的缓存单元的数目相同,即M=N;所述M为正整数;
[0163] 所述信元占用的有效缓存单元为:所述信元实际占用的缓存单元;
[0164] 所述有效缓存单元没有跨地址为包括:所述信元实际占用的缓存单元个数与入队子指针相加不大于M,且所述入队子指针非0;
[0165] 所述信元占用的有效缓存单元跨地址包括:所述先入先出队列为空,或者所述尾指针中的缓存单元已经写满,或者,所述信元实际占用的缓存单元个数与入队子指针相加大于M;
[0166] 当所述信元实际占用的缓存单元的数目小于M时,所述信元的最后一组划分数据无效。
[0167] 进一步的,所述拼接单元的位宽为一个缓存单元位宽的X分之一,具体可依据数据的转发速率等进行设定,既要保证在最少寄存器的条件下数据无丢失,又要保证总线资源充分被利用,不出现空拍;X为正整数;
[0168] 所述第二反压计数值用作判断是否允许所述队列中的待出队信元在下个周期出队的依据;
[0169] 所述第K-1周期的第二反压计数值=第K-2周期的第二反压计数值+上一个出队信元出队时占用拼接单元数目的估计值-每周期总线可传输的拼接单元数目;
[0170] 所述上一个出队信元出队时占用拼接单元数目的估计值=所述上一个出队信元占用的缓存单元的数目与所述X的乘积。
[0171] 当K值为1时,即所述先入先出队列中第一个待出队信元出队时,由于此前并无任何其他信元的出队,因此所述第二反压计数值一直为0,可直接进行所述待出队信元的出队及后续操作;
[0172] 当K值为2时,即所述先入先出队列中第一个待出队信元已出队,由于在第一个待出队信元出队前并不存在其他信元的出队,即第K-2周期的第二反压计数值为0,因此,可直接依据第一个待出队信元占用拼接单元数目的估计值及每周期总线可传输的拼接单元数目获取第1个周期的第二反压计数值,并依据第1个周期的第二反压计数值判断是否允许下一个待出队信元出队。
[0173] 进一步的,所述调度模块83,还用于当第K-1周期的第二反压计数值大于第二预设门限值时,不允许所述队列中待出队信元在第K周期出队,依据每周期总线可传输的拼接单元数目传输所述寄存器中数据,直至第G周期的第二反压计数值小于等于第二预设门限值时,确定第G+1周期所述待出队信元能够出队;其中,G为大于K的正整数。
[0174] 进一步的,所述调度模块83调度所述待出队信元出队包括:
[0175] 所述调度模块83依据出端口号,获取对应的先入先出队列的头指针、次头指针及出队子指针,依据所述队列中待出队信元所占用的缓存单元数目及出队子指针,计算将要读取的缓存单元的编号范围及个数,将所述待出队信元占用的缓存单元中的数据重新组合为一个信元传输至总线上,更新出队子指针为原出队子指针与所述信元占用的缓存单元的数目相加后的值,如果所述相加后的值大于N,更新为所述相加后的值减去N的值,若出队子指针与所述信元占用的缓存单元的数目相加不大于N,无须更新头指针;若出队子指针与所述信元占用的缓存单元的数目相加大于N,更新头指针为所述次头指针;其中,所述待出队信元为所述先入先出队列的首信元;
[0176] 这里,所述出端口号与所述输出端口号相同。
[0177] 进一步的,所述装置还包括:修正模块85,用于在调度所述待出队信元出队后,[0178] 获取所述待出队信元占用的拼接单元数目的实际值,并依据所述实际值对第二反压计数值进行校正;这里,由于所述待出队信元占用的拼接单元数目的实际值,通常小于等于所述待出队信元占用拼接单元数目的估计值,因此,当所述实际值与所述估计值不同时,所述校正包括:将第二反压计数值减去所述估计值与所述实际值的差值。利用校正后的第二反压计数值与所述第二预设门限值进行比较,判断是否允许队列中待出队信元下一个周期出队。
[0179] 在本发明实施例中,所述数据缓存装置可位于服务器中,所述缓存模块71、处理模块72、获取模块73、校正模块74、还原模块81、存储模块82、调度模块83、提取模块84及修正模块85均可由服务器中的中央处理器(CPU,Central Processing Unit)、或数字信号处理器(DSP,Digital Signal Processor)、或现场可编程门阵列(FPGA,Field Programmable Gate Array)实现。
[0180] 以上所述,仅为本发明较佳实施例而已,并非用于限定本发明的保护范围。