CN109614240A - 内存申请方法、设备及存储介质 - Google Patents
内存申请方法、设备及存储介质 Download PDFInfo
- Publication number
- CN109614240A CN109614240A CN201811526037.2A CN201811526037A CN109614240A CN 109614240 A CN109614240 A CN 109614240A CN 201811526037 A CN201811526037 A CN 201811526037A CN 109614240 A CN109614240 A CN 109614240A
- Authority
- CN
- China
- Prior art keywords
- memory
- block
- dynamic
- application
- memory block
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请实施例提供一种内存申请方法、设备及存储介质。在本申请实施例中,一方面,根据网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从OS中申请静态内存,做到提前申请内存,可减小报文转发过程中的内存申请开销,进而减小对网络设备的报文转发性能的影响;另一方面,还在监听到内存扩容事件发生时,采用动态内存申请机制向OS申请可以动态缩减的动态内存,可按需进行内存的动态扩容和释放,不仅可防止内存不足,还可降低无效的内存占用,进而提升网络性能的稳定性。
Description
技术领域
本申请涉及网络通信技术领域,尤其涉及一种内存申请方法、设备及存储介质。
背景技术
随着网络技术的飞速发展,越来越多的网络应用出现在人们生活中。大多数网络应用是基于传输控制协议/因特网互联协议(Transmission Control Protocol/InternetProtocol,TCP/IP协议)进行通信,具体表现为端到端的网络连接,例如TCP连接或用户数据报协议(User Datagram Protocol,UDP)连接,也称为数据流。在TCP/IP协议中,使用五元组(源IP地址、目的IP地址、源端口、目的端口、协议号)唯一地确定一条连接。
对于通信路径中的网络设备来说,接收到报文后,根据报文的五元组计算哈希值,在连接跟踪表中进行匹配,确定报文所属的连接跟踪,然后根据匹配到的连接跟踪进行功能处理,如网络地址转换(Network Address Translation,NAT)、路由、防火墙过滤、应用识别等。
当数据流的第一个报文到达网络设备时,连接跟踪表中不存在对应的连接跟踪,需要申请新的连接跟踪并插入连接跟踪表中。在这个过程中,需要为新的连接跟踪申请内存空间。在现有技术中,要么采用动态申请内存的机制,要么采用预先申请内存、动态分配表项的机制。在动态申请内存的机制中,每一条数据流都要进行内存申请和释放操作,降低了网络设备的报文转发性能;而在预先申请内存、动态分配表项的机制中,如果预先申请的内存过多,会造成大量无效的内存占用,降低了设备运行的稳定性,如果预先申请的内存不足,又会造成数据流转发中断。
发明内容
本申请的多个方面提供一种内存申请方法、设备及存储介质,用以在减小内存申请开销的同时降低无效内存的占用,进而提高网络性能。
本申请实施例提供一种内存申请方法,适用于网络设备,所述方法包括:
根据所述网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从操作系统(Operating system,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中采用静态内存申请机制预申请的静态内存,还包括采用动态申请机制申请到的尚未进行释放的动态内存。若在本次监听是否发生内存扩容事件之前,尚未申请过动态内存,或者申请到的动态内存已经全部缩减,则当前已有的内存空间只包括静态内存。
进一步,在本实施例中,可设置空闲内存表项的数量阈值H,若当前申请到的内存空间中的空闲表项小于设定的空闲内存表项的数量阈值H时,表示内存扩容事件发生。为了便于描述和区分,在本申请实施例中,将预设的空闲内存表项的数量阈值H定义为第一数量阈值。基于此,可设置监听周期,并启动一个定时器或计数器对监听周期进行计时。每当监听周期到达时,检测当前已有的内存空间表项的数量,并在检测到空闲表项的数量小于第一数量阈值H时,确定内存扩容事件发生,则采用动态内存申请机制向OS申请动态内存。可选地,可在非报文转发期间,进行周期性地监听内存扩容事件,可进一步减小对报文转发的性能的负面影响。
另一方面,当有新的数据流需要创建时,需要从当前申请到的内存空间中为该数据流分配表项,用于存储该数据流对应的信息,例如连接跟踪信息。此时,若当前申请到的内存空间中没有足够的空闲表项,也表示内存扩充事件发生。基于此,当有新的数据流需要创建时,若当前申请到的内存空间中没有足够的空闲表项,则采用动态内存扩容申请机制向OS申请动态内存。
在本实施例中,采用动态内存申请机制向OS申请的动态内存可以动态缩减。这样,可按需进行内存的动态扩容和释放,不仅可防止内存不足,还可降低无效的内存占用,进而提升网络性能的稳定性。
在本实施例中,结合预先申请内存、动态申请和释放内存机制,一方面,根据网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从OS中申请静态内存,做到提前申请内存,可减小报文转发过程中的内存申请开销,进而减小对网络设备的报文转发性能的影响;另一方面,还在监听到内存扩容事件发生时,采用动态内存申请机制向OS申请可以动态缩减的动态内存,可按需进行内存的动态扩容和释放,不仅可防止内存不足,还可降低无效的内存占用,进而提升网络性能的稳定性。
进一步,考虑到网络设备在长期运行过程中,会产生很多的内存碎片。而操作系统中的Slab分配器或页框关系系统的最小内存分配单元为一个内存页,一个内存页的大小为4kB。基于此,为了减小内存碎片,可以单个内存页大小作为扩容单元,进行内容空间的动态扩容。基于此,步骤102的一种可选实施方式:当监听到内存扩容事件发生时,采用动态内存申请机制,以一个内存页为单位向OS申请动态内存。一次动态扩容出的内存空间为一个内存页大小,可选地,该内存页可以包含多个表项。在本实施例中,静态内容和动态内存中存储的表项的大小可根据内存页的大小进行灵活调整,例如可调整为内存页大小的1/K倍,其中K为正整数,即内存页大小为静态内存和动态内存中存储的表项的大小的整数倍,即K倍。例如,当内存页大小为4kB时,可将表项的大小设置为128字节。由于内存页大小为静态内存和动态内存中存储的表项的大小的整数倍。因此,这种扩容方式只要有空闲内存就可以能够扩容成功,不会引入任何内存碎片,可支持最大可能的容量。
在上述步骤102的可选实施方式中,在申请释放的单个动态内存中的表项时,由于表项大小按照机器字长对齐而增加部分内存碎片。其中,对齐由编译器决定,目的在于提高内存存取效率。这部分内部碎片,不会引入额外的内存开销。
进一步,考虑到扩容过程会影响网络设备对报文的转发性能,因此,可尽可能的减小扩容的次数,还可设置一定的扩容规避规则,在扩容失败后不再重试,等待下次监听到扩容事件发生时再进行下次扩容。另外,还可设置扩容失败次数上限值,若因同一内存扩容事件连续多次向OS申请内存,每次申请均失败且连续失败次数达到扩容失败次数上限值,则需要间隔一定时间后再重新向OS申请内存。基于此,在步骤102之前,判断监听到内存扩容事件之前采用动态申请机制向OS申请动态内存的连续失败次数是否达到设定的次数阈值(即扩容失败次数上限值);若判断结果为是,则拒绝采用动态内存申请机制向OS申请动态内存,并在等待设定时间后,将所述连续失败次数置为0,并重新执行上述步骤102监听是否发生内存扩容事件的操作。其中,设定的等待时间可根据内存回收时间进行取值。若判断结果为否,则采用动态内存申请机制向OS申请动态内存,并在成功申请到动态内存时,将所述连续失败次数置为0。其中,扩容规避规则的采用可避免反复的申请扩容失败和回滚的操作,进一步提高网络性能。对于扩容失败次数上限值(即设定的次数阈值)可根据实际情况进行灵活设置,例如可以设置为1次、2次等,在此不做限定。
进一步,考虑到网络设备在一次动态扩容中,可能需要很多个扩容单元。尤其对于多用户的场景,可能需要上万个扩容单元。在对扩容出的动态内容进行缩减时,如果缩减单元的数量与扩容单元的数量一致,则需要与扩容单元相同数量的内存页来维护空闲表项和状态,这样无疑为增加维护的难度和复杂度。而增加扩容单元的大小,又会增加内存申请失败的概率。基于此,在不增加扩容单元的大小的前提下,为了减小用于维护的空闲表项的空闲链表的数量,在本申请实施例中,引入两级块数据结构。两级块数据结构如图1b所示,两级块数据块结构包括内存块和内存块中的内存子块,其中,每个内存块中包括相同数量的内存子块。在图1b中,示出N个内存块,每个内存块包括M个内存子块。其中,每次申请到的动态内存作为一个内存子块;每个内存子块中包括相同数量的表项。其中,表项是内存子块中的最小内存单元,如果内存子块是内存页,则最小内存单元可以是页表项。在图1b中,每个内存子块包括Y个表项。其中,N为正整数,M和Y为大于或等于2的整数。
基于图1b所示的两级数据结构,对于两级块数据结构全局,可配置一个内存子块索引表。该表中记录有该数据结构下所有内存子块的序号以及该内存子块的起始地址。其中,内存子块索引表采用栈结构。整个数据结构中的内存子块的序号按照从小到大的顺序,依次进行编号,且越先申请的内存子块,其序号越小。如图1b所示,内存子块索引表中的0(起始地址),表示内存子块0的起始地址;M-1(起始地址)表示内存子块(M-1)的起始地址,等等。对于每个内存子块中的内存表项的序号,分别进行单独编号。如图1b所示,每个内存子块中的Y个内存表项的序号均采用0-(Y-1)进行编号。
进一步,在本实施例中,还为每一个内存块配置一个内存块索引表。其中,内存块索引表的每个元素会指向内存块描述符。内存块描述符的成员包括:该元素对应的内存块的空闲链表、内存块状态、内存块空闲链表表项数量、该内存块包含的起始内存子块序号、该内存块已经扩容申请的内存子块数量等,但不限于此。这样只需为每个内存块维护状态和空闲链表,减小了维护的难度和复杂度。其中,空闲链表用于存储该内存块中空闲表项的序号,且每个空闲表项包含前(prev)成员和下一个(next)成员,分别指向空闲链表中前一个表项序号和后一个表项序号。例如,空闲链表表头结点值为10,即指向第10个表项,其成员prev、next取值分别为1、20,则分别指向第1个和第20个表项。对于图1b所示的数据结构,空闲链表中表项序号是0到(X*Y-1)中的全部或一部分。
进一步,对于步骤102中成功申请到的动态内存,基于图1b所示的两级块数据结构,当向OS成功申请到动态内存时,将成功申请到的动态内存作为一个内存子块,并将该内存子块的起始地址加入内存子块索引表中。进一步,确定该内存子块所属的内存块,并将该内存子块的所有表项加入到其所属的内存块的空闲链表中。
基于图1b所示的数据结构,在对某个空闲表项进行索引时,可以通过空闲链表实现对该空闲表项的快速索引。其中索引公式如下:
该空闲表项所在的内存子块的序号=int(表项序号/Y),其中,int表示取整函数;该空闲表项在内存子块中的偏移索引=表项序号%Y,其中,“%”表示取余。
相应地,空闲表项的地址=该空闲表项所在内存子块的起始地址+(该空闲表项所在内存子块中的偏移索引*表项大小)。
例如,假设Y=5,空闲表项的序号为7,则该表项所在的内存子块的序号为int(7/5)=1;该表项在内存子块1中的偏移索引为(7%5)=2,即该空闲表项位于内存子块1的第3个表项。进一步,假设内存子块1的起始地址为3000H,一个表项大小为128bit(等于32H),则该空闲表项的地址为:(3000H+2*32H)=3064H。
因此,在本实施例中,内存表项只需要用序号进行表示,可以避免采用指针,从而减少了内存占用。进一步,在本申请实施例中,步骤101中申请的静态内存和步骤102中申请的动态内存都可以采用图1b所示的两级块数据结构进行管理。当接收到内存分配请求时,只需根据静态内存或动态内存中的内存块的空闲链表进行索引,便可获取空闲表项,并将其分配给内存分配请求对应的数据进行使用。在这种情况下,索引空闲表项的时间复杂度为O(1)。
进一步,基于图1b所示的两级块数据结构,还可维护每个内存块的状态,并可通过查询每个内存块对应的描述符中的内存块状态,便可获取该内存块的状态。其中,每个内存块的状态包括:(1)空状态:未申请任何的内存子块,未做扩容时的状态;(2)空闲状态:内存块内的表项均未分配出去,即处于空闲状态的内存块中的空闲表项的数量等于该内存块所包含的表项总数,只有空闲状态的内存块能够被缩减释放;(3)半满状态:内存块中的部分表项未分配出去,即内存块中的空闲表项数量小于该内存块所包含的表项的总数量;(4)满状态:内存块中的所有表项均被分配出去。其中,只有处于半满状态或空闲状态的内存块才可进行内存分配。
进一步,在接收到内存表项分配请求时,可查询当前已有的内存空间所包含的各内存块对应的内存块描述符,以获取各内存块的状态;若存在处于半满状态的内存块,从处于半满状态的内存块中选择一个内存块进行表项分配。其中,内存块描述符的成员包括内存块的状态。
进一步,考虑为了满足遍历所有内存表项的操作要求,需要保障所有内存块是连续分布的,因此上述内存块索引表采用栈结构,表项分配和缩减操作均在栈顶进行。为了使栈顶的连接跟踪尽快转为空闲状态,满足缩减释放条件,表项申请可在序号最小的处于空闲状态或半满状态的内存块中进行。基于此,对于上述处于半满状态的内存块,可从其中,选择序号最小的内存块进行表项分配。因为栈顶的内存块的序号为最大的,因此,选择序号最小的内存块进行表项分配,可使栈顶的序号较大的内存块的表项尽可能不被分配,而尽快转移为空闲状态,从而满足缩减释放条件。
可选地,若当前已有的内存空间的内存块中不存在处于半满状态的内存块,而存在处于空闲状态,则从处于空闲状态的内存块中选择一个进行表项分配。
同样,可从处于空闲状态的内存块中,选择编号最小的内存块进行表项分配。
进一步,如果当前已有的内存空间所包含的各内存块中全部处于满状态,即不存在处于空闲状态和半满状态的内存块,则触发向OS申请动态内存的操作,采用动态内存申请机制向OS申请动态内存。其申请过程可参见上述实施例对步骤102及其可选实施方式的相关描述,在此不再赘述。
值得说明的是,每个内存块的空闲链表会跟随该内存块中内存表项的分配、释放等情况而动态变化。当有内存块中有新的表项被申请或被分配后,该内存块的空闲链表中会删除该表项对应的序号。当内存块中的一个表项被释放之后,该内存块的空闲链表中会重新添加该表项的序号。
进一步,为了减小对无效内存的占用,增加网络设备性能的稳定性。对于处于空闲状态的内存块,可对其进行释放,以减小内存的占用。基于此,可监测当前已有的内存空间所包含的各内存块分别对应的内存块描述符中的内存块状态,以获取各内存块的状态;若存在处于空闲状态的内存块,且该内存块中的内存子块均属于动态内存,则释放处于空闲状态的内存块。
进一步,考虑为了满足遍历所有内存表项的操作要求,需要保障所有内存块是连续分布的,因此上述内存块索引表采用栈结构,扩容和释放缩减操作均在栈顶进行。基于此,可从处于空闲状态的内存块中,选择编号最大的内存块优先释放。
进一步,考虑到动态内存申请的扩容过程会影响网络设备对报文转发的性能。可尽可能少的进行扩容,采取消极的缩减策略。基于此,可采取以下实施方式来判断是否对处于空闲状态的内存块进行释放。
实施方式1:判断在释放处于空闲状态的内存块后剩余的空闲表项的数量是否大于设定的第二数量阈值;若判断结果为是,则可释放处于空闲状态的内存块。其中,第二数量阈值可为上述第一数量阈值H的S倍,S>1。例如S可以取1.2、1.5、2等,但不限于此。这样,在将处于空闲状态的内存块释放后,剩余的空闲表项依然可以承载网络设备并发数据流的连接跟踪,还可防止将处于空闲状态的内存块释放后频繁进行动态内存申请,而影响网络设备的报文转发性能。
实施方式2:可设置一定的空闲保持时长,并判断处于空闲状态的内存块处于空闲状态的时长是否达到设定的空闲保持时长;若判断结果为是,则可释放处于空闲状态的内存块。这样,可防止将处于空闲状态的内存块释放后频繁进行动态内存申请,而影响网络设备的报文转发性能。
上述实施方式1和2可以单独实施,也可结合进行实施。当二者进行结合实施时,需同时满足实施方式1和2中的条件,才可将处于空闲状态的内存块释放。
对于上述实施例所示的内存申请方式,可将其封装成内存申请模块,加载至网络设备中。当将内存申请模块加载至网络设备时,申请到的内存空间的状态转移情况如图1c所示,状态转移情况如下:
步骤1:执行步骤101中的初始扩容操作,即根据网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从OS中申请静态内存。
对于静态内存,可采用图1b所示的两级块数据结构进行管理,在此不再赘述。
步骤2:执行步骤102中的当监听到内存扩容事件发生时,采用动态内存申请机制向OS申请动态内存。
可选地,由于内存扩容事件不断发生,则可不断采用动态内存申请机制进行内存扩容。
可选地,可根据内存扩容事件的不同,将步骤102中的内存申请方式划分为周期扩容和按需扩容。关于周期扩容和按需扩容的描述可参见上述对图1a中的相关描述,在此不再赘述。对于步骤2中的动态内存,可采用图1b所示的两级块数据结构进行管理,在此不再赘述。
步骤3:当步骤2中的动态内存中的内存块满足上述实施方式1和/或实施方式2中的释放条件时,可将处于空闲状态的内存块缩减。
步骤4:当将动态内存中的内存块全部缩减后,内存加载模块处于初始扩容状态,其申请到的内存全部为步骤1中的静态内存。
值得说明的是,对于申请到的动态内存,当其没有全部缩减时,内存申请模块申请到的全部内存中的内存块的数量大于初始扩容时静态内存中的内存块的数量。
还值得说明的是,对于上述实施例中每个内存块的状态会跟随该内存块中内存表项的分配、释放等情况而发生状态迁移。如图1d所示,状态转移的过程如下:
步骤1:当进行内存申请时,所有内存块处于空状态,即没有申请任何的动态内存。
步骤2:当监测到内存扩容事件发生时,采用动态扩容机制向OS申请动态内存,申请到的动态内存处于空闲状态。进一步可以一个内存页为单位向OS申请动态内存,并将申请到的一个内存页的空间作为一个内存子块,每个内存子块包括多个表项。将每次申请到的内存子块加入对应的内存块。此时内存块从空状态转移到空闲状态。
步骤3:当接收到内存表项分配请求时,如果将空闲状态中的内存块中的部分表项进行分配,此时内存块的状态从空闲状态转移为半满状态;如果将空闲状态中的内存块中的全部表项分配出去,则内存块的状态从空闲状态转移为半满状态。
步骤4:之后,每次接收到内存表项分配请求时,将处于半满状态中的内存块中的空闲表项进行分配,直至该内存块中不再存在空闲表项,则内存块的状态从半满状态转移为满状态。
可选地,如果对处于半满状态的内存块不断进行扩容,则其一直处于半满状态。
步骤5:当处于满状态的内存块中的表项被部分释放或者对处于半满状态的内存块进行扩容后,处于内存块的状态则从满状态转移到半满状态。
步骤6:当处于半满状态的内存块中的表项全部被释放后,则处于内存块从半满状态转化为空闲状态。
步骤7:当处于空闲状态的内存块满足上述实施方式1和/或实施方式2中的释放条件时,将处于空闲状态的内存块进行缩减。缩减后的内存块的状态则从空闲状态转化为空状态。
在本申请实施例中,在进行内存申请时,还需要内存申请机制与考虑硬件缓存(cache)的适配问题。
一是高速缓存行(cacheline)对齐问题,当单个表项跨越两条cacheline时,表项的访问需要涉及到两条cacheline的读写,效率较低。在本实施例中,可以通过将连接跟踪表项大小设置为cacheline长度的倍数进行对齐。其中,表项的大小是可调,一是要是cacheline的整数倍,一般是一倍,内存页也是cacheline长度的倍数。
二是cacheline冲突和闲置问题。对于该问题,本实施例中,在采用slab分配器进行内存分配时,引入了着色机制,将每个扩容单元的起始地址错开。由于内存子块是以内存页的大小(4kB)申请内存,并且表项的申请、释放是大量且随机的,内存子块内的表项可以看作是均等使用,因此不存在cacheline冲突和闲置的问题。
进一步,在本申请实施例中,要实现内存的申请,还需要调试跟踪手段来完成对内存申请机制的调试跟踪。如果内存申请形成的分配器的后端对接Slab分配器,则继承Slab分配器的以下调试跟踪手段:
1)释放表项校验:包括表项地址合法性、表项地址与分配器是否对应等检查;
2)使用已释放表项检查:一方面通过向释放表项注入错误值进行标记,若读写已表项对象,则可以从系统堆栈中观测到;一方面在表项释放时同步解除页映射,任何非法访问都会触发系统宕机;
3)内存泄漏检测:提供每个分配器名称、表项大小、表项数量的统计信息。Slab分配器中分配的内存表项,是物理层面的内存对象。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤101至步骤102的执行主体可以为设备A;又比如,步骤101的执行主体可以为设备A,步骤102的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被处理器执行时能够实现上述内存申请方法实施例中可由网络设备执行的各步骤。
除上述实施例提供的内存申请方法之外,本申请实施例还提供一种网络设备。图2为本申请实施例提供的一种网络设备的结构示意图。网络设备可以为网关设备、路由器、交换机、行为管理设备等各类计算设备。如图2所示,该网络设备包括:存储器20a和处理器20b。
其中,存储器20a包括内存和程序存储空间,且程序存储空间用于存储计算机程序以及OS。存储器20a可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器20b,用于执行计算机程序,以用于:根据网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从OS中申请静态内存;监听是否发生内存扩容事件;若监听到内存扩容事件发生,则采用动态内存申请机制向OS申请动态内存;其中,在使用过程中,动态内存可以动态缩减。
在一可选实施例中,处理器20b在监听是否发生内存扩容事件时,具体用于:周期性检测当前已有的内存空间中空闲表项的数量,若检测到空间表项的数量小于设定的第一数量阈值,则采用动态内存申请机制向OS申请动态内存;和/或当有新的数据流需要创建时,若当前已有的内存空间中没有足够的空闲表项,则监听到内存扩容事件发生。
在另一可选实施例中,处理器20b在采用动态内存申请机制向OS申请动态内存时,具体用于:采用动态内存申请机制,以一个内存页为单位向OS申请动态内存;其中,内存页的大小是静态内存和动态内存中需要存储的表项的大小的整数倍。
在又一可选实施例中,处理器20b在采用动态内存申请机制向OS申请动态内存之前,还包括:判断监听到内存扩容事件之前采用动态内存申请机制向OS申请动态内存的连续失败次数是否达到设定的次数阈值;若判断结果为是,拒绝采用动态内存申请机制向OS申请动态内存,并在等待设定时间后,将连续失败次数置为0,并重新执行监听是否发生内存扩容事件的操作;以及若判断结果为否,则采用动态内存申请机制向OS申请动态内存,并在成功申请到动态内存时,将连续失败次数置为0。
进一步,处理器20b在向OS成功申请到动态内存时,还用于:将成功申请到的动态内存作为一个内存子块,并将内存子块的起始地址加入内存子块索引表中;以及确定内存子块所属的内存块,并将该内存子块的所有表项添加至其所属的内存块的空闲链表中。其中,空闲链表用于存储内存块中空闲表项的序号。
可选地,网络设备还通信组件20c,用于接收内存表项分配请求。相应地,处理器20b还用于:当通信组件20c接收到内存表项分配请求时,查询当前已有的内存空间所包含的各内存块对应的内存块描述符,以获取各内存块的状态,其中,内存块描述符包括内存块状态;若存在处于半满状态的内存块,从处于半满状态的内存块中选择一个内存块进行表项分配;其中,半满状态是指内存块的空闲表项的数量小于该内存块包含的表项总数的状态。
进一步,由于内存块之间按序编号,则处理器20b在从处于半满状态的内存块中选择一个内存块进行表项分配时,具体用于:从处于半满状态的内存块中,选择序号最小的内存块进行表项分配。
在再一可选实施例中,处理器20b还用于:监测当前已有的内存空间所包含的各内存块对应的内存块描述符,以获取各内存块的状态;若存在处于空闲状态的内存块,且该内存块中的内存子块均属于动态内存,则释放处于空闲状态的内存块;其中,空闲状态是指内存块中空闲表项的数量等于对应内存块包含的表项总数的状态。
进一步,处理器20b在释放处于空闲状态的内存块之前,还用于执行执行以下至少一种判断操作:(1)判断在释放处于空闲状态的内存块后剩余空闲表项的数量是否大于设定的第二数量阈值;(2)判断处于空闲状态的内存块处于空闲状态的时长是否达到设定的空闲保持时长。若至少一种判断操作的结果均为是,则执行释放处于空闲状态的内存块的操作。
进一步,如图2所示,该网络设备还包括:电源组件20d等其它组件。图2中仅示意性给出部分组件,并不意味着网络设备只包括图2所示组件。
上述图2中的通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,通信组件还可以包括近场通信(NFC)模块,射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术等。
上述图2中的电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
本实施例提供的网络设备,一方面,可根据其上可能并发的数据流的数量,采用静态内存申请机制预先从OS中申请静态内存,做到提前申请内存,可减小报文转发过程中的内存申请开销,进而减小对网络设备的报文转发性能的影响;另一方面,还在监听到内存扩容事件发生时,采用动态内存申请机制向OS申请可以动态缩减的动态内存,可按需进行内存的动态扩容和释放,不仅可防止内存不足,还可降低无效的内存占用,进而提升网络性能的稳定性。
需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (14)
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所述的方法,其特征在于,在释放所述处于空闲状态的内存块之前,还包括执行以下至少一种判断操作:
判断在释放所述处于空闲状态的内存块后剩余空闲表项的数量是否大于设定的第二数量阈值;
判断所述处于空闲状态的内存块处于空闲状态的时长是否达到设定的空闲保持时长;
若所述至少一种判断操作的结果均为是,则执行释放所述处于空闲状态的内存块的操作。
9.一种网络设备,其特征在于,包括:存储器和处理器;
所述存储器包括内存和程序存储空间,所述程序存储空间用于存储计算机程序以及操作系统OS;
所述处理器,用于执行所述计算机程序,以用于:
根据所述网络设备上可能并发的数据流的数量,采用静态内存申请机制预先从所述OS中申请静态内存;
监听是否发生内存扩容事件;
若监听到内存扩容事件发生,则采用动态内存申请机制向所述OS申请动态内存;其中,在使用过程中,所述动态内存可以动态缩减。
10.根据权利要求9所述的网络设备,其特征在于,所述处理器还用于:
在采用动态内存申请机制向所述OS申请动态内存之前,判断监听到内存扩容事件之前采用动态内存申请机制向所述OS申请动态内存的连续失败次数是否达到设定的次数阈值;
若判断结果为是,则拒绝采用动态内存申请机制向所述OS申请动态内存,并在等待设定时间后,将所述连续失败次数置为0,并重新执行所述监听是否发生内存扩容事件的操作;
若判断结果为否,则采用动态内存申请机制向所述OS申请动态内存,并在成功申请到动态内存时,将所述连续失败的次数置为0。
11.根据权利要求9或10所述的网络设备,其特征在于,所述处理器还用于:
每当向所述OS成功申请到动态内存时,将成功申请到的动态内存作为一个内存子块,并将所述内存子块的起始地址加入内存子块索引表中;以及
确定所述内存子块所属的内存块,将所述内存子块的所有表项加入其所属的内存块的空闲链表中,所述空闲链表用于存储所述内存块中空闲表项的序号。
12.根据权利要求11所述的网络设备,其特征在于,所述处理器还用于:
当接收到内存表项分配请求时,查询当前已有的内存空间所包含的各内存块对应的内存块描述符,以获取各内存块的状态,所述内存块描述符包括内存块的状态;
从处于半满状态的内存块中选择一个内存块进行表项分配,所述半满状态是指内存块的空闲表项的数量小于对应的内存块包含的表项总数的状态。
13.根据权利要求11所述的网络设备,其特征在于,所述处理器还用于:
监测当前已有的内存空间所包含的各内存块对应的内存块描述符,以获取各内存块的状态;
若存在处于空闲状态的内存块,且所述处于空闲状态的内存块中的内存子块均属于动态内存,则释放所述处于空闲状态的内存块,所述空闲状态是指内存块中空闲表项的数量等于对应内存块包含的表项总数的状态。
14.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,致使所述处理器实现权利要求1-8任一项所述方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811526037.2A CN109614240A (zh) | 2018-12-13 | 2018-12-13 | 内存申请方法、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811526037.2A CN109614240A (zh) | 2018-12-13 | 2018-12-13 | 内存申请方法、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109614240A true CN109614240A (zh) | 2019-04-12 |
Family
ID=66007487
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811526037.2A Pending CN109614240A (zh) | 2018-12-13 | 2018-12-13 | 内存申请方法、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109614240A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111679909A (zh) * | 2020-05-19 | 2020-09-18 | 深圳市元征科技股份有限公司 | 数据处理方法、装置及终端设备 |
CN111831596A (zh) * | 2020-07-28 | 2020-10-27 | 山东有人信息技术有限公司 | 一种rtos串口网络传输方法及装置 |
CN111984425A (zh) * | 2020-09-30 | 2020-11-24 | 杭州未名信科科技有限公司 | 用于操作系统的内存管理方法、装置及设备 |
CN113783758A (zh) * | 2021-11-11 | 2021-12-10 | 荣耀终端有限公司 | 一种用于配置监听周期的方法及相应的电子设备 |
CN114584786A (zh) * | 2022-01-20 | 2022-06-03 | 百果园技术(新加坡)有限公司 | 基于视频解码的内存分配方法及系统 |
CN117130949A (zh) * | 2023-08-28 | 2023-11-28 | 零束科技有限公司 | 内存管理方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722106A (zh) * | 2004-07-13 | 2006-01-18 | 中兴通讯股份有限公司 | 一种嵌入式实时操作系统中内存分配的方法 |
CN104090848A (zh) * | 2014-07-16 | 2014-10-08 | 云南大学 | 一种周期性大数据处理的内存管理方法及装置 |
CN106855788A (zh) * | 2015-12-09 | 2017-06-16 | 北京信威通信技术股份有限公司 | 一种堆空间的内存分配管理方法 |
-
2018
- 2018-12-13 CN CN201811526037.2A patent/CN109614240A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722106A (zh) * | 2004-07-13 | 2006-01-18 | 中兴通讯股份有限公司 | 一种嵌入式实时操作系统中内存分配的方法 |
CN104090848A (zh) * | 2014-07-16 | 2014-10-08 | 云南大学 | 一种周期性大数据处理的内存管理方法及装置 |
CN106855788A (zh) * | 2015-12-09 | 2017-06-16 | 北京信威通信技术股份有限公司 | 一种堆空间的内存分配管理方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111679909A (zh) * | 2020-05-19 | 2020-09-18 | 深圳市元征科技股份有限公司 | 数据处理方法、装置及终端设备 |
CN111679909B (zh) * | 2020-05-19 | 2024-02-23 | 深圳市元征科技股份有限公司 | 数据处理方法、装置及终端设备 |
CN111831596A (zh) * | 2020-07-28 | 2020-10-27 | 山东有人信息技术有限公司 | 一种rtos串口网络传输方法及装置 |
CN111831596B (zh) * | 2020-07-28 | 2022-01-21 | 山东有人物联网股份有限公司 | 一种rtos串口网络传输方法及装置 |
CN111984425A (zh) * | 2020-09-30 | 2020-11-24 | 杭州未名信科科技有限公司 | 用于操作系统的内存管理方法、装置及设备 |
CN111984425B (zh) * | 2020-09-30 | 2024-04-02 | 浙江省北大信息技术高等研究院 | 用于操作系统的内存管理方法、装置及设备 |
CN113783758A (zh) * | 2021-11-11 | 2021-12-10 | 荣耀终端有限公司 | 一种用于配置监听周期的方法及相应的电子设备 |
CN114584786A (zh) * | 2022-01-20 | 2022-06-03 | 百果园技术(新加坡)有限公司 | 基于视频解码的内存分配方法及系统 |
CN114584786B (zh) * | 2022-01-20 | 2024-02-13 | 百果园技术(新加坡)有限公司 | 基于视频解码的内存分配方法及系统 |
CN117130949A (zh) * | 2023-08-28 | 2023-11-28 | 零束科技有限公司 | 内存管理方法、装置、电子设备及存储介质 |
CN117130949B (zh) * | 2023-08-28 | 2024-05-10 | 零束科技有限公司 | 内存管理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109614240A (zh) | 内存申请方法、设备及存储介质 | |
US9094231B2 (en) | Router | |
US9628384B2 (en) | Adaptive industrial network | |
US9569291B1 (en) | Systems and methods for inter-process messaging | |
JP6962599B2 (ja) | クライアントサービス送信方法および装置 | |
CN105247933B (zh) | 一种定时调整方法及装置 | |
WO2017197983A1 (zh) | 流量处理方法及系统、存储介质、交换机 | |
US20130061009A1 (en) | High Performance Free Buffer Allocation and Deallocation | |
US9063841B1 (en) | External memory management in a network device | |
US20160373346A1 (en) | Data processing system, data processing method and computer readable medium | |
CN108170533A (zh) | 报文的处理方法及装置、计算机可读存储介质 | |
JP5672504B2 (ja) | 振分先を切り替える並列パケット処理方法および装置 | |
WO2018149102A1 (zh) | 一种降低高优先级数据传输时延的方法和装置、存储介质 | |
TW201642140A (zh) | 用於防止欠載之封包記憶體系統、方法及裝置 | |
WO2023124743A1 (zh) | 区块同步 | |
CN108768871A (zh) | 业务流量分配方法、装置及设备 | |
CN108282406B (zh) | 一种数据传输方法、堆叠设备及堆叠系统 | |
KR100791636B1 (ko) | 데이터 타입을 고려한 비컨 전송 스케줄링 시스템 및 그방법 | |
CN104468701B (zh) | 一种用于异构存储集群系统的i/o服务质量维护方法 | |
CN108139969B (zh) | 一种内存配置方法、装置及系统 | |
US7855967B1 (en) | Method and apparatus for providing line rate netflow statistics gathering | |
CN113971085A (zh) | 主从核心区分处理任务的方法、装置、系统和存储介质 | |
JP2024520146A (ja) | 決定論的フロー伝送方法および装置 | |
CN102970219A (zh) | 绑定保护环的方法和装置 | |
US8422396B2 (en) | Rate monitoring apparatus |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190412 |
|
RJ01 | Rejection of invention patent application after publication |