CN108132889A - 内存管理方法、装置、计算机可读存储介质及电子设备 - Google Patents

内存管理方法、装置、计算机可读存储介质及电子设备 Download PDF

Info

Publication number
CN108132889A
CN108132889A CN201711385011.6A CN201711385011A CN108132889A CN 108132889 A CN108132889 A CN 108132889A CN 201711385011 A CN201711385011 A CN 201711385011A CN 108132889 A CN108132889 A CN 108132889A
Authority
CN
China
Prior art keywords
memory
message
function module
module
memory pool
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
Application number
CN201711385011.6A
Other languages
English (en)
Other versions
CN108132889B (zh
Inventor
刘健男
党丽娜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Neusoft Corp
Original Assignee
Neusoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Neusoft Corp filed Critical Neusoft Corp
Priority to CN201711385011.6A priority Critical patent/CN108132889B/zh
Publication of CN108132889A publication Critical patent/CN108132889A/zh
Application granted granted Critical
Publication of CN108132889B publication Critical patent/CN108132889B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本公开涉及一种内存管理方法、装置、计算机可读存储介质及电子设备,所述方法包括:接收来自各个功能模块的第一注册请求;接收来自所述驱动模块的第二注册请求;根据所述第二注册请求,为所述驱动模块分配与所述驱动模块所需的内存大小相等的驱动内存池;在任一所述功能模块在所述驱动内存池中的当前缓存的报文个数超过该功能模块能够在所述驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除所述驱动内存池之外的内存池中申请一报文缓存单元,并将该功能模块当前接收到的报文缓存到所述报文缓存单元。因此,可以有效提升基于该内存管理方法进行内存管理的报文转发系统的稳定性的健壮性。

Description

内存管理方法、装置、计算机可读存储介质及电子设备
技术领域
本公开涉及内存管理领域,具体地,涉及一种内存管理方法、装置、计算机可读存储介质及电子设备。
背景技术
现有技术中,在报文转发的过程中,多个功能模块会使用系统提供给驱动模块的驱动内存池中的内存,当功能模块需要缓存报文时,也是在驱动内存池中进行缓存。各个功能模块可以根据其使用需求使用驱动内存池,而驱动内存池的内存大小是有限的。因此,很有可能导致驱动内存池中的内存迅速被使用完。在这种情况下,由于驱动内存池中无可用内存,驱动模块则难以对正常的报文进行处理,从而导致报文转发失败。
发明内容
为了解决上述问题,本公开提供一种内存管理方法、装置、计算机可读存储介质及电子设备。
根据本公开的第一方面,提供一种内存管理方法,所述方法包括:
接收来自各个功能模块的第一注册请求,其中,所述功能模块为需要在驱动模块对应的驱动内存池中缓存报文的模块,所述第一注册请求中包括发起该第一注册请求的功能模块能够在所述驱动内存池中缓存的报文的最大个数;
接收来自所述驱动模块的第二注册请求,其中,所述第二注册请求中包括所述驱动模块所需的内存大小,所述内存大小大于所述各个功能模块在所述驱动内存池中缓存的报文均达到最大个数时所占用的内存;
根据所述第二注册请求,为所述驱动模块分配与所述驱动模块所需的内存大小相等的驱动内存池;
在任一所述功能模块在所述驱动内存池中的当前缓存的报文个数超过该功能模块能够在所述驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除所述驱动内存池之外的内存池中申请一报文缓存单元,并将该功能模块当前接收到的报文缓存到所述报文缓存单元。
可选地,所述第一注册请求中还包括发起该第一注册请求的功能模块所需的内存大小;
所述方法还包括:
根据所述第一注册请求,在通用内存池中,为所述各个功能模块分配与该功能模块所需的内存大小相等的内存,其中,所述通用内存池与所述驱动内存池相互独立。
可选地,所述在除所述驱动内存池之外的内存池中申请一报文缓存单元,包括:
确定所述通用内存池中与该功能模块对应的内存中是否有未使用内存;
若有未使用内存,在所述未使用内存中申请一报文缓存单元。
可选地,所述在除所述驱动内存池之外的内存池中申请一报文缓存单元,还包括:
若无未使用内存,从动态内存池中申请一报文缓存单元,其中,所述动态内存池是从所述各个功能模块分配内存后的所述通用内存池的剩余内存中申请的。
可选地,所述方法还包括:
在所述动态内存池中无缓存报文,且通用内存池中与该功能模块对应的内存中有未使用内存时,释放所述动态内存池。
可选地,在所述在任一所述功能模块在所述驱动内存池中的当前缓存的报文个数超过该功能模块能够在所述驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除所述驱动内存池之外的内存池中申请一报文缓存单元的步骤之前,所述方法还包括:
将任一功能模块当前接收到的报文缓存至所述驱动内存池中该功能模块对应的内存;
所述将该功能模块当前接收到的报文缓存到所述报文缓存单元,包括:
将该功能模块当前接收到的报文的复制报文缓存至所述报文缓存单元;
将所述驱动内存池中缓存的所述当前接收到的报文释放。
可选地,所述第一注册请求中还包括发起该第一注册请求的功能模块的优先级;以及
通过如下方式确定功能模块当前接收到的报文是否需要缓存:
在所述功能模块的优先级高于预设的优先级阈值时,确定所述功能模块当前接收到的报文需要缓存。
可选地,所述驱动模块所需的内存大小是根据各个所述功能模块能够在所述驱动内存池中缓存的报文的最大个数、以及网卡的发包队列和收包队列中能够缓存的报文的最大个数进行设置的。
可选地,所述方法还包括:
在网卡的发包队列中的报文的个数低于报文缓存阈值时,以预设时间间隔释放所述发包队列中已转发的报文,其中,所述报文缓存阈值小于所述发包队列中能够缓存的报文的最大个数。
根据本公开的第二方面,提供一种内存管理装置,所述装置包括:
第一接收模块,用于接收来自各个功能模块的第一注册请求,其中,所述功能模块为需要在驱动模块对应的驱动内存池中缓存报文的模块,所述第一注册请求中包括发起该第一注册请求的功能模块能够在所述驱动内存池中缓存的报文的最大个数;
第二接收模块,用于接收来自所述驱动模块的第二注册请求,其中,所述第二注册请求中包括所述驱动模块所需的内存大小,所述内存大小大于所述各个功能模块在所述驱动内存池中缓存的报文均达到最大个数时所占用的内存;
第一分配模块,用于根据所述第二注册请求,为所述驱动模块分配与所述驱动模块所需的内存大小相等的驱动内存池;
处理模块,用于在任一所述功能模块在所述驱动内存池中的当前缓存的报文个数超过该功能模块能够在所述驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除所述驱动内存池之外的内存池中申请一报文缓存单元,并将该功能模块当前接收到的报文缓存到所述报文缓存单元。
可选地,所述第一注册请求中还包括发起该第一注册请求的功能模块所需的内存大小;
所述装置还包括:
第二分配模块,用于根据所述第一注册请求,在通用内存池中,为所述各个功能模块分配与该功能模块所需的内存大小相等的内存,其中,所述通用内存池与所述驱动内存池相互独立。
可选地,所述处理模块包括:
确定子模块,用于确定所述通用内存池中与该功能模块对应的内存中是否有未使用内存;
第一申请子模块,用于在所述确定子模块确定所述通用内存池中与该功能模块对应的内存中有未使用内存,在所述未使用内存中申请一报文缓存单元。
可选地,所述处理模块还包括:
第二申请子模块,用于在所述确定子模块确定所述通用内存池中与该功能模块对应的内存中无未使用内存时,从动态内存池中申请一报文缓存单元,其中,所述动态内存池是从所述各个功能模块分配内存后的所述通用内存池的剩余内存中申请的。
可选地,所述装置还包括:
第一释放模块,用于在所述动态内存池中无缓存报文,且通用内存池中与该功能模块对应的内存中有未使用内存时,释放所述动态内存池。
可选地,所述装置还包括:
缓存模块,用于在所述处理模块确定在任一所述功能模块在所述驱动内存池中的当前缓存的报文个数超过该功能模块能够在所述驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除所述驱动内存池之外的内存池中申请一报文缓存单元之前,将任一功能模块当前接收到的报文缓存至所述驱动内存池中该功能模块对应的内存;
所述处理模块用于将该功能模块当前接收到的报文的复制报文缓存至所述报文缓存单元;以及,将所述驱动内存池中缓存的所述当前接收到的报文释放。
可选地,所述第一注册请求中还包括发起该第一注册请求的功能模块的优先级;以及
所述处理模块用于通过如下方式确定功能模块当前接收到的报文是否需要缓存:
在所述功能模块的优先级高于预设的优先级阈值时,确定所述功能模块当前接收到的报文需要缓存。
可选地,所述驱动模块所需的内存大小是根据各个所述功能模块能够在所述驱动内存池中缓存的报文的最大个数、以及网卡的发包队列和收包队列中能够缓存的报文的最大个数进行设置的。
可选地,所述装置还包括:
第二释放模块,用于在网卡的发包队列中的报文的个数低于报文缓存阈值时,以预设时间间隔释放所述发包队列中已转发的报文,其中,所述报文缓存阈值小于所述发包队列中能够缓存的报文的最大个数。
根据本公开的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面所述方法的步骤。
根据本公开的第四方面,提供一种电子设备,包括:
第四方面所述的计算机可读存储介质;以及
一个或者多个处理器,用于执行所述计算机可读存储介质中的程序。
在上述技术方案中,内存管理模块接收来自各个功能模块的第一注册请求,从而可以确定出各个功能模块能够在驱动内存池中缓存报文的最大个数,从而可以有效避免功能模块在驱动内存池中缓存过多报文、导致驱动模块难以处理正常报文的现象,提高转发系统的健壮性。同时,对于在驱动内存池中的当前缓存的报文个数超过功能模块能够在驱动内存池中缓存的报文的最大个数、且该功能模块需要对当前接收到的报文进行缓存时,可以将该报文缓存至除驱动内存池之外的内存池,既可以实现对该报文的缓存,又不会占用驱动模块所对应的驱动内存池,提升报文转发性能。另外,在本公开提供的方法中,对各个功能模块能够在驱动内存池中缓存报文的最大个数进行限制,使得该方法可以防御任何以耗尽系统内存为原理的攻击,不会出现因驱动内存池内存不足而导致驱动模块难以处理正常报文的现象,有效提升基于该方法进行内存管理的报文转发系统的稳定性。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是根据本公开的一种实施方式提供的内存管理方法的流程图;
图2是在除驱动内存池之外的内存池中申请一报文缓存单元的一种示例实现方式的流程图;
图3是根据本公开的一种实施方式提供的内存管理装置的框图。
图4是根据本公开的一种实施方式提供的内存管理装置中处理模块的框图;
图5是根据一示例性实施例示出的一种电子设备的框图;
图6是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
在本公开中,为了便于对内存进行管理,可以新建一内存管理模块对系统内存进行统一管理。具体地,图1所示,为根据本公开的一种实施方式提供的内存管理方法的流程图,如图1所示,该方法可以应用于内存管理模块,所述方法包括:
在S11中,接收来自各个功能模块的第一注册请求,其中,所述功能模块为需要在驱动模块对应的驱动内存池中缓存报文的模块,所述第一注册请求中包括发起该第一注册请求的功能模块能够在所述驱动内存池中缓存的报文的最大个数。
其中,内存管理模块可以根据功能模块能够在驱动内存池中缓存的报文的最大个数对该功能模块使用驱动内存池的内存大小进行限制,避免各个功能模块使用过多驱动内存池中的内存。
可选地,所述第一注册请求中还包括发起该第一注册请求的功能模块所需的内存大小;
所述方法还包括:
根据所述第一注册请求,在通用内存池中,为所述各个功能模块分配与该功能模块所需的内存大小相等的内存,其中,所述通用内存池与所述驱动内存池相互独立。
示例地,可以在每个NUMA(Non Uniform Memory Access,非统一内存访问)的存储器中申请一通用内存池和一驱动内存池,在进行内存分配时,内存管理模块可以优先将与进行申请的各个功能模块所属相同NUMA的内存分配给各个功能模块,由此可以有效提高内存访问速度。
在一实施例中,在根据各个功能模块的第一注册请求为各个功能模块分配内存时,可以按照各个功能模块所需的内存大小的由大到小的顺序进行排序,按照该顺序对内存进行分配。示例地,系统页面大小为4KB,功能模块1所需内存大小3KB,功能模块2所需内存大小2KB,功能模块3所需内存大小2KB,功能模块4所需内存大小1KB,按照各个功能模块所需的内存大小的由大到小的顺序排序为:功能模块1、功能模块2、功能模块3、功能模块4,可以按照该顺序进行分配。
在另一实施例中,也可以在确定该顺序后,根据内存页面大小对该顺序进行相应的调整,以有效减少内存碎片,便于内存管理。示例地,可以根据系统页面大小将该顺序调整为:功能模块1、功能模块4、功能模块2、功能模块3,按照该顺序进行分配后所产生的内存碎片为0KB,可以对各个功能模块的所需内存进行综合分配,有效减少内存碎片的产生。
可选地,可以将该分配过程中产生的内存碎片进行记录,以便于对内存碎片进行管理。
在上述技术方案中,在通用内存池中,根据各个功能模块所需的内存大小为各个功能模块分配其自用内存,使得各个功能模块在进行其自身功能处理时,可以不用占用驱动内存池中的内存。同时,通用内存池与驱动内存池相互独立,既可以有效保证各个功能模块的处理效率,又可以有效提高cache(高速缓存)的利用率。
在S12中,接收来自驱动模块的第二注册请求,其中,所述第二注册请求中包括所述驱动模块所需的内存大小,所述内存大小大于所述各个功能模块在所述驱动内存池中缓存的报文均达到最大个数时所占用的内存。
这样,即便是各个功能模块在驱动内存池中缓存的报文均达到最大个数时,驱动内存池中仍有空余内存留给驱动模块使用,以进行正常的报文收发。
在S13中,根据第二注册请求,为驱动模块分配与驱动模块所需的内存大小相等的驱动内存池。
可选地,所述驱动模块所需的内存大小是根据各个所述功能模块能够在所述驱动内存池中缓存的报文的最大个数、以及网卡的发包队列和收包队列中能够缓存的报文的最大个数进行设置的。
示例地,驱动模块所需的内存大小可以为各个所述功能模块能够在所述驱动内存池中缓存的报文的最大个数、以及网卡的发包队列和收包队列中能够缓存的报文的最大个数之和的预设倍数,示例地,该预设倍数可以为1.2。因此,在保证在驱动内存池中可以实现缓存报文的功能的前提下,充分考虑了驱动模块处理报文过程中可能出现的内存占用,通过预留部分内存也可以保证驱动模块对正常报文的处理,又不会使得驱动内存池占用过多的内存,在提升转发性能的同时,有效提高内存及cache的利用率。
在S14中,在任一功能模块在驱动内存池中的当前缓存的报文个数超过该功能模块能够在驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除驱动内存池之外的内存池中申请一报文缓存单元,并将该功能模块当前接收到的报文缓存到报文缓存单元。
可选地,所述第一注册请求中还包括发起该第一注册请求的功能模块的优先级;以及
通过如下方式确定功能模块当前接收到的报文是否需要缓存:
在所述功能模块的优先级高于预设的优先级阈值时,确定所述功能模块当前接收到的报文需要缓存。
示例地,在功能模块发送第一注册请求时,在该注册请求中可以包括该模块的优先级,则内存管理模块可以根据该优先级快速、准确地确定出该功能模块当前接收到的报文是否需要缓存,在该功能模块的优先级高于预设的优先级阈值时,确定该功能模块当前接收到的报文需要缓存,在该功能模块的优先级低于或等于预设的优先级阈值时,确定该功能模块当前接收到的报文可以不在该功能模块中处理,可以将该当前接收到的报文丢弃,这样有利于提高内存利用率。
可选地,图2所示,为在除驱动内存池之外的内存池中申请一报文缓存单元的一种示例实现方式,如图2所示,包括:
在S21中,确定通用内存池中与该功能模块对应的内存中是否有未使用内存;
在S22中,若有未使用内存,在未使用内存中申请一报文缓存单元。
其中,可以通过内存管理模块提供的申请函数进行申请。
示例地,若功能模块在驱动内存池中缓存的报文个数超过其能够在驱动内存池中缓存的报文的最大个数时,该功能模块不可以继续在驱动内存池中缓存报文。此时,可以通过上述方式确定功能模块当前接收到的报文是否需要缓存。若不需要缓存,可以将该报文直接丢弃。在确定当前接收到的报文需要缓存时,可以在确定该功能模块在通用内存池中对应的内存中有未使用内存时,在该未使用内存中申请一报文缓存单元,并将当前接收到的报文缓存至该报文缓存单元,以有效避免功能模块缓存报文时对驱动内存池的内存的过多使用。
通过上述技术方案,在功能模块在驱动内存池中缓存的报文个数超过其能够在驱动内存池中缓存的报文的最大个数时,将功能模块需要缓存的报文优先缓存至该功能模块在通用内存池中对应的内存中,即,该功能模块在通用内存池中的自用内存,这样,既可以实现报文缓存的功能,又不会对驱动内存池产生影响,保证驱动模块对正常报文的转发,有效提高转发性能。
可选地,所述在除驱动内存池之外的内存池中申请一报文缓存单元,还包括:
若无未使用内存,从动态内存池中申请一报文缓存单元,其中,所述动态内存池是从所述各个功能模块分配内存后的所述通用内存池的剩余内存中申请的。
在另一实施例中,当功能模块在通用内存池中的对应内存中无未使用内存时,此时,可以从通用内存池的内存碎片中申请一动态内存池。示例地,可以将内存碎片按照其内存由大到小的顺序进行排列,在使用内存碎片时,可以按照该顺序进行使用。通过上述技术方案,在内存碎片中申请动态内存池对报文进行缓存,可以保证各功能模块在不过多使用驱动内存池的前提下对报文进行缓存,保证报文处理过程的完整性,又可以对内存碎片进行充分利用,有效提高内存利用率。
可选地,所述方法还包括:
在所述动态内存池中无缓存报文,且通用内存池中与该功能模块对应的内存中有未使用内存,释放所述动态内存池。
其中,当缓存的报文生存期到期或者该报文已被转发时,可以释放该报文,以对报文缓存单元进行释放。示例地,可以通过内存管理模块提供的释放函数进行释放。因此,在动态内存池中无缓存报文,可以确定在动态内存池中缓存的报文已被处理完。同时,若通用内存池中与该功能模块对应的内存中有未使用内存时,则当该功能模块在驱动内存池中缓存报文的个数超过其能够在驱动内存池中缓存报文的最大个数时,可以将接收到的报文缓存至该功能模块在通用内存池中对应的内存中。因此,此时可以将该动态内存池进行释放,以便于其他模块可以对该内存进行重复利用,在保证系统转发性能的同时,进一步提高内存利用率。
可选地,在所述在任一功能模块在驱动内存池中的当前缓存的报文个数超过该功能模块能够在驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除驱动内存池之外的内存池中申请一报文缓存单元的步骤之前,所述方法还包括:
将任一功能模块当前接收到的报文缓存至所述驱动内存池中该功能模块对应的内存;
所述将该功能模块当前接收到的报文缓存到所述报文缓存单元,包括:
将该功能模块当前接收到的报文的复制报文缓存至所述报文缓存单元;
将所述驱动内存池中缓存的所述当前接收到的报文释放。
在另一实施例中,功能模块可以将其当前接收到的报文直接缓存至驱动内存池中该功能模块对应的内存。因此,在该功能模块缓存的报文个数超过该功能模块能够在驱动内存池中缓存的最大个数时,可以将当前接收到的报文的复制报文缓存至报文缓存单元。之后,则可以将驱动内存池中缓存的该当前接收到的报文释放,从而释放驱动内存池中的报文缓存单元,以避免占用过多的驱动内存池中的报文缓存单元而导致驱动模块无法对正常报文进行处理,保证报文的转发性能。
综上所述,在上述技术方案中,内存管理模块接收来自各个功能模块的第一注册请求,从而可以确定出各个功能模块能够在驱动内存池中缓存报文的最大个数,从而可以有效避免功能模块在驱动内存池中缓存过多报文、导致驱动模块难以处理正常报文的现象,提高转发系统的健壮性。同时,对于在驱动内存池中的当前缓存的报文个数超过功能模块能够在驱动内存池中缓存的报文的最大个数、且该功能模块需要对当前接收到的报文进行缓存时,可以将该报文缓存至除驱动内存池之外的内存池,既可以实现对该报文的缓存,又不会占用驱动模块所对应的驱动内存池,提升报文转发性能。另外,在本公开提供的方法中,对各个功能模块能够在驱动内存池中缓存报文的最大个数进行限制,使得该方法可以防御任何以耗尽系统内存为原理的攻击,不会出现因驱动内存池内存不足而导致驱动模块难以处理正常报文的现象,有效提升基于该方法进行内存管理的报文转发系统的稳定性。
现有技术中,一般采取批量发包的机制,即当报文的数量达到发送阈值时,将该报文发送至网卡的发包队列。在发包队列中的报文转发之后,该已转发的报文并不会立即释放,而是当发包队列中的报文的个数大于或等于报文缓存阈值时才会释放发包队列中的已转发报文,使得在发包队列中会缓存有已转发的报文。在这种情况下,会出现将数量达到发送阈值的报文发送至发包队列时,由于发包队列已满而造成报文转发失败。
为了解决上述问题,本公开提供的所述方法还包括:
在网卡的发包队列中的报文的个数低于报文缓存阈值时,以预设时间间隔释放所述发包队列中已转发的报文,其中,所述报文缓存阈值小于所述发包队列中能够缓存的报文的最大个数。
示例地,网卡的发包队列中可缓存报文的个数为512,该系统中共有16个网卡,每个网卡有16个发包队列,报文缓存阈值为480,则根据现有技术方案,可能会出现缓存122880(16*16*480)个报文的情况。在缓存有大量的报文时,会对转发系统的转发性能造成严重的影响。而基于本公开中所提供的方案,可以在发包队列中缓存报文的个数小于480时,定时释放发包队列中已转发的报文,从而可以有效避免由于已转发的报文释放不及时而导致的报文转发失败的现象,提高报文转发系统的转发性能,提升报文转发系统的稳定性。
示例地,本公开提供的方法可以应用于用户态驱动报文处理平台,如DPDK(DataPlane Development Kit,数据平面开发套件)。
本公开还提供一种内存管理装置,如图3所示,所述装置10包括:
第一接收模块100,用于接收来自各个功能模块的第一注册请求,其中,所述功能模块为需要在驱动模块对应的驱动内存池中缓存报文的模块,所述第一注册请求中包括发起该第一注册请求的功能模块能够在所述驱动内存池中缓存的报文的最大个数;
第二接收模块200,用于接收来自所述驱动模块的第二注册请求,其中,所述第二注册请求中包括所述驱动模块所需的内存大小,所述内存大小大于所述各个功能模块在所述驱动内存池中缓存的报文均达到最大个数时所占用的内存;
第一分配模块300,用于根据所述第二注册请求,为所述驱动模块分配与所述驱动模块所需的内存大小相等的驱动内存池;
处理模块400,用于在任一所述功能模块在所述驱动内存池中的当前缓存的报文个数超过该功能模块能够在所述驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除所述驱动内存池之外的内存池中申请一报文缓存单元,并将该功能模块当前接收到的报文缓存到所述报文缓存单元。
可选地,所述第一注册请求中还包括发起该第一注册请求的功能模块所需的内存大小;
所述装置10还包括:
第二分配模块,用于根据所述第一注册请求,在通用内存池中,为所述各个功能模块分配与该功能模块所需的内存大小相等的内存,其中,所述通用内存池与所述驱动内存池相互独立。
可选地,如图4所示,所述处理模块400包括:
确定子模块401,用于确定所述通用内存池中与该功能模块对应的内存中是否有未使用内存;
第一申请子模块402,用于在所述确定子模块401确定所述通用内存池中与该功能模块对应的内存中有未使用内存,在所述未使用内存中申请一报文缓存单元。
可选地,所述处理模块400还包括:
第二申请子模块,用于在所述确定子模块402确定所述通用内存池中与该功能模块对应的内存中无未使用内存时,从动态内存池中申请一报文缓存单元,其中,所述动态内存池是从所述各个功能模块分配内存后的所述通用内存池的剩余内存中申请的。
可选地,所述装置10还包括:
第一释放模块,用于在所述动态内存池中无缓存报文,且通用内存池中与该功能模块对应的内存中有未使用内存时,释放所述动态内存池。
可选地,所述装置10还包括:
缓存模块,用于在所述处理模块确定在任一所述功能模块在所述驱动内存池中的当前缓存的报文个数超过该功能模块能够在所述驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除所述驱动内存池之外的内存池中申请一报文缓存单元之前,将任一功能模块当前接收到的报文缓存至所述驱动内存池中该功能模块对应的内存;
所述处理模块400用于将该功能模块当前接收到的报文的复制报文缓存至所述报文缓存单元;以及,将所述驱动内存池中缓存的所述当前接收到的报文释放。
可选地,所述第一注册请求中还包括发起该第一注册请求的功能模块的优先级;以及
所述处理模块400用于通过如下方式确定功能模块当前接收到的报文是否需要缓存:
在所述功能模块的优先级高于预设的优先级阈值时,确定所述功能模块当前接收到的报文需要缓存。
可选地,所述驱动模块所需的内存大小是根据各个所述功能模块能够在所述驱动内存池中缓存的报文的最大个数、以及网卡的发包队列和收包队列中能够缓存的报文的最大个数进行设置的。
可选地,所述装置10还包括:
第二释放模块,用于在网卡的发包队列中的报文的个数低于报文缓存阈值时,以预设时间间隔释放所述发包队列中已转发的报文,其中,所述报文缓存阈值小于所述发包队列中能够缓存的报文的最大个数。
图5是根据一示例性实施例示出的一种电子设备500的框图。如图5所示,该电子设备500可以包括:处理器501,存储器502,多媒体组件503,输入/输出(I/O)接口504,以及通信组件505。
其中,处理器501用于控制该电子设备500的整体操作,以完成上述的内存管理方法中的全部或部分步骤。存储器502用于存储各种类型的数据以支持在该电子设备500的操作,这些数据例如可以包括用于在该电子设备500上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器502可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件503可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器502或通过通信组件505发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口504为处理器501和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件505用于该电子设备500与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near FieldCommunication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件505可以包括:Wi-Fi模块,蓝牙模块,NFC模块。
在一示例性实施例中,电子设备500可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的内存管理方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,例如包括程序指令的存储器502,上述程序指令可由电子设备500的处理器501执行以完成上述的内存管理方法。
图6是根据一示例性实施例示出的一种电子设备600的框图。例如,电子设备600可以被提供为一服务器。参照图6,电子设备600包括处理器622,其数量可以为一个或多个,以及存储器632,用于存储可由处理器622执行的计算机程序。存储器632中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器622可以被配置为执行该计算机程序,以执行上述的内存管理方法。
另外,电子设备600还可以包括电源组件626和通信组件650,该电源组件626可以被配置为执行电子设备600的电源管理,该通信组件650可以被配置为实现电子设备600的通信,例如,有线或无线通信。此外,该电子设备600还可以包括输入/输出(I/O)接口658。电子设备600可以操作基于存储在存储器632的操作系统,例如Windows ServerTM,Mac OSXTM,UnixTM,LinuxTM等等。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,例如包括程序指令的存储器632,上述程序指令可由电子设备600的处理器622执行以完成上述的内存管理方法。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

Claims (10)

1.一种内存管理方法,其特征在于,所述方法包括:
接收来自各个功能模块的第一注册请求,其中,所述功能模块为需要在驱动模块对应的驱动内存池中缓存报文的模块,所述第一注册请求中包括发起该第一注册请求的功能模块能够在所述驱动内存池中缓存的报文的最大个数;
接收来自所述驱动模块的第二注册请求,其中,所述第二注册请求中包括所述驱动模块所需的内存大小,所述内存大小大于所述各个功能模块在所述驱动内存池中缓存的报文均达到最大个数时所占用的内存;
根据所述第二注册请求,为所述驱动模块分配与所述驱动模块所需的内存大小相等的驱动内存池;
在任一所述功能模块在所述驱动内存池中的当前缓存的报文个数超过该功能模块能够在所述驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除所述驱动内存池之外的内存池中申请一报文缓存单元,并将该功能模块当前接收到的报文缓存到所述报文缓存单元。
2.根据权利要求1所述的方法,其特征在于,所述第一注册请求中还包括发起该第一注册请求的功能模块所需的内存大小;
所述方法还包括:
根据所述第一注册请求,在通用内存池中,为所述各个功能模块分配与该功能模块所需的内存大小相等的内存,其中,所述通用内存池与所述驱动内存池相互独立。
3.根据权利要求2所述的方法,其特征在于,所述在除所述驱动内存池之外的内存池中申请一报文缓存单元,包括:
确定所述通用内存池中与该功能模块对应的内存中是否有未使用内存;
若有未使用内存,在所述未使用内存中申请一报文缓存单元。
4.根据权利要求3所述的方法,其特征在于,所述在除所述驱动内存池之外的内存池中申请一报文缓存单元,还包括:
若无未使用内存,从动态内存池中申请一报文缓存单元,其中,所述动态内存池是从所述各个功能模块分配内存后的所述通用内存池的剩余内存中申请的。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述动态内存池中无缓存报文,且通用内存池中与该功能模块对应的内存中有未使用内存时,释放所述动态内存池。
6.根据权利要求1所述的方法,其特征在于,在所述在任一所述功能模块在所述驱动内存池中的当前缓存的报文个数超过该功能模块能够在所述驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除所述驱动内存池之外的内存池中申请一报文缓存单元的步骤之前,所述方法还包括:
将任一功能模块当前接收到的报文缓存至所述驱动内存池中该功能模块对应的内存;
所述将该功能模块当前接收到的报文缓存到所述报文缓存单元,包括:
将该功能模块当前接收到的报文的复制报文缓存至所述报文缓存单元;
将所述驱动内存池中缓存的所述当前接收到的报文释放。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在网卡的发包队列中的报文的个数低于报文缓存阈值时,以预设时间间隔释放所述发包队列中已转发的报文,其中,所述报文缓存阈值小于所述发包队列中能够缓存的报文的最大个数。
8.一种内存管理装置,其特征在于,所述装置包括:
第一接收模块,用于接收来自各个功能模块的第一注册请求,其中,所述功能模块为需要在驱动模块对应的驱动内存池中缓存报文的模块,所述第一注册请求中包括发起该第一注册请求的功能模块能够在所述驱动内存池中缓存的报文的最大个数;
第二接收模块,用于接收来自所述驱动模块的第二注册请求,其中,所述第二注册请求中包括所述驱动模块所需的内存大小,所述内存大小大于所述各个功能模块在所述驱动内存池中缓存的报文均达到最大个数时所占用的内存;
第一分配模块,用于根据所述第二注册请求,为所述驱动模块分配与所述驱动模块所需的内存大小相等的驱动内存池;
处理模块,用于在任一所述功能模块在所述驱动内存池中的当前缓存的报文个数超过该功能模块能够在所述驱动内存池中缓存的报文的最大个数、且该功能模块当前接收到的报文需要缓存时,在除所述驱动内存池之外的内存池中申请一报文缓存单元,并将该功能模块当前接收到的报文缓存到所述报文缓存单元。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-7中任一项所述方法的步骤。
10.一种电子设备,其特征在于,包括:
权利要求9中所述的计算机可读存储介质;以及
一个或者多个处理器,用于执行所述计算机可读存储介质中的程序。
CN201711385011.6A 2017-12-20 2017-12-20 内存管理方法、装置、计算机可读存储介质及电子设备 Active CN108132889B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711385011.6A CN108132889B (zh) 2017-12-20 2017-12-20 内存管理方法、装置、计算机可读存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711385011.6A CN108132889B (zh) 2017-12-20 2017-12-20 内存管理方法、装置、计算机可读存储介质及电子设备

Publications (2)

Publication Number Publication Date
CN108132889A true CN108132889A (zh) 2018-06-08
CN108132889B CN108132889B (zh) 2020-07-10

Family

ID=62391922

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711385011.6A Active CN108132889B (zh) 2017-12-20 2017-12-20 内存管理方法、装置、计算机可读存储介质及电子设备

Country Status (1)

Country Link
CN (1) CN108132889B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109542347A (zh) * 2018-11-19 2019-03-29 浪潮电子信息产业股份有限公司 一种数据迁移方法、装置、设备及可读存储介质
CN109617832A (zh) * 2019-01-31 2019-04-12 新华三技术有限公司合肥分公司 报文缓存方法及装置
CN109710409A (zh) * 2018-12-24 2019-05-03 郑州云海信息技术有限公司 一种内存管理方法、系统、装置及可读存储介质
CN109766143A (zh) * 2019-01-16 2019-05-17 广州虎牙信息科技有限公司 对象加载方法、装置、终端及存储介质
WO2020125652A1 (zh) * 2018-12-18 2020-06-25 中兴通讯股份有限公司 报文转发方法、装置、网络设备及计算机可读介质
CN113672398A (zh) * 2021-10-25 2021-11-19 北京金睛云华科技有限公司 全流量回溯分析系统的内存优化方法和设备
CN113778688A (zh) * 2021-09-17 2021-12-10 Oppo广东移动通信有限公司 内存管理系统、内存管理方法、内存管理装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104794069A (zh) * 2015-04-01 2015-07-22 北京创毅视讯科技有限公司 一种cpu中缓存的用户态分配方法和系统
US20170090802A1 (en) * 2015-09-30 2017-03-30 Ocz Storage Solutions, Inc. Device and Method for Scheduling Commands in a Solid State Drive to Reduce Peak Power Consumption Levels
CN107193753A (zh) * 2017-06-16 2017-09-22 深圳市万普拉斯科技有限公司 内存重整方法、装置、电子设备及可读存储介质
CN107203477A (zh) * 2017-06-16 2017-09-26 深圳市万普拉斯科技有限公司 内存分配方法、装置、电子设备及可读存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104794069A (zh) * 2015-04-01 2015-07-22 北京创毅视讯科技有限公司 一种cpu中缓存的用户态分配方法和系统
US20170090802A1 (en) * 2015-09-30 2017-03-30 Ocz Storage Solutions, Inc. Device and Method for Scheduling Commands in a Solid State Drive to Reduce Peak Power Consumption Levels
CN107193753A (zh) * 2017-06-16 2017-09-22 深圳市万普拉斯科技有限公司 内存重整方法、装置、电子设备及可读存储介质
CN107203477A (zh) * 2017-06-16 2017-09-26 深圳市万普拉斯科技有限公司 内存分配方法、装置、电子设备及可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李亚琼等: "一种面向虚拟化计算平台的内存优化技术", 《计算机学报》 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109542347A (zh) * 2018-11-19 2019-03-29 浪潮电子信息产业股份有限公司 一种数据迁移方法、装置、设备及可读存储介质
CN109542347B (zh) * 2018-11-19 2022-02-18 浪潮电子信息产业股份有限公司 一种数据迁移方法、装置、设备及可读存储介质
WO2020125652A1 (zh) * 2018-12-18 2020-06-25 中兴通讯股份有限公司 报文转发方法、装置、网络设备及计算机可读介质
CN109710409A (zh) * 2018-12-24 2019-05-03 郑州云海信息技术有限公司 一种内存管理方法、系统、装置及可读存储介质
CN109710409B (zh) * 2018-12-24 2022-02-18 郑州云海信息技术有限公司 一种内存管理方法、系统、装置及可读存储介质
CN109766143A (zh) * 2019-01-16 2019-05-17 广州虎牙信息科技有限公司 对象加载方法、装置、终端及存储介质
CN109617832A (zh) * 2019-01-31 2019-04-12 新华三技术有限公司合肥分公司 报文缓存方法及装置
CN109617832B (zh) * 2019-01-31 2022-07-08 新华三技术有限公司合肥分公司 报文缓存方法及装置
CN113778688A (zh) * 2021-09-17 2021-12-10 Oppo广东移动通信有限公司 内存管理系统、内存管理方法、内存管理装置
CN113672398A (zh) * 2021-10-25 2021-11-19 北京金睛云华科技有限公司 全流量回溯分析系统的内存优化方法和设备

Also Published As

Publication number Publication date
CN108132889B (zh) 2020-07-10

Similar Documents

Publication Publication Date Title
CN108132889A (zh) 内存管理方法、装置、计算机可读存储介质及电子设备
TWI229806B (en) Method and system for data flow control of execution nodes of an adaptive computing engine (ACE)
WO2015043464A1 (en) Packet forwarding
US9755961B2 (en) Protection against rule map update attacks
CN113645150B (zh) 传输速率控制方法、装置、电子设备和可读存储介质
WO2013026324A1 (zh) 队列调整方法及装置
CN106626795B (zh) 一种序列号传输方法、装置、耗材芯片和成像盒
US20120331323A1 (en) Devices and methods for saving energy through control of sleep mode
JP2022035610A (ja) メモリシステムおよび制御方法
CN107948071A (zh) 报文转发方法及装置
CN108566344B (zh) 一种报文处理方法和装置
WO2023098192A1 (zh) 固态硬盘异常掉电处理方法、装置、电子设备及介质
CN108255941A (zh) 一种低内存占用的提高图片加载速度的方法
CN110119387A (zh) 一种文件删除方法、装置、设备及可读存储介质
CN111177025A (zh) 数据存储方法、装置及终端设备
CN103338158B (zh) 一种goose报文传输时延抖动抑制方法
CN104486442B (zh) 分布式存储系统的数据传输方法、装置
CN109286584A (zh) 一种多核系统中的分片重组方法、装置及设备
CN107517167B (zh) 一种数据传输控制方法、装置及SoC芯片
WO2020001158A1 (zh) 数据处理方法及装置、存储系统
Wei et al. DiffTREAT: Differentiated traffic scheduling based on RNN in data centers
WO2015135281A1 (zh) 基于自动精简配置的资源分配方法及装置
CN109361749A (zh) 报文处理方法、相关设备及计算机存储介质
US20140095902A1 (en) Power Saving Traffic Management Policies
CN108200221A (zh) 一种网络地址转换环境中转换规则同步方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant