CN101635682B - 一种存储管理的方法和系统 - Google Patents
一种存储管理的方法和系统 Download PDFInfo
- Publication number
- CN101635682B CN101635682B CN2009101619018A CN200910161901A CN101635682B CN 101635682 B CN101635682 B CN 101635682B CN 2009101619018 A CN2009101619018 A CN 2009101619018A CN 200910161901 A CN200910161901 A CN 200910161901A CN 101635682 B CN101635682 B CN 101635682B
- Authority
- CN
- China
- Prior art keywords
- chained list
- chunk
- block
- message
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9047—Buffering arrangements including multiple buffers, e.g. buffer pools
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9015—Buffering arrangements for supporting a linked list
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种存储管理方法,包括:报文入队时建立n条链表,保存该n条链表的首节点和尾节点,每条链表包括若干个组块,每个组块内包含若干个区块,同一组块内其各区块的基地址相同,其相邻区块偏移地址相差一指定值;报文出队时,依次使用0号链表至n-1号链表的首个组块;然后依次使用0号链表至n-1号链表的下一组块;依此类推,直到报文结束;使用每个组块时,依次使用该组块中的每个区块,根据当前使用的区块的偏移地址加上指定值得到下一区块的偏移地址;使用完每个组块时,使用该组块中区块的基地址得到下一组块的基地址。本发明还提供了一种存储管理系统。本发明通过加大链表使用间隔,实现了每个周期处理一个链表节点的要求。
Description
技术领域
本发明涉及数据通信技术中分组转发设备的存储管理方法,特别是涉及一种高速路由器流量管理芯片存储管理方法和系统。
背景技术
随着网络容量与业务不断地快速增长,分组转发设备,特别是路由器的接口速度迅速增加。为了实现报文的高速转发处理,一般在路由器内部采用专门的流量管理芯片完成对高速数据流的管理,将报文缓存后输出。
对于高端路由器等设备而言,一个基本的要求是能缓存200ms线速的报文数据,40Gbps环境下,则至少拥有8Gb的存储能力。对于如此大的存储容量,一般采用在流量管理芯片外挂存储芯片存储数据,在流量管理芯片内部采用链表结构进行管理。以链表的每个节点对应每个报文或分片的存储空间,预先记录链表首尾节点,对于链表除首尾节点之外的其他节点可以根据数量的多少存储在流量管理芯片内部或片外专门的存储器中。
为了能够应用到40Gbps的网络环境,流量管理芯片必须能够线速处理OC-768速度等级上的IP包。在OC-768速度等级上,典型的IP包长与IP包转发率之间的关系如图1。
因此,为了满足要求,芯片需提供100MPPS的分组处理能力。在100MHz的系统时钟下,100MPPS的分组处理能力,对应为每个周期应处理一个链表节点,然后利用该链表节点访问数据存储区。由于链表结构的固有特性,必须要以链表的当前节点作为依据去读取链表的下一个节点,在得到下一个节点之前,链表是无法继续有效进行工作的,而片内和片外的存储器都存在读取延迟(读取延迟指发起读操作到真正获得所要读取内容,存在时间间隔),片内存储器一般会有1-2个周期读取延迟,而片外存储器延迟更长。因为读取延迟的存在,普通的链表结构无法做到流水操作,也就无法满足每个周期 处理一个链表节点要求。
普通单链表结构如图2所示,A0、A1、......、Dm、......为链表节点,每个链表节点指向一块数据存储空间,在硬件实现中,预先记录链表的首尾节点内容,由于链表节点数量巨大,其他节点放入存储器保存。在同一队列的数据报文连续出列时,需要连续获取链表节点,保证报文数据的持续出队。访问链表时,由当前节点作为存储器的地址,读取链表的下一节点,然后再由读取到的链表节点作为存储器的读地址,继续去读下一节点。由于硬件存储器的固有读延迟,由当前节点作为读地址读取下一节点,到真正读取到该地址存储器的内容,需要若干个时钟周期,这一段时间内链表是无法有效使用的,因为必须使用读到的内容作为地址继续读取,才能使流水线持续工作。这样在实际高速、大容量网络环境下是无法满足需求的。
申请号200410010495.2的中国专利《具有链表处理器的存储管理系统》,提出了适合于处理链表数据文件的一个存储器管理系统(1800)。该系统具有多个低容量高速存储器(1803)和一个低速高容量的大容量存储器(1806)。一个访问流量调节器(1801)生成请求以通过存储器读写链表文件。头部和尾部缓冲区以及链表的任何中间部分缓冲区,都被写入高速存储器。中间部分缓冲区立即从高速存储器被传输到上述大容量存储器,同时将链表的头缓冲区和尾缓冲区留在高速存储器中。在读操作中,从高速存储器中读出头和尾部缓冲区。将中间部分缓冲区从大容量存储器传输到上述高速存储器,并接着从该高速存储器中读出。该专利对于高速、大容量存储结构进行提出了一种方案,使用了链表,但对于链表的管理方法并没有具体涉及。
申请号200710038679.3的中国专利《一种快速检索数据的链表实现方法》提出了一种快速检索数据的链表实现方法,将链表中的每一个节点的数据项都指向一个数组空间,在初始化时指定节点的数据项指向数组的类型;在初始化时指定或默认每一个节点的数据项指向的数组的元素个数并设定每个元素的字节数,数据项指向的数组中的每个元素都具备一个唯一的索引号;链表可以为单向链表或双向链表;数组可以是动态分配的数组或指定的数组,整个链表中的数据为排序存放。该专利提出了一种链表结构,但没有解决高 带宽、大容量环境下的硬件实现高速存储管理所遇到的难点。
由此可以看出,现有的技术并没有很好的解决上面提到的采用硬件实现高速、大容量存储管理所遇到的问题。
发明内容
本发明要解决的技术问题是提供一种便于硬件芯片实现的,适应高速、大容量存储管理的方法和系统。
为了解决上述问题,本发明提供了一种存储管理方法,包括:
报文入队时,为所述报文建立n条链表,依次称为0号链表至n-1号链表,所述n不小于2,保存所述n条链表的首节点和尾节点,所述n条链表中每条链表包括若干个组块,每个组块内包含若干个区块,每个区块对应一个节点,同一组块内各区块的地址为基地址加偏移地址,同一组块内其各区块的基地址相同,其相邻区块偏移地址相差一指定值;
报文出队时,从0号链表开始,依次使用0号链表至n-1号链表的首个组块;然后依次使用0号链表至n-1号链表的下一组块;依此类推,直到报文结束;
其中,使用每个组块的方法为:从该组块的首个区块开始,依次使用该组块中的每个区块,其中,根据当前使用的区块的偏移地址加上所述指定值得到下一区块的偏移地址;每使用完一个组块时,使用该组块中区块的基地址得到该组块所在链表中下一组块的基地址。
进一步地,上述方法还可具有以下特点,为所述n条链表建立链表出队活动标志和链表空标志,为每个节点建立包尾标志,报文出队时,根据链表出队活动标志判断当前要使用的链表,根据链表空标志判断链表是否为空,根据包尾标志判断是否到达报文尾节点,使用完i号链表的某一组块时,将i号链表的链表出队活动标志设置为非活动,将i+1号链表的链表出队活动标志设置为活动,i=0,...,n-2;当链表的首节点等于尾节点时,将该链表的链表空标志设置为空。
进一步地,上述方法还可具有以下特点,所述n条链表中,每个链表中每个组块包含的区块个数相同。
进一步地,上述方法还可具有以下特点,所述n条链表的组块中,同一组块内相邻区块的偏移地址相差1,每个组块的首个区块的偏移地址为0,使用完每个组块时,使用该组块中首个区块的基地址得到该组块所在链表中下一组块的基地址。
进一步地,上述方法还可具有以下特点,报文入队时,按如下方式建立n条链表:
根据报文长度申请可用的组块,将第一个申请的组块分给0号链表,第二个申请的组块分给1号链表,依此类推,将第n个申请的组块分给n-1号链表,如果报文未结束,将第n+1个申请的组块分给0号链表,将第n+2个申请的组块分给1号链表,依此类推,直到报文结束;申请的组块数目由入队报文的总大小决定;每个链表的第一个组块的首个区块为该链表的首节点,每个链表的最后一个组块中使用到的最后一个区块为该链表的尾节点。
本发明还提供一种存储管理系统,包括报文入队管理模块和报文出队管理模块,其中:
所述报文入队管理模块,用于在报文入队时,为所述报文建立n条链表,依次称为0号链表至n-1号链表,保存所述n条链表的首节点和尾节点,所述n条链表中每条链表包括若干个组块,每个组块内包含若干个区块,每个区块对应一个节点,同一组块内各区块的地址为基地址加偏移地址,同一组块内其各区块的基地址相同,其相邻区块偏移地址相差一指定值,所述n不小于2;
所述报文出队管理模块,用于在报文出队时,从0号链表开始,依次使用0号链表至n-1号链表的首个组块;然后依次使用0号链表至n-1号链表的下一组块;依此类推,直到报文结束;其中,使用每个组块的方法为:从该组块的首个区块开始,依次使用该组块中的每个区块,其中,根据当前使用的区块的偏移地址加上所述指定值得到下一区块的偏移地址;使用完每个组块时,使用该组块中区块的基地址得到该组块所在链表中下一组块的基地 址。
进一步地,上述系统还可具有以下特点,所述报文入队管理模块还用于为所述n条链表建立链表出队活动标志和链表空标志,为每个节点建立包尾标志,所述报文出队管理模块,还用于在报文出队时,根据所述链表出队活动标志判断当前要使用的链表,根据链表空标志判断链表是否为空,根据包尾标志判断是否到达报文尾节点,使用完i号链表的某一组块时,将i号链表的链表出队活动标志设置为非活动,将i+1号链表的链表出队活动标志设置为活动,i=0,...,n-2;当链表的首节点等于尾节点时,将该链表的链表空标志设置为空。
进一步地,上述系统还可具有以下特点,所述报文入队管理模块建立的所述n条链表中每个链表中每个组块包含的区块个数相同。
进一步地,上述系统还可具有以下特点,所述报文入队管理模块建立的所述n条链表的组块中,同一组块内相邻区块的偏移地址相差1,每个组块的首个区块的偏移地址为0;所述报文出队管理模块在使用完每个组块时,使用该组块中首个区块的基地址得到该组块所在链表中下一组块的基地址。
进一步地,上述系统还可具有以下特点,所述报文入队管理模块用于在报文入队时,按如下方式建立n条链表:
根据报文长度申请可用的组块,将第一个申请的组块分给0号链表,第二个申请的组块分给1号链表,依此类推,将第n个申请的组块分给n-1号链表,如果报文未结束,将第n+1个申请的组块分给0号链表,将第n+2个申请的组块分给1号链表,依此类推,直到报文结束;申请的组块数目由入队报文的总大小决定;每个链表的第一个组块的首个区块为该链表的首节点,每个链表的最后一个组块中使用的最后一个区块为该链表的尾节点。
本发明提供的一种硬件易于实现的高速、大容量存储管理方法和系统,采用多链表管理数据存储空间,同时若干个相邻的链表节点汇聚成Chunk,使得每条链表的使用间隔加大,隐藏了硬件存储器的读取延迟,同时方便管理。
附图说明
图1是OC-768速度等级上,典型的IP包长与IP包转发率的关系示意图;
图2是现有单链表结构示意图;
图3时本发明存储管理方法流程图;
图4是本发明基本应用系统模型;
图5是本发明多链表和节点汇聚使用流程图;
图6是本发明n=2、m=3时多链表和节点汇聚结构示意图;
图7是本发明多链表和节点汇聚使用示意图。
具体实施方式
本发明的核心思想是,为报文建立多个链表,每个链表包含若干个组块(Chunk),每个组块包含若干个区块(Block),block即节点,每个Chunk内各Block地址连续,出队时,轮流使用各个链表的组块,并且在使用完一个组块时,读取该组块所在链表的下一组块的地址,从而在下一次使用该链表时,已经从存储器中读出该组块的地址,可以直接使用该组块,避免了现有技术中由于存储器读取延迟而导致无法满足每个周期处理一个链表节点要求。
本发明提供一种存储管理方法,如图3所示,包括:
步骤310,报文入队时,为所述报文建立n条链表,依次称为0号链表至n-1号链表,n不小于2,该n条链表中每条链表包括若干个Chunk,每个组块包含若干个Block,每个Block对应一个节点,同一Chunk内的Block地址为基地址加偏移地址,同一Chunk内其各Block的基地址相同,其相邻Block偏移地址相差一指定值;保存该n条链表的首节点和尾节点。
其中,每个Chunk内包含的Block数可以相同或不同,同一Chunk内各Block的偏移地址可以相差X,X事先给定。
一种实现方式是,每个Chunk所包含的Block个数相同,为m+1,同一 Chunk内的Block地址是连续的,即X=1,所在地址表示为基地址+偏移地址,同一Chunk内的每个Block的基地址相同,实际上基地址也就是每个Chunk的地址。
具体建立n条链表的方法为:当某一队列有报文入队时,根据报文长度申请空闲链表,即申请可用的Chunk,第一个申请的Chunk分给0号链表,第二个申请的Chunk分给1号链表,依此类推,前n个Chunk的每个首Block节点记录为该队列n条链表的首指针(即首节点),至于申请的Chunk数目由入队报文的总大小决定。同时,记录该队列的n条链表的尾指针(即尾节点),为每条链表最后一个Chunk中使用到的最后一个Block节点,同样也要记录链表活动标志和包尾标志。其他队列入队时,也进行相同处理,为每个队列建立自己的n条链表。
步骤320,报文出队时,从0号链表开始,依次使用0号链表至n-1号链表的首个组块;然后依次使用0号链表至n-1号链表的下一组块;依此类推,直到报文结束。
其中,使用每个组块的方法为:从该组块的首个区块开始,依次使用该组块中的每个区块,其中,根据当前使用的区块的偏移地址加上所述指定值得到下一区块的偏移地址;使用完每个组块时,使用该组块中区块的基地址得到该组块所在链表中下一组块的基地址。
具体的说,首先使用0号链表的首个组块,使用完0号链表的首个组块后,使用1号链表的首个组块,依次类推,直到使用完n-1号链表的首个组块;使用完n-1号链表的首个组块后,使用0号链表的下一组块;使用完0号链表的下一组块时,使用1号链表的下一组块;依次类推,直到报文结束。
当各Chunk均包含m+1个Block,且同一Chunk内各节点的地址连续时,报文出队时首先使用0号链表的首节点,即0号Chunk中的0号Block。然后直接将节点地址中的偏移地址直接增加1,就可得到链表的下一节点,即0号Chunk中的1号Block。当使用到编号为m的Block时用0号链表的首节点的基地址读取0号链表的下一基地址,作为0号链表新的首节点。当0号链表读取下一Chunk地址时,更新标志位,同时使用1号链表的首节点,并依次类推。当再次轮到使用0号链表时,0号链表新的首节点已经从存储器 中读出,更新完毕,可以使用。
这样保证了链表可以每个周期都正常工作,直到进行到报文尾部,结束一轮出队操作。
报文入队时,还为所述n条链表建立链表入队活动标志,链表出队活动标志和链表空标志,为每个节点建立包尾标志,报文出队时,根据链表出队活动标志判断当前要使用的链表,根据链表空标志判断链表是否为空,根据包尾标志判断是否到达报文尾节点,使用完i号链表的某一组块时,将i号链表的链表出队活动标志设置为非活动,将i+1号链表的链表出队活动标志设置为活动,i=0,...,n-2;当链表的首节点等于尾节点时,将该链表的链表空标志设置为空。
本发明基本应用系统模型如图4所示,包括队列调度系统、队列缓存管理系统、报文数据存储器和链表节点存储器,队列调度系统用于发起队列调度请求至队列缓存管理系统,报文数据存储器用于存储报文数据,链表节点存储器用于存储链表节点信息,本发明中,主要涉及队列缓存管理系统,该队列缓存管理系统包括报文入队管理模块和报文出队管理模块,其中:
报文入队管理模块,用于在报文入队时,为所述报文建立n条链表,依次称为0号链表至n-1号链表,保存所述n条链表的首节点和尾节点,所述n条链表中每条链表包括若干个组块,每个组块内包含若干个区块,每个区块对应一个节点,同一组块内各区块的地址为基地址加偏移地址,同一组块内其各区块的基地址相同,其相邻区块偏移地址相差一指定值,所述n不小于2;
其中,报文入队管理模块具体按如下方式建立n条链表:
根据报文长度申请可用的组块,将第一个申请的组块分给0号链表,第二个申请的组块分给1号链表,依此类推,将第n个申请的组块分给n-1号链表,如果报文未结束,将第n+1个申请的组块分给0号链表,将第n+2个申请的组块分给1号链表,依此类推,直到报文结束;申请的组块数目由入队报文的总大小决定;每个链表的第一个组块的首个区块为该链表的首节点, 每个链表的最后一个组块中使用到的最后一个区块为该链表的尾节点。
报文出队管理模块,用于在报文出队时,从0号链表开始,依次使用0号链表至n-1号链表的首个组块;然后依次使用0号链表至n-1号链表的下一组块;依此类推,直到报文结束;其中,使用每个组块的方法为:从该组块的首个区块开始,依次使用该组块中的每个区块,其中,根据当前使用的区块的偏移地址加上所述指定值得到下一区块的偏移地址;使用完每个组块时,使用该组块中区块的基地址得到该组块所在链表中下一组块的基地址。
进一步的,所述报文入队管理模块还用于为所述n条链表建立链表活动标志(包括链表入队活动标志和链表出队活动标志,链表入队活动标志指示报文该入哪个链表,链表出队活动标志指示当前出队该使用哪个链表)和链表空标志,为每个节点建立包尾标志,报文出队管理模块使用并维护这些标志。报文出队管理模块在报文出队时,根据链表出队活动标志判断当前要使用的链表,根据链表空标志判断链表是否为空,根据包尾标志判断是否到达报文尾节点,使用完i号链表的某一组块时,将i号链表的链表出队活动标志设置为非活动,将i+1号链表的链表出队活动标志设置为活动,i=0,...,n-2;当链表的首节点等于尾节点时,将该链表的链表空标志设置为空。
所述报文入队管理模块建立的所述n条链表中每个链表中每个组块包含的区块个数相同,每个链表的同一组块内相邻区块的偏移地址相差1,每个组块的首个区块的偏移地址为0。所述报文出队管理模块在使用完每个组块时,使用该组块中首个区块的基地址得到该组块所在链表中下一组块的基地址,也可以使用该组块中其他区块的基地址得到该组块所在链表中下一组块的基地址,具体使用哪个区块可以事先约定。
下面结合图5的流程,说明本发明方法在存储管理中的详细工作步骤。
对应报文数据存储空间,建立多链表结构,链表个数为n,链表节点对应报文或分片的存储空间,每个链表都有各自的首尾节点,同时设置标志位,为每个链表设置链表活动标志LinkActFlag(包括链表入队活动标志LinkWActFlag和链表出队活动标志LinkRActFlag)和链表空标志 LinkEmptyFlag,为每个节点设置包尾标志PktEopFlag,用来确定当前应该使用的链表编号以及各个链表是否为空,以及是否到达报文的尾节点。其中,每个Chunk所包含的Block个数为(m+1)。同一Chunk内的Block地址是连续的,所在地址表示为基地址+偏移地址,每个Block的基地址相同。
队列缓存管理系统入队时按照多链表和节点汇聚的结构建立链表对数据缓存进行管理。报文出队时,队列缓存管理系统响应队列调度系统的出队请求,开始新一轮次的工作,具体包括:
步骤S502,队列缓存管理系统接收出队请求,并且根据多链表和节点汇聚结构中的链表出队活动标志确定当前应该使用哪一条链表。
根据链表出队活动标志确定当前应该使用哪个链表,对于n条链表,设置位宽为n的链表出队活动标志LinkRActFlag[(n-1):0],每bit对应一条链表,如LinkRActFlag[x]对应x号链表,当其值为‘1’时,表明当前应该使用该条链表。
根据链表空标志LinkEmptyFlag确定当前各个链表是否为空,设置位宽为n的链表空标志LinkEmptyFlag[(n-1):0],每bit对应一条链表,当其值为‘1’时链表为空,‘0’为非空。
步骤S504,确定当前选用的链表应该使用哪个Block,即哪个节点。
其中选中的链表首节点为基地址+y,表示当前使用的Block为该Chunk中的y号Block。当y<m时,令y=y+1,作为新的链表首节点,以便下次使用;当y=m时,表示当前使用的Blcok为当前Chunk的最后一个Block,此时以该Chunk的基地址作为读地址读取存储器,获取下一Chunk的基地址,同时将LinkRActFlag[x]更新为‘0’,LinkRActFlag[x+1]更新为‘1’,表示下次开始使用另一条链表,x表示当前使用的链表标号。
当某条链表的首节点等于尾节点时,将对应的LinkEmptyFlag置‘1’,表示该链表空。
步骤S506,判断当前节点是否为出队报文数据的尾节点。
这其中,根据包尾标志PktEopFlag确定报文的尾节点。为‘1’时,该节点为本次出队报文的尾节点,本轮操作完成;为‘0’时,该节点不是本次出队报文的尾节点,返回到步骤S502,继续操作,直到输出报文尾节点,然 后结束本轮操作。
下面结合一具体实例说明该方法的具体实现。
在OC-768速度等级上,为了满足要求,芯片需提供100MPPS的分组处理能力。在100MHz的系统时钟下,100MPPS的分组处理能力,对应为每个周期处理一个链表节点,利用该链表节点访问数据存储区。以n=2、m=3为例的多链表和节点汇聚结构为例,如图6所示,构建2条链表,每个Chunk包含4个Block,同一Chunk内的每个Block的地址是连续的,都是由基地址+偏移地址。以链表0为例,A0、A1、A2、A3四个Block组成一个Chunk,基地址为X,每个Block的偏移地址分别为0、1、2、3,同时以每个Chunk的基地址作为指针指向该链表下一个Chunk的基地址。
使用时,队列缓存管理系统预先记录下n(本实施例中n为2)条链表的首尾节点,同时设置标志位,确定当前应该使用哪个链表以及每个链表是否为空以及每个节点是否为报文的尾节点。队列缓存管理系统接收到队列调度系统链表操作请求时,根据标志位,确定使用的链表编号。一般最初使用时,首先使用0号链表的首节点A0,然后下一周期将A0的偏移地址直接加1,得到A1,继续使用。当使用到编号为m的Block时,即A3,送出A3的同时,以其基地址读取下一Chunk,并更新标志位。下个周期开始使用1号链表,即送出B0,继续操作,等到使用B3时,以其基地址读取下一Chunk,并更新标志位。下个周期又重新开始使用0号链表,而此时0号链表新的首节点C0已经从存储器中读出,并且准备完毕,可以使用,如图7所示。这样按顺序轮流操作,直到报文尾部结束本轮操作。
上例中,该应用完全满足了100MPPS的分组处理需求,每个时钟周期链表节点都是可以有效使用的。
与现有技术相比较,在硬件实现中本方法可以保证链表的高效使用,克服了硬件自身读取延迟带来的问题。且根据实际应用环境,可更优的选取合适的n和m进行组合,使得本方法面对不同的应用环境更加灵活有效。采用本发明中的方法,使高速、大容量条件下的存储管理可以在硬件中简单有效的实现。
Claims (10)
1.一种存储管理方法,其特征在于,包括:
报文入队时,为所述报文建立n条链表,依次称为0号链表至n-1号链表,所述n不小于2,保存所述n条链表的首节点和尾节点,所述n条链表中每条链表包括若干个组块,每个组块内包含若干个区块,每个区块对应一个节点,同一组块内各区块的地址为基地址加偏移地址,同一组块内其各区块的基地址相同,其相邻区块偏移地址相差一指定值;
报文出队时,从0号链表开始,依次使用0号链表至n-1号链表的首个组块;然后依次使用0号链表至n-1号链表的下一组块;依此类推,直到报文结束;
其中,使用每个组块的方法为:从该组块的首个区块开始,依次使用该组块中的每个区块,其中,根据当前使用的区块的偏移地址加上所述指定值得到下一区块的偏移地址;每使用完一个组块时,使用该组块中区块的基地址得到该组块所在链表中下一组块的基地址。
2.如权利要求1所述的方法,其特征在于,为所述n条链表建立链表出队活动标志和链表空标志,为每个节点建立包尾标志,报文出队时,根据链表出队活动标志判断当前要使用的链表,根据链表空标志判断链表是否为空,根据包尾标志判断是否到达报文尾节点,使用完i号链表的某一组块时,将i号链表的链表出队活动标志设置为非活动,将i+1号链表的链表出队活动标志设置为活动,i=0,...,n-2;当链表的首节点等于尾节点时,将该链表的链表空标志设置为空。
3.如权利要求1所述的方法,其特征在于,所述n条链表中,每个链表中每个组块包含的区块个数相同。
4.如权利要求1所述的方法,其特征在于,所述n条链表的组块中,同一组块内相邻区块的偏移地址相差1,每个组块的首个区块的偏移地址为0,使用完每个组块时,使用该组块中首个区块的基地址得到该组块所在链表中下一组块的基地址。
5.如权利要求1所述的方法,其特征在于,报文入队时,按如下方式 建立n条链表:
根据报文长度申请可用的组块,将第一个申请的组块分给0号链表,第二个申请的组块分给1号链表,依此类推,将第n个申请的组块分给n-1号链表,如果报文未结束,将第n+1个申请的组块分给0号链表,将第n+2个申请的组块分给1号链表,依此类推,直到报文结束;申请的组块数目由入队报文的总大小决定;每个链表的第一个组块的首个区块为该链表的首节点,每个链表的最后一个组块中使用到的最后一个区块为该链表的尾节点。
6.一种存储管理系统,其特征在于,包括报文入队管理模块和报文出队管理模块,其中:
所述报文入队管理模块,用于在报文入队时,为所述报文建立n条链表,依次称为0号链表至n-1号链表,保存所述n条链表的首节点和尾节点,所述n条链表中每条链表包括若干个组块,每个组块内包含若干个区块,每个区块对应一个节点,同一组块内各区块的地址为基地址加偏移地址,同一组块内其各区块的基地址相同,其相邻区块偏移地址相差一指定值,所述n不小于2;
所述报文出队管理模块,用于在报文出队时,从0号链表开始,依次使用0号链表至n-1号链表的首个组块;然后依次使用0号链表至n-1号链表的下一组块;依此类推,直到报文结束;其中,使用每个组块的方法为:从该组块的首个区块开始,依次使用该组块中的每个区块,其中,根据当前使用的区块的偏移地址加上所述指定值得到下一区块的偏移地址;每使用完一个组块时,使用该组块中区块的基地址得到该组块所在链表中下一组块的基地址。
7.如权利要求6所述的系统,其特征在于,所述报文入队管理模块还用于为所述n条链表建立链表出队活动标志和链表空标志,为每个节点建立包尾标志,所述报文出队管理模块,还用于在报文出队时,根据所述链表出队活动标志判断当前要使用的链表,根据链表空标志判断链表是否为空,根据包尾标志判断是否到达报文尾节点,使用完i号链表的某一组块时,将i号链表的链表出队活动标志设置为非活动,将i+1号链表的链表出队活动标志设置为活动,i=0,...,n-2;当链表的首节点等于尾节点时,将该链表的链表 空标志设置为空。
8.如权利要求6所述的系统,其特征在于,所述报文入队管理模块建立的所述n条链表中每个链表中每个组块包含的区块个数相同。
9.如权利要求6所述的系统,其特征在于,所述报文入队管理模块建立的所述n条链表的组块中,同一组块内相邻区块的偏移地址相差1,每个组块的首个区块的偏移地址为0;所述报文出队管理模块在使用完每个组块时,使用该组块中首个区块的基地址得到该组块所在链表中下一组块的基地址。
10.如权利要求6所述的系统,其特征在于,所述报文入队管理模块用于在报文入队时,按如下方式建立n条链表:
根据报文长度申请可用的组块,将第一个申请的组块分给0号链表,第二个申请的组块分给1号链表,依此类推,将第n个申请的组块分给n-1号链表,如果报文未结束,将第n+1个申请的组块分给0号链表,将第n+2个申请的组块分给1号链表,依此类推,直到报文结束;申请的组块数目由入队报文的总大小决定;每个链表的第一个组块的首个区块为该链表的首节点,每个链表的最后一个组块中使用的最后一个区块为该链表的尾节点。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101619018A CN101635682B (zh) | 2009-08-05 | 2009-08-05 | 一种存储管理的方法和系统 |
PCT/CN2010/071915 WO2011015055A1 (zh) | 2009-08-05 | 2010-04-20 | 一种存储管理的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101619018A CN101635682B (zh) | 2009-08-05 | 2009-08-05 | 一种存储管理的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101635682A CN101635682A (zh) | 2010-01-27 |
CN101635682B true CN101635682B (zh) | 2011-12-07 |
Family
ID=41594745
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101619018A Active CN101635682B (zh) | 2009-08-05 | 2009-08-05 | 一种存储管理的方法和系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN101635682B (zh) |
WO (1) | WO2011015055A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101635682B (zh) * | 2009-08-05 | 2011-12-07 | 中兴通讯股份有限公司 | 一种存储管理的方法和系统 |
CN101963896B (zh) * | 2010-08-20 | 2012-11-14 | 中国科学院计算技术研究所 | 一种具有二次索引结构的存储设备及其操作方法 |
CN102130833A (zh) * | 2011-03-11 | 2011-07-20 | 中兴通讯股份有限公司 | 一种高速路由器流量管理芯片链表存储管理方法及系统 |
CN102739536B (zh) * | 2012-06-26 | 2016-03-02 | 华为技术有限公司 | 一种报文缓存方法及路由器 |
US9313148B2 (en) | 2013-04-26 | 2016-04-12 | Mediatek Inc. | Output queue of multi-plane network device and related method of managing output queue having multiple packet linked lists |
CN103475569B (zh) * | 2013-09-09 | 2016-02-10 | 北京思特奇信息技术股份有限公司 | 一种请求及响应消息的存储转发方法及装置 |
CN106330741B (zh) * | 2015-06-15 | 2020-04-24 | 深圳市中兴微电子技术有限公司 | 一种报文传输方法和装置 |
CN106325758B (zh) * | 2015-06-17 | 2019-10-22 | 深圳市中兴微电子技术有限公司 | 一种队列存储空间管理方法及装置 |
CN106126435B (zh) * | 2016-06-28 | 2019-07-23 | 武汉众邦领创技术有限公司 | 一种实现链表流水操作的电路结构及操作方法 |
CN106656438B (zh) * | 2017-01-03 | 2019-07-23 | 国家电网公司 | 一种goose报文序列的生成和编辑方法 |
CN107644054B (zh) * | 2017-07-26 | 2019-02-19 | 北京海泰方圆科技股份有限公司 | 信息显示方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1378143A (zh) * | 2001-03-30 | 2002-11-06 | 深圳市中兴通讯股份有限公司 | 一种实现快速数据传递的方法 |
CN1558691A (zh) * | 2004-01-14 | 2004-12-29 | 中兴通讯股份有限公司 | 对移动通信设备中内存数据库定时监控的方法 |
CN1858734A (zh) * | 2005-12-28 | 2006-11-08 | 华为技术有限公司 | 一种数据存储及搜索方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7162551B2 (en) * | 2003-10-31 | 2007-01-09 | Lucent Technologies Inc. | Memory management system having a linked list processor |
US20070201497A1 (en) * | 2006-02-27 | 2007-08-30 | International Business Machines Corporation | Method and system for high-concurrency and reduced latency queue processing in networks |
CN101276334B (zh) * | 2007-03-29 | 2011-04-06 | 上海新跃仪表厂 | 一种快速检索数据的链表实现方法 |
CN101594299B (zh) * | 2009-05-20 | 2011-06-29 | 清华大学 | 基于链表的交换网络中队列缓冲管理方法 |
CN101551736B (zh) * | 2009-05-20 | 2010-11-03 | 杭州华三通信技术有限公司 | 基于地址指针链表的缓存管理装置和方法 |
CN101635682B (zh) * | 2009-08-05 | 2011-12-07 | 中兴通讯股份有限公司 | 一种存储管理的方法和系统 |
-
2009
- 2009-08-05 CN CN2009101619018A patent/CN101635682B/zh active Active
-
2010
- 2010-04-20 WO PCT/CN2010/071915 patent/WO2011015055A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1378143A (zh) * | 2001-03-30 | 2002-11-06 | 深圳市中兴通讯股份有限公司 | 一种实现快速数据传递的方法 |
CN1558691A (zh) * | 2004-01-14 | 2004-12-29 | 中兴通讯股份有限公司 | 对移动通信设备中内存数据库定时监控的方法 |
CN1858734A (zh) * | 2005-12-28 | 2006-11-08 | 华为技术有限公司 | 一种数据存储及搜索方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2011015055A1 (zh) | 2011-02-10 |
CN101635682A (zh) | 2010-01-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101635682B (zh) | 一种存储管理的方法和系统 | |
US8930593B2 (en) | Method for setting parameters and determining latency in a chained device system | |
US10740006B2 (en) | System and method for enabling high read rates to data element lists | |
CN103914341B (zh) | 数据队列出队管控方法和装置 | |
CN102130833A (zh) | 一种高速路由器流量管理芯片链表存储管理方法及系统 | |
JP5205956B2 (ja) | メモリ制御装置 | |
CN101515841B (zh) | 一种基于RapidIO协议的数据包传输的方法、设备和系统 | |
JP7074839B2 (ja) | パケット処理 | |
CN102395958B (zh) | 一种数据包的并发处理方法及设备 | |
CN106789734B (zh) | 在交换控制电路中巨帧的控制系统及方法 | |
CN107908357A (zh) | 命名数据网转发平面pit存储结构及其数据检索方法 | |
CN102253898A (zh) | 一种图像数据的内存管理方法及装置 | |
US9785367B2 (en) | System and method for enabling high read rates to data element lists | |
CN110058816A (zh) | 一种基于ddr的高速多用户队列管理器及方法 | |
CN105335323A (zh) | 一种数据突发的缓存装置和方法 | |
CN101594201B (zh) | 链式队列管理结构整合错误数据过滤的方法 | |
CN106375249B (zh) | 交换芯片的控制方法及控制系统 | |
CN106254270A (zh) | 一种队列管理方法及装置 | |
CN105516023A (zh) | 一种报文转发方法和装置 | |
CN103123575A (zh) | 一种数据写入方法 | |
CN113821191A (zh) | 一种可配置fifo深度的装置及方法 | |
CN102629914A (zh) | 一种以太网数据包缓存方法和装置 | |
US7065628B2 (en) | Increasing memory access efficiency for packet applications | |
CN102932265A (zh) | 数据缓存管理装置和方法 | |
CN103905420B (zh) | 一种协议栈和应用程序间传输数据的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C53 | Correction of patent of invention or patent application | ||
CB03 | Change of inventor or designer information |
Inventor after: Wang Chuang Inventor after: Wu Fengbo Inventor after: Xiao Jie Inventor after: Liu Hengqi Inventor before: Wang Chuang Inventor before: Wu Fengbo Inventor before: Xiao Jie |
|
COR | Change of bibliographic data |
Free format text: CORRECT: INVENTOR; FROM: WANG CHUANG WU FENGBO XIAO JIE TO: WANG CHUANG WU FENGBO XIAO JIE LIU HENGQI |