内存分配方法、装置及可读存储介质与流程

文档序号:23669220发布日期:2021-01-15 14:09阅读:79来源:国知局
内存分配方法、装置及可读存储介质与流程

本发明涉及计算机技术领域,尤其涉及一种内存分配方法、装置及可读存储介质。



背景技术:

目前防火墙系统使用的内存管理为dpdk(dataplanedevelopmentkit,数据平面开发套件)开源套件中的堆内存管理机制,此内存管理机制在内存申请不频繁、分配内存及时归还、内存大小不确定时具有很好的稳定性和内存分配效率。此内存分片算法使用了大页内存机制,从根本上解决了tlbmiss(tlb:translationlookasidebuffer,转译后备缓冲区)带来的性能不稳定。此算法还能够自动合并相邻内存分片,减少内存碎片的生成,提升内存使用效率,是一种稳定可靠的内存分配算法,但是,防火墙系统内存分配大小随机,报文处理时延要求在微秒级,所以对内存分配的速度要求更高。当系统运行一段时间后,原本连续的内存会出现碎片,空闲链表长度增加,导致内存分配时查找合适大小的内存时间变长,极限情况下会存在遍历整个空闲链表,甚至无法找到合适的内存大小的情况。同时还存在多核并行申请内存的情况,当一个核长时间无法分配成功时,其它cpu(centralprocessingunit,中央处理器)都要处于等待状态。当防火墙系统业务压力增加,内存分配速率要求很高,内存无法快速申请时就会导致业务流程受阻,性能严重下降。

另一种常见的内存分配算法为伙伴算法,伙伴算法跟dpdk的堆内存管理算法最大的区别是空闲链表中空闲内存块的大小是否全部相同。伙伴算法以牺牲内存使用效率来换取内存分配速率。其使用二进制优化的思想,将内存以2的幂为单位进行切割分配,所有空闲链表上的内存块大小一致。合并时只能合并伙伴内存块,两个内存块是伙伴的三个条件是:大小相同、地址连续、分裂自同一个父块。此算法最大的优点是可以避免内存碎片,同时快速匹配到需要的空闲内存块,最大的缺点就是内存浪费和空闲内存无法分配。比如分配一个33字节的内存,需要在64固定大小的空闲链上分配。



技术实现要素:

针对现有技术存在的上述技术问题,本发明实施例提供一种内存分配方法、装置及可读存储介质。

第一方面,本发明实施例提供一种内存分配方法,包括:

获取申请内存的大小,根据所述申请内存的大小,基于修改后的dpdk空闲链表,进行内存分配;

其中,所述修改后的dpdk空闲链表为基于预设指标对dpdk空闲链表的个数进行增加后获得;并且,各空闲链表的内存区间间隔相同。

可选地,所述预设指标包括混合流量吞吐率和新建连接数;所述修改后的dpdk空闲链表的个数为150。

可选地,所述各空闲链表的内存区间间隔相同,包括:

各空闲链表的内存区间以第一预设字节的大小为间隔。

可选地,当所述空闲链表的内存区间范围超过第二预设字节的大小时,各空闲链表的内存区间以预设方式设置间隔。

可选地,所述第一预设字节为64byte;所述第二预设字节为8192byte;所述预设方式为以2的幂次方的方式增加。

可选地,所述根据所述申请内存的大小,基于所述修改后的dpdk空闲链表,进行内存分配,包括:

根据申请内存的大小,在与所述申请内存的大小对应的空闲链表的上一级空闲链表中查找与所述申请内存的大小对应的内存块;其中,所述上一级空闲链表的区间范围大于所述申请内存的大小。

第二方面,本发明实施例提供一种内存分配装置,包括:

内存分配模块,用于获取申请内存的大小,根据所述申请内存的大小,基于修改后的dpdk空闲链表,进行内存分配;

其中,所述修改后的dpdk空闲链表为基于预设指标对dpdk空闲链表的个数进行增加后获得;并且,各空闲链表的内存区间间隔相同。

可选地,所述预设指标包括混合流量吞吐率和新建连接数,所述修改后的dpdk空闲链表的个数为150。

第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述方法的步骤。

第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述方法的步骤。

本发明实施例提供的内存分配方法、装置及可读存储介质,该方法对dpdk空闲链表进行了修改,增加了dpdk空闲链表的个数,根据所述申请内存的大小,基于修改后的dpdk空闲链表,进行内存分配,通过修改dpdk空闲链表的个数,缩小了dpdk空闲内存链表的区间范围,同时大大降低了多cpu同时申请内存时的锁冲突概率,从而更好地提升了内存分配速度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的内存分配方法的流程示意图;

