一种报文缓存管理方法与装置.pdf

上传人:a2 文档编号:624000 上传时间:2018-02-26 格式:PDF 页数:19 大小:1.98MB
返回 下载 相关 举报
摘要
申请专利号:

CN201410356667.5

申请日:

2014.07.24

公开号:

CN104133784A

公开日:

2014.11.05

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 12/08申请日:20140724|||公开

IPC分类号:

G06F12/08

主分类号:

G06F12/08

申请人:

大唐移动通信设备有限公司

发明人:

赵金芳; 张义; 周保华; 张力; 陈魁

地址:

100083 北京市海淀区学院路29号

优先权:

专利代理机构:

北京路浩知识产权代理有限公司 11002

代理人:

王莹

PDF下载: PDF下载
内容摘要

本发明提供了一种报文缓存管理方法与装置,包括:创建用于管理缓存块状态的缓存状态表;当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;将调整后的数据指针作为入参释放缓存,本发明从整个报文生存周期的角度出发,实现报文在中央处理器内部各个模块间的零拷贝传输,提升包的吞吐性能,同时避免缓存使用者对原始地址的备份,以及由此造成的内存资源浪费。

权利要求书

1.  一种报文缓存管理方法,其特征在于,所述方法包括:
创建用于管理缓存块状态的缓存状态表;
当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;
在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;
根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移,以避免净荷的拷贝;
将调整后的数据指针作为入参释放缓存。

2.
  根据权利要求1所述的报文缓存管理方法,其特征在于,在创建用于管理缓存块状态的缓存状态表之前还包括:
将报文缓存空间分成大小相等的缓存块,并对所述缓存块进行编号。

3.
  根据权利要求1或2所述的报文缓存管理方法,其特征在于,所述创建用于管理缓存块状态的缓存状态表,具体包括:
构建一个整形数组;
根据缓存块的数量利用所述整形数组创建一个位图表得到缓存状态表,所述位图表中的每一位对应一个缓存块的状态。

4.
  根据权利要求1或2所述的报文缓存管理方法,其特征在于,所述当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块,具体包括:
获取当前的缓存申请和缓存释放的数量;
根据所述缓存申请和缓存释放的数量的差值来判断当前是否存在空闲状态的缓存块;
如果存在,则根据所述缓存状态表从当前游标的下一个缓存编号开始查找空闲缓存块。

5.
  根据权利要求1或2所述的报文缓存管理方法,其特征在于,当对报文头数据的操作为报文头封装时,所述在当前的可用头区空间内调整当前数据指针的地址偏移具体包括:
获取当前数据指针对应的缓存块内的可用头区空间的可用长度;
判断所述可用头区空间的可用长度是否大于封装报文头数据的长度;
若是,则在所述可用头区空间内对所述封装报文头数据进行缓存,并调整当前数据指针的地址。

6.
  根据权利要求2所述的报文缓存管理方法,其特征在于,所述将调整后的数据指针作为入参释放缓存具体包括:
获取调整后的数据指针;
判断所述数据指针是否处于缓存空间的数据指针的合法区域;
若否,则对非法地址的释放进行记录;若是,则根据所述数据指针计算缓存编号,并判断所述缓存编号是否在编号范围内,当所述缓存编号不在编号范围内时,则对非法地址的释放进行记录,当所述缓存编号在编号范围内时,则释放缓存,将当前缓存块在所述缓存状态表中的占用状态置为空闲状态,并进行缓存释放的计数。

7.
  根据权利要求5所述的报文缓存管理方法,其特征在于,当所述缓存编号在编号范围内时,还包括:
如果所述当前缓存块在所述缓存状态表中的初始状态已经为空闲时,进行重复缓存释放的计数。

8.
  一种报文缓存管理装置,其特征在于,所述装置包括:
缓存状态表创建模块,用于创建用于管理缓存块状态的缓存状态表;
查找模块,用于当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;
存储模块,用于在所述空闲缓存块的首地址处预留预设长度的头 区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;
地址偏移模块,用于根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;
缓存释放模块,用于在处理过程结束后将调整后的数据指针作为入参释放缓存。

9.
  根据权利要求8所述的报文缓存管理装置,其特征在于,所述装置还包括:
初始化模块,用于将报文缓存空间分成大小相等的缓存块,并对所述缓存块进行编号。

10.
  根据权利要求8或9所述的报文缓存管理装置,其特征在于,所述缓存状态表创建模块,具体包括:
数组构建单元,用于构建一个整形数组;
位图表创建单元,用于根据缓存块的数量利用所述整形数组创建一个位图表得到缓存状态表,所述位图表中的每一位对应一个缓存块的状态。

11.
  根据权利要求8或9所述的报文缓存管理装置,其特征在于,所述查找模块,具体包括:
获取单元,用于获取当前的缓存申请和缓存释放的数量;
状态判断单元,用于根据获取单元获得的所述缓存申请和缓存释放的数量的差值来判断当前是否存在空闲状态的缓存块;
查找单元,用于当判断单元的判断结果为存在空闲状态的缓存块时,根据所述缓存状态表从当前游标的下一个缓存编号开始查找空闲缓存块。

12.
  根据权利要求8或9所述的报文缓存管理装置,其特征在于,当对报文头数据的操作为报文头封装时,所述地址偏移模块包括:
