平码五不中公式规律
  • / 21
  • 下载费用:30 金币  

数据队列出队管控方法和装置.pdf

关 键 ?#21097;?/dt>
数据 队列 出队管控 方法 装置
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
摘要
申请专利号:

CN201310003565.0

申请日:

2013.01.06

公开号:

CN103914341A

公开日:

2014.07.09

当前法律状态:

授权

有效性:

有权

法?#19978;?#24773;: 授权|||实质审查的生效IPC(主分类):G06F 9/48申请日:20130106|||公开
IPC分类号: G06F9/48; G06F12/08 主分类号: G06F9/48
申请人: 中兴通讯股份有限公司
发明人: 赵姣
地址: 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部
优?#28909;ǎ?/td>
专利代理机构: 深圳市世纪恒程知识产权代理事务所 44287 代理人: 胡海国
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

CN201310003565.0

授权公告号:

||||||

法律状态公告日:

2018.09.25|||2015.11.18|||2014.07.09

法律状态类?#20572;?/td>

授权|||实质审查的生效|||公开

摘要

本发明公开了一种数据队列出队管控方法和装置,其方法包括:接收队列调度指令,获取队列首地址和出队子指针,组合成绝对地址;按照绝对地址的顺序,获取出队节点的子节点信息,写入重组队列;按照奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表;监测开始标志,按照开始标?#38236;?#36798;?#21335;?#21518;顺序,依次将数据报文的调度序号写入排序队列中;按照调度序号顺序,依次将重组队列中出队节点的子节点信息取出,指向对应的数据报文存储位置,发送数据报文出队指令。本发明使用“节点汇聚”方式实现单链表队列管控,通过单链表实现大规模队列管控,保证线速,节省片外QDR存储器存储空间及管脚,结构简单?#36164;?#29616;。

权利要求书

权利要求书
1.  一种数据队列出队管控方法,其特征在于,包括步骤:
接收队列调度指令,获取队列描述符中的队列首地址和所述队列的出队链表中出队节点的出队子指针,组合成出队节点的绝对地址;
按照当前链表中出队节点的绝对地址的顺序,获取当前链表中出队节点的子节点信息,写入重组队列,重新组合为数据报文;按照当前链表中出队节点的奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表,并从奇偶链表中预取下次出队节点的报文尾标识;
监测所述重组队列中出队节点的子节点信息中包括的数据报文的开始标志,按照所述开始标?#38236;?#36798;?#21335;?#21518;顺序,依次将数据报文的调度序号写入排序队列中;
按照所述排序队列中出队数据报文的调度序号顺序,依次将重组队列中存储的出队节点的子节点信息取出,指向对应的数据报文存储位置,发送数据报文出队指令。

2.  根据权利要求1所述的数据队列出队管控方法,其特征在于,所述按照当前链表中出队节点的绝对地址的顺序,获取当前链表中出队节点的子节点信息,写入重组队列,重新组合为数据报文;按照当前链表中出队节点的奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表,并从奇偶链表中预取下次出队节点的报文尾标识的步骤具体包括:
按照当前链表中出队节点的绝对地址的奇偶顺序,将当前链表中出队节点划分为奇数节点和偶数节点;
根据当前奇数节点的绝对地址,获取当前奇数节点的子节点信息,写入重组队列;预?#26009;?#19968;奇数节点的子节点信息,写入奇链表;
根据当前偶数节点的绝对地址,获取当前偶数节点的子节点信息,写入重组队列;预?#26009;?#19968;偶数节点的子节点信息,写入偶链表;
根据下一奇数节点的绝对地址,获取下一奇数节点的子节点信息,写入重组队列;预读再下一奇数节点的子节点信息,写入奇链表;
根据下一偶数节点的绝对地址,获取下一偶数节点的子节点信息,写入 重组队列;预读再下一偶数节点的子节点信息,写入偶链表;
?#28304;?#31867;推,直至当前链表中所有节点的子节点信息均写入重组队列。

3.  根据权利要求1所述的数据队列出队管控方法,其特征在于,所述监测所述重组队列中出队节点的子节点信息中包括的数据报文的开始标志,按照所述开始标?#38236;?#36798;?#21335;?#21518;顺序,依次将数据报文的调度序号写入排序队列中的步骤具体包括:
监测所述重组队列中出队节点的子节点信息中包括的数据报文的开始标志和所述开始标?#38236;?#36798;?#21335;?#21518;顺序;
将首个到达的开始标志对应的节点的调度列号写入排序队列中;
依次将与所述首个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
在当前写入节点的子节点信息中包括报文尾标识?#20445;?#19979;一个到达的节点作为开始标志对应的节点,将下一个到达的节点的调度序号写入排序队列中;
依次将与所述下一个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
?#28304;?#31867;推,直至所有重组队列的所有数据报文的调度序号均写入排序队列中。

4.  根据权利要求1至3?#25105;?#39033;所述的数据队列出队管控方法,其特征在于,所述按照当前链表中出队节点的奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表,并从奇偶链表中预取下次出队节点的报文尾标识的步骤之后还包括:
在当前写入节点的子节点信息中包括报文尾标识?#20445;?#21028;断所述队列在出队后是否为空;
当所述队列在出队后为非空?#20445;?#25552;取当前写入节点的子节点信息中包括?#21335;?#19968;链表首节点的地址,预?#26009;?#19968;链表首节点的子节点信息;
按照下一链表中出队节点的绝对地址的奇偶顺序,交叉获取下一链表中出队节点的子节点信息,写入重组队列。

5.  根据权利要求4所述的数据队列出队管控方法,其特征在于,所述在当前写入节点的子节点信息中包括报文尾标识?#20445;?#21028;断所述队列在出队后是否为空的步骤之后还包括:
当所述队列在出队后为空?#20445;?#37322;放队列调度指令,停止写入重组队列。