图2是本发明实施例提供的内存分配装置的结构示意图;

图3是本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

dpdk17.05.2空闲链表中空闲内存大小区间间隔为2的幂次方,区间数为13,最小空闲链表内存大小为区间为0b-256b,因此最后区间将存放1gb到maxsize的内存块。当需要分配固定大小的内存时,会从满足分配要求的空闲链表中找到第一个大小满足要求内存块。从空闲内存块切割出需要的内存大小之后,剩余的内存根据大小插入到满足要求的空闲链表中。每一个空闲链表中各内存块的大小不固定,但是其大小需要满足对应空闲链表的范围区间。空闲链表的区间范围如表1所示。

现有技术中基于上述dpdk空闲链表进行内存分配时存在的缺点主要体现在以下方面:

第一,内存空闲队列数少。防火墙系统使用的cpu都是多核,甚至是众核架构。内存空闲队列越少cpu之间产生锁冲突的概率越大,导致无法充分发挥cpu的性能。

第二,内存空闲队列单个区间跨度大。单个空闲队列会特别长,单次遍历时间久。比如:空闲队列区间如果是0-64b,则此队列上挂载的空闲块大小最多只有63种大小,其它大小的内存块会挂载到其它空闲队列。如果空闲队列区间是0-256b,则空闲内存块落到此区间的概率就更大,系统运行一段时间后空闲队列的长度也会更长。

对此,本发明实施例提供了一种内存分配方法,图1为本发明实施例提供的内存分配方法的流程示意图,如图1所述,该方法包括:

s101:获取申请内存的大小,根据所述申请内存的大小,基于修改后的dpdk空闲链表,进行内存分配;

其中,所述修改后的dpdk空闲链表为基于预设指标对dpdk空闲链表的个数进行增加后获得;并且,各空闲链表的内存区间间隔相同。

具体地,由上述表1可知,dpdk17.05.2空闲链表的个数为13,在应用dpdk堆内存管理算法的业务系统中,增加dpdk空闲链表的个数,直至使得系统在预设指标下的综合性能最好,进而获得修改后的dpdk空闲链表,由于空闲链表的个数得到了增加,并且,各空闲链表的内存区间间隔相同,相应地,缩小了各空闲内存链表的区间范围,在一定程度上解决了系统运行一段时间后空闲队列长度变长引起的分配效率低的问题。在进行内存分配时,获取申请内存的大小,根据所述申请内存的大小,基于修改后的dpdk空闲链表进行内存分配。

本发明实施例提供的方法,通过增加dpdk空闲链表的个数,缩小了空闲内存链表的区间范围,同时大大降低了多cpu同时申请内存时的锁冲突概率;仅修改了dpdk空闲链表的个别参数既能达到提升内存分配速度的目的;修改后dpdk空闲链表能够应用到防火墙产品中,以提升了防火墙产品的性能。

基于上述实施例,所述预设指标包括混合流量吞吐率和新建连接数;所述修改后的dpdk空闲链表的个数为150。

具体地,在应用dpdk堆内存管理算法的业务系统中,增加dpdk空闲链表的个数,基于流量吞吐率、新建连接数两项指标,综合评估在空闲链表的个数为150时,综合性能最好,所以将dpdk空闲链表的个数由原来的13修改为150。

本发明实施例提供的方法,基于流量吞吐率、新建连接数两项指标,将dpdk空闲链表的个数增加为150,缩小了空闲内存链表的区间范围,同时大大降低了多cpu同时申请内存时的锁冲突概率。

基于上述任一实施例,所述各空闲链表的内存区间间隔相同,包括:

各空闲链表的内存区间以第一预设字节的大小为间隔。

具体地,由于小块内存的使用比较频繁,很容易出现个别链表过长影响遍历效率。因此在小块内存的链表大小区间进行了特殊设计,将原来以2的幂次方增加方式改成固定的以第一预设字节的大小增长。

本发明实施例提供的方法,缩小了dpdk空闲内存链表的区间范围,可避免个别链表过长影响遍历效率,从而进一步提高内存分配效率。

基于上述任一实施例,当所述空闲链表的内存区间范围超过第二预设字节的大小时,各空闲链表的内存区间以预设方式设置间隔。

具体地,由于使用比较频繁的是小块内存,因此,当所述空闲链表的内存区间范围超过第二预设字节的大小时,各空闲链表的内存区间以预设方式设置间隔。

