内存申请方法、设备及存储介质技术

技术编号:20841307 阅读:22 留言:0更新日期:2019-04-13 08:36
本申请实施例提供一种内存申请方法、设备及存储介质。在本申请实施例中,一方面,根据网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从OS中申请静态内存,做到提前申请内存,可减小报文转发过程中的内存申请开销,进而减小对网络设备的报文转发性能的影响;另一方面,还在监听到内存扩容事件发生时,采用动态内存申请机制向OS申请可以动态缩减的动态内存,可按需进行内存的动态扩容和释放,不仅可防止内存不足,还可降低无效的内存占用,进而提升网络性能的稳定性。

【技术实现步骤摘要】
内存申请方法、设备及存储介质
本申请涉及网络通信
,尤其涉及一种内存申请方法、设备及存储介质。
技术介绍
随着网络技术的飞速发展,越来越多的网络应用出现在人们生活中。大多数网络应用是基于传输控制协议/因特网互联协议(TransmissionControlProtocol/InternetProtocol,TCP/IP协议)进行通信,具体表现为端到端的网络连接,例如TCP连接或用户数据报协议(UserDatagramProtocol,UDP)连接,也称为数据流。在TCP/IP协议中,使用五元组(源IP地址、目的IP地址、源端口、目的端口、协议号)唯一地确定一条连接。对于通信路径中的网络设备来说,接收到报文后,根据报文的五元组计算哈希值,在连接跟踪表中进行匹配,确定报文所属的连接跟踪,然后根据匹配到的连接跟踪进行功能处理,如网络地址转换(NetworkAddressTranslation,NAT)、路由、防火墙过滤、应用识别等。当数据流的第一个报文到达网络设备时,连接跟踪表中不存在对应的连接跟踪,需要申请新的连接跟踪并插入连接跟踪表中。在这个过程中,需要为新的连接跟踪申请内存空间。在现有技术中,要么采用动态申请内存的机制,要么采用预先申请内存、动态分配表项的机制。在动态申请内存的机制中,每一条数据流都要进行内存申请和释放操作,降低了网络设备的报文转发性能;而在预先申请内存、动态分配表项的机制中,如果预先申请的内存过多,会造成大量无效的内存占用,降低了设备运行的稳定性,如果预先申请的内存不足,又会造成数据流转发中断。
技术实现思路
本申请的多个方面提供一种内存申请方法、设备及存储介质,用以在减小内存申请开销的同时降低无效内存的占用,进而提高网络性能。本申请实施例提供一种内存申请方法,适用于网络设备,所述方法包括:根据所述网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从操作系统(Operatingsystem,OS)中申请静态内存;监听是否发生内存扩容事件;若监听到内存扩容事件发生,则采用动态内存申请机制向所述OS申请动态内存;其中,在使用过程中,所述动态内存可以动态缩减。本申请实施例还提供一种网络设备,包括:存储器和处理器;所述存储器包括内存和程序存储空间,所述程序存储空间用于存储计算机程序以及OS;所述处理器,用于执行所述计算机程序,以用于:根据所述网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从所述OS中申请静态内存;监听是否发生内存扩容事件;若监听到内存扩容事件发生,则采用动态内存申请机制向所述OS申请动态内存;其中,在使用过程中,所述动态内存可以动态缩减。本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,当所述计算机程序被处理器执行时,致使所述处理器实现上述内存申请方法中的步骤。在本申请实施例中,一方面,根据网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从OS中申请静态内存,做到提前申请内存,可减小报文转发过程中的内存申请开销,进而减小对网络设备的报文转发性能的影响;另一方面,还在监听到内存扩容事件发生时,采用动态内存申请机制向OS申请可以动态缩减的动态内存,可按需进行内存的动态扩容和释放,不仅可防止内存不足,还可降低无效的内存占用,进而提升网络性能的稳定性。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1a为本申请一示例性实施例提供的一种内存申请方法的流程示意图;图1b为本申请一示例性实施例提供的一种两级块数据结构示意图;图1c为本申请一示例性实施例提供的内存申请方式涉及的整体状态迁移示意图;图1d为本申请一示例性实施例提供的一种内存块状态迁移示意图;图2为本申请一示例性实施例提供的一种网络设备的结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。对于通信路径中的网络设备来说,接收到报文后,根据报文的五元组计算哈希值,在连接跟踪表中进行匹配,确定报文所属的连接跟踪,然后根据匹配到的连接跟踪进行功能处理,如NAT地址转换、路由、防火墙过滤、应用识别等。当数据流的第一个报文到达网络设备时,连接跟踪表中不存在对应的连接跟踪,需要申请新的连接跟踪并插入连接跟踪表中。在这个过程中,需要为新的连接跟踪申请内存空间。在现有技术中,要么采用动态申请内存的机制,要么采用预先申请内存、动态分配表项的机制。在动态申请内存的机制中,每一条数据流都要进行内存申请和释放操作,降低了网络设备的报文转发性能;而在预先申请内存、动态分配表项的机制中,如果预先申请的内存过多,会造成大量无效的内存占用,降低了设备运行的稳定性,如果预先申请的内存不足,又会造成数据流转发中断。针对现有技术中内存申请机制的弊端,本申请实施例结合预先申请内存、动态申请和释放内存机制,一方面,根据网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从OS中申请静态内存,做到提前申请内存,可减小报文转发过程中的内存申请开销,进而减小对网络设备的报文转发性能的影响;另一方面,还在监听到内存扩容事件发生时,采用动态内存申请机制向OS申请可以动态缩减的动态内存,可按需进行内存的动态扩容和释放,不仅可防止内存不足,还可降低无效的内存占用,进而提升网络性能的稳定性。以下结合附图,详细说明本申请各实施例提供的技术方案。图1a为本申请实施例提供的一种内存申请方法的流程示意图。该方法适用于网络设备,具体可应用于网络设备中的分配器。其中,网络设备可以为网关设备、路由器、交换机、行为管理设备等各类计算设备。如图1a所示,该方法包括:101、根据网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从OS中申请静态内存。102、监听是否发生内存扩容事件;若监听到内存扩容事件发生,则执行步骤103。103、采用动态内存申请机制向OS申请动态内存;其中,在使用过程中,动态内存可以动态缩减。在本实施例中,网络设备上可能并发的数据流的数量可根据网络设备待机数据流数量的需求以及可能并发的数据流数量进行估算。基于此,在步骤101中,根据网络设备上可能并发的数据流的数量,预先从OS中申请特定容量的静态内存。这部分静态内存不进行释放,可保障大部分情况下数据流转发的需求。这样,采用预先申请内存的机制,分配连接跟踪的过程简化为从空闲链表中获取表项,可最大限的降低对网络设备的报文转发性能的负面影响。进一步,在本实施例中,还可监听内存扩容的事件是否发生,并在监听到内容扩容事件发生时,采用动态内存申请机制向OS申请动态内存。相应地,若没有监听到内存扩容事件发生,则继续监听。可选地,内存扩容事件主要表现为当前已有的内存空间中的空闲表项的数量不足。其中,当前已有的内存空间是指:在本次监听内存扩容事件是否发生之前申请到的内存空间,该内存空间不仅包括步骤101中采用静态内存本文档来自技高网...