6.  一种数据队列出队管控装置,其特征在于,包括:
地址生成模块,用于接收队列调度指令,获取队列描述符中的队列首地址和所述队列的出队链表中出队节点的出队子指针,组合成出队节点的绝对地址;
重组队列模块,用于按照当前链表中出队节点的绝对地址的顺序,获取当前链表中出队节点的子节点信息,写入重组队列,重新组合为数据报文;
预读队列模块,用于按照出队节点的奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表,并从奇偶链表中预取下次出队节点的报文尾标识;
排序队列模块,用于监测所述重组队列中出队节点的子节点信息中包括的数据报文的开始标志,按照所述开始标?#38236;?#36798;?#21335;?#21518;顺序,依次将数据报文的调度序号写入排序队列中;
出队指令模块,用于按照所述排序队列中出队数据报文的调度序号,依次将重组队列中存储的出队节点的子节点信息取出,指向对应的数据报文存储位置,发送数据报文出队指令。

7.  根据权利要求6所述的数据队列出队管控装置,其特征在于,所述重组队列模块具体用于:
按照当前链表中出队节点的绝对地址的奇偶顺序,将当前链表中出队节点划分为奇数节点和偶数节点;
根据当前奇数节点的绝对地址,获取当前奇数节点的子节点信息,写入重组队列;预?#26009;?#19968;奇数节点的子节点信息,写入奇链表;
根据当前偶数节点的绝对地址,获取当前偶数节点的子节点信息,写入重组队列;预?#26009;?#19968;偶数节点的子节点信息,写入偶链表;
根据下一奇数节点的绝对地址,获取下一奇数节点的子节点信息,写入 重组队列;预读再下一奇数节点的子节点信息,写入奇链表;
根据下一偶数节点的绝对地址,获取下一偶数节点的子节点信息,写入重组队列;预读再下一偶数节点的子节点信息,写入偶链表;
?#28304;?#31867;推,直至当前链表中所有节点的子节点信息均写入重组队列。

8.  根据权利要求6所述的数据队列出队管控装置,其特征在于,所述排序队列模块具体用于:
监测所述重组队列中出队节点的子节点信息中包括的数据报文的开始标志和所述开始标?#38236;?#36798;?#21335;?#21518;顺序;
将首个到达的开始标志对应的节点的调度列号写入排序队列中;
依次将与所述首个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
在当前写入节点的子节点信息中包括报文尾标识?#20445;?#19979;一个到达的节点作为开始标志对应的节点,将下一个到达的节点的调度序号写入排序队列中;
依次将与所述下一个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
?#28304;?#31867;推,直至所有重组队列的所有数据报文的调度序号均写入排序队列中。

9.  根据权利要求6至8?#25105;?#39033;所述的数据队列出队管控装置,其特征在于,所述重组队列模块还用于:
在当前写入节点的子节点信息中包括报文尾标识?#20445;?#21028;断所述队列在出队后是否为空;
当所述队列在出队后为非空?#20445;?#25552;取当前写入节点的子节点信息中包括?#21335;?#19968;链表首节点的地址,预?#26009;?#19968;链表首节点的子节点信息;
按照下一链表中出队节点的绝对地址的奇偶顺序,交叉获取下一链表中出队节点的子节点信息,写入重组队列。

10.  根据权利要求9所述的数据队列出队管控装置,其特征在于,所述重组队列模块还用于:
当所述队列在出队后为空?#20445;?#37322;放队列调度指令,停止写入重组队列的步骤。

说明书