本发明实施例提供的方法,缩小了空闲内存链表的区间范围,同时大大降低了多cpu同时申请内存时的锁冲突概率。

基于上述任一实施例,所述第一预设字节为64byte;所述第二预设字节为8192byte;所述预设方式为以2的幂次方的方式增加。

具体地,由于小块内存的使用比较频繁,很容易出现个别链表过长影响遍历效率。因此在小块内存的链表大小区间进行了特殊设计,将原来以2的幂次方增加方式改成固定64byte大小增长,超过8k(8192byte)之后再以2的幂次方的方式增加。修改后的dpdk空闲链表的各区间范围如表2所示。

本发明实施例提供的方法,缩小了dpdk空闲内存链表的区间范围,可避免个别链表过长影响遍历效率,从而进一步提高内存分配效率。

现有技术中基于上述dpdk空闲链表进行内存分配时存在的缺点除上述的两个方面外,还具有空闲内存查找算法低效这一缺点,当需要一块固定大小的内存时,需要遍历所在区间的空闲链表。由于是顺序遍历,随机条件下平均要遍历空闲链表中一半的元素。最坏的条件下有可能查询不到合适大小的内存块,进而需要再次遍历上一级空闲链表。

对此,基于上述任一实施例,所述根据所述申请内存的大小,基于所述修改后的dpdk空闲链表,进行内存分配,包括:

根据申请内存的大小,在与所述申请内存的大小对应的空闲链表的上一级空闲链表中查找与所述申请内存的大小对应的内存块;其中,所述上一级空闲链表的区间范围大于所述申请内存的大小。

具体地,申请特定大小内存需要查找空闲链表时直接到上一级内存空闲链表中查找内存块,例如:如表2所示,若需要申请小于256b的内存,与该内存大小对应的空闲链表为编号为3,则在编号为3的空闲链表的上一级空闲链表中查找与所述申请内存的大小对应的内存块,即在编号为4、区间范围为256b~320b的空闲链表中进行内存分配。

本发明实施例提供的方法,不需要遍历空闲链表,而是利用内存链表的分布规律,寻找最快的查找路径,由于所查找的空闲链表中的内存块必然满足申请大小要求,从而提升了空闲内存查找效率。

为了测试本发明实施例的效果,在同一个硬件平台、相同的配置、使用相同的测试模型,采用本发明实施例提供的内存分配方法,内存分配效率得到了提升。

下面对本发明实施例提供的内存分配装置进行描述,下文描述的内存分配装置与上文描述的内存分配方法可相互对应参照。

基于上述任一实施例,图2为本发明实施例提供的内存分配装置的结构示意图,如图2所示,该内存分配装置包括内存分配模块201。

其中,内存分配模块201用于获取申请内存的大小,根据所述申请内存的大小,基于修改后的dpdk空闲链表,进行内存分配;其中,所述修改后的dpdk空闲链表为基于预设指标对dpdk空闲链表的个数进行增加后获得;并且,各空闲链表的内存区间间隔相同。

本发明实施例提供的装置,通过增加dpdk空闲链表的个数,缩小了空闲内存链表的区间范围,同时大大降低了多cpu同时申请内存时的锁冲突概率;仅修改了dpdk空闲链表的个别参数既能达到提升内存分配速度的目的;修改后dpdk空闲链表能够应用到防火墙产品中,以提升了防火墙产品的性能。

基于上述任一实施例,所述预设指标包括混合流量吞吐率和新建连接数,所述修改后的dpdk空闲链表的个数为150。

基于上述任一实施例,所述各空闲链表的内存区间间隔相同,包括:

各空闲链表的内存区间以第一预设字节的大小为间隔。

基于上述任一实施例,当所述空闲链表的内存区间范围超过第二预设字节的大小时,各空闲链表的内存区间以预设方式设置间隔。

基于上述任一实施例,所述第一预设字节为64byte;所述第二预设字节为8192byte;所述预设方式为以2的幂次方的方式增加。

基于上述任一实施例,所述根据所述申请内存的大小,基于所述修改后的dpdk空闲链表,进行内存分配,包括:

根据申请内存的大小,在与所述申请内存的大小对应的空闲链表的上一级空闲链表中查找与所述申请内存的大小对应的内存块;其中,所述上一级空闲链表的区间范围大于所述申请内存的大小。

本发明实施例的内存分配装置,可用于执行上述各内存分配方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图3示例了一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)310、通信接口(communicationsinterface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行上述各方法实施例提供的步骤流程。

此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的步骤流程。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1