【技术保护点】
1.一种内存申请方法,适用于网络设备,其特征在于,所述方法包括:根据所述网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从操作系统OS中申请静态内存;监听是否发生内存扩容事件;若监听到内存扩容事件发生,则采用动态内存申请机制向所述OS申请动态内存;其中,在使用过程中,所述动态内存可以动态缩减。

【技术特征摘要】
1.一种内存申请方法,适用于网络设备,其特征在于,所述方法包括:根据所述网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从操作系统OS中申请静态内存;监听是否发生内存扩容事件;若监听到内存扩容事件发生,则采用动态内存申请机制向所述OS申请动态内存;其中,在使用过程中,所述动态内存可以动态缩减。2.根据权利要求1所述的方法,其特征在于,所述监听是否发生内存扩容事件,包括:周期性检测当前已有的内存空间中空闲表项的数量,若检测到空闲表项的数量小于设定的第一数量阈值,则监听到内存扩容事件发生;和/或,当有新的数据流需要创建时,若当前已有的内存空间中没有足够的空闲表项,则监听到内存扩容事件发生。3.根据权利要求1所述的方法,其特征在于,所述采用动态内存申请机制向所述OS申请动态内存,包括:采用动态内存申请机制,以一个内存页为单位向所述OS申请动态内存;其中,所述内存页的大小是所述静态内存和所述动态内存中需要存储的表项的大小的整数倍。4.根据权利要求1所述的方法,其特征在于,在采用动态内存申请机制向所述OS申请动态内存之前,还包括:判断监听到内存扩容事件之前采用动态内存申请机制向所述OS申请动态内存的连续失败次数是否达到设定的次数阈值;若判断结果为是,则拒绝采用动态内存申请机制向所述OS申请动态内存,并在等待设定时间后,将所述连续失败次数置为0,并重新执行所述监听是否发生内存扩容事件的操作;若判断结果为否,则采用动态内存申请机制向所述OS申请动态内存,并在成功申请到动态内存时,将所述连续失败次数置为0。5.根据权利要求1-4任一项所述的方法,其特征在于,还包括:每当向所述OS成功申请到动态内存时,将成功申请到的动态内存作为一个内存子块,并将所述内存子块的起始地址加入内存子块索引表中;以及确定所述内存子块所属的内存块,并将所述内存子块的所有表项加入其所属的内存块的空闲链表中,所述空闲链表用于存储所述内存块中空闲表项的序号。6.根据权利要求5所述的方法,其特征在于,还包括:当接收到内存表项分配请求时,查询当前已有的内存空间所包含的各内存块对应的内存块描述符,以获取各内存块的状态,所述内存块描述符包括内存块的状态;从处于半满状态的内存块中选择一个内存块进行表项分配,所述半满状态是指内存块的空闲表项的数量小于对应的内存块包含的表项总数的状态。7.根据权利要求5所述的方法,其特征在于,还包括:监测当前已有的内存空间所包含的各内存块对应的内存块描述符,以获取各内存块的状态;若存在处于空闲状态的内存块,且所述处于空闲状态的内存块中的内存子块均属于动态内存,则释放所述处于空闲状态的内存块,所述空闲状态是指内存块的空闲表项的数量等于对应的内存块包含的表项总数的状态。8.根据权利要求7所述的方法,其特征在于,在释放所述处于空闲状态...

【专利技术属性】
技术研发人员:潘云登
申请(专利权)人:锐捷网络股份有限公司
类型:发明
国别省市:福建,35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1