CN102638412A - 一种缓存管理方法及装置 - Google Patents
一种缓存管理方法及装置 Download PDFInfo
- Publication number
- CN102638412A CN102638412A CN2012101384226A CN201210138422A CN102638412A CN 102638412 A CN102638412 A CN 102638412A CN 2012101384226 A CN2012101384226 A CN 2012101384226A CN 201210138422 A CN201210138422 A CN 201210138422A CN 102638412 A CN102638412 A CN 102638412A
- Authority
- CN
- China
- Prior art keywords
- address pointer
- module
- chunk
- cache
- piece
- 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.)
- Granted
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供了一种缓存管理方法,包括:将缓存空间划分为缓存块,将每个缓存块划分为多个小块,所述缓存块的长度小于最大包长度;按照小块的长度将数据包分成多个数据块,将分成的数据块根据缓存块对应的写缓存大块地址指针和小块对应的块内地址指针逐个写入空闲的小块中。本发明还提供了一种缓存管理装置。采用本发明能够提高缓存资源利用率,节省缓存管理资源。
Description
技术领域
本发明涉及数据缓存技术,特别涉及一种缓存管理方法及装置。
背景技术
在逻辑设计中常常需要使用动态随机存储器(DRAM)、静态随机存储器(SRAM)或现场可编程门阵列(FPGA)内部的随机存储器来对数据进行缓存,如何管理缓存空间是逻辑设计中非常重要的一个环节。通常,缓存资源的管理采用先进先出(FIFO)的方式,即依次将报文存入FIFO队列,然后再从FIFO队列中依次取出。
为了满足时延要求,FIFO一般采用尾丢弃机制,即在收到包入队请求后,首先判断FIFO是否有空间能够存储一个最大包,如果有,则将收到的数据包放入缓存;否则直接丢弃该数据包。也就是说,只要FIFO所剩空间不能容纳一个最大包,那么就直接丢弃后续包。在需要入缓存的包较小的情况下,这种做法容易造成本来可以存入缓存的包被错误丢弃,同时也造成了缓存空间的浪费。另外,对于多个通道的报文同时入缓存的情况,为了避免某个通道的报文出现拥塞而导致其他通道的报文也无法读出的情况发生,即为了避免队头堵塞的情况发生,需要为每个通道分别例化FIFO,也就是说,为各个通道分别分配一定的缓存空间。在这种情况下,会出现某个通道的缓存空间被用完了,而其他通道有空闲的缓存空间却不能被拿来使用,这同样会造成缓存空间的浪费。
发明内容
本发明实施例提供了一种缓存管理方法,提高缓存资源利用率,节省缓存管理资源。
一种缓存管理方法,包括:
将缓存空间划分为缓存块,将每个缓存块划分为多个小块,所述缓存块的长度小于最大包长度;
按照小块的长度将数据包分成多个数据块,将分成的数据块根据缓存块对应的写缓存大块地址指针和小块对应的块内地址指针逐个写入空闲的小块中。
本发明实施例还提供了一种缓存管理装置,提高缓存资源利用率,节省缓存管理资源。
一种缓存管理装置,包括:存储模块、切割模块、缓存管理模块以及缓存模块,其中,
存储模块,用于按数据块从入通道读取需要缓存的数据包,每读取一个数据块,根据缓存管理模块对写缓存已用资源的查询情况,以及对大块地址指针的申请判断情况,在收到缓存管理模块返回的写缓存大块地址指针和块内地址指针后,将读取的数据块写入缓存模块中与该写缓存大块地址指针和块内地址指针对应的小块中;并且在写入缓存模块的数据块为包尾时,将该包信息发送给切割模块,其中,所述包信息包括包的首位大地址指针和数据块个数信息;
缓存管理模块,用于在存储模块向缓存模块写入数据块时,确定当前要写入数据块所对应的大块地址指针和块内地址指针;还用于在切割模块向缓存模块读取数据块时,确定当前要读取数据块所对应的大块地址指针和块内地址指针;还用于在收到切割模块发送来的地址释放请求后,根据其中携带的首位大地址指针、数据块个数及自身建立的地址指针链表释放该包所占用的所有大块地址指针;
切割模块,用于根据收到的包信息,根据缓存管理模块对读缓存已用资源的查询情况,以及对地址指针链表的查询判断情况,在收到缓存管理模块返回的读缓存大块地址指针和块内地址指针后,依次从缓存模块中读出该包的所有数据块并发送出去,并向缓存管理模块发送携带该包的首位大地址指针和数据块个数的地址指针释放请求,请求缓存管理模块释放该包所占用的所有大块地址指针;
缓存模块,由长度小于最大包长度的缓存块组成,每个缓存块由多个小块组成。
本发明实施例将整个缓存空间进行两级划分,即整个缓存空间由长度小于最大包长度的缓存块组成,每个缓存块又由多个小块组成,并按照小块的大小将数据包分成若干个数据块进行缓存的方案,能够有效利用缓存空间,提高缓存资源的利用率,避免短包被错误丢弃。另外,根据大块(缓存块)地址指针和块内(小块)地址指针进行报文存取的方式非常便利,各个用户之间的数据不会相互影响,即使在多通道报文同时入缓存的情况下也不会发生队头堵塞的情况,这样,就无需进行FIFO例化,不会出现某个通道的缓存空间被用完了,而其他通道有空闲的缓存空间却不能拿来使用的情况,从而提高了缓存资源的利用率。而且,重要的是,本发明实施例将整个缓存空间进行两级划分的方法,只需要将第一级划分的缓存块所对应的大块地址指针之间建立地址指针链表,而第二级划分的小块所对应的块内地址指针之间不需要建立地址指针链表,直接累加,这样不但节省小块地址指针之间建立链表的管理空间,而且,第一级划分缓存块的粒度可以更大一些,粒度越大,缓存块的数量越少,大块地址指针之间建立链表的管理空间越少,从而大大节省缓存管理资源。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例缓存管理装置的结构示意图。
图2为本发明实施例缓存管理装置工作过程示意图。
图3为缓存管理模块的结构示意图。
图4为本发明实施例写入缓存块一侧缓存管理方法的流程示意图。
图5为本发明实施例读取缓存块一侧缓存管理方法的流程示意图。
具体实施方式
本发明实施例的核心思想是:在缓存管理模块中增加已用资源记录模块和已用资源查询判断模块,通过两级地址指针共同指向数据块,在写入数据块时,将数据块根据写缓存大块地址指针和块内地址指针逐个写入空闲的小块中;在读取数据块时,根据读缓存大块地址指针和块内地址指针读取。
其中,缓存块和小块的大小可以根据实际需求进行划分,但缓存块的长度应小于最大包长度。假设最大包长度为16Kbyte(字节),整个缓存空间的大小为8Gbit(比特),则第一级划分的缓存块粒度可以为32K字节,第二级划分的小块粒度可以为64字节,这样就可以把整个缓存空间划分为8Gbit/32KByte=32K个缓存块,接着,将每个缓存块划分为32Kbyte/64Byte=512个小块。也就是说,记录当前已写入/读取数据块所对应的大块地址指针,需要位宽15比特(32K为2的15次方,折算成位宽信息为15bit);记录当前已写入/读取数据块所对应的块内地址指针,需要位宽9比特(512为2的9次方换算成位宽信息为9bit)。在这种情况下如果某个需要进行缓存的数据包的长度为64K字节,则可以将该数据包分成2个长度均为32K字节的缓存块,再将每个缓存块分成512个长度均为64字节的小块,即每个数据块占用一个64字节的小块。
为使本发明的目的、技术方案、及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
图1为本发明实施例缓存管理装置的结构示意图,包括:存储模块101、缓存模块102、切割模块103和缓存管理模块(BM)104。其中,简单地讲:
存储模101,用于从入通道接收报文,并将收到的报文写入缓存模块102中;缓存模块102,用于缓存存储模块101写入的报文;切割模块103,用于从缓存模块102中读取报文,并将读取的报文发送出去;缓存管理模块104,用于管理缓存模块102中各个缓存块和小块所对应的地址指针,负责缓存块所对应的大块地址指针的申请和释放。
下面对图1中各个模块的工作过程进行详细说明。参见图2所示,该过程主要包括以下步骤:
步骤201、存储模块按数据块从入通道读取需要缓存的数据包,每读取一个数据块,向缓存管理模块查询该数据块对应的写缓存大块地址指针和块内地址指针。
其中,将数据包划分成数据块的操作由存储模块之前的入通道模块(图中未示)完成。入通道模块负责按照小块的长度将数据包分成数据块,存储模块在进行数据包缓存时,依次读取构成该包的各个数据块。
步骤202、存储模块根据缓存管理模块对写缓存已用资源的查询情况,以及对大块地址指针的申请判断情况,在收到缓存管理模块返回的写缓存大块地址指针和块内地址指针后,将读取的数据块写入缓存模块中与该写缓存大块地址指针和块内地址指针对应的小块中。
具体方法为:缓存管理模块查询当前已写入数据块所对应的大块地址指针和块内地址指针,确定是否需要申请空闲大块地址指针,如果有可用块内地址指针,则将数据包的数据块写入到当前已写入数据块所对应的大块地址指针和将偏移值加1的块内地址指针所对应的小块中,并且将写缓存块内地址指针累加1后回填;如果没有可用块内地址指针,则再申请一个空闲大块地址指针,将数据包的数据块写入到当前申请的大块地址指针和偏移值为0的块内地址指针所对应的小块中,并且将写缓存块内地址指针置0后回填,将写缓存大块地址指针置为当前申请到的指针对应值。
同时,缓存管理模块会将申请的大地址指针记录为上一个空闲大块地址指针的下一个大块地址指针,建立起地址指针链表。
并且,在写入缓存模块的数据块为包尾时,存储模块还需要将该包信息发送给切割模块。其中,所述包信息包括包的首位大地址指针和数据块个数信息,以及一些相关信息。所述首位大地址指针,指的是第一个数据块所对应的大地址指针;所述相关信息包括:报文类型、源媒质接入控制(MAC)地址、目的MAC地址、端口号等。
步骤203、切割模块根据收到的包信息,根据缓存管理模块对读缓存已用资源的查询情况,以及对地址指针链表的查询判断情况,在收到缓存管理模块返回的读缓存大块地址指针和块内地址指针后,依次从缓存模块中读出该包的所有数据块并发送出去。
具体方法为:切割模块根据包信息中携带的首位大地址指针从缓存模块中读出该包的第一个数据块并发送出去。如果该包的数据块个数大于1,则还需要向缓存管理模块查询当前已读取数据块所对应的大块地址指针和块内地址指针,缓存管理模块确定是否需要查询下一个大块地址指针,如果有可用块内地址指针,则读出当前已读取数据块所对应的大块地址指针和将偏移值加1的块内地址指针所对应的小块内的数据块,并且将读缓存块内地址指针累加1后回填;如果没有可用块内地址指针,则查询下一个大块地址指针,读出该下一个大块地址指针和偏移值为0的块内地址指针所对应的小块内的数据块,并且将读缓存块内地址指针置0后回填,将读缓存大块地址指针置为当前查询到的指针对应值。
在数据包的所有数据块被写入缓存的同时,数据包所有大块地址指针形成一个地址指针链表,因此,下一个大块地址指针通过缓存管理模块自身维护的地址指针链表获得。
步骤204、在该数据包被从缓存块中发送出去之后,切割模块向缓存管理模块发送携带该包的首位大地址指针和数据块个数的地址指针释放请求,请求缓存管理模块释放该包所占用的所有大块地址指针。
步骤205、缓存管理模块在收到切割模块发送来的地址释放请求后,根据其中携带的首位大地址指针、数据块个数及自身建立的地址指针链表释放该包所占用的所有大块地址指针。
由上述描述可见,进一步对本发明实施例缓存管理装置进行说明:
存储模块101,用于按数据块从入通道读取需要缓存的数据包,每读取一个数据块,根据缓存管理模块对写缓存已用资源的查询情况,以及对大块地址指针的申请判断情况,在收到缓存管理模块返回的写缓存大块地址指针和块内地址指针后,将读取的数据块写入缓存模块中与该写缓存大块地址指针和块内地址指针对应的小块中;并且在写入缓存模块的数据块为包尾时,将该包信息发送给切割模块,其中,所述包信息包括包的首位大地址指针和数据块个数信息;
缓存管理模块104,用于在存储模块向缓存模块写入数据块时,确定当前要写入数据块所对应的大块地址指针和块内地址指针;还用于在切割模块向缓存模块读取数据块时,确定当前要读取数据块所对应的大块地址指针和块内地址指针;还用于在收到切割模块发送来的地址释放请求后,根据其中携带的首位大地址指针、数据块个数及自身建立的地址指针链表释放该包所占用的所有大块地址指针;
切割模块103,用于根据收到的包信息,根据缓存管理模块对读缓存已用资源的查询情况,以及对地址指针链表的查询判断情况,在收到缓存管理模块返回的读缓存大块地址指针和块内地址指针后,依次从缓存模块中读出该包的所有数据块并发送出去,并向缓存管理模块发送携带该包的首位大地址指针和数据块个数的地址指针释放请求,请求缓存管理模块释放该包所占用的所有大块地址指针;
缓存模块102,由长度小于最大包长度的缓存块组成,每个缓存块由多个小块组成。
本发明实施例主要是对缓存管理模块进行的改进,下面对缓存管理模块的结构及具体工作过程进行详细说明。图3为本发明实施例缓存管理模块的结构示意图。其包括:地址申请模块、地址指针建链模块、地址释放模块、地址链表查询模块、链表信息存储模块、空闲大块地址指针存储模块、已用资源记录模块和已用资源查询判断模块。
空闲大块地址指针存储模块301,用于存储空闲的大块地址指针;
链表信息存储模块302,用于存储大地址指针链表信息;
地址申请模块303,用于在已用资源查询判断模块确定需要申请空闲大块地址指针时,从空闲大块地址指针存储模块中读出一个空闲的大块地址指针通过已用资源查询判断模块返回给存储模块,并将该返回的大块地址指针发送给地址指针建链模块;
地址指针建链模块304,用于在收到地址申请模块发送来的大块地址指针后,将该大块地址指针记录为上一个空闲大块地址指针的下一个大块地址指针,建立起地址指针链表,存储到链表信息存储模块中;
地址链表查询模块305,用于在收到已用资源查询判断模块发送来的地址指针查询请求后,通过查询链表信息存储模块中的大地址指针链表信息获取该地址查询请求中携带的大块地址指针所对应的下一个大块地址指针,并将获取的下一个大块地址指针通过已用资源查询判断模块返回给切割模块;还用于在地址指针释放请求中携带的数据块数量大于一个缓存块中包含的小块的数量时,接收携带有大地址指针的地址指针释放请求,以获取下一个大地址指针写入空闲大块地址指针存储模块;
地址释放模块306,用于根据切割模块的地址指针释放请求,将地址指针释放请求中携带的首位大地址指针写入空闲大块地址指针存储模块;如果地址指针释放请求中携带的数据块数量大于一个缓存块中包含的小块的数量时,则通过查询链表信息存储模块获取下一个大地址指针写入空闲大块地址指针存储模块;且重复执行该步骤直到数据包所占用的所有大块地址指针都被释放完毕为止;
已用资源记录模块307,用于记录当前已写入数据块所对应的大地址指针和块内地址指针;还用于记录当前已读取数据块所对应的大地址指针和块内地址指针;
其中,已用资源记录模块又包括:
已写缓存大块地址指针记录单元WR_PTR,用于记录当前已写入数据块所对应的大块地址指针;
已写缓存块内地址指针记录单元WR_ADDR,用于记录当前已写入数据块所对应的块内地址指针;
已读缓存大块地址指针记录单元RD_PTR,用于记录当前已读取数据块所对应的大块地址指针;
已读缓存块内地址指针记录单元RD_ADDR,用于记录当前已读取数据块所对应的块内地址指针。
如果以上述划分粒度为例,整个缓存空间的大小为8G比特,第一级划分的缓存块粒度可以为32K字节,第二级划分的小块粒度可以为64字节,则已写缓存大块地址指针记录单元和已读缓存大块地址指针记录单元各自用15比特表示一个大块地址指针,已写缓存块内地址指针记录单元和已读缓存块内地址指针记录单元各自用9比特表示一个块内地址指针。
进一步地,已用资源记录模块还可以包括:已占用缓存块数目记录单元Q_NUM,用于记录每个通道当前各自占用的缓存块数目。这个存储信息有一个作用:可以根据这个参数知道各个通道的缓存占用情况,然后用来限制各个通道的可以申请的缓存块数目。
已用资源查询判断模块308,用于在存储模块向缓存模块写入数据块时,先查询当前已写入数据块所对应的大块地址指针和块内地址指针,根据已用资源记录模块的记录,判断是否需要向地址申请模块申请空闲大块地址指针;如果有可用块内地址指针,则通知存储模块将数据包的数据块写入到当前已写入数据块所对应的大块地址指针和将偏移值加1的块内地址指针所对应的小块中,通知已用资源记录模块将写缓存块内地址指针累加1后回填;如果没有可用块内地址指针,则向地址申请模块申请空闲大块地址指针,通知存储模块将数据包的数据块写入到当前申请的大块地址指针和偏移值为0的块内地址指针所对应的小块中,通知已用资源记录模块将写缓存块内地址指针置0后回填,将写缓存大块地址指针置为当前申请到的指针对应值;
还用于在切割模块向缓存模块读取数据块时,先查询当前已读取数据块所对应的大块地址指针和块内地址指针,根据已用资源记录模块的记录,判断是否需要向地址链表查询模块查询下一个大块地址指针;如果有可用块内地址指针,则通知切割模块读出当前已读取数据块所对应的大块地址指针和将偏移值加1的块内地址指针所对应的小块内的数据块,通知已用资源记录模块将读缓存块内地址指针累加1后回填;如果没有可用块内地址指针,则向地址链表查询模块查询下一个大块地址指针,通知切割模块读出该下一个大块地址指针和偏移值为0的块内地址指针所对应的小块内的数据块,通知已用资源记录模块将读缓存块内地址指针置0后回填,将读缓存大块地址指针置为当前查询到的指针对应值。
仍然以上述划分粒度为例,为清楚理解本发明,下面参见图4和图5从读写两侧对缓存管理方法进行详细说明。
图4为本发明实施例写入缓存块一侧缓存管理方法的流程示意图。
上电之后首先执行步骤401、判断是否有报文入缓存或者当前接收报文未存储完毕,如果否,则结束该流程;如果是,则执行步骤402;
步骤402、判断通道对应的写缓存块内地址指针是否用完?(WR_ADDR=1FF?)
如果9bit的块内地址指针非全1,即WR_ADDR≠1FF,也即小块内仍然有地址指针可用,则执行步骤403:将写缓存块内地址指针累加1后回填WR_ADDR;
如果9bit的块内地址指针全1,即WR_ADDR=1FF,那么为这个缓存块内所有块内地址指针全被申请出去了,这时候需要执行步骤404:申请下一个大块地址指针;接下来执行步骤405:
将写缓存块内地址指针置0后回填WR_ADDR,将写缓存大块地址指针置为当前申请到的指针对应值,如果已用资源记录模块还包括已占用缓存块数目记录单元,则同时将Q_NUM的数目加一。
图5为本发明实施例读取缓存块一侧缓存管理方法的流程示意图。
上电之后首先执行步骤501、判断通道的Q_NUM数目非零?如果否,则结束该流程;如果是,则执行步骤502、继续判断通道对应的读缓存块内地址指针是否用完?(RD_ADDR=1FF?)
如果9bit的块内地址指针非全1,即RD_ADDR≠1FF,也即小块内仍然有地址指针可用,则执行步骤503:将读缓存块内地址指针累加1后回填RD_ADDR;
如果9bit的块内地址指针全1,即RD_ADDR=1FF,那么为这个缓存块内所有块内地址指针全被读取,这时候需要执行步骤504:查询下一个大块地址指针;接下来执行步骤505:
将读缓存块内地址指针置0后回填RD_ADDR,将读缓存大块地址指针置为当前查询到的指针对应值,如果已用资源记录模块还包括已占用缓存块数目记录单元,则同时将Q_NUM的数目减一。
进一步地,如果存储模块对应多个入通道,则每个数据块对应携带一个入通道信息,如端口号。相应的,链表信息存储模块中存储有每个通道对应的大块地址指针形成的链表;已用资源记录模块中的已写缓存大块地址指针记录单元WR_PTR,记录每个通道当前已写入数据块所对应的大块地址指针,如果有8K个通道,则占8KX15比特=120K比特的空间;已读缓存大块地址指针记录单元RD_PTR,记录每个通道当前已读取数据块所对应的大块地址指针,如果有8K个通道,同样占8KX15比特=120K比特的空间;已写缓存块内地址指针记录单元WR_ADDR,记录每个通道当前已写入数据块所对应的块内地址指针,如果有8K个通道,则占8KX9比特=72K比特的空间;已读缓存块内地址指针记录单元RD_ADDR,记录每个通道当前已读取数据块所对应的块内地址指针,如果有8K个通道,同样占8KX9比特=72K比特的空间。
为显示本发明实施例缓存管理方法的资源开销较少,以上述划分粒度及通道数量为例,下面计算缓存管理模块所占用的存储空间:
要建立地址指针链表,形成链表信息存储模块,还需要32KX15比特=480K比特的链表空间,其中,32K为缓存块的数量,15比特为位宽;
当然还需要用来指示当前各个数据块是否被申请出去的指示,需要32Kbit的信息位;
缓存块数目信息Q_NUM需要耗费:8KX15=120Kbit的空间;
再加上资源记录模块中WR_PTR占120K比特;RD_PTR占120K比特;WR_ADDR占72K比特;RD_ADDR占72K比特;
共144Kbit+480kbit+240Kbit+32Kbit+120Kbit=1016kbit
如果将缓存的粒度划的更大一点的话就更节省管理所消耗的RAM资源了。
需要说明的是,如果报文长度大于64Bytes,即报文有多个突发写缓存,每读取一个突发,则将数据包的数据块写入到当前已写入数据块所对应的大块地址指针和将偏移值加1的块内地址指针所对应的小块中,并且将写缓存块内地址指针累加1后回填。例如一个数据包长度为65Bytes,存入缓存模块中占2个小块,读到第65Byte时,就把块内地址指针加一回填。
本发明实施例以64位的DDR3 SDRRM(8倍速率同步动态随机存储器)接口burst8(突发8)为例,来设置块内地址粒度的。对于其它内存接口或者芯片内部缓存需要根据具体情况来设置块内地址粒度大小。本发明实施例可以根据时间情况对需要的管理资源进行压缩,对于更多个通道的情况,可以外挂RLDRAM(缩短读潜伏时间的动态随机存储器)或者DDR SDRAM(双倍速率同步动态随机存储器)来实现缓存管理。
综上所述,本发明通过缓存管理模块的已用资源查询判断模块确定当前要写入数据块所对应的大块地址指针和块内地址指针;在切割模块向缓存模块读取数据块时,确定当前要读取数据块所对应的大块地址指针和块内地址指针,但只在大块地址指针之间建立地址指针链表,而块内地址指针之间不需要建立地址指针链表,直接累加,因此不但提高了缓存资源的利用率,而且节省了建立链表的管理空间。其次,由于在缓存管理模块的已用资源记录模块中增加了已占用缓存块数目记录单元,对每个用户的缓存资源进行统计,报文存储时可以根据各个通道的情况来分配其对应的缓存大小。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (9)
1.一种缓存管理方法,其特征在于,包括:
将缓存空间划分为缓存块,将每个缓存块划分为多个小块,所述缓存块的长度小于最大包长度;
按照小块的长度将数据包分成多个数据块,将分成的数据块根据缓存块对应的写缓存大块地址指针和小块对应的块内地址指针逐个写入空闲的小块中。
2.如权利要求1所述的方法,其特征在于,将分成的数据块根据写缓存大块地址指针和块内地址指针逐个写入空闲的小块中具体包括:
查询当前已写入数据块所对应的大块地址指针和块内地址指针,确定是否需要申请空闲大块地址指针,如果有可用块内地址指针,则将数据包的数据块写入到当前已写入数据块所对应的大块地址指针和将偏移值加1的块内地址指针所对应的小块中,并且将写缓存块内地址指针累加1后回填;如果没有可用块内地址指针,则再申请一个空闲大块地址指针,将数据包的数据块写入到当前申请的大块地址指针和偏移值为0的块内地址指针所对应的小块中,并且将写缓存块内地址指针置0后回填,将写缓存大块地址指针置为当前申请到的指针对应值;并且重复执行该步骤,直到数据包的所有数据块都被缓存完毕为止。
3.如权利要求1所述的方法,其特征在于,该方法还包括:
将数据包所有大块地址指针形成一个地址指针链表,在该数据包被从缓存块中发送出去之后,根据该地址指针链表信息释放该数据包所占用的所有大块地址指针。
4.如权利要求2所述的方法,其特征在于,数据包的所有数据块都被缓存完毕后还包括读出所述数据包的所有数据块的步骤,具体方法为:
查询当前已读取数据块所对应的大块地址指针和块内地址指针,确定是否需要查询下一个大块地址指针,如果有可用块内地址指针,则读出当前已读取数据块所对应的大块地址指针和将偏移值加1的块内地址指针所对应的小块内的数据块,并且将读缓存块内地址指针累加1后回填;如果没有可用块内地址指针,则查询下一个大块地址指针,读出该下一个大块地址指针和偏移值为0的块内地址指针所对应的小块内的数据块,并且将读缓存块内地址指针置0后回填,将读缓存大块地址指针置为当前查询到的指针对应值;并且重复执行该步骤,直到读出数据包的所有数据块。
5.一种缓存管理装置,其特征在于,包括:存储模块、切割模块、缓存管理模块以及缓存模块,其中,
存储模块,用于按数据块从入通道读取需要缓存的数据包,每读取一个数据块,根据缓存管理模块对写缓存已用资源的查询情况,以及对大块地址指针的申请判断情况,在收到缓存管理模块返回的写缓存大块地址指针和块内地址指针后,将读取的数据块写入缓存模块中与该写缓存大块地址指针和块内地址指针对应的小块中;并且在写入缓存模块的数据块为包尾时,将该包信息发送给切割模块,其中,所述包信息包括包的首位大地址指针和数据块个数信息;
缓存管理模块,用于在存储模块向缓存模块写入数据块时,确定当前要写入数据块所对应的大块地址指针和块内地址指针;还用于在切割模块向缓存模块读取数据块时,确定当前要读取数据块所对应的大块地址指针和块内地址指针;还用于在收到切割模块发送来的地址释放请求后,根据其中携带的首位大地址指针、数据块个数及自身建立的地址指针链表释放该包所占用的所有大块地址指针;
切割模块,用于根据收到的包信息,根据缓存管理模块对读缓存已用资源的查询情况,以及对地址指针链表的查询判断情况,在收到缓存管理模块返回的读缓存大块地址指针和块内地址指针后,依次从缓存模块中读出该包的所有数据块并发送出去,并向缓存管理模块发送携带该包的首位大地址指针和数据块个数的地址指针释放请求,请求缓存管理模块释放该包所占用的所有大块地址指针;
缓存模块,由长度小于最大包长度的缓存块组成,每个缓存块由多个小块组成。
6.如权利要求5所述的装置,其特征在于,所述缓存管理模块包括:地址申请模块、地址指针建链模块、地址释放模块、地址链表查询模块、链表信息存储模块、空闲大块地址指针存储模块、已用资源记录模块和已用资源查询判断模块;
空闲大块地址指针存储模块,用于存储空闲的大块地址指针;
链表信息存储模块,用于存储大地址指针链表信息;
地址申请模块,用于在已用资源查询判断模块确定需要申请空闲大块地址指针时,从空闲大块地址指针存储模块中读出一个空闲的大块地址指针通过已用资源查询判断模块返回给存储模块,并将该返回的大块地址指针发送给地址指针建链模块;
地址指针建链模块,用于在收到地址申请模块发送来的大块地址指针后,将该大块地址指针记录为上一个空闲大块地址指针的下一个大块地址指针,建立起地址指针链表,存储到链表信息存储模块中;
地址释放模块,用于根据切割模块的地址指针释放请求,将地址指针释放请求中携带的首位大地址指针写入空闲大块地址指针存储模块;如果地址指针释放请求中携带的数据块数量大于一个缓存块中包含的小块的数量时,则通过查询链表信息存储模块获取下一个大地址指针写入空闲大块地址指针存储模块;且重复执行该步骤直到数据包所占用的所有大块地址指针都被释放完毕为止;
地址链表查询模块,用于在收到已用资源查询判断模块发送来的地址指针查询请求后,通过查询链表信息存储模块中的大地址指针链表信息获取该地址查询请求中携带的大块地址指针所对应的下一个大块地址指针,并将获取的下一个大块地址指针通过已用资源查询判断模块返回给切割模块;还用于在地址指针释放请求中携带的数据块数量大于一个缓存块中包含的小块的数量时,接收携带有大地址指针的地址指针释放请求,以获取下一个大地址指针写入空闲大块地址指针存储模块;
已用资源记录模块,用于记录当前已写入数据块所对应的大地址指针和块内地址指针;还用于记录当前已读取数据块所对应的大地址指针和块内地址指针;
已用资源查询判断模块,用于在存储模块向缓存模块写入数据块时,先查询当前已写入数据块所对应的大块地址指针和块内地址指针,根据已用资源记录模块的记录,判断是否需要向地址申请模块申请空闲大块地址指针;如果有可用块内地址指针,则通知存储模块将数据包的数据块写入到当前已写入数据块所对应的大块地址指针和将偏移值加1的块内地址指针所对应的小块中,通知已用资源记录模块将写缓存块内地址指针累加1后回填;如果没有可用块内地址指针,则向地址申请模块申请空闲大块地址指针,通知存储模块将数据包的数据块写入到当前申请的大块地址指针和偏移值为0的块内地址指针所对应的小块中,通知已用资源记录模块将写缓存块内地址指针置0后回填,将写缓存大块地址指针置为当前申请到的指针对应值;
还用于在切割模块向缓存模块读取数据块时,先查询当前已读取数据块所对应的大块地址指针和块内地址指针,根据已用资源记录模块的记录,判断是否需要向地址链表查询模块查询下一个大块地址指针;如果有可用块内地址指针,则通知切割模块读出当前已读取数据块所对应的大块地址指针和将偏移值加1的块内地址指针所对应的小块内的数据块,通知已用资源记录模块将读缓存块内地址指针累加1后回填;如果没有可用块内地址指针,则向地址链表查询模块查询下一个大块地址指针,通知切割模块读出该下一个大块地址指针和偏移值为0的块内地址指针所对应的小块内的数据块,通知已用资源记录模块将读缓存块内地址指针置0后回填,将读缓存大块地址指针置为当前查询到的指针对应值。
7.如权利要求6所述的装置,其特征在于,已用资源记录模块包括:
已写缓存大块地址指针记录单元,用于记录当前已写入数据块所对应的大块地址指针;
已写缓存块内地址指针记录单元,用于记录当前已写入数据块所对应的块内地址指针;
已读缓存大块地址指针记录单元,用于记录当前已读取数据块所对应的大块地址指针;
已读缓存块内地址指针记录单元,用于记录当前已读取数据块所对应的块内地址指针。
8.如权利要求7所述的装置,其特征在于,已用资源记录模块还包括:已占用缓存块数目记录单元,用于记录每个通道当前各自占用的缓存块数目。
9.如权利要求7所述的装置,其特征在于,当所述存储模块对应一个以上的入通道时,每个数据块对应携带一个入通道信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210138422.6A CN102638412B (zh) | 2012-05-04 | 2012-05-04 | 一种缓存管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210138422.6A CN102638412B (zh) | 2012-05-04 | 2012-05-04 | 一种缓存管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102638412A true CN102638412A (zh) | 2012-08-15 |
CN102638412B CN102638412B (zh) | 2015-01-14 |
Family
ID=46622665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210138422.6A Active CN102638412B (zh) | 2012-05-04 | 2012-05-04 | 一种缓存管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102638412B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103106125A (zh) * | 2013-01-04 | 2013-05-15 | 苏州懿源宏达知识产权代理有限公司 | 基于存储块修复的闪存存储方法 |
CN103442003A (zh) * | 2013-08-26 | 2013-12-11 | 北京科东电力控制系统有限责任公司 | 面向scada系统的数据采集回填系统及其方法 |
CN103595653A (zh) * | 2013-11-18 | 2014-02-19 | 福建星网锐捷网络有限公司 | 一种缓存分配方法、装置及设备 |
CN105933244A (zh) * | 2016-04-14 | 2016-09-07 | 浪潮电子信息产业股份有限公司 | 一种通道对齐去偏斜的装置和方法 |
CN106339431A (zh) * | 2016-08-18 | 2017-01-18 | 佛山智能装备技术研究院 | 基于文本块的机器人程序文件处理方法和系统 |
CN106372008A (zh) * | 2015-07-23 | 2017-02-01 | 福州瑞芯微电子股份有限公司 | 一种数据缓存方法及装置 |
CN106527998A (zh) * | 2016-11-28 | 2017-03-22 | 建荣半导体(深圳)有限公司 | 一种优化sd卡读写性能的方法、装置和一种sd卡 |
CN106603434A (zh) * | 2016-12-07 | 2017-04-26 | 盛科网络(苏州)有限公司 | 避免多通道数据传输过程中队头阻塞的系统及方法 |
CN107124374A (zh) * | 2017-05-15 | 2017-09-01 | 郑州云海信息技术有限公司 | 一种提升网卡收发包性能的接口、方法及系统 |
CN109388590A (zh) * | 2018-09-28 | 2019-02-26 | 中国电子科技集团公司第五十二研究所 | 提升多通道dma访问性能的动态缓存块管理方法和装置 |
CN109688085A (zh) * | 2017-10-19 | 2019-04-26 | 中兴通讯股份有限公司 | 传输控制协议代理方法、存储介质及服务器 |
CN109783035A (zh) * | 2019-02-28 | 2019-05-21 | 中国人民解放军陆军工程大学 | 一种基于大颗粒度存储单元的队列管理器及方法 |
CN114490459A (zh) * | 2022-01-27 | 2022-05-13 | 重庆物奇微电子有限公司 | 数据传输方法、装置、设备、接收机和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1874490A (zh) * | 2006-06-30 | 2006-12-06 | 华中科技大学 | 一种用于对等网络视频点播系统的磁盘缓存方法 |
CN101212451A (zh) * | 2006-12-30 | 2008-07-02 | 北京天融信网络安全技术有限公司 | 防火墙芯片数据包缓存管理方法 |
CN101094183B (zh) * | 2007-07-25 | 2011-12-07 | 杭州华三通信技术有限公司 | 一种缓存管理方法及装置 |
-
2012
- 2012-05-04 CN CN201210138422.6A patent/CN102638412B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1874490A (zh) * | 2006-06-30 | 2006-12-06 | 华中科技大学 | 一种用于对等网络视频点播系统的磁盘缓存方法 |
CN101212451A (zh) * | 2006-12-30 | 2008-07-02 | 北京天融信网络安全技术有限公司 | 防火墙芯片数据包缓存管理方法 |
CN101094183B (zh) * | 2007-07-25 | 2011-12-07 | 杭州华三通信技术有限公司 | 一种缓存管理方法及装置 |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103106125B (zh) * | 2013-01-04 | 2016-09-28 | 国网山东省电力公司胶州市供电公司 | 基于存储块修复的闪存存储方法 |
CN103106125A (zh) * | 2013-01-04 | 2013-05-15 | 苏州懿源宏达知识产权代理有限公司 | 基于存储块修复的闪存存储方法 |
CN103442003B (zh) * | 2013-08-26 | 2018-02-09 | 北京科东电力控制系统有限责任公司 | 面向scada系统的数据采集回填系统及其方法 |
CN103442003A (zh) * | 2013-08-26 | 2013-12-11 | 北京科东电力控制系统有限责任公司 | 面向scada系统的数据采集回填系统及其方法 |
CN103595653A (zh) * | 2013-11-18 | 2014-02-19 | 福建星网锐捷网络有限公司 | 一种缓存分配方法、装置及设备 |
CN106372008A (zh) * | 2015-07-23 | 2017-02-01 | 福州瑞芯微电子股份有限公司 | 一种数据缓存方法及装置 |
CN106372008B (zh) * | 2015-07-23 | 2019-11-22 | 福州瑞芯微电子股份有限公司 | 一种数据缓存方法及装置 |
CN105933244A (zh) * | 2016-04-14 | 2016-09-07 | 浪潮电子信息产业股份有限公司 | 一种通道对齐去偏斜的装置和方法 |
CN105933244B (zh) * | 2016-04-14 | 2018-11-27 | 浪潮电子信息产业股份有限公司 | 一种通道对齐去偏斜的装置和方法 |
CN106339431A (zh) * | 2016-08-18 | 2017-01-18 | 佛山智能装备技术研究院 | 基于文本块的机器人程序文件处理方法和系统 |
CN106527998B (zh) * | 2016-11-28 | 2019-05-03 | 建荣半导体(深圳)有限公司 | 一种优化sd卡读写性能的方法、装置和一种sd卡 |
CN106527998A (zh) * | 2016-11-28 | 2017-03-22 | 建荣半导体(深圳)有限公司 | 一种优化sd卡读写性能的方法、装置和一种sd卡 |
CN106603434A (zh) * | 2016-12-07 | 2017-04-26 | 盛科网络(苏州)有限公司 | 避免多通道数据传输过程中队头阻塞的系统及方法 |
CN106603434B (zh) * | 2016-12-07 | 2019-08-02 | 盛科网络(苏州)有限公司 | 避免多通道数据传输过程中队头阻塞的系统及方法 |
CN107124374A (zh) * | 2017-05-15 | 2017-09-01 | 郑州云海信息技术有限公司 | 一种提升网卡收发包性能的接口、方法及系统 |
CN109688085A (zh) * | 2017-10-19 | 2019-04-26 | 中兴通讯股份有限公司 | 传输控制协议代理方法、存储介质及服务器 |
CN109388590A (zh) * | 2018-09-28 | 2019-02-26 | 中国电子科技集团公司第五十二研究所 | 提升多通道dma访问性能的动态缓存块管理方法和装置 |
CN109388590B (zh) * | 2018-09-28 | 2021-02-26 | 中国电子科技集团公司第五十二研究所 | 提升多通道dma访问性能的动态缓存块管理方法和装置 |
CN109783035A (zh) * | 2019-02-28 | 2019-05-21 | 中国人民解放军陆军工程大学 | 一种基于大颗粒度存储单元的队列管理器及方法 |
CN114490459A (zh) * | 2022-01-27 | 2022-05-13 | 重庆物奇微电子有限公司 | 数据传输方法、装置、设备、接收机和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102638412B (zh) | 2015-01-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102638412B (zh) | 一种缓存管理方法及装置 | |
CN101094183B (zh) | 一种缓存管理方法及装置 | |
US9940980B2 (en) | Hybrid LPDDR4-DRAM with cached NVM and flash-nand in multi-chip packages for mobile devices | |
CN102096648B (zh) | 基于fpga的实现多路突发数据业务缓存的系统及方法 | |
KR101763312B1 (ko) | Dram 서브-어레이 레벨 자율적 리프레시 메모리 제어기 최적화 | |
CN102298561B (zh) | 一种对存储设备进行多通道数据处理的方法、系统和装置 | |
CN104090847B (zh) | 一种固态存储设备的地址分配方法 | |
CN109388590B (zh) | 提升多通道dma访问性能的动态缓存块管理方法和装置 | |
WO2015061337A1 (en) | Final level cache system and corresponding method | |
CN101162441B (zh) | 数据的存取装置和方法 | |
US20090187681A1 (en) | Buffer controller and management method thereof | |
CN101246460A (zh) | 缓存数据写入系统及方法和缓存数据读取系统及方法 | |
US10805392B2 (en) | Distributed gather/scatter operations across a network of memory nodes | |
CN107783727B (zh) | 一种内存设备的访问方法、装置和系统 | |
CN101499956B (zh) | 分级缓冲区管理系统及方法 | |
TW200601742A (en) | Compact packet switching node storage architecture employing double data rate synchronous dynamic ram | |
CN102314400B (zh) | 一种分散聚合式dma方法及装置 | |
US20150301943A1 (en) | Method and device for processing data | |
CN106326140A (zh) | 数据拷贝方法、直接内存访问控制器及计算机系统 | |
CN107479833B (zh) | 一种面向键值存储的远程非易失内存访问与管理方法 | |
CN105335323B (zh) | 一种数据突发的缓存装置和方法 | |
CN103455442A (zh) | 多通道先进先出缓存队列控制器及访问方法 | |
CN102567225A (zh) | 一种管理系统内存的方法及装置 | |
CN106951182A (zh) | 一种块设备缓存方法和装置 | |
CN101446932A (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 | ||
CP03 | Change of name, title or address |
Address after: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No. Patentee after: Xinhua three Technology Co., Ltd. Address before: 310053 Hangzhou hi tech Industrial Development Zone, Zhejiang province science and Technology Industrial Park, No. 310 and No. six road, HUAWEI, Hangzhou production base Patentee before: Huasan Communication Technology Co., Ltd. |
|
CP03 | Change of name, title or address |