CN109960662B - 一种内存回收方法及设备 - Google Patents
一种内存回收方法及设备 Download PDFInfo
- Publication number
- CN109960662B CN109960662B CN201711421630.6A CN201711421630A CN109960662B CN 109960662 B CN109960662 B CN 109960662B CN 201711421630 A CN201711421630 A CN 201711421630A CN 109960662 B CN109960662 B CN 109960662B
- Authority
- CN
- China
- Prior art keywords
- metadata
- memory
- structures
- type
- memory space
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种内存回收方法及设备,涉及存储领域,能够保证回收的内存是连续的,使得内存持续地在不同的元数据间均衡分配,提高内存的利用率。包括:当为第一类型的元数据分配内存空间时内存空间不足,确定所述第一类型的元数据所需的内存空间的大小;根据所述第一类型的元数据所需的内存空间的大小,回收内存中的一个或多个结构体,所述结构体是最小回收单位,所述一个或多个结构体中的每个结构体具有相同的标识,在回收之前所述一个或多个结构体都是分配给第二类型的元数据的内存空间。
Description
技术领域
本发明实施例涉及存储领域,尤其涉及一种内存回收方法及设备。
背景技术
随着硬件的发展,存储系统所需占用的存储空间越来越大,为了获取极致性能,往往会将内存转为缓存,以能够在缓存中快速地读取数据。对于网络附属存储(networkattached storage,NAS)系统而言,由于语义的多样性,会有诸如inode(索引节点)、dentry(目录项)、叶子块、间接块、位图等众多元数据需要缓存。另外,由于不同类型的元数据对缓存的需求不同,需要内存在不同的元数据缓存间共享。如:在少量大文件场景下,间接块、叶子块占用的占用的缓存较多,inode元数据需要的缓存比较少;但是,海量小文件场景下,inode元数据很多,需要占用大量缓存,需要挤占间接块或叶子块的一些缓存。需要将间接块或叶子块占用的内存回收为内存,以分配给inode据用作缓存。
现有技术中,将空闲的缓存空间释放,以便将释放的缓存回收。如此,回收到的缓存空间很有可能是离散的,也就是说回收的内存空间也是离散的。在下一次进行内存分配时,NAS设备不会将这些离散的内存空间分配给某个元数据作为缓存,也就是说内存无法持续地在不同的元数据间均衡分配,不能很好地利用内存。
发明内容
本申请提供一种内存回收方法及设备,能够保证回收的内存是连续的,使得内存持续地在不同的元数据间均衡分配,提高内存的利用率。
为达到上述目的,本申请采用如下技术方案:
第一方面,公开了一种内存回收方法,包括:当为第一类型的元数据分配内存空间时内存空间不足,确定第一类型的元数据所需的内存空间的大小;随后,可以根据第一类型的元数据所需的内存空间的大小,回收内存中的一个或多个结构体。其中,结构体是最小回收单位,所述一个或多个结构体中的每个结构体具有相同的标识,并且在回收之前所述一个或多个结构体都是分配给第二类型的元数据的内存空间。
本发明实施例提供的内存回收方法,在为某类型的原数据分配内存空间时设备系统内存资源紧张,可以将为其他类型的元数据分配的内存空间回收。首先确定第一类型的元数据所需的内存空间的大小,最后根据第一类型的元数据所需的内存空间的大小回收内存中的一个或多个结构体。所述一个或多个结构体都是分配给其他类型的元数据的内存空间,也就是说将为同一类型的元数据分配的内存空间统一回收。由于分配给同一类型的元数据的内存空间是连续的,这样的回收方法可以尽可能避免回收的内存是离散的,进而后续可以将整个的元数据内存块调配给需要的元数据,使得内存可以持续地在各个元数据间均衡分布。
结合第一方面,在第一方面的第一种可能的实现方式中,上述第二类型的元数据是访问频率低于预设阈值的元数据。
也就是说,在回收内存时可以优先回收应用程序不常访问的缓存,即上述访问频率低于预设阈值的缓存,保留应用程序频繁访问的缓存,尽可能不影响应用程序的正常运行。
结合第一方面或第一方面的第一种可能的方式,在第一方面的第二种可能的实现方式中,所述一个或多个结构体是处于空闲状态的结构体。其中,处于空闲状态的结构体中没有存储数据,或处于空闲状态的结构体未被应用程序调用。
在回收内存时,将第二类型的内存空间中处于空闲状态的结构体回收,避免回收当前被应用程序调用的结构体,进而避免影响应用程序读数据失败。
结合第一方面或以上第一方面的任意一种可能的方式,在第一方面的第三种可能的实现方式中,上述回收内存中的一个或多个结构体具体包括:监控所述一个或多个结构体结构体中处于占用状态的结构体;处于占用状态的结构体是被应用程序调用的结构体;在处于占用状态的结构体为空闲状态后,将所述一个或多个结构体回收。
也就是说,如果确定回收的结构体中有被应用程序调用的结构体,则先不回收这些结构体,而是等待这些结构体中先前为占用状态的结构体变成空闲状态,即应用程序调用结束后,再将这些结构体统一回收。
结合第一方面或以上第一方面的任意一种可能的方式,在第一方面的第四种可能的实现方式中,所述一个或多个结构体为随机选取的结构体或按照第二类型的元数据对应的淘汰规则选取的结构体。
也就是说,在回收内存时,还可以从第二类型的内存空间中选取一些结构体回收,如:按照第二类型的元数据对应的淘汰规则选取需要回收的结构体。第二类型的元数据对应的淘汰规则可以是
第二方面,公开了一种设备,包括:确定单元,用于当为第一类型的元数据分配内存空间时内存空间不足,确定第一类型的元数据所需的内存空间的大小;回收单元,用于根据第一类型的元数据所需的内存空间的大小,回收内存中的一个或多个结构体,结构体是最小回收单位,一个或多个结构体中的每个结构体具有相同的标识,在回收之前一个或多个结构体都是分配给第二类型的元数据的内存空间。
结合第二方面,在第二方面的第一种可能的实现方式中,第二类型的元数据是访问频率低于预设阈值的元数据。
结合第二方面或第二方面的第二种可能的实现方式,在第二方面的第二种可能的实现方式中,所述一个或多个结构体是处于空闲状态的结构体;处于空闲状态的结构体中没有存储数据,或处于空闲状态的结构体未被应用程序调用。
结合第二方面或以上第二方面的任意一种可能的实现方式,在第二方面的第三种可能的实现方式中,回收单元具体用于,监控所述一个或多个结构体结构体中处于占用状态的结构体;处于占用状态的结构体是被应用程序调用的结构体;在处于占用状态的结构体为空闲状态后,将所述一个或多个结构体回收。
结合第二方面或以上第二方面的任意一种可能的实现方式,在第二方面的第四种可能的实现方式中,所述一个或多个结构体为随机选取的结构体或按照第二类型的元数据对应的淘汰规则选取的结构体。
本发明实施例提供的设备,在为某类型的原数据分配内存空间时设备系统内存资源紧张,可以将为其他类型的元数据分配的内存空间回收。首先确定第一类型的元数据所需的内存空间的大小,最后根据第一类型的元数据所需的内存空间的大小回收内存中的一个或多个结构体。所述一个或多个结构体都是分配给其他类型的元数据的内存空间,也就是说将为同一类型的元数据分配的内存空间统一回收。由于分配给同一类型的元数据的内存空间是连续的,这样的回收方法可以尽可能避免回收的内存是离散的,进而后续可以将整个的元数据内存块调配给需要的元数据,使得内存可以持续地在各个元数据间均衡分布。
第三方面,公开了一种计算机可读存储介质,该计算机可读存储介质中存储有指令;当其在上述第二方面及其任意一项可能的实现方式所述的设备上运行时,使得该设备执行如上述第一方面及其各种可能的实现方式所述的内存回收方法。
第四方面,公开了一种无线通信装置,该无线通信装置中存储有指令,当该无线通信装置在上述第二方面及其任意一项可能的实现方式所述的设备上运行时,使得该设备执行如上述第一方面及其各种可能的实现方式所述的内存回收方法。具体实现中,该无线通信装置可以是芯片。
本申请中第二方面、第三方面、第四方面及其各种实现方式的具体描述,可以参考第一方面及其各种实现方式中的详细描述;并且,第二方面、第三方面、第四方面及其各种实现方式的有益效果,可以参考第一方面及其各种实现方式中的有益效果分析,此处不再赘述。
附图说明
图1为现有技术中NAS设备与客户端的通信示意图;
图2为现有技术中的缓存分配的示意图;
图3为本发明实施例提供的设备的结构示意图;
图4为本发明实施例提供的缓存实例分配缓存的示意图;
图5为本发明实施例提供的缓存分配的流程示意图;
图6为本发明实施例提供的内存回收方法的流程示意图;
图7为本发明实施例提供的记录访问热度的示意图;
图8为本发明实施例提供的内存回收方法的另一流程示意图;
图9为本发明实施例提供的设备的另一结构示意图;
图10为本发明实施例提供的设备的另一结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行详细地描述。
NAS设备是一种与网络介质相连的数据存储设备。参考图1,由于NAS设备都分配有IP地址,所以NAS客户端可以通过数据网关服务器可以对NAS设备进行存取访问。甚至在某些情况下,NAS客户端不需要任何中间介质服务器也可以直接访问NAS设备。
为了提升性能,NAS设备往往利用内存空间构建大量的缓存,并且为元数据分配缓存空间来存储数据,以提高读数据的速度。参考图2,为每种元数据生成一个分配器(slab),由分配器为对应的元数据分配缓存空间。具体地,伙伴系统将一部分内存空间分配给了多个分配器,各个分配器再将各自分配到的内存空间按照一定的粒度分配给对应的元数据。示例的,伙伴系统将一个1000M的内存空间分配给inode分配器和dentry分配器,其中,为inode分配器和dentry分配器各分配了500M的内存空间。当需要为inode元数据分配缓存时,inode分配器在对应的500M内存块中分配出一个300字节的结构体。当需要为dentry元数据分配缓存时,dentry分配器对应的500M内存块中分配出一个200字节的结构体。需要说明的是,结构体可以认按照一定的空间大小划分的内存空间,如:上述300字节的结构体或200字节的结构体。
为了满足不同场景下,元数据对缓存空间的不同需求,可以根据实际的场景将内存分配给不同的元数据用作缓存。当NAS设备内存空间不足时,就需要将一些元数据占用的内存空间回收,以便分配给需要的元数据用作缓存,缓解数据压力。参考图2,当NAS设备内存资源紧张时会通知各分配器回收缓存,各个分配器通知各自的缓存实例回收,但是缓存实例是以各自缓存的结构体的大小为粒度进行回收,并不能保证回收的缓存一定是连续的,也就不能保证回收内存的连续性。示例的,NAS设备指示回收4K的内存空间,inode分配器回收了13个空闲状态的结构体,且这13个结构体在内存中是离散的。每个结构体的大小为300字节,13个结构体的大小约等于4K。可见,现有的回收机制虽然能够回收到内存,但是回收的内存空间是离散的,在一定程度上来说,并没有很好地回收到内存资源。在下一次进行内存分配时,NAS设备不会将这些离散的内存空间分配给某个元数据作为缓存,也就是说内存无法持续地在不同的元数据间均衡分配,不能很好地利用内存。
为了解决现有技术的问题,本发明实施例提供一种内存回收方法,首先在分配器在为元数据分配结构体时,为每个结构体设置一个标识,指示该结构体属于哪个元数据内存块(所谓元数据内存块,是指为某类元数据预留的内存)。在为第一类型的元数据分配内存空间时内存空间不足,确定第一类型的元数据所需的内存空间的大小。随后,根据第一类型的元数据所需的内存空间的大小,回收内存中的一个或多个结构体。其中,结构体是最小回收单位,并且回收的一个或多个结构体中的每个结构体具有相同的标识,在回收之前所述一个或多个结构体都是分配给第二类型的元数据的内存空间。也就是说,将从同一个块内存空间划分出的结构体统一回收。这样,可以尽可能避免回收的内存空间是离散的,在一定程度上避免内存碎片的产生,使得内存可以持续地在各个元数据间均衡分布。
本发明实施例提供一种设备,可以是上述NAS设备,用以实现上述本发明实施例提供一种内存回收方法,如图3所示,本发明实施例提供的设备包括处理器01、与处理器01连接的存储介质02、以及收发器03。
具体地,处理器01是设备的控制中心,可以是一个中央处理器(centralprocessing unit,CPU),也可以是特定集成电路(application specific integratedcircuit,ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路,例如:一个或多个微处理器(digital signal processor,DSP),或,一个或者多个现场可编程门阵列(field programmable gate array,FPGA)。
存储介质02包括设备的内存和缓存,可以存储数据、软件程序以及模块等存储介质02还可以包括硬盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码。存储介质02还可以是能够由设备存取的任何其他介质,但不限于此。
收发器03,用于支持设备与其他设备之间的通信,如:支持设备与图1所示的NAS客户端之间的通信。示例的,收发器03用于接收NAS客户端的请求,该请求符合标准的网络文件系统(network file system,NFS)协议或通用网络文件系统(common internet filesystem,CIFS)协议。随后,处理器01解析该请求并调用相应接口完成该请求相应的处理,收发器03可以将处理结果回传给NAS客户端。
具体实现中,处理器01为CPU时,可以通过运行或执行存储在存储介质02内的软件程序,以及调用存储在存储介质02内的数据,执行上述设备的各种功能。处理器01也可以为FPGA,当设备运行时,FPGA执行上述设备的各种功能。
示例的,处理器01调用存储介质02中的代码进行语义处理,如创建/删除/读写等语义。所谓语义处理就是赋予数据特定的含义,即将数据转化为具有特定含义的信息。在进行语义处理过程包括很多元数据操作,如对目录相关的元数据dentry的操作,以及对文件相关的元数据inode的操作。为提升查找这些元数据的速度,处理器01还可以为dentry与inode分别构建读缓存(rocache),并将语义处理最终生成的数据,如:目录数据、文件数据等,通过键值对(key value,kv)的形式持久化写入存储介质02中。
在本发明实施例中,处理器01还可以调用存储介质02中的代码对存储介质中的进行内存分配与回收功能,如:将一部分连续内存分配给某类型的元数据用作缓存。具体地,为该类型的元数据提供大颗粒的内存,并从这个内存中划分小粒度的内存分配给元数据用作缓存。以及,在设备的内存空间不足时,将某类元数据所占的缓存中回收为内存,以便后续将回收的内存重新分配给其他类型的元数据。
具体地,参考图4,处理器01首先在存储介质02中为不同类型的元数据分配不同的内存,当然分配给同一类的元数据的内存是连续的。其次,处理器01还可以按照较小的粒度划分为某类元数据分配的内存,利用划分出的内存来缓存该类元数据。也就是说,处理器01为各类元数据均分配了大颗粒的内存,如每次为每种元数据分配1MB的内存。再从对应的大颗粒内存上再分配相应的小颗粒内存给不同的元数据用作缓存。如:每个inode元数据的大小为300B,处理器01则以300B为粒度划分为inode元数据分配的内存;每个dentry元数据的大小为400B,处理器01则以400B为粒度划分为dentry元数据分配的内存;每个间接块元数据的大小为512B,处理器01则以512B为粒度为间接块元数据分配内存。在本发明实施例中,回收缓存时也需要释放整个的1MB内存归还给内存,也就是说内存会以1MB为粒度在不同的元数据缓存间流动,即1MB的内存先分配给A类元数据用作缓存,随后这1MB的内存被释放后,可以被整个分配给B类元数据用作缓存。当然,这里的1MB只是为各类元数据分配内存的一种粒度,还可以按照其他粒度为各类元数据分配内存,本发明实施例对比不做限制。
以下结合附图详细说明缓存分配的流程。参考图5,缓存分配的流程具有包括以下步骤:
步骤S1、处理器01将存储介质02中连续的1MB内存分配给第一类型的元数据。
本发明实施例中的第一元数据可以是inode、dentry、间接块、叶子块、位图等。其中,inode可以认为是索引节点,它用来存放文件的基本信息,在创建文件的同时,将会创建相应的inode。Dentry可以认为是目录项,是文件系统中某个inode的链接。
需要说明的是,这里的1MB只是本发明实施例给出的一个示例,为第一类型的元数据分配的内存的大小不仅仅限于1MB,也可以是其他大小的内存。另外,为第一类型的元数据分配的内存是用于缓存第一类型的元数据的。
步骤S2、处理器01记录1MB的内存为可分配状态。
具体实现中,处理器01可以将1MB的内存记录在free list(可用内存列表)上。处理器01在为第一类型的元数据分配内存时首先会查找free list,确定可用的内存,再将可用的内存分配给第一类型的元数据。
步骤S3、NAS设备需要缓存第一类型的元数据时,处理器01在为第一类型的元数据分配的1MB的内存中划分结构体。
具体实现中,处理器01可以根据第一类型的元数据的大小来切分结构体,如:参考图4在为inode分配的内存中划分的结构体为300B,在为dentry分配的内存中划分的结构体为400B,在为间接块分配的内存中划分的结构体为512B。
步骤S4、处理器01存储结构体信息,包括结构体的标识。
其中,结构体信息还可以包括结构体的地址。本发明实施例中,结构体的标识用于指示该结构体属于哪个元数据内存块,属于同一个元数据内存块的结构体的标识相同。例如:处理器01是以1MB为粒度为各类元数据分配内存,结构体的标识则用于指示该结构体属于哪个1MB的内存。
S5、处理器01将第一类型的元数据存储在结构体信息中结构体的地址指示的内存空间。
在一些实施例中,按照上述方法分配缓存之后,在需要调配缓存时,还可以对缓存进行回收。如此,本发明实施例提供一种内存回收方法,应用于图3所示的NAS设备,如图6所示,所述方法包括以下步骤:
101、当为第一类型的元数据分配内存空间时内存空间不足,确定第一类型的元数据所需的内存空间的大小。
其中,第一类型的元数据可以inode、dentry、间接块、叶子块中的任意一个。具体实现中,为提高读数据的速度,尽可能地将元数据存储在缓存中,但是介于缓存空间是有限的,因此NAS设备需要为第一类型的元数据分配内存空间,以便用作缓存来缓存第一类型的元数据。若NAS设备内存资源紧张,如:NAS设备的内存空间不足预设的门限值,则可以确定NAS设备当前未分配的内存空间可能无法满足第一类型的元数据的存储需求,需要将分配给其他元数据的内存空间回收,以便把回收到的内存空间分配给第一类型的元数据。
102、根据所述第一类型的元数据所需的内存空间的大小,回收所述内存中的一个或多个结构体。其中,结构体是最小回收单位,所述一个或多个结构体中的每个结构体具有相同的标识,在回收之前所述一个或多个结构体都是分配给第二类型的元数据的内存空间。
参考以上所述的缓存分配方法,在分配器为元数据分配结构体时,可以为各个结构维护一个标识,进一步,从为同一类型的元数据分配的内存空间划分出的结构体的标识可以相同,用于指示这些结构体是为同一类型元数据分配的内存空间。如此,本发明实施例中回收内存时,以结构体的标识为索引回收结构体,有利于将为同一类型元数据分配的内存空间集体回收,由于为某一类型的元数据分配的内存空间是连续的,因此本发明实施例可以在一定程度上避免了内存碎片的产生。
示例的:为dentry预留了内存空间1,在内存空间1中划分的结构体的标识为1;为inode预留了内存空间2,在内存空间2中划分的结构体的标识为2。如果确定回收inode的内存空间,即上述第二类型的元数据为inode,则可以将内存中标识为1的一个或多个结构体回收。
需要说明的是,所述第二类型的元数据可以是访问频率低于预设阈值的元数据,也就是说,在回收内存时首先考虑热度较低的元数据。其中,预设阈值可以是根据经验设置的数值,这个数值依赖于NAS设备记录访问记录的形式。
具体实现中,可以直接将访问频率低于预设阈值的元数据的内存空间中的结构体确定为回收的对象,也可以通过以下方式确定具体回收哪个元数据对应的结构体,也就是确定哪个元数据的访问频率较低,将这些元数据的内存空间中的结构体回收。首先,会记录缓存中每个结构体的热度,具体地,可以以特定时长(如:1ms)为单位统计缓存中每个结构体被访问的频率,进而确定这个特定时长内某类型的元数据的热度,并据此生成每个时间单元(即上述特定时长)对应的访问记录。示例的,从为第一类型的元数据分配的内存空间中划分出的结构体的标识为1,从为第二类型的元数据分配的内存空间中划分出的结构体的标识为2。假设时间单元1内标识为1的结构体被访问了2次(可以是访问了两个不同的结构体,也可以是同一个结构体被访问了两次),标识为2的结构体被访问了1次,则时间单元1的访问记录中第一类型的元数据的热度是2(即访问频率为2),第二类型的元数据的热度是1(即访问频率为1)。需要说明的是,对于在某个时间单元内没有被访问的结构体来说,在该时间单元对应的访问记录中不记录该结构体。
另外,若第一时间单元对应的访问记录中存储有第一类型的元数据被访问的频率,且第二时间单元内对应的访问记录中也存储有所述第一元数据被访问的频率,并且所述第一时间单元早于所述第二时间单元,那么删除所述第一时间单元对应的访问记录中关于第一类型的元数据的记录。也就是说,如果某一类元数据的结构体先后在两个时间单元被访问,则将先前的时间单元的访问记录中关于该类型的元数据的记录删除,仅将该元数据的访问频率保留在后面的时间单元对应的访问记录中,并且仅记录后面的时间单元内该类型的元数据的访问频率。
进一步,可以将所记录的最早的时间单元中热度最低的元数据确定为所述第二类型的元数,即首先回收热度最低的元数据的内存。示例的:先后记录T1、T2、T3这三个时间单元内元数据的访问热度,那么就查找T1的访问记录。具体地,T1的访问记录中,inode的访问频率是3;dentry的访问频率是1,间接块的访问频率是2。因此,访问热度最低的是dentry,因此,回收dentry对应的一个或多个结构体。
具体实现中,所述一个或多个结构体的大小之和可以大于第一类型的元数据所需的内存空间的大小,也可以小于第一类型的元数据所需的内存空间的大小,本发明实施例对此不作限定。进一步,如果所述一个或多个结构体的大小之和小于第一类型的元数据所需的内存空间的大小,还可以回收第三类型的元数据的结构体。第三类型的元数据的热度仅高于第二类型的元数据。承上所述,先后记录T1、T2、T3这三个时间单元内元数据的访问热度,第三类型的元数据可以是间接块。
具体实现中,当确定回收第二类型的元数据对应的结构体时,若第二类型的元数据对应的结构体的标识为1,则是将标识为1的结构体回收。
在一些实施例中,回收标识为1且处于空闲状态的结构体,也就是说上述一个或多个结构体是处于空闲状态的结构体。其中,处于空闲状态的结构体可以是没有存储数据的结构体,或者是,未被应用程序调用的结构体。
具体地,可以通过以下方式来回收所述一个或多个结构体:首先,监控所述一个或多个结构体中,处于占用状态的结构体;在所有处于占用状态的结构体均变为空闲状态后,将所述一个或多个结构体回收。其中,处于占用状态的结构体是被应用程序调用的结构体。
在一些实施例中,回收标识为1且满足预设条件的结构体。其中,满足预设条件的结构体可以是随机选取的结构体或按照所述第二类型的元数据对应的淘汰规则选取的结构体。也就是说上述一个或多个结构体是随机选取的结构体或按照所述第二类型的元数据对应的淘汰规则选取的结构体。
如:inode或dentry元数据的缓存实例使用近期使用最少(Least Recently Used,LRU)淘汰规则,hash查找;间接块的缓存实例采用分核无锁,多核随机淘汰规则。其中,所谓需要回收内存的元数据可以认为是待回收的元数据内存块所对应的元数据的缓存实例,如:上述dentry的缓存实例或间接块的缓存实例。
需要说明的是,一般应用程序用完缓存后会马上释放掉,因此在此等待所有待回收状态的结构体会空闲状态不会花费很长时间,不会对NAS设备的运行造成影响。
以下结合附图详细说明记录缓存中结构体的访问热度。参考图7,假设共有inode(索引节点)、dentry(目录项)以及间接块三种元数据,且预留给每个元数据的元数据内存块的大小为1MB。
其中,对于T1时刻:inode的缓存实例访问了inode1、inode2两个结构体,dentry的缓存实例没有访问缓存,间接块的缓存实例也没有访问缓存。则在T1时刻inode的访问热度为2;在GCM里生成T1对应的访问记录,具体地,存储有inode的热度为2。示例的,inode的ID为1,T1对应的访问记录中ID1对应的访问热度为2。
对于T2时刻:dentry的缓存实例访问了dentry1这一个结构体,inode的缓存实例没有访问缓存,间接块的缓存实例也没有访问缓存。则在T2时刻dentry的访问热度为1;在GCM里生成T2对应的访问记录,具体地,存储有dentry的热度为1。示例的,dentry的ID为2,T2对应的访问记录中ID2对应的访问热度为1。
对于T3时刻:inode的缓存实例访问了inode3这个结构体,dentry的缓存实例没有访问缓存,间接块的缓存实例也没有访问缓存。将GCM里T1对应的访问记录中关于inode的记录删除,另外,生成T3对应的访问记录,存储有inode的热度为1。inode的ID仍然为1,即,T3对应的访问记录ID1对应的访问热度为1。
这时如果发生内存,需要回收1MB的内存,也就是需要回收一个元数据内存块。进一步,由于T1中删除关于inode的记录后,T1没有访问记录。且T2早于T3,T2中记录了dentry的访问热度,那么就会回收dentry对应的1MB元数据内存块,也可以认为是回收dentry对应的元数据内存块包括的结构体。
当然,如果某个T内记录有多个元数据的访问频率,那么优先把访问热度小的元数据对应的元数据内存块回收。
以下以第一类型的元数据为inode,第二类型的元数据为dentry为例详细说明如何回收内存。也就是说,需要将为dentry分配的1MB内存回收,以便重新分配给inode。参考图8,具体包括:
201、当设备的处理器01为inode分配内存时,设备的内存空间不足,则确定inode的元数据所需的内存空间的大小。
其中,这里的缓存实例是dentry的缓存实例。
202、处理器01确定回收为dentry预留的1MB的内存。
203、处理器01判断为dentry预留的1MB的内存是否空闲。
需要说明的是,处理器01为dentry预留1MB的内存后,还会将这1MB的元数据内存块记录在freelist中,划分结构体时,将结构体对应的内存在从freelist中删除。
如果freelist中记录有1MB的内存块,说明为dentry预留的1MB的元数据内存块整体是空闲的,那么则执行步骤204,直接将整个1MB的内存块回收。如果freelist中记录的内存块不足1MB,则执行步骤步骤205。
204、处理器01释放整个1MB的元数据内存块。
205、处理器01在标识为1的结构体中选取满足预设条件的结构体。
具体实现中,可以在为dentry的元数据块中随机选取部分或全部结构体,或者按照一定的淘汰规则来选取结构体,如:采用LRU规则选取最近访问的结构体。
206、处理器01判断满足条件的结构体中是否存在占用状态的结构体。
所谓占用状态的结构体,即结构体当前被一个或多个应用程序在使用这个结构体。
如果满足条件的结构体均为空闲状态,则直接将所有满足条件的结构体回收为内存。如果满足条件的结构体中存在占用状态的结构体,则执行步骤207。
207、处理器01将占用状态的结构体标记为待处理状态,并通知缓存实例对这些机构体进行监控。
具体实现中,可以在结构体内用一个比特来标记结构体为待回收状态。示例的,这一个比特的状态为“1”,则表示结构体为待处理状态。当然也可以用其他数值来标记待处理状态,如“0”,本发明实施例对此不作限定。
208、处理器01监控到待处理状态的结构体均为空闲状态,则将所有满足预设条件的结构体回收为内存。
具体实现中,可以记录结构体的使用计数,即使用该结构体的应用程序的数量,当使用计数为0时,表示没有应用程序使用该结构体,结构体为空闲状态。示例的,在步骤207中将结构体A标记为“1”,同时,记录结构体的使用计数为3,步骤208中,缓存实例对标记为“1”的结构体的使用计数进行监控,当标记为“1”的结构体的使用计数为0,则通知分配器进行回收内存。
在一些实施例中,如果分配器判断为dentry预留的1MB的元数据内存块中存在被占用的结构体,即标识为1的结构体中存在被占用的结构体,则将标识为1的结构体中被占用的结构体标记为待处理状态,当标识为1的结构体中待处理状态的结构体为空闲时,回收为dentry预留的整个1MB的内存,即回收所有标识为1的结构体。
需要说明的是,本发明实施例步骤201~步骤209中涉及的GCM、缓存实例、分配器以及CMM是NAS中的模块。其中,NAS设备可以是图3所示的NAS设备。
本发明实施例提供的内存回收方法,在元数据内存块中划分分配结构体时,为每个结构体设置一个标识,指示该结构体属于哪个元数据内存块。在NAS设备的系统内存资源紧张需要回收内存时,确定待回收的元数据内存块,以及待回收的元数据内存块对应的标识,最后将所有标识为该标识的结构体回收。由于为某一类元数据划分结构体时,是从同一个元数据内存块上划分的,将标识相同的所有结构体回收可以避免回收的内存是离散的,使得内存可以持续地在各个元数据间均衡分布,提高内存的利用率。
在采用对应各个功能划分各个功能模块的情况下,图9示出了上述设备的一种可能的结构示意图。如图9所示,所述设备包括确定单元301和回收单元302。
确定单元301,用于支持所述设备执行上述实施例中的步骤101,和/或用于本文所描述的技术的其它过程。
回收单元302,用于支持所述设备执行上述实施例中的步骤102,和/或用于本文所描述的技术的其它过程;
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
示例性的,在采用集成的单元的情况下,本申请实施例提供的设备的结构示意图如图10所示。在图10中,该设备包括:处理模块401和通信模块402。处理模块301用于对设备的动作进行控制管理,例如,执行上述确定单元301、回收单元302执行的步骤,和/或用于执行本文所描述的技术的其它过程。通信模块402用于支持设备与其他设备之间的交互,例如,如图1中的NAS客户端之间的交互。如图10所示,设备还可以包括存储模块403,存储模块403用于存储设备的程序代码和数据。
当处理模块401为处理器,通信模块402为收发器,存储模块403为存储介质时,设备可以为图3所示的设备。
需要说明的是,处理器01可以调用存储介质中的代码执行上述确定单元301和回收单元302的功能。
在上述实施例中,可以全部或部分的通过软件,硬件,固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式出现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质,(例如,软盘,硬盘、磁带)、光介质(例如,DVD)或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (8)
1.一种内存回收方法,其特征在于,包括:
当为第一类型的元数据分配内存空间时内存空间不足,确定所述第一类型的元数据所需的内存空间的大小;
根据所述第一类型的元数据所需的内存空间的大小,回收内存中的一个或多个结构体,所述结构体是最小回收单位,所述一个或多个结构体中的每个结构体具有相同的标识,所述标识用于指示所述结构体属于哪个元数据的内存空间,所述一个或多个结构体的大小之和大于第一类型的元数据所需的内存空间的大小,在回收之前所述一个或多个结构体都是分配给第二类型的元数据的内存空间;所述一个或多个结构体是处于空闲状态的结构体;所述处于空闲状态的结构体中没有存储数据,或所述处于空闲状态的结构体未被应用程序调用。
2.根据权利要求1所述的方法,其特征在于,所述第二类型的元数据是访问频率低于预设阈值的元数据。
3.根据权利要求1所述的方法,其特征在于,所述回收所述内存中的一个或多个结构体具体包括:
监控所述一个或多个结构体结构体中处于占用状态的结构体;所述处于占用状态的结构体是被应用程序调用的结构体;
在所述处于占用状态的结构体为空闲状态后,将所述一个或多个结构体回收。
4.根据权利要求1或2所述的方法,其特征在于,所述一个或多个结构体为随机选取的结构体或按照所述第二类型的元数据对应的淘汰规则选取的结构体。
5.一种存储设备,其特征在于,包括:
确定单元,用于当为第一类型的元数据分配内存空间时内存空间不足,确定所述第一类型的元数据所需的内存空间的大小;
回收单元,用于根据所述第一类型的元数据所需的内存空间的大小,回收内存中的一个或多个结构体,所述结构体是最小回收单位,所述一个或多个结构体中的每个结构体具有相同的标识,所述标识用于指示所述结构体属于哪个元数据的内存空间,所述一个或多个结构体的大小之和大于第一类型的元数据所需的内存空间的大小,在回收之前所述一个或多个结构体都是分配给第二类型的元数据的内存空间;
所述一个或多个结构体是处于空闲状态的结构体;所述处于空闲状态的结构体中没有存储数据,或所述处于空闲状态的结构体未被应用程序调用。
6.根据权利要求5所述的设备,其特征在于,所述第二类型的元数据是访问频率低于预设阈值的元数据。
7.根据权利要求5所述的设备,其特征在于,所述回收单元具体用于,监控所述一个或多个结构体结构体中处于占用状态的结构体;所述处于占用状态的结构体是被应用程序调用的结构体;
在所述处于占用状态的结构体为空闲状态后,将所述一个或多个结构体回收。
8.根据权利要求5或6所述的设备,其特征在于,所述一个或多个结构体为随机选取的结构体或按照所述第二类型的元数据对应的淘汰规则选取的结构体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711421630.6A CN109960662B (zh) | 2017-12-25 | 2017-12-25 | 一种内存回收方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711421630.6A CN109960662B (zh) | 2017-12-25 | 2017-12-25 | 一种内存回收方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109960662A CN109960662A (zh) | 2019-07-02 |
CN109960662B true CN109960662B (zh) | 2021-10-01 |
Family
ID=67021008
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711421630.6A Active CN109960662B (zh) | 2017-12-25 | 2017-12-25 | 一种内存回收方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109960662B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111399760B (zh) * | 2019-11-19 | 2023-01-24 | 杭州海康威视系统技术有限公司 | Nas集群元数据处理方法、装置、nas网关及介质 |
CN113805805B (zh) * | 2021-05-06 | 2023-10-13 | 北京奥星贝斯科技有限公司 | 缓存内存块的淘汰方法、装置及电子设备 |
CN114356795A (zh) * | 2021-12-30 | 2022-04-15 | 中国民航信息网络股份有限公司 | 一种内存管理方法和相关装置 |
CN114598669B (zh) * | 2022-03-07 | 2024-03-19 | 潍柴动力股份有限公司 | 一种报文的存储方法、装置及设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101320353A (zh) * | 2008-07-18 | 2008-12-10 | 四川长虹电器股份有限公司 | 嵌入式浏览器缓存设计方法 |
CN106339444A (zh) * | 2016-08-23 | 2017-01-18 | 深圳市金立通信设备有限公司 | 一种即时删除文件的方法及终端 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060040003A1 (en) * | 2004-08-10 | 2006-02-23 | Alvin Needleman | Dietary supplement for supressing appetite, enhancing and extending satiety, improving glycemic control, and stimulant free |
US9424027B2 (en) * | 2013-07-29 | 2016-08-23 | Ralph Moore | Message management system for information transfer within a multitasking system |
CN106294190B (zh) * | 2015-05-25 | 2020-10-16 | 中兴通讯股份有限公司 | 一种存储空间管理方法及装置 |
CN107045530B (zh) * | 2017-01-20 | 2019-07-26 | 华中科技大学 | 一种将对象存储系统实现为本地文件系统的方法 |
-
2017
- 2017-12-25 CN CN201711421630.6A patent/CN109960662B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101320353A (zh) * | 2008-07-18 | 2008-12-10 | 四川长虹电器股份有限公司 | 嵌入式浏览器缓存设计方法 |
CN106339444A (zh) * | 2016-08-23 | 2017-01-18 | 深圳市金立通信设备有限公司 | 一种即时删除文件的方法及终端 |
Also Published As
Publication number | Publication date |
---|---|
CN109960662A (zh) | 2019-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109960662B (zh) | 一种内存回收方法及设备 | |
US8775755B2 (en) | Peer-to-peer transcendent memory | |
US9026737B1 (en) | Enhancing memory buffering by using secondary storage | |
CN114860163B (zh) | 一种存储系统、内存管理方法和管理节点 | |
JP2019139759A (ja) | ソリッドステートドライブ(ssd)及び分散データストレージシステム並びにその方法 | |
KR20120068454A (ko) | 원격 페이지 폴트 처리 장치 및 그 방법 | |
CN110908589B (zh) | 数据文件的处理方法、装置、系统和存储介质 | |
US9430492B1 (en) | Efficient scavenging of data and metadata file system blocks | |
US11243877B2 (en) | Method, apparatus for data management, and non-transitory computer-readable storage medium for storing program | |
US20220083281A1 (en) | Reading and writing of distributed block storage system | |
US11126553B2 (en) | Dynamic allocation of memory between containers | |
CN102984256B (zh) | 一种基于授权方式的元数据的处理方法和系统 | |
CN107969153B (zh) | 一种资源分配方法、装置及numa系统 | |
WO2024099448A1 (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN115858409A (zh) | 一种数据预取方法、计算节点和存储系统 | |
US20170364442A1 (en) | Method for accessing data visitor directory in multi-core system and device | |
CN110059026B (zh) | 一种目录处理方法、装置及存储系统 | |
CN116225693A (zh) | 元数据管理方法、装置、计算机设备及存储介质 | |
CN114518962A (zh) | 内存的管理方法及装置 | |
US8990541B2 (en) | Compacting Memory utilization of sparse pages | |
CN108459970B (zh) | 一种查询缓存信息的方法及装置 | |
Nothaas et al. | Optimized memory management for a Java-based distributed in-memory system | |
WO2024082702A1 (zh) | 数据处理方法、装置、芯片以及计算机可读存储介质 | |
US20230273727A1 (en) | Dynamic storage for adaptive mapping for data compression on a storage device | |
KR20070061087A (ko) | 객체 기반 파일 입출력 시스템 및 방법 |
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 |