空间长度获取单元,用于获取当前数据指针对应的缓存块内可用 头区空间的可用长度;
比较单元,用于比较所述可用头区空间的可用长度是否大于封装报文头数据的长度;
地址偏移单元,用于当所述比较单元的比较结果为是时,在所述可用头区空间内对所述封装报文头数据进行缓存,并调整当前数据指针的地址。

13.
  根据权利要求8所述的报文缓存管理装置,其特征在于,所述缓存释放模块,具体包括:
数据指针获取单元,用于获取调整后的数据指针;
指针合法性判断单元,用于判断所述数据指针是否处于缓存空间的数据指针的合法区域;
记录单元,用于当所述指针合法性判断单元的判断结果为否时,对非法地址的释放进行记录;
缓存释放单元,用于当所述指针合法性判断单元的判断结果为是时,根据所述数据指针计算缓存编号,并判断所述缓存编号是否在编号范围内,当所述缓存编号不在编号范围内时,则对非法地址的释放进行记录,当所述缓存编号在编号范围内时,则释放缓存,将当前缓存块在所述缓存状态表中的占用状态置为空闲状态,并进行缓存释放的计数,当所述缓存编号在编号范围内时,如果所述当前缓存块在所述缓存状态表中的初始状态已经为空闲,则所述缓存释放单元还用于进行重复缓存释放的计数。

说明书