说明书数据队列出队管控方法和装置
技术领域
本发明涉及到数据处理技术领域,特别涉及到数据队列出队管控方法和装置。
背景技术
随着网络业务和容量的不断增长,对于流量管控芯片的处理能力要求越来越高。流量管控芯片实现大规模队列管控?#20445;?#27604;较常见的是采用链表的方式,将数据报文存储于片外DDR(Double Data Rate)存储器中,数据报文对应的索引地址以队列的形式,存储在片外QDR(Quad Data Rate,4倍数据倍率)存储器中,在出队操作?#20445;?#33719;取索引地址,将索引地址对应的数据报文读出,完成数据报文出队。
队列的管控主要是对报文存储的管控,包括入队和出队两步,队列按照一定的原则,将属于同一队列的数据报文划分为一个或者多个节点,存储在缓存空间里,多个节点组成一个汇聚节点,多个汇聚节点组成一条队列链表;队列与队列之间逻辑相互独立,每一队列维护一条队列链表。在入队和出队过程中,缓存根据调度指令给出的?#21015;?#21629;令,?#36816;?#24341;地址和数据报文进?#20889;?#20648;和读出,实现数据流的管控。
队列管控有两种方式,一是为每一队列分配固定的存储空间,二是所有的队列共享同一存储空间。在大规模队列的情况下,采用固定分配存储空间的方?#20132;?#36896;成每组队列分配的存储空间很小,对突发流量的吸收能力比?#20808;酰?#21516;时存储空间的浪费比较严重。因此在大规模的队列管控中基本都采用共享存储空间的方式。现有的共享存储空间的队列管控技术主要采用单链表和多链表的实现方式,实现队列管控中链表的存储。如果采用传统的单链表结构,片外QDR存储器的?#21015;?#24310;时导致单队列出队不能满足出入队速率要求,同时会大?#31354;加肧RAM(Static Random Access Memory,静止随机存储器)资源,使用FPGA(Field-Programmable Gate Array,现场可编程门阵列)实现?#20445;?无论对于器件管脚分配还是布局布线都是巨大的挑战;如果采用多链表结构,依然存在大量SRAM资源被?#21152;?#30340;缺点,并且使用FPGA实现?#20445;?#22120;件管脚分配和布局布线比单链表方案的?#35759;?#26356;大。同?#20445;?#37319;用单链表实现队列管控的方式主要是将队列中每个节点的地址指针存储在链表中,需要读出一个节点之后才能得到下一个节点的地址,考虑到QDR存储器的读延?#20445;?#19981;能满足出队处理的速率要求。
发明内容
本发明的主要目的为提供一种提高大规模队列出队速率的数据队列出队管控方法和装置。
本发明提出一种数据队列出队管控方法,包括步骤:
接收队列调度指令,获取队列描述符中的队列首地址和所述队列的出队链表中出队节点的出队子指针,组合成出队节点的绝对地址;
按照当前链表中出队节点的绝对地址的顺序,获取当前链表中出队节点的子节点信息,写入重组队列,重新组合为数据报文;按照当前链表中出队节点的奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表,并从奇偶链表中预取下次出队节点的报文尾标识;
监测所述重组队列中出队节点的子节点信息中包括的数据报文的开始标志,按照所述开始标?#38236;?#36798;?#21335;?#21518;顺序,依次将数据报文的调度序号写入排序队列中;
按照所述排序队列中出队数据报文的调度序号顺序,依次将重组队列中存储的出队节点的子节点信息取出,指向对应的数据报文存储位置,发送数据报文出队指令。
优选地,所述按照当前链表中出队节点的绝对地址的顺序,获取当前链表中出队节点的子节点信息,写入重组队列,重新组合为数据报文;按照当前链表中出队节点的奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表,并从奇偶链表中预取下次出队节点的报文尾标识的步骤具体包括:
按照当前链表中出队节点的绝对地址的奇偶顺序,将当前链表中出队节点划分为奇数节点和偶数节点;
根据当前奇数节点的绝对地址,获取当前奇数节点的子节点信息,写入 重组队列;预?#26009;?#19968;奇数节点的子节点信息,写入奇链表;
根据当前偶数节点的绝对地址,获取当前偶数节点的子节点信息,写入重组队列;预?#26009;?#19968;偶数节点的子节点信息,写入偶链表;
根据下一奇数节点的绝对地址,获取下一奇数节点的子节点信息,写入重组队列;预读再下一奇数节点的子节点信息,写入奇链表;
根据下一偶数节点的绝对地址,获取下一偶数节点的子节点信息,写入重组队列;预读再下一偶数节点的子节点信息,写入偶链表;
?#28304;?#31867;推,直至当前链表中所有节点的子节点信息均写入重组队列。
优选地,所述监测所述重组队列中出队节点的子节点信息中包括的数据报文的开始标志,按照所述开始标?#38236;?#36798;?#21335;?#21518;顺序,依次将数据报文的调度序号写入排序队列中的步骤具体包括:
监测所述重组队列中出队节点的子节点信息中包括的数据报文的开始标志和所述开始标?#38236;?#36798;?#21335;?#21518;顺序;
将首个到达的开始标志对应的节点的调度列号写入排序队列中;
依次将与所述首个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
在当前写入节点的子节点信息中包括报文尾标识?#20445;?#19979;一个到达的节点作为开始标志对应的节点,将下一个到达的节点的调度序号写入排序队列中;
依次将与所述下一个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
?#28304;?#31867;推,直至所有重组队列的所有数据报文的调度序号均写入排序队列中。
优选地,所述按照当前链表中出队节点的奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表,并从奇偶链表中预取下次出队节点的报文尾标识的步骤之后还包括:
在当前写入节点的子节点信息中包括报文尾标识?#20445;?#21028;断所述队列在出队后是否为空;
当所述队列在出队后为非空?#20445;?#25552;取当前写入节点的子节点信息中包括?#21335;?#19968;链表首节点的地址,预?#26009;?#19968;链表首节点的子节点信息;
按照下一链表中出队节点的绝对地址的奇偶顺序,交叉获取下一链表中 出队节点的子节点信息,写入重组队列。
优选地,所述在当前写入节点的子节点信息中包括报文尾标识?#20445;?#21028;断所述队列在出队后是否为空的步骤之后还包括:
当所述队列在出队后为空?#20445;?#37322;放队列调度指令,停止写入重组队列。
本发明?#22266;?#20986;一种数据队列出队管控装置,包括:
地址生成模块,用于接收队列调度指令,获取队列描述符中的队列首地址和所述队列的出队链表中出队节点的出队子指针,组合成出队节点的绝对地址;
重组队列模块,用于按照当前链表中出队节点的绝对地址的顺序,获取当前链表中出队节点的子节点信息,写入重组队列,重新组合为数据报文;
预读队列模块,用于按照出队节点的奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表,并从奇偶链表中预取下次出队节点的报文尾标识;
排序队列模块,用于监测所述重组队列中出队节点的子节点信息中包括的数据报文的开始标志,按照所述开始标?#38236;?#36798;?#21335;?#21518;顺序,依次将数据报文的调度序号写入排序队列中;
出队指令模块,用于按照所述排序队列中出队数据报文的调度序号,依次将重组队列中存储的出队节点的子节点信息取出,指向对应的数据报文存储位置,发送数据报文出队指令。
优选地,所述重组队列模块具体用于:
按照当前链表中出队节点的绝对地址的奇偶顺序,将当前链表中出队节点划分为奇数节点和偶数节点;
根据当前奇数节点的绝对地址,获取当前奇数节点的子节点信息,写入重组队列;预?#26009;?#19968;奇数节点的子节点信息,写入奇链表;
根据当前偶数节点的绝对地址,获取当前偶数节点的子节点信息,写入重组队列;预?#26009;?#19968;偶数节点的子节点信息,写入偶链表;
根据下一奇数节点的绝对地址,获取下一奇数节点的子节点信息,写入重组队列;预读再下一奇数节点的子节点信息,写入奇链表;
根据下一偶数节点的绝对地址,获取下一偶数节点的子节点信息,写入重组队列;预读再下一偶数节点的子节点信息,写入偶链表;
?#28304;?#31867;推,直至当前链表中所有节点的子节点信息均写入重组队列。
优选地,所述排序队列模块具体用于:
监测所述重组队列中出队节点的子节点信息中包括的数据报文的开始标志和所述开始标?#38236;?#36798;?#21335;?#21518;顺序;
将首个到达的开始标志对应的节点的调度列号写入排序队列中;
依次将与所述首个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
在当前写入节点的子节点信息中包括报文尾标识?#20445;?#19979;一个到达的节点作为开始标志对应的节点,将下一个到达的节点的调度序号写入排序队列中;
依次将与所述下一个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
?#28304;?#31867;推,直至所有重组队列的所有数据报文的调度序号均写入排序队列中。
优选地,所述重组队列模块还用于:
在当前写入节点的子节点信息中包括报文尾标识?#20445;?#21028;断所述队列在出队后是否为空;
当所述队列在出队后为非空?#20445;?#25552;取当前写入节点的子节点信息中包括?#21335;?#19968;链表首节点的地址,预?#26009;?#19968;链表首节点的子节点信息;
按照下一链表中出队节点的绝对地址的奇偶顺序,交叉获取下一链表中出队节点的子节点信息,写入重组队列。
优选地,所述重组队列模块还用于:
当所述队列在出队后为空?#20445;?#37322;放队列调度指令,停止写入重组队列的步骤。
本发明为?#31169;?#20915;大规模队列管控中资源和速率的瓶?#20445;?#20351;用“节点汇聚”的方式实现单链表队列管控,解决节点?#21152;肧RAM资源过多而引起的管脚和布线问题,通过单链表实现大规模队列的队列管控,在保证线速的前提下,节省了外?#31185;?#22806;QDR存储器存储空间以及管脚,减轻了使用FPGA实现的流量管控的布板的复杂度。
附图说明
图1为本发明数据队列出队管控方法的第一实施例的流程图;
图2为本发明数据队列出队管控方法的第二实施例的流程图;
图3为本发明数据队列出队管控方法的第三实施例的流程图;
图4为本发明数据队列出队管控方法的第四实施例的流程图;
图5为本发明数据队列出队管控装置的结构示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1为本发明数据队列出队管控方法的第一实施例的流程图。本实施例提到的数据队列出队管控方法,包括:
步骤S10,接收队列调度指令,获取队列描述符中的队列首地址和队列的出队链表中出队节点的出队子指针,组合成出队节点的绝对地址;
本实施例的片外QDR存储器包括队列描述符片外QDR存储器、链表片外QDR存储器和子节点信息片外QDR存储器,分别存储每个队列的描述符、队首指针和队尾指针、汇聚节点(即各链表中所有节点)的信息、每个节点的子节点信息,其中汇聚节点的信息包括队列链表中下一汇聚节点的首节点的报文尾标识和队列链表中下一汇聚节点的地址,子节点信息包括节点长度和节点是否为报文尾标识。出队操作接收来自队列调度的出队队列号,读取队列描述符和出队子指针,队列描述符中包括有队列首地址。每个节点的实际地址由基地址加上偏移地址组成,对于同一个链表内节点的基址是相同的,偏址为其余节点相对于同一个链表中的第一个节点的偏移量。由于一个链表内各个汇聚节点内的节点的地址是连续的,所以如果从一个链表的一个汇聚节点的第一个节点读取的话,就可以立即知道下一个节点的地址,而不需要等待第一次读操作的返回结果,汇聚节点的地址分配和释放以链表为基?#38236;?#20301;。因此,在获取每个节点的实际地址,即绝对地址,?#23665;?#38431;列的队首汇聚 节点存储的地址和队列中各节点的出队子指针组合成出队节点的绝对地址。属于同一数据报文的所有节点必须写入同一个重组队列中。
步骤S20,按照当前链表中出队节点的绝对地址的顺序,获取当前链表中出队节点的子节点信息,写入重组队列,重新组合为数据报文;按照当前链表中出队节点的奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表,并从奇偶链表中预取下次出队节点的报文尾标识;
读取子节点信息片外QDR存储器,根据出队子指针的奇偶属性,将当前链表分为奇链表和偶链表,交叉读取奇链表和偶链表中各子节点信息,在获取奇链表的子节点信息?#20445;?#39044;读偶链表的节点地址,在获取偶链表的子节点信息?#20445;?#39044;读奇链表的节点地址,通过双链表交叉操作,有效提高各节点的子节点信息出队效?#30465;?#22855;偶链表中保存的数据报文起止信息及时反馈给调度侧,保证调度侧及时切换调度队列,满足调度侧?#21335;?#36895;要求。
步骤S30,监测重组队列中出队节点的子节点信息中包括的数据报文的开始标志,按照开始标?#38236;?#36798;?#21335;?#21518;顺序,依次将数据报文的调度序号写入排序队列中;
由于队列调度交叉出队,属于同一个数据报文的节点并不是连续的,为了避免同一个数据报文的节点不能连续地给出出队命令的问题,设计了出队命令的报文重组操作。属于同一个数据报文的节点形成的链表中,首节点包括开始标志,尾节点包括报文尾标识,按照开始标?#38236;?#36798;?#21335;?#21518;顺序,即按照同一个数据报文中首节点到达?#21335;?#21518;顺序,将同一数据报文的节点依次写入排序队列,实现报文重组操作,使属于同一个数据报文的节点连续地给出出队命令,保证发出出队命令的顺序与调度的顺序相同,避免出现出队命令的报文交错和乱序。
步骤S40,按照排序队列中出队数据报文的调度序号顺序,依次将重组队列中存储的出队节点的子节点信息取出,指向对应的数据报文存储位置,发送数据报文出队指令。
根据排序队列的顺序,将出队命令发?#36879;?#23492;存器,获取对应的数据报文,完成数据报文的出队。当排序队列中一个数据报文对应的节点的报文尾标识标志为1?#20445;?#26631;志着一个报文出队结束,启动另一个数据报文的出队。当出队的节点为尾节点,即节点包括报文尾标识?#20445;?#35835;取排序队列中下一数据报 文对应的节点,并更新队列描述符的队首指针。如果最近一次出队的节点不是尾节点,则队首指针保持不变。在链表中的一个汇聚节点出队完毕后,接收链表释放命令,检测到释放标志,释放链表中汇聚节点的地址空间,完成数据报文的出队操作。
本实施例为?#31169;?#20915;大规模队列管控中资源和速率的瓶?#20445;?#20351;用“节点汇聚”的方式实现单链表队列管控,解决节点?#21152;肧RAM资源过多而引起的管脚和布线问题,通过单链表实现大规模队列的队列管控,在保证线速的前提下,节省了外?#31185;?#22806;QDR存储器存储空间以及管脚,减轻了使用FPGA实现的流量管控的布板的复杂度。
如图2所示,图2为本发明数据队列出队管控方法的第二实施例的流程图。本实施例以图1所示实施例为基础,对写入重组队列的步骤进行详细描述,步骤S20具体包括:
步骤S21,按照当前链表中出队节点的绝对地址的奇偶顺序,将当前链表中出队节点划分为奇数节点和偶数节点;
本实施例将当前链表中各节点划分为奇数节点和偶数节点,即构成了奇链表和偶链表,在接收队列调度指令、获取队列描述符和出队指针的同?#20445;?#36824;可获取奇链表报文尾标识和偶链表报文尾标识。
步骤S22,i=1;
步骤S23,根据第i个奇数节点的绝对地址,获取第i个奇数节点的子节点信息,写入重组队列,并预读第i+1个奇数节点的子节点信息,写入奇链表;
根据当前奇数节点的绝对地址,获取当前奇数节点的子节点信息,写入重组队列;预?#26009;?#19968;奇数节点的子节点信息,写入奇链表。具体为,获取调度侧给出的出队队列号,查询奇链表,给出队列的报文起止标识,调度侧确定是否切换队列;获取当前出队队列的队列描述符和出队子指针作为地址,读出奇数节点的子节点信息,写入重组队列;预读本队列下一奇数节点的子节点信息,得到结果后写入奇链表。
步骤S24,根据第i个偶数节点的绝对地址,获取第i个偶数节点的子节点信息,写入重组队列,并预读第i+1个偶数节点的子节点信息,写入偶链表;
根据当前偶数节点的绝对地址,获取当前偶数节点的子节点信息,写入 重组队列;预?#26009;?#19968;偶数节点的子节点信息,写入偶链表。具体为,获取当前调度侧给出的出队队列号,查询偶链表,给出队列的报文起止标识,调度侧确定是否切换队列;获取当前出队队列的队列描述符和出队子指针作为地址,读出偶数节点的子节点信息,写入重组队列;预?#26009;?#19968;偶数节点的子节点信息,得到结果后写入偶链表;
步骤S25,判断当前链表中是否所有节点的子节点信息均写入重组队列;如果是,则结束步骤S20;如果否,则i加1,返回步骤S23。
如果当前链表中仍然有节点的子节点信息未写入重组队列,则获取下一奇数节点的子节点信息,写入重组队列,并预读再下一奇数节点的子节点信息;之后再获取下一偶数节点的子节点信息,写入重组队列,并预读再下一偶数节点的子节点信息。具体为,获取调度侧给出的出队队列号(与上队列号相同),查询奇链表,给出队列的报文起止标识,调度侧确定是否切换队列;获取队列描述符和出队子指针,读出下一奇数节点的子节点信息,写入重组队列;预读再下一奇数节点的子节点信息,得到结果后写入奇链表;获取调度侧给出的出队队列号(与上队列号相同),查询偶链表,给出队列的报文起止标识,调度侧确定是否切换队列;获取当前出队队列的队列描述符和出队子指针作为地址,读出下一偶数节点的子节点信息,写入重组队列;预读再下一偶数节点的子节点信息,得到结果后写入偶链表。
奇偶链表的更新在队列出队时完成,根据当前出队的节点的奇偶属性,读取下一个奇数节点或者偶数节点。在同一个汇聚节点内的节点的预读按照奇偶交叉的方式预读,出队过程中将队列属于同一数据报文的节点进行编号,分为奇数节点和偶数节点,奇数节点出队过程中,对下一个奇数节点进行预读;偶数节点出队过程中,对下一个偶数节点进行预读;预读得到的节点存储在FPGA的片内RAM中,奇链表和偶链表独立存储,与队列相对应。在得到出队队列号之后,立刻给出数据报文的出队是否完成标志,以切换调度端口队列。当汇聚节点内的最后两个节点出队?#20445;?#38656;要首先得到队列链表中下一个汇聚节点的地址,考虑到片外QDR存储器的读延时和线速要求,在入队申请新的队列链表汇聚节点地址后,将新的汇聚节点的首个奇数节点的地址写入上一链表的最后一个奇数节点的子节点信息中,新的链表的首个偶数节点的地址写入上一链表的最后一个偶数节点的子节点信息中。通过队列双链 表预读操作,有效提高?#31169;?#28857;出队的效?#30465;?
如图3所示,图3为本发明数据队列出队管控方法的第三实施例的流程图。本实施例以图1所示实施例为基础,对写入排序队列的步骤进行详细描述,步骤S30具体包括:
步骤S31,监测重组队列中出队节点的子节点信息中包括的数据报文的开始标志和开始标?#38236;?#36798;?#21335;?#21518;顺序;
由于队列调度交叉出队,属于同一个数据报文的节点并不是连续的,为了避免同一个数据报文的节点不能连续地给出出队命令的问题,设计了出队命令的报文重组操作。属于同一个数据报文的节点形成的链表中,首节点包括开始标志,尾节点包括报文尾标识,按照开始标?#38236;?#36798;?#21335;?#21518;顺序,即按照同一个数据报文中首节点到达?#21335;?#21518;顺序,将同一数据报文的节点依次写入排序队列,实现报文重组操作,使属于同一个数据报文的节点连续地给出出队命令,保证发出出队命令的顺序与调度的顺序相同,避免出现出队命令的报文交错和乱序。
步骤S32,j=1;
步骤S33,将第j个到达的开始标志对应的节点的调度列号写入排序队列中;
将首个到达的开始标志对应的节点的调度列号写入排序队列中;
步骤S34,依次将与第j个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
依次将与首个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
步骤S35,判断当前写入节点的子节点信息中是否包括报文尾标识;如果是,则执行步骤S36;如果否,则返回步骤S34;
步骤S36,判断重组队列中是否所有数据报文的调度序号均写入排序队列中;如果是,则结束步骤S30;如果否,则j加1,返回步骤S33。
如果当前数据报文已写完,则将下一个到达的开始标志对应的节点的子节点信息写入排序队列中,并依次将与下一个到达的开始标志对应的节点属于同一数据报文的节点的子节点信息写入排序队列中。
报文重组为所有队列设置一组重组队列和一个排序队列,根据线速的要求和采用的时钟,来设置重组队列的数量。例如,以10个时钟周期为一个出队时间节点,每一个出队时间节点内完成四个不同队列的出队操作为例,需要设置四个重组队列,每个队列对应一个时隙内的出队操作。为了实现报文出队保序,设置一个排序队列存储各个重组队列的开始标?#38236;?#36798;的顺序,实现队列报文的出队命令按照队列调度的顺序由重组队列中读出。重组队列的读取与线速要求的出队速率相同,以每2个周期完成一个节点的出队为例,重组队列实?#32622;?个周期读取一个队列节点,然后根据其中的报文尾标识字段决定是否继续读取本队列还是切换队列。每个队列中存储的出队命令?#21152;?#38431;列中读出,并且在得到第一个节点的内容后,确定是否读本队列?#21335;?#19968;节点还是读另外的队列节点,由于队列第三个周期才能出数据,每2个周期读出1个节点的出队命令的要求为每个队列做出预读操作,排序队列的内容也预读。四组重组队列和一组排序队列进行独立预读,存储在每个队列的预读寄存器中。每一个重组队列的预读寄存器,存储队列中第一个节点的内容,每个重组队列预读的操作是各自独立的,每一次预读寄存器内的内容被读取?#20445;?#37117;触发新的预读操作;排序队列?#27493;?#34892;预读,将下一个将要出队的队列的编号预读出来,设置一组出队信息寄存器,读取排序队列的预读寄存器的值,在出队过程中,为选择出队节点命令做出指示。本实施例通过对连续出队队列的报文重组方案,实现按照报文分割的节点调度,整报文出队。
如图4所示,图4为本发明数据队列出队管控方法的第四实施例的流程图。本实施例在图1所示实施例的基础上,增加了预?#26009;?#19968;链表的步骤,步骤S20之后还包括:
步骤S51,在当前写入节点的子节点信息中包括报文尾标识?#20445;?#21028;断队列在出队后是否为空;如果是,则执行步骤S52;如果否,则执行步骤S54;
报文尾标?#38431;?#20110;指示每个链表的尾节点是否为报文的最后一个节点(0表示不是报文尾,1代表是报文尾),以便于预出队操作。在初始化时对每一个链表预先分配好连续的空间,1个链表只接收同一个数据报文的节点。
步骤S52,提取当前写入节点的子节点信息中包括?#21335;?#19968;链表首节点的地址,预?#26009;?#19968;链表首节点的子节点信息;
步骤S53,按照下一链表中各节点的绝对地址的奇偶顺序,交叉获取下一链表中各节点的子节点信息,写入重组队列。
步骤S54,释放队列调度指令,停止写入重组队列。
出队过程中,每个链表由第一个节点出队开始,直到最后一个节点读出,链表被释放。在队列出队读空之后,队列所属的最后一个链表节点出队之后,释放队列。根据队列描述符中的队列首地址和尾地址、以及队列的出队子指针和入队子指针,判断队列出队之后是否为空,如果队列为空,发出释放本链表的命令,不再预读报文尾标识。如果队列为非空,则在队列中预?#26009;?#19968;链表的子节点信息,选择对应的节点报文尾标识信息,写入奇偶报文尾标识链表。本实施例通过队列空和将空属性的判断,完成空闲链表的维护。
如图5所示,图5为本发明数据队列出队管控装置的结构示意图。本实施例的数据队列出队管控装置,包括:
地址生成模块10,用于接收队列调度指令,获取队列描述符中的队列首地址和队列的各链表中各节点的出队子指针,组合成各节点的绝对地址;
重组队列模块20,用于按照当前链表中出队节点的绝对地址的顺序,获取当前链表中出队节点的子节点信息,写入重组队列,重新组合为数据报文;
预读队列模块30,用于按照出队节点的奇偶顺序,交叉预取下次出队节点的子节点信息,写入奇偶链表;并从奇偶链表中获取本次出队节点的报文尾标识;
排序队列模块40,用于监测重组队列中出队节点的子节点信息中包括的数据报文的开始标志,按照开始标?#38236;?#36798;?#21335;?#21518;顺序,依次将数据报文的调度序号写入排序队列中;
出队指令模块50,用于按照排序队列中出队数据报文的调度序号,依次将重组队列中存储的出队节点的子节点信息取出,指向对应的数据报文存储位置,发送数据报文出队指令。
本实施例的片外QDR存储器包括队列描述符片外QDR存储器、链表片外QDR存储器和子节点信息片外QDR存储器,分别存储每个队列的描述符、队首指针和队尾指针、汇聚节点(即各队列链表中所有节点)的信息、每个节点的子节点信息,其中汇聚节点的信息包括队列链表中下一个汇聚节点的 首节点报文尾标识和队列链表中下一汇聚节点的地址,子节点信息包括节点长度和节点是否为报文尾标识。出队操作接收来自队列调度的出队队列号,读取队列描述符和出队子指针,队列描述符中包括有队列首地址。每个节点的实际地址由基地址加上偏移地址组成,对于队列链表的同一个汇聚节点内的节点的基址是相同的,偏址为其余节点相对于同一个链表中的第一个节点的偏移量。由于一个链表内各个节点的地址是连续的,所以如果从一个汇聚节点的第一个节点读取的话,就可以立即知道下一个节点的地址,而不需要等待第一次读操作的返回结果,汇聚节点的分配和释放以链表为基?#38236;?#20301;。因此,在获取每个节点的实际地址,即绝对地址,?#23665;?#38431;列的队首报文存储的地址和队列中各节点的出队子指针组合成出队节点的绝对地址。属于同一数据报文的所有节点必须写入同一个重组队列中。读取子节点信息片外QDR存储器,根据出队子指针的奇偶属性,将当前链表分为奇链表和偶链表,交叉读取奇链表和偶链表中各子节点信息,在获取奇链表的子节点信息?#20445;?#39044;读偶链表的节点地址,在获取偶链表的子节点信息?#20445;?#39044;读奇链表的节点地址,通过双链表交叉操作,有效提高各节点的子节点信息出队效?#30465;?#22855;偶链表中保存的数据报文起止信息及时反馈给调度侧,保证调度侧及时切换调度队列,满足调度侧?#21335;?#36895;要求。由于队列调度交叉出队,属于同一个数据报文的节点并不是连续的,为了避免同一个数据报文的节点不能连续地给出出队命令的问题,设计了出队命令的报文重组操作。属于同一个数据报文的节点形成的链表中,首节点包括开始标志,尾节点包括报文尾标识,按照开始标?#38236;?#36798;?#21335;?#21518;顺序,即按照同一个数据报文中首节点到达?#21335;?#21518;顺序,将同一数据报文的节点依次写入排序队列,实现报文重组操作,使属于同一个数据报文的节点连续地给出出队命令,保证发出出队命令的顺序与调度的顺序相同,避免出现出队命令的报文交错和乱序。根据排序队列的顺序,将出队命令发?#36879;?#23492;存器,获取对应的数据报文,完成数据报文的出队。当排序队列中一个数据报文对应的节点的报文尾标识标志为1?#20445;?#26631;志着一个报文出队结束,启动另一个数据报文的出队。当出队的节点为尾节点,即节点包括报文尾标识?#20445;?#35835;取排序队列中下一数据报文对应的节点,并更新出队信息寄存器的值。如果最近一次出队的节点不是尾节点,则出队信息寄存器保持不变。在一个链表中的节点出队完毕后,接收链表释放命令,检测到释放 标志,释放链表,完成数据报文的出队操作。
本实施例为?#31169;?#20915;大规模队列管控中资源和速率的瓶?#20445;?#20351;用“节点汇聚”的方式实现单链表队列管控,解决节点?#21152;肧RAM资源过多而引起的管脚和布线问题,通过单链表实现大规模队列的队列管控,在保证线速的前提下,节省了外?#31185;?#22806;QDR存储器存储空间以及管脚,减轻了使用FPGA实现的流量管控的布板的复杂度。
本发明实施例中,重组队列模块20具体用于:
按照当前链表中出队节点的绝对地址的奇偶顺序,将当前链表中出队节点划分为奇数节点和偶数节点;
根据当前奇数节点的绝对地址,获取当前奇数节点的子节点信息,写入重组队列;预?#26009;?#19968;奇数节点的子节点信息,写入奇链表;
根据当前偶数节点的绝对地址,获取当前偶数节点的子节点信息,写入重组队列;预?#26009;?#19968;偶数节点的子节点信息,写入偶链表;
根据下一奇数节点的绝对地址,获取下一奇数节点的子节点信息,写入重组队列;预读再下一奇数节点的子节点信息,写入奇链表;
根据下一偶数节点的绝对地址,获取下一偶数节点的子节点信息,写入重组队列;预读再下一偶数节点的子节点信息,写入偶链表;
?#28304;?#31867;推,直至当前链表中所有节点的子节点信息均写入重组队列。
本实施例将当前链表中各节点划分为奇数节点和偶数节点,即构成了奇链表和偶链表,在接收队列调度指令、获取队列描述符和出队指针的同?#20445;?#36824;可获取奇链表报文尾标识和偶链表报文尾标识。获取调度侧给出的出队队列号,查询奇链表,给出队列的报文起止标识,调度侧确定是否切换队列;获取当前出队队列的队列描述符和出队子指针作为地址,读出奇数节点的子节点信息,写入重组队列;预读本队列下一奇数节点的子节点信息,得到结果后写入奇链表。获取当前调度侧给出的出队队列号,查询偶链表,给出队列的报文起止标识,调度侧确定是否切换队列;获取当前出队队列的队列描述符和出队子指针作为地址,读出偶数节点的子节点信息,写入重组队列;预?#26009;?#19968;偶数节点的子节点信息,得到结果后写入偶链表;如果当前链表中仍然有节点的子节点信息未写入重组队列,则获取下一奇数节点的子节点信 息,写入重组队列,并预读再下一奇数节点的子节点信息;之后再获取下一偶数节点的子节点信息,写入重组队列,并预读再下一偶数节点的子节点信息。具体为,获取调度侧给出的出队队列号(与上队列号相同),查询奇链表,给出队列的报文起止标识,调度侧确定是否切换队列;获取队列描述符和出队子指针,读出下一奇数节点的子节点信息,写入重组队列;预读再下一奇数节点的子节点信息,得到结果后写入奇链表;获取调度侧给出的出队队列号(与上队列号相同),查询偶链表,给出队列的报文起止标识,调度侧确定是否切换队列;获取当前出队队列的队列描述符和出队子指针作为地址,读出下一偶数节点的子节点信息,写入重组队列;预读再下一偶数节点的子节点信息,得到结果后写入偶链表。奇偶链表的更新在队列出队时完成,根据当前出队的节点的奇偶属性,读取下一个奇数节点或者偶数节点。在同一个汇聚节点内的节点的预读按照奇偶交叉的方式预读,出队过程中将队列属于同一数据报文的节点进行编号,分为奇数节点和偶数节点,奇数节点出队过程中,对下一个奇数节点进行预读;偶数节点出队过程中,对下一个偶数节点进行预读;预读得到的节点存储在FPGA的片内RAM中,奇链表和偶链表独立存储,与队列相对应。在得到出队队列号之后,立刻给出数据报文的出队是否完成标志,以切换调度端口队列。当同一链表内的最后两个节点出队?#20445;?#38656;要首先得到链表节点中下一个节点,考虑到片外QDR存储器的读延时和线速要求,在入队申请新的链表?#20445;?#23558;新的链表的首个奇数节点的地址写入上一链表的最后一个奇数节点的子节点信息中,新的链表的首个偶数节点的地址写入上一链表的最后一个偶数节点的子节点信息中。通过队列双链表预读操作,有效提高?#31169;?#28857;出队的效?#30465;?
本发明实施例中,排序队列模块40具体用于:
监测重组队列中出队节点的子节点信息中包括的数据报文的开始标志和开始标?#38236;?#36798;?#21335;?#21518;顺序;
将首个到达的开始标志对应的节点的调度列号写入排序队列中;
依次将与首个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
在当前写入节点的子节点信息中包括报文尾标识?#20445;?#19979;一个到达的节点 作为开始标志对应的节点,将下一个到达的节点的调度序号写入排序队列中;
依次将与下一个到达的开始标志对应的节点属于同一重组队列的数据报文的调度序号写入排序队列中;
?#28304;?#31867;推,直至所有重组队列的所有数据报文的调度序号均写入排序队列中。
本实施例中,由于队列调度交叉出队,属于同一个数据报文的节点并不是连续的,为了避免同一个数据报文的节点不能连续地给出出队命令的问题,设计了出队命令的报文重组操作。属于同一个数据报文的节点形成的链表中,首节点包括开始标志,尾节点包括报文尾标识,按照开始标?#38236;?#36798;?#21335;?#21518;顺序,即按照同一个数据报文中首节点到达?#21335;?#21518;顺序,将同一数据报文的节点依次写入排序队列,实现报文重组操作,使属于同一个数据报文的节点连续地给出出队命令,保证发出出队命令的顺序与调度的顺序相同,避免出现出队命令的报文交错和乱序。报文重组为所有队列设置一组重组队列和一个排序队列,根据线速的要求和采用的时钟,来设置重组队列的数量。例如,以10个时钟周期为一个出队时间节点,每一个出队时间节点内完成四个不同队列的出队操作为例,需要设置四个重组队列,每个队列对应一个时隙内的出队操作。为了实现报文出队保序,设置一个排序队列存储出队个重组队列的开始标?#38236;?#36798;的顺序,实现队列报文的出队命令按照队列调度的顺序由重组队列中读出。重组队列的读取与线速要求的出队速率相同,以每2个周期完成一个节点的出队为例,重组队列实?#32622;?个周期读取一个队列节点,然后根据其中的报文尾标识字段决定是否继续读取本队列还是切换队列。每个队列中存储的出队命令?#21152;?#38431;列中读出,并且在得到第一个节点的内容后,确定是否读本队列?#21335;?#19968;节点还是读另外的队列节点,由于队列第三个周期才能出数据,每2个周期读出1个节点的出队命令的要求为每个队列做出预读操作,排序队列的内容也预读。四组重组队列和一组排序队列进行独立预读,存储在每个队列的预读寄存器中。每一个重组队列的预读寄存器,存储队列中第一个节点的内容,每个重组队列预读的操作是各自独立的,每一次预读寄存器内的内容被读取?#20445;?#37117;触发新的预读操作;排序队列?#27493;?#34892;预读,将下一个将要出队的队列的编号预读出来,设置一组出队信息寄存器,读取排序队列的预读寄存器的值,在出队过程中,为选择出队节点命令做出指示。 本实施例通过对连续出队队列的报文重组方案,实现按照报文分割的节点调度,整报文出队。
本发明实施例中,重组队列模块20还用于:
在当前写入节点的子节点信息中包括报文尾标识?#20445;?#21028;断队列在出队后是否为空;
当队列在出队后为非空?#20445;?#25552;取当前写入节点的子节点信息中包括?#21335;?#19968;链表首节点的地址,预?#26009;?#19968;链表首节点的子节点信息;
按照下一链表中各节点的绝对地址的奇偶顺序,交叉获取下一链表中各节点的子节点信息,写入重组队列。
本发明实施例中,重组队列模块20还用于:
当队列在出队后为空?#20445;?#37322;放队列调度指令,停止写入重组队列的步骤。
本实施例报文尾标?#38431;?#20110;指示每个链表的尾节点是否为报文的最后一个节点(0表示不是报文尾,1代表是报文尾),以便于预出队操作。在初始化时对每一个链表预先分配好连续的空间,1个链表只接收同一个数据报文的节点。出队过程中,每个链表由第一个节点出队开始,直到最后一个节点读出,链表被释放。在队列出队读空之后,队列所属的最后一个链表节点出队之后,释放队列。根据队列描述符中的队列首地址和尾地址、以及队列的出队子指针和入队子指针,判断队列出队之后是否为空,如果队列为空,发出释放本链表的命令,不再预读报文尾标识。如果队列为非空,则在队列中预?#26009;?#19968;链表的子节点信息,选择对应的节点报文尾标识信息,写入奇偶报文尾标识链表。本实施例通过队列空和将空属性的判断,完成空闲链表的维护。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利?#27573;В?#20961;是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护?#27573;?#20869;。

关于本文
本文标题:数据队列出队管控方法和装置.pdf
链接地址:http://www.pqiex.tw/p-6115571.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
平码五不中公式规律 河南十一选五开奖结果走势图表 36棋牌新神兽 中国福利彩票开奖 北京28pc走势查询 北京十一选五开奖结果 北京11选5走势图表 建设银行股票行情 吉林十一选五遗漏号码 排列5自动选号工具 极速飞艇开奖走势