一种报文缓存管理方法与装置
技术领域
本发明涉及数据通信技术领域,尤其涉及一种报文缓存管理方法与装置。
背景技术
随着信息技术的日益发展,对数据处理的吞吐性能尤其是报文吞吐性能的要求也日益提高。在数据报文的收发及数据处理过程中,必不可少的要利用缓存即内存块来存储和传递数据。
在传统的报文处理过程中,报文在缓存块的顶头放置,即报文的数据首地址与缓存首地址是一致的;在模块间传递数据时要通过数据拷贝搬移实现报文数据的交互,具体的,在某个模块对缓存B1中的报文处理完后,可能需要剥离或者封装报文头再交给另一模块的缓存B2,此时一般会涉及报文长度的变化,会需要进行数据拷贝搬移,且搬移后的数据一般仍从缓存B2的首地址开始放置。
参照图1,为现有技术中报文数据在多个模块间传输的缓存变更示意图。
参照图2,为现有技术中报文封装、解封装过程中报文数据在两个缓存间的搬移示意图。
为了实现报文从缓存B1到缓存B2的搬移,我们需要首先申请缓存B2、搬移数据,然后再释放缓存B1。反之亦然,数据从缓存B2搬迁到缓存B1的报文封装方向,除了数据的拷贝搬移,也存在新缓存的申请、老缓冲的释放操作。由此可知,现有的缓存管理技术,其关注点集中在缓存的申请、释放等基本操作上,主要存在以下缺点:
在跨协议层/跨模块的报文传输中,当封装、解封装数据报文头时,需要申请新缓存、将数据从老缓冲中搬移到新缓存中、之后再释 放老缓存,这一连串的操作造成性能上的瓶颈;而且现有的技术实现,在释放报文缓存时,均要求释放的缓存地址必须是申请时获取的原始缓存地址,这导致缓存的使用者在该缓存内访问或处理数据时,需要备份原始的缓存地址,在增加了使用者的存储消耗的同时,也增加了使用复杂度。
发明内容
(一)要解决的技术问题
本发明所要解决的技术问题是:现有技术在跨协议层/跨模块的报文传输中,当封装、解封装数据报文头时,需要申请新缓存、将数据从老缓存中搬移到新缓存中、之后再释放老缓存,这一连串的操作造成性能上的瓶颈问题;而且现有的技术在释放报文缓存时,均要求释放的缓存地址必须是申请时获取的原始缓存地址,这导致缓存的使用者在该缓存内访问或处理数据时,需要备份原始的缓存地址,在增加了使用者的内存消耗的同时也增加了使用复杂度。
(二)技术方案
为解决上述技术问题,本发明提供一种报文缓存管理方法,该方法包括:
创建用于管理缓存块状态的缓存状态表;
当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;
在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;
根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;
将调整后的数据指针作为入参释放缓存。
本发明还提供了一种报文缓存管理装置,该装置包括:
缓存状态表创建模块,用于创建用于管理缓存块状态的缓存状态 表;
查找模块,用于当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;
存储模块,用于在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;
地址偏移模块,用于根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;
缓存释放模块,用于在处理过程结束后将调整后的数据指针作为入参释放缓存。
(三)有益效果
通过采用本发明提供的报文缓存管理方法与装置,通过合理规划缓存块头部的预留空间,可实现报文在CPU内部各模块传输过程中的零拷贝传输,避免同一个报文在CPU内各模块间传输时的数据搬移、以及缓存申请/释放操作,可有效减少内存IO次数,使得包处理性能与报文长度无关成为可能,提高包吞吐性能;同时避免缓存使用者对原始地址的备份,以及由此造成的内存资源浪费以及缓存泄露问题。
附图说明
通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
图1为现有技术中报文数据在多个模块间传输的缓存变更示意图;
图2为现有技术中报文封装、解封装过程中报文数据在两个缓存间的搬移示意图;
图3为本发明一种报文缓存管理方法的流程图;
图4为本发明实施例中报文数据在多个模块间传输的缓存变更示意图;
图5为本发明实施例中管理缓存忙闲状态的位图表;
图6为本发明实施例中数据指针、缓存指针、可用头区的关系示意图;
图7为本发明实施例中报文头数据在封装与解封装过程中的可用头区的变化示意图;
图8为本发明实施例中报文收发、处理及传输过程的示意图;
图9为本发明一种报文缓存管理装置的模块图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本发明实施例1提供一种报文缓存管理方法,如图3所示,包括以下步骤:
S101:创建用于管理缓存块状态的缓存状态表;
S102:当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;
S103:在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;
S104:根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;其中,可用头区空间实际是指缓存块的首地址与数据首地址之间的空间,随着数据的封装头、剥离头,可用头区会变大变小。因此,可用头区空 间可能比预留的头区空间大,也可能比预留的头区空间小,在报文处理过程中,数据指针还有可能不在已有头区空间偏移,而是在报文首部的位置偏移,例如,在剥头时,是偏移到报文头后的位置。
S105:将调整后的数据指针作为入参释放缓存。
本发明实施例从全局角度统一规划和管理报文缓存,简单来说,对于入口进来的单个报文,从收到报文开始,到经过诸多模块的报文处理结束,并从输出口发送出去,整个报文处理的流水作业过程中,该报文总是使用的同一个报文缓存。如图4所示,整个报文处理流经了A、B、C三个模块,在各模块中传递的数据指针A1x随着各层封装/解封装可能会存在向前/向后偏移,但各个数据指针A1x所对应的缓存保持不变,均为缓存A1。
优选地,在创建用于管理缓存块状态的缓存状态表之前本方法还包括:将报文缓存空间分成大小相等的缓存块,并对所述缓存块进行编号。
本发明实施例中,缓存模块初始化时,对一块空间连续的大内存进行分块,每个内存块的大小均为P字节;首个内存块的首地址为Buffer0,第N个内存块的首地址为BufferN;其中最大共分配了M个缓存块(内存块);且第N个缓存块基地址BufferN与Buffer0地址之间存在以下换算关系:
BufferN=Buffer0+(P×N),N∈[0,M-1]
对于使用第N个缓存块的数据指针Pointer,其合法取值范围为:
BufferN≤Pointer<(BufferN+P)。
优选地,创建用于管理缓存状态的缓存状态表具体包括:构建一个整形数组;根据缓存块的数量利用所述整形数组创建一个位图表得到缓存状态表,所述位图表中的每一位对应一个缓存块的状态。
本发明实施例中,通过构建一个32位的整形数组来构造位图表,如图5所示,将上述位图表作为缓存状态表,用于管理缓存忙闲状态。对于M个缓存块的状态管理所需的数组大小为[(M+31)/32],其中,M为缓存块的个数。在初始化的时候,将该位图表数组的所有位均设为1,且初始游标指向第0比特位。游标取值范围【0..M-1】。该位图表中的每一个位对应一个缓存块的忙闲状态,位图表的比特位取0值,含义为缓存占用即忙状态,比特位取1值,含义为未用即闲状态。本发明实施例中为简便计,取M为32的整数倍。
本发明采用位图的方式,可有效避免同一个缓存重复释放所引起的缓存泄露问题。
优选地,当接收到报文缓存请求时,根据缓存状态表查找空闲缓存块具体包括:获取当前的缓存申请和缓存释放的数量;根据所述缓存申请和缓存释放的数量判断当前是否存在空闲状态的缓存块;如果存在,则根据所述缓存状态表从当前游标的下一个缓存编号开始查找空闲缓存块;
当前游标始终记录的是上一次成功申请到的缓存编号,因此从当前游标的下一个缓存编号开始查找,游标会根据每次的查找结果进行更新。
本实施例中,根据缓存状态表查找空闲缓存块的过程中,最多时可能要对缓存状态表查找接近一轮。
本发明实施例中,可以实现四个计数器:缓存申请计数器、缓存释放计数器、重复释放计数器、非法地址的释放计数器,初值均为0;
当用户从缓存管理模块中申请缓存时,首先判断:
缓存申请计数器–缓存释放计数器≥M;是否成立:若成立,则意味着缓存耗尽,申请失败;若不成立,则当前游标自增一后对M取模,并判断当前游标所在的32位整数是否为0:若为0,则意 味着当前的32位组中没有空闲缓存,继续搜索下一个32位组;重复本步骤直到找到一个非0的32位组;并将游标更新到指向该32位组的最低位;若不为0,则从游标所对应的比特位开始向“较高位”搜索找到第一个为“空闲”的位(最多搜索32次必能找到1个“空闲”位,若已搜索到当前位组的最高位仍未找到“空闲”位,则需回到当前位组的最低位继续搜索,并将游标更新到该位,申请成功后,找到的空闲缓存块的缓存地址Buffer由以下计算所得:
Buffer=Buffer0+(内存块大小P×游标N);
其中,每个内存块的大小均为P字节;首个内存块的首地址为Buffer0。
优选地,当对报文头数据的操作为报文头封装时,所述在当前的可用头区空间内调整当前数据指针的地址偏移具体包括:获取当前数据指针对应的缓存块内的可用头区空间的可用长度;判断所述可用头区空间的可用长度是否大于封装报文头数据的长度;若是,则在所述可用头区空间内对所述封装报文头数据进行缓存,并调整当前数据指针的地址
本发明实施例中,当需要对报文头进行封装时,还可以通过获取某数据指针所对应的缓存块内“可用头区”长度,进而在Engress方向封装报文头时判断“可用头区”的空间是否足够。图6给出了数据指针、缓存指针、可用头区的关系示意。
本发明实施例中,可用头区空间是会变化的。最开始的可用头区空间与预留头区空间的大小相等;当剥头后,可用头区会比预留头区大;当封装头后,可用头区可能会比预留头区小,图7为报文头数据在封装与解封装过程中的可用头区的变化示意图,其中,可用头区实际是指缓存的首地址与数据首地址之间的空间,随着数据的封装头、剥离头,可用头区会变大变小,具体为:在封装头时,可用头区或缩小;在剥离头时,可用头区会扩大。
优选地,将调整后的数据指针作为入参释放缓存具体包括:获取调整后的数据指针;判断所述数据指针是否处于缓存空间的数据指针的合法区域;若否,则对非法地址的释放进行记录;若是,则根据所述数据指针实现释放缓存,将当前缓存块在所述缓存状态表中的占用状态置为空闲状态,并进行缓存释放的计数。如果所述当前缓存块在所述缓存状态表中的初始状态已经为空闲时,进行重复缓存释放的计数。
本发明实施例中,当用户需要释放缓存时,释放的入参是可能经过偏移的数据指针Pointer;首先判断Pointer指针是否处于本缓存管理区域的数据指针的合法区域;若没处于本合法区域,则计数但不做释放处理;否则,根据Pointer计算出缓存编号,计算规则如下:
Num=(Pointer-Buffer0)/(内存块大小P)
若Num≥M,则意味着待释放的数据指针非法,“非法地址的释放计数器”自增一;
否则,意味着Num值小于M,则:
若位图表中的第Num个位为0,则置1,且“缓存释放计数器”自增一;
若位图表中的第Num个位已经为1,则探测到重复释放,重复释放计数器自增一。
本发明实施例实现了报文在CPU内部各模块传输过程中的零拷贝传输,避免同一个报文在CPU内各模块间传输时的数据搬移、以及缓存申请/释放操作,可有效减少内存IO次数,使得包处理性能与报文长度无关成为可能,提高包吞吐性能;同时避免缓存使用者对原始地址的备份,以及由此造成的内存资源浪费。
实施例2
本发明实施例2通过报文收发、处理及传输过程的具体实施步骤 对本发明一种报文缓存管理方法进行说明,如图8所示,包括:
步骤一:通过对整系统各模块的功能的分析,预先计算出流经本系统的报文的Ingress方向的最大剥离报文头的长度总和(假设为L1字节),以及Engress方向的最大封装报文头的长度总和(假设为L2字节);为了避免数据搬移,需要为数据的头部长度变化预留头区空间,本处假设入口报文在首次存入缓存时在本缓存的首部预留PreHdrRoom字节的头区空间,则PreHdrRoom的计算规则如下:
若L2<=L1,则PreHdrRoom值不小于0即可;
若L2>L1,则PreHdrRoom值不小于(L2-L1)即可。
本发明实施例可确保报文数据不会向低地址区越界;如果报文封装头部过程中,发现有“可用头区”长度不够的情形,需要计数,为步骤一的优化调整提供参考。
步骤二:在报文的输入口,申请缓存A1,申请到的缓存A1的原始地址为BufferN,则输入的报文从BufferN+PreHdrRoom位置开始存放;
步骤三:报文在其处理流水中的各个模块间流转,各模块的处理中,当需要剥离报文头时,数据指针向高地址偏移即可;当需要封装报文头时,将当前数据指针向低地址偏移所封装头的尺寸,从而有效避免了对数据包净荷部分的搬移操作;
步骤四:报文经过业务处理模块处理完毕后,最终从出口发送完成时,直接用发送报文的数据指针作为入参通知缓存管理模块释放缓存即可。
从上述步骤可以看到,在整个报文处理过程中,除了对数据报头的封装、解封转等处理时对头部数据的修改外,无需对净荷数据区的任何操作。在业务处理模块之间传输数据的过程中,无需传递原始缓存地址;且在释放缓存时,可以用数据指针地址代替原始缓存地址来进行释放。
实施例3
本发明实施例3提供一种报文缓存管理装置,如图9所示,该装置包括:
缓存状态表创建模块1,用于创建用于管理缓存块状态的缓存状态表;
查找模块2,用于当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;
存储模块3,用于在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;
地址偏移模块4,用于根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;
缓存释放模块5,用于在处理过程结束后将调整后的数据指针作为入参释放缓存。
优选地,该装置还可以包括:
初始化模块,用于将报文缓存空间分成大小相等的缓存块,并对所述缓存块进行编号。
优选地,缓存状态表创建模块1可以包括:
数组构建单元,用于构建一个整形数组;
位图表创建单元,用于根据缓存块的数量利用所述整形数组创建一个位图表得到缓存状态表,所述位图表中的每一位对应一个缓存块的状态。
优选地,查找模块2可以包括:
获取单元,用于获取当前的缓存申请和缓存释放的数量;
状态判断单元,用于根据获取单元获得的所述缓存申请和缓存释放的数量的差值来判断当前是否存在空闲状态的缓存块;
查找单元,用于当判断单元的判断结果为存在空闲状态的缓存 块时,根据所述缓存状态表从当前游标的下一个缓存编号开始查找空闲缓存块。
优选地,当对报文头数据的操作为报文头封装时,地址偏移模块4可以包括:
空间长度获取单元,用于获取当前数据指针对应的缓存块内的可用头区空间的可用长度;
比较单元,用于比较所述可用头区空间的可用长度是否大于封装报文头数据的长度;
地址偏移单元,用于当所述比较单元的比较结果为是时,在所述可用头区空间内对所述封装报文头数据进行缓存,并调整当前数据指针的地址。
优选地,缓存释放模块5可以包括:
数据指针获取单元,用于获取调整后的数据指针;
指针合法性判断单元,用于判断所述数据指针是否处于缓存空间的数据指针的合法区域;
记录单元,用于当所述指针合法性判断单元的判断结果为否时,对非法地址的释放进行记录;
缓存释放单元,用于当所述指针合法性判断单元的判断结果为是时,根据所述数据指针计算缓存编号,并判断所述缓存编号是否在编号范围内,当所述缓存编号不在编号范围内时,则对非法地址的释放进行记录,当所述缓存编号在编号范围内时,则释放缓存,将当前缓存块在所述缓存状态表中的占用状态置为空闲状态,并进行缓存释放的计数,当所述缓存编号在编号范围内时,如果所述当前缓存块在所述缓存状态表中的初始状态已经为空闲,则所述缓存释放单元还用于进行重复缓存释放的计数。
可见,本发明实施例具有如下有益效果:
通过合理规划缓存头部的预留空间,可实现报文在各模块传输过 程中的零拷贝传输,避免同一个报文在各模块间传输时的数据搬移、以及缓存申请/释放操作,可有效减少内存IO次数,使得包处理性能与报文长度无关成为可能;
报文在模块间传递的过程中,无需传递原始缓存地址;在释放报文缓存的时候,通过释放该报文缓存中的任一偏移后的地址仍可以正确释放该报文缓存,极大的方便编程人员的使用;
相对于采用空闲缓存队列的缓存管理,本发明采用位图的方式,可有效避免同一个缓存重复释放所引起的缓存泄露问题。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。

一种报文缓存管理方法与装置.pdf_第1页
第1页 / 共19页
一种报文缓存管理方法与装置.pdf_第2页
第2页 / 共19页
一种报文缓存管理方法与装置.pdf_第3页
第3页 / 共19页
点击查看更多>>
资源描述

《一种报文缓存管理方法与装置.pdf》由会员分享,可在线阅读,更多相关《一种报文缓存管理方法与装置.pdf(19页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN104133784A43申请公布日20141105CN104133784A21申请号201410356667522申请日20140724G06F12/0820060171申请人大唐移动通信设备有限公司地址100083北京市海淀区学院路29号72发明人赵金芳张义周保华张力陈魁74专利代理机构北京路浩知识产权代理有限公司11002代理人王莹54发明名称一种报文缓存管理方法与装置57摘要本发明提供了一种报文缓存管理方法与装置,包括创建用于管理缓存块状态的缓存状态表;当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存。

2、地址作为数据首地址存放发送所述报文缓存请求的报文;根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;将调整后的数据指针作为入参释放缓存,本发明从整个报文生存周期的角度出发,实现报文在中央处理器内部各个模块间的零拷贝传输,提升包的吞吐性能,同时避免缓存使用者对原始地址的备份,以及由此造成的内存资源浪费。51INTCL权利要求书3页说明书7页附图8页19中华人民共和国国家知识产权局12发明专利申请权利要求书3页说明书7页附图8页10申请公布号CN104133784ACN104133784A1/3页21一种报文缓存管理方法,其特征在于,所述方法包括创建用。

3、于管理缓存块状态的缓存状态表;当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移,以避免净荷的拷贝;将调整后的数据指针作为入参释放缓存。2根据权利要求1所述的报文缓存管理方法,其特征在于,在创建用于管理缓存块状态的缓存状态表之前还包括将报文缓存空间分成大小相等的缓存块,并对所述缓存块进行编号。3根据权利要求1或2所述的报文缓存管理方法,其特征在于,所述创建用于管理缓存块状态的缓存状态表。

4、,具体包括构建一个整形数组;根据缓存块的数量利用所述整形数组创建一个位图表得到缓存状态表,所述位图表中的每一位对应一个缓存块的状态。4根据权利要求1或2所述的报文缓存管理方法,其特征在于,所述当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块,具体包括获取当前的缓存申请和缓存释放的数量;根据所述缓存申请和缓存释放的数量的差值来判断当前是否存在空闲状态的缓存块;如果存在,则根据所述缓存状态表从当前游标的下一个缓存编号开始查找空闲缓存块。5根据权利要求1或2所述的报文缓存管理方法,其特征在于,当对报文头数据的操作为报文头封装时,所述在当前的可用头区空间内调整当前数据指针的地址偏移具体包括获取。

5、当前数据指针对应的缓存块内的可用头区空间的可用长度;判断所述可用头区空间的可用长度是否大于封装报文头数据的长度;若是,则在所述可用头区空间内对所述封装报文头数据进行缓存,并调整当前数据指针的地址。6根据权利要求2所述的报文缓存管理方法,其特征在于,所述将调整后的数据指针作为入参释放缓存具体包括获取调整后的数据指针;判断所述数据指针是否处于缓存空间的数据指针的合法区域;若否,则对非法地址的释放进行记录;若是,则根据所述数据指针计算缓存编号,并判断所述缓存编号是否在编号范围内,当所述缓存编号不在编号范围内时,则对非法地址的释放进行记录,当所述缓存编号在编号范围内时,则释放缓存,将当前缓存块在所述缓。

6、存状态表中的占用状态置为空闲状态,并进行缓存释放的计数。7根据权利要求5所述的报文缓存管理方法,其特征在于,当所述缓存编号在编号范围内时,还包括权利要求书CN104133784A2/3页3如果所述当前缓存块在所述缓存状态表中的初始状态已经为空闲时,进行重复缓存释放的计数。8一种报文缓存管理装置,其特征在于,所述装置包括缓存状态表创建模块,用于创建用于管理缓存块状态的缓存状态表;查找模块,用于当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;存储模块,用于在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;地址偏移模块,用于根据报。

7、文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;缓存释放模块,用于在处理过程结束后将调整后的数据指针作为入参释放缓存。9根据权利要求8所述的报文缓存管理装置,其特征在于,所述装置还包括初始化模块,用于将报文缓存空间分成大小相等的缓存块,并对所述缓存块进行编号。10根据权利要求8或9所述的报文缓存管理装置,其特征在于,所述缓存状态表创建模块,具体包括数组构建单元,用于构建一个整形数组;位图表创建单元,用于根据缓存块的数量利用所述整形数组创建一个位图表得到缓存状态表,所述位图表中的每一位对应一个缓存块的状态。11根据权利要求8或9所述的报文缓存管理装置,其。

8、特征在于,所述查找模块,具体包括获取单元,用于获取当前的缓存申请和缓存释放的数量;状态判断单元,用于根据获取单元获得的所述缓存申请和缓存释放的数量的差值来判断当前是否存在空闲状态的缓存块;查找单元,用于当判断单元的判断结果为存在空闲状态的缓存块时,根据所述缓存状态表从当前游标的下一个缓存编号开始查找空闲缓存块。12根据权利要求8或9所述的报文缓存管理装置,其特征在于,当对报文头数据的操作为报文头封装时,所述地址偏移模块包括空间长度获取单元,用于获取当前数据指针对应的缓存块内可用头区空间的可用长度;比较单元,用于比较所述可用头区空间的可用长度是否大于封装报文头数据的长度;地址偏移单元,用于当所述。

9、比较单元的比较结果为是时,在所述可用头区空间内对所述封装报文头数据进行缓存,并调整当前数据指针的地址。13根据权利要求8所述的报文缓存管理装置,其特征在于,所述缓存释放模块,具体包括数据指针获取单元,用于获取调整后的数据指针;指针合法性判断单元,用于判断所述数据指针是否处于缓存空间的数据指针的合法区域;记录单元,用于当所述指针合法性判断单元的判断结果为否时,对非法地址的释放进行记录;缓存释放单元,用于当所述指针合法性判断单元的判断结果为是时,根据所述数据指权利要求书CN104133784A3/3页4针计算缓存编号,并判断所述缓存编号是否在编号范围内,当所述缓存编号不在编号范围内时,则对非法地址。

10、的释放进行记录,当所述缓存编号在编号范围内时,则释放缓存,将当前缓存块在所述缓存状态表中的占用状态置为空闲状态,并进行缓存释放的计数,当所述缓存编号在编号范围内时,如果所述当前缓存块在所述缓存状态表中的初始状态已经为空闲,则所述缓存释放单元还用于进行重复缓存释放的计数。权利要求书CN104133784A1/7页5一种报文缓存管理方法与装置技术领域0001本发明涉及数据通信技术领域,尤其涉及一种报文缓存管理方法与装置。背景技术0002随着信息技术的日益发展,对数据处理的吞吐性能尤其是报文吞吐性能的要求也日益提高。在数据报文的收发及数据处理过程中,必不可少的要利用缓存即内存块来存储和传递数据。00。

11、03在传统的报文处理过程中,报文在缓存块的顶头放置,即报文的数据首地址与缓存首地址是一致的;在模块间传递数据时要通过数据拷贝搬移实现报文数据的交互,具体的,在某个模块对缓存B1中的报文处理完后,可能需要剥离或者封装报文头再交给另一模块的缓存B2,此时一般会涉及报文长度的变化,会需要进行数据拷贝搬移,且搬移后的数据一般仍从缓存B2的首地址开始放置。0004参照图1,为现有技术中报文数据在多个模块间传输的缓存变更示意图。0005参照图2,为现有技术中报文封装、解封装过程中报文数据在两个缓存间的搬移示意图。0006为了实现报文从缓存B1到缓存B2的搬移,我们需要首先申请缓存B2、搬移数据,然后再释放。

12、缓存B1。反之亦然,数据从缓存B2搬迁到缓存B1的报文封装方向,除了数据的拷贝搬移,也存在新缓存的申请、老缓冲的释放操作。由此可知,现有的缓存管理技术,其关注点集中在缓存的申请、释放等基本操作上,主要存在以下缺点0007在跨协议层/跨模块的报文传输中,当封装、解封装数据报文头时,需要申请新缓存、将数据从老缓冲中搬移到新缓存中、之后再释放老缓存,这一连串的操作造成性能上的瓶颈;而且现有的技术实现,在释放报文缓存时,均要求释放的缓存地址必须是申请时获取的原始缓存地址,这导致缓存的使用者在该缓存内访问或处理数据时,需要备份原始的缓存地址,在增加了使用者的存储消耗的同时,也增加了使用复杂度。发明内容0。

13、008一要解决的技术问题0009本发明所要解决的技术问题是现有技术在跨协议层/跨模块的报文传输中,当封装、解封装数据报文头时,需要申请新缓存、将数据从老缓存中搬移到新缓存中、之后再释放老缓存,这一连串的操作造成性能上的瓶颈问题;而且现有的技术在释放报文缓存时,均要求释放的缓存地址必须是申请时获取的原始缓存地址,这导致缓存的使用者在该缓存内访问或处理数据时,需要备份原始的缓存地址,在增加了使用者的内存消耗的同时也增加了使用复杂度。0010二技术方案0011为解决上述技术问题,本发明提供一种报文缓存管理方法,该方法包括0012创建用于管理缓存块状态的缓存状态表;说明书CN104133784A2/7。

14、页60013当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;0014在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;0015根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;0016将调整后的数据指针作为入参释放缓存。0017本发明还提供了一种报文缓存管理装置,该装置包括0018缓存状态表创建模块,用于创建用于管理缓存块状态的缓存状态表;0019查找模块,用于当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;0020存储模块,用于在所述空闲缓存块的首地址处预留预设长度的。

15、头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;0021地址偏移模块,用于根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;0022缓存释放模块,用于在处理过程结束后将调整后的数据指针作为入参释放缓存。0023三有益效果0024通过采用本发明提供的报文缓存管理方法与装置,通过合理规划缓存块头部的预留空间,可实现报文在CPU内部各模块传输过程中的零拷贝传输,避免同一个报文在CPU内各模块间传输时的数据搬移、以及缓存申请/释放操作,可有效减少内存IO次数,使得包处理性能与报文长度无关成为可能,提高包吞吐性能;同时避免缓存使用者对原。

16、始地址的备份,以及由此造成的内存资源浪费以及缓存泄露问题。附图说明0025通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中0026图1为现有技术中报文数据在多个模块间传输的缓存变更示意图;0027图2为现有技术中报文封装、解封装过程中报文数据在两个缓存间的搬移示意图;0028图3为本发明一种报文缓存管理方法的流程图;0029图4为本发明实施例中报文数据在多个模块间传输的缓存变更示意图;0030图5为本发明实施例中管理缓存忙闲状态的位图表;0031图6为本发明实施例中数据指针、缓存指针、可用头区的关系示意图;0032图7为本发明实施例中报文。

17、头数据在封装与解封装过程中的可用头区的变化示意图;0033图8为本发明实施例中报文收发、处理及传输过程的示意图;0034图9为本发明一种报文缓存管理装置的模块图。具体实施方式0035为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例说明书CN104133784A3/7页7中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。0036实施例10037本发明实施例1提供一种报文缓存管理方法,如图3所示。

18、,包括以下步骤0038S101创建用于管理缓存块状态的缓存状态表;0039S102当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;0040S103在所述空闲缓存块的首地址处预留预设长度的头区空间后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;0041S104根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;其中,可用头区空间实际是指缓存块的首地址与数据首地址之间的空间,随着数据的封装头、剥离头,可用头区会变大变小。因此,可用头区空间可能比预留的头区空间大,也可能比预留的头区空间小,在报文处理过程中,数据指针还有可能不在已有头。

19、区空间偏移,而是在报文首部的位置偏移,例如,在剥头时,是偏移到报文头后的位置。0042S105将调整后的数据指针作为入参释放缓存。0043本发明实施例从全局角度统一规划和管理报文缓存,简单来说,对于入口进来的单个报文,从收到报文开始,到经过诸多模块的报文处理结束,并从输出口发送出去,整个报文处理的流水作业过程中,该报文总是使用的同一个报文缓存。如图4所示,整个报文处理流经了A、B、C三个模块,在各模块中传递的数据指针A1X随着各层封装/解封装可能会存在向前/向后偏移,但各个数据指针A1X所对应的缓存保持不变,均为缓存A1。0044优选地,在创建用于管理缓存块状态的缓存状态表之前本方法还包括将报。

20、文缓存空间分成大小相等的缓存块,并对所述缓存块进行编号。0045本发明实施例中,缓存模块初始化时,对一块空间连续的大内存进行分块,每个内存块的大小均为P字节;首个内存块的首地址为BUFFER0,第N个内存块的首地址为BUFFERN;其中最大共分配了M个缓存块内存块;且第N个缓存块基地址BUFFERN与BUFFER0地址之间存在以下换算关系0046BUFFERNBUFFER0PN,N0,M10047对于使用第N个缓存块的数据指针POINTER,其合法取值范围为0048BUFFERNPOINTERL1,则PREHDRROOM值不小于L2L1即可。0076本发明实施例可确保报文数据不会向低地址区越界。

21、;如果报文封装头部过程中,发现有“可用头区”长度不够的情形,需要计数,为步骤一的优化调整提供参考。0077步骤二在报文的输入口,申请缓存A1,申请到的缓存A1的原始地址为BUFFERN,则输入的报文从BUFFERNPREHDRROOM位置开始存放;0078步骤三报文在其处理流水中的各个模块间流转,各模块的处理中,当需要剥离报文头时,数据指针向高地址偏移即可;当需要封装报文头时,将当前数据指针向低地址偏移所封装头的尺寸,从而有效避免了对数据包净荷部分的搬移操作;0079步骤四报文经过业务处理模块处理完毕后,最终从出口发送完成时,直接用发送报文的数据指针作为入参通知缓存管理模块释放缓存即可。008。

22、0从上述步骤可以看到,在整个报文处理过程中,除了对数据报头的封装、解封转等处理时对头部数据的修改外,无需对净荷数据区的任何操作。在业务处理模块之间传输数据的过程中,无需传递原始缓存地址;且在释放缓存时,可以用数据指针地址代替原始缓存地址来进行释放。0081实施例3说明书CN104133784A6/7页100082本发明实施例3提供一种报文缓存管理装置,如图9所示,该装置包括0083缓存状态表创建模块1,用于创建用于管理缓存块状态的缓存状态表;0084查找模块2,用于当接收到报文缓存请求时,根据所述缓存状态表查找空闲缓存块;0085存储模块3,用于在所述空闲缓存块的首地址处预留预设长度的头区空间。

23、后以当前内存地址作为数据首地址存放发送所述报文缓存请求的报文;0086地址偏移模块4,用于根据报文处理过程中对报文头数据的操作在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;0087缓存释放模块5,用于在处理过程结束后将调整后的数据指针作为入参释放缓存。0088优选地,该装置还可以包括0089初始化模块,用于将报文缓存空间分成大小相等的缓存块,并对所述缓存块进行编号。0090优选地,缓存状态表创建模块1可以包括0091数组构建单元,用于构建一个整形数组;0092位图表创建单元,用于根据缓存块的数量利用所述整形数组创建一个位图表得到缓存状态表,所述位图表中的每一位对应一个缓存块的状态。

24、。0093优选地,查找模块2可以包括0094获取单元,用于获取当前的缓存申请和缓存释放的数量;0095状态判断单元,用于根据获取单元获得的所述缓存申请和缓存释放的数量的差值来判断当前是否存在空闲状态的缓存块;0096查找单元,用于当判断单元的判断结果为存在空闲状态的缓存块时,根据所述缓存状态表从当前游标的下一个缓存编号开始查找空闲缓存块。0097优选地,当对报文头数据的操作为报文头封装时,地址偏移模块4可以包括0098空间长度获取单元,用于获取当前数据指针对应的缓存块内的可用头区空间的可用长度;0099比较单元,用于比较所述可用头区空间的可用长度是否大于封装报文头数据的长度;0100地址偏移单。

25、元,用于当所述比较单元的比较结果为是时,在所述可用头区空间内对所述封装报文头数据进行缓存,并调整当前数据指针的地址。0101优选地,缓存释放模块5可以包括0102数据指针获取单元,用于获取调整后的数据指针;0103指针合法性判断单元,用于判断所述数据指针是否处于缓存空间的数据指针的合法区域;0104记录单元,用于当所述指针合法性判断单元的判断结果为否时,对非法地址的释放进行记录;0105缓存释放单元,用于当所述指针合法性判断单元的判断结果为是时,根据所述数据指针计算缓存编号,并判断所述缓存编号是否在编号范围内,当所述缓存编号不在编号范围内时,则对非法地址的释放进行记录,当所述缓存编号在编号范围。

26、内时,则释放缓存,将当前缓存块在所述缓存状态表中的占用状态置为空闲状态,并进行缓存释放的计数,当说明书CN104133784A107/7页11所述缓存编号在编号范围内时,如果所述当前缓存块在所述缓存状态表中的初始状态已经为空闲,则所述缓存释放单元还用于进行重复缓存释放的计数。0106可见,本发明实施例具有如下有益效果0107通过合理规划缓存头部的预留空间,可实现报文在各模块传输过程中的零拷贝传输,避免同一个报文在各模块间传输时的数据搬移、以及缓存申请/释放操作,可有效减少内存IO次数,使得包处理性能与报文长度无关成为可能;0108报文在模块间传递的过程中,无需传递原始缓存地址;在释放报文缓存的。

27、时候,通过释放该报文缓存中的任一偏移后的地址仍可以正确释放该报文缓存,极大的方便编程人员的使用;0109相对于采用空闲缓存队列的缓存管理,本发明采用位图的方式,可有效避免同一个缓存重复释放所引起的缓存泄露问题。0110通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质可以是CDROM,U盘,移动硬盘等中,包括若干指令用以使得一台计算机设备可以是个人计算机,服务器,或者网络设备等执行本发明各个实施例所述的方法。011。

28、1本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。0112本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。0113以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。说明书CN104133784A111/8页12图1说明书附图CN104133784A122/8页13图2说明书附图CN104133784A133/8页14图3说明书附图CN104133784A144/8页15图4说明书附图CN104133784A155/8页16图5图6说明书附图CN104133784A166/8页17图7说明书附图CN104133784A177/8页18图8说明书附图CN104133784A188/8页19图9说明书附图CN104133784A19。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1