CN104238962B - 向缓存中写入数据的方法及装置 - Google Patents

向缓存中写入数据的方法及装置 Download PDF

Info

Publication number
CN104238962B
CN104238962B CN201410471711.7A CN201410471711A CN104238962B CN 104238962 B CN104238962 B CN 104238962B CN 201410471711 A CN201410471711 A CN 201410471711A CN 104238962 B CN104238962 B CN 104238962B
Authority
CN
China
Prior art keywords
metadata
metadata group
group
free block
data
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
Application number
CN201410471711.7A
Other languages
English (en)
Other versions
CN104238962A (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.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201410471711.7A priority Critical patent/CN104238962B/zh
Publication of CN104238962A publication Critical patent/CN104238962A/zh
Priority to PCT/CN2015/083383 priority patent/WO2016041401A1/zh
Application granted granted Critical
Publication of CN104238962B publication Critical patent/CN104238962B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例涉及一种向缓存中写入数据的方法及装置,包括:接收写入IO请求命令,该命令包括待写入数据的元数据;获取第一元数据组,判断第一元数据组中是否有剩余空闲块;若是,则向剩余空闲块中的一个空闲块写入待写入数据的元数据,并向与第一元数据组对应的元数据块中写入待写入数据的元数据;若否,则判断第二元数据组是否有剩余空闲块,若第二元数据组有剩余空闲块,则获取第二元数据组,并向第二元数据组的剩余空闲块中的一个空闲块写入待写入数据的元数据;向与第二元数据组对应的元数据块中写入所述待写入数据的元数据。由此,可以解决频繁向Flash中写入元数据,而影响Flash的寿命的问题。

Description

向缓存中写入数据的方法及装置
技术领域
本发明涉及数据存储领域,尤其涉及一种向缓存中写入数据的方法及装置。
背景技术
在业界现有的读写缓存(Cache)中,一般采用的存储介质都是基于非易失性记忆体(A Non-Volatile Dual In-line Memory Module,NVDIMM)或者非易失性随机访问存储器(Non-Volatile Random Access Memory,NVRAM),然而基于上述设备,写Cache的容量通常比较小,难以应对大量随机写压力的场景。
现有技术中,采用闪存(Flash)设备作为Cache。由于要保证数据的安全性,每一次写请求都需要2次的IO,一次是写数据IO,另一次是写元数据IO。而Flash的寿命跟写的次数直接相关,例如,多层单元闪存(Multi-Level Cell,MLC)通常只有5000-10000次左右。而元数据的大小一般是30B-64B之间,如果每个元数据按照元数据的大小直接IO,则不能充分发挥Flash的性能,如果元数据按照4K对齐的大小下IO,则可能存在写放大的问题,对整个Flash的寿命会大大的影响。
发明内容
本发明实施例提供了一种向缓存中写入数据的方法及装置,可以解决频繁向Flash中写入元数据,而影响Flash的寿命的问题。
第一方面,提供了一种向缓存Cache中写入数据的方法,所述Cache的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,所述方法包括:
接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
获取当前正在处理的元数据组为第一元数据组,一个所述元数据组对应于一个所述元数据块,包含内存中的多个空闲块;
判断所述第一元数据组中是否有剩余空闲块;
当所述第一元数据组中有剩余空闲块时,则向所述剩余空闲块中的一个空闲块写入所述待写入数据的元数据,并向与所述第一元数据组对应的元数据块中写入所述待写入数据的元数据;
当所述第一元数据组中没有剩余空闲块时,则判断第二元数据组是否有剩余空闲块,所述第二元数据组为当前未在处理的元数据组,若所述第二元数据组有剩余空闲块,则获取所述第二元数据组,并向所述第二元数据组的剩余空闲块中的一个空闲块写入所述待写入数据的元数据;
向与所述第二元数据组对应的元数据块中写入所述待写入数据的元数据。
结合第一方面,在第一方面的第一种实现方式中,所述元数据组中包含的空闲块的个数是根据所述元数据块的大小和所述数据块对应的元数据的大小计算得到的。
结合第一方面,在第一方面的第二种实现方式中,所述元数据组中包含的空闲块是按地址连续排列的。
结合第一方面,在第一方面的第三种实现方式中,所述元数据组中包含的空闲块的个数被记录在内存的多级队列中,其中,所述多级队列中各队列记录的第二元数据组包含的空闲块的个数是不相同的。
结合第一方面的第三种实现方式,在第一方面的第四种实现方式中,根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的各队列中,所述各队列还包括该队列记录的各第二元数据组包含的空闲块的总数目;
所述判断第二元数据组是否有剩余空闲块包括:
根据各队列记录的各第二元数据组包含的空闲块的总数目,判断第二元数据组是否有剩余空闲块。
结合第一方面或第一方面的上述四种实现方式中任一种实现方式,在第一方面的第五种实现方式中,在所述接收写入IO请求命令之后,在所述获取当前正在处理的元数据组为第一元数据组之前,所述方法还包括:
根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
若需要进行拆分,则根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行获取当前正在处理的元数据组为第一元数据组的步骤。
结合第一方面的第四种实现方式,在第一方面的第六种实现方式中,当所述多级队列中任一队列记录多个第二元数据组时,则根据所述第二元数据组包含的空闲块的个数,对所述多个第二元数据组进行排列。
结合第一方面的第三种实现方式,在第一方面的第七种实现方式中,所述方法还包括:
接收回收元数据指令,所述回收元数据指令包括待回收元数据的所属的空闲块的地址;
根据所述空闲块的地址,获取所述空闲块所属的元数据组;
若所述元数据组为第一元数据组,则将所述空闲块加入所述第一元数据组中,并对所述第一元数据组中的空闲块重新排序;
若所述元数据组为第二元数据组,则判断所述第二元数据组包含的空闲块个数是否大于第二阈值,若是,则从记录所述第二元数据组的队列中删除所述第二元数据组,将所述空闲块加入所述第二元数据组后,将所述第二元数据组记录到多级队列的其它队列中,若否,则将所述空闲块加入所述第二元数据组中。
结合第一方面的第七种实现方式,在第一方面的第八种实现方式中,所述将所述第二元数据组记录到多级队列的其它队列中包括:
根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的其它队列中。
结合第一方面的第七种或第八种实现方式,在第一方面的第九种实现方式中,所述方法还包括:
在所述从记录所述第二元数据组的队列中删除所述第二元数据组,将所述空闲块加入所述第二元数据组后,将所述第二元数据组记录到多级队列的其它队列中之后,所述方法还包括:
更新记录所述第二元数据组的队列中记录的空闲块的总数目,并更新所述第二元数据组加入的队列中记录的空闲块的总数目。
第二方面,本发明实施例提供了一种向缓存Cache中写入数据的装置,所述装置的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,所述装置包括:接收单元、第一获取单元、判断单元、第一写入单元、第二获取单元和第二写入单元;
所述接收单元,用于接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
所述第一获取单元,用于获取当前正在处理的元数据组为第一元数据组,一个所述元数据组对应于一个所述元数据块,包含内存中的多个空闲块;
所述判断单元,用于判断所述第一获取单元获取的所述第一元数据组中是否有剩余空闲块;
所述第一写入单元,用于当所述判断单元判断所述第一元数据组中有剩余空闲块时,则向所述剩余空闲块中的一个空闲块写入所述待写入数据的元数据,并向与所述第一元数据组对应的元数据块中写入所述待写入数据的元数据;
所述第二获取单元,用于当所述判断单元判断所述第一元数据组中没有剩余空闲块时,则判断第二元数据组是否有剩余空闲块,所述第二元数据组为当前未在处理的元数据组,若所述第二元数据组有剩余空闲块,则获取所述第二元数据组,并向所述第二元数据组的剩余空闲块中的一个空闲块写入所述待写入数据的元数据;
所述第二写入单元,用于向与所述第二元数据组对应的元数据块中写入所述待写入数据的元数据。
结合第二方面,第二方面的第一种实现方式中,所述元数据组中包含的空闲块的个数是根据所述元数据块的大小和所述数据块对应的元数据的大小计算得到的。
结合第二方面,在第二方面的第二种实现方式中,所述元数据组中包含的空闲块是按地址连续排列的。
结合第二方面,在第二方面的第三种实现方式中,所述元数据组中包含的空闲块的个数被记录在内存的多级队列中,其中,所述多级队列中各队列记录的第二元数据组包含的空闲块的个数是不相同的。
结合第二方面的第三种实现方式,在第二方面的第四种实现方式中,所述装置还包括:记录单元,用于根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的各队列中,所述各队列还包括该队列记录的各第二元数据组包含的空闲块的总数目;
所述第二获取单元具体用于:根据各队列记录的各第二元数据组包含的空闲块的总数目,判断第二元数据组是否有剩余空闲块。
结合第二方面或第二方面的上述四种实现方式中任一种实现方式,在第二方面的第五种实现方式中,装置还包括:拆分单元;
所述判断单元,还用于根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
所述拆分单元,用于若所述判断单元判断需要进行拆分,则根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
所述判断单元,还用于对所述拆分单元得到的所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行获取当前正在处理的元数据组为第一元数据组的步骤。
结合第二方面的第四种实现方式,在第二方面的第六种实现方式中,所述装置还包括:排列单元,用于当所述多级队列中任一队列记录多个第二元数据组时,则根据所述第二元数据组包含的空闲块的个数,对所述多个第二元数据组进行排列。
结合第二方面的第三种实现方式,在第二方面的第七种实现方式中,加入单元;
所述接收单元,还用于接收回收元数据指令,所述回收元数据指令包括待回收元数据的所属的空闲块的地址;
所述第一获取单元,还用于根据所述接收单元接收的所述空闲块的地址,获取所述空闲块所属的元数据组;
所述加入单元,用于若所述第一获取单元获取的所述元数据组为第一元数据组,则将所述空闲块加入所述第一元数据组中,并对所述第一元数据组中的空闲块重新排序;
所述判断单元,还用于若所述第一获取单元获取的所述元数据组为第二元数据组,则判断所述第二元数据组包含的空闲块个数是否大于第二阈值,若是,则从记录所述第二元数据组的队列中删除所述第二元数据组,将所述空闲块加入所述第二元数据组后,将所述第二元数据组记录到多级队列的其它队列中,若否,则将所述空闲块加入所述第二元数据组中。
结合第二方面的第七种实现方式,在第二方面的第八种实现方式中,所述判断单元具体用于:
根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的其它队列中。
结合第二方面的第七种或第八种实现方式,在第二方面的第九种实现方式中,所述装置还包括:更新单元,用于更新记录所述第二元数据组的队列中记录的空闲块的总数目,并更新所述第二元数据组加入的队列中记录的空闲块的总数目。
本发明实施例提供的向缓存中写入数据的方法及装置。通过元数据组记录内存中的空闲块,当接收到写入IO请求命令时,从上述元数据组中获取空闲块,并将上述写入IO请求命令中包括的待写入数据的元数据写入获取到的空闲块中,从而可以增大元数据的合并概率,进而可以解决频繁向Flash中写入元数据,导致写放大,而影响Flash的寿命的问题。
附图说明
图1是本发明提供的Flash的一种数据布局示意图;
图2是本发明提供的Flash的另一种数据布局示意图;
图3为本发明提供的元数据在内存中位置和Flash中实际持久化的位置的一种关系示意图;
图4为本发明实施例一提供的向Cache中写入数据的方法流程图;
图5为多级队列与第二元数据组的关系示意图;
图6为本发明实施例二提供的向Cache中写入数据的装置示意图;
图7为本发明实施例提供的计算存储一体机的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为便于对本发明实施例的理解,下面将结合附图以具体实施例做进一步的解释说明,实施例并不构成对本发明实施例的限定。
图1是本发明提供的Flash的一种数据布局示意图。如图1所示,Flash的存储区域可包括超级块、元数据区和数据区三部分。
超级块,用于存储Cache中的全局数据,主要为了系统宕机后恢复时需要用的数据。其中,该全局数据可包括元数据块的大小、数据块的大小等。
元数据(metadata),维护存储系统中的数据块的数据,用于描述和组织数据块的关系,其大小根据系统中定义的数据结构大小决定。
元数据区,指用于存储元数据的区域。
数据区,用于存储Cache中真实的数据,其下可包括多个数据块。
图2是本发明提供的Flash的另一种数据布局示意图。如图2所示,Flash包括超级块和多个存储块(chunk),每个chunk包括一个chunk元数据区和一个chunk数据区,每个chunk元数据区包括一个或多个元数据块,每个chunk数据区包括与该一个或多个元数据块对应的数据区。每个chunk数据区下的数据区与其对应的chunk元数据区下的元数据块一一对应。一个元数据块维护一个对应的数据区,具体地,每个元数据区下包括多个元数据,每个元数据对应于数据区下的一个数据块。
图2中,虽然1个chunk元数据区中包含了4个元数据块,但并不表示1个chunk元数据区只能包含4个元数据块,还可以是1个、2个或其它数值。同样的,图2所示的chunk的个数,chunk数据区内数据区的个数、元数据区内元数据的个数、数据区内数据块的个数都不限于图2所示的数值。
每个数据区对应于一个不同的元数据块,一个元数据块内的元数据所对应的数据块组成一个数据区。也就是说,一个数据区包含一个元数据块大小的元数据所对应的数据,一个数据区的大小由一个元数据块内元数据的个数和一个数据块的大小来决定。
在Flash中,一次页面写入的大小为4K。因此,一种优选的方案,一个元数据块的大小为4K。不妨假设一个元数据的大小为32B,一个数据块的大小为16K,则一个数据区的大小为2M(16K*(4K/32B))。
需要说明的是,一个chunk元数据区可能包括一个或多个元数据块,一个chunk元数据区的大小是可变的。一种优选的方案,可将一个数据块的大小作为一个chunk元数据区的大小,这样,可使得在Flash加载初始化时,按照数据块的大小对Flash的存储区域进行划分。例如,一个数据块的大小为4K,则一个chunk元数据区的大小也为4K,其元数据块的个数为1(4K/4K)。又例如,一个数据块的大小为16K,则一个chunk元数据区的大小也为16K,其元数据块的个数为4(16K/4K)。数据块的大小可以由操作系统或存储装置配置,其大小可以为4K、8K、16K、32K或64K等等,本发明实施例在此不作限制。
当然,数据块的大小也可以与chunk元数据区的大小不同。例如,数据块的大小还可以是512B,1K,2K等,而chunk元数据区中至少包括1个元数据块,显然比一个数据块大。
又例如,当数据块的大小为8K、16K、32K或64K等时,chunk元数据区的大小也可以比数据块的大小还小,比如chunk元数据区中只包括1个元数据块。
图3为本发明提供的元数据在内存中位置和Flash中实际持久化的位置的一种关系示意图。图3中,可在内存中设计一个数据结构p_head数组,存储数据区中每个数据块对应的元数据。不妨假设每个数据块所需要的元数据的大小为64个字节,那么可以将p_head数组按照64个(4K/64B=64)元数据分成一组。
内存中一个元数据对应于p_head数组的一个元素,其数据结构flashcache_wbhead及含义如下所示:
如图3所示,还可在内存中设计一个数据结构metadata_head数组,维护在内存中数据的元数据和这些元数据在实际持久化设备(Flash)中的实际的存储位置(即对应的元数据块)的关系。
Flash中的一个元数据在内存中所对应的一个元数据组,对应于metadata_head数组中的一个元素,其数据结构metadata_head及含义可如下所示:
如图3所示,内存中按flashCache_wbhead存储着一个数据块的元数据信息,又按metadata_head存储着同一组元数据(即一个元数据块)的信息,以方便在写入时按照元数据块进行写入。
图4为本发明实施例一提供的向Cache中写入数据的方法流程图。所述方法的执行主体可以是缓存装置,该缓存装置包括闪存Falsh。
下面,结合图3及元数据、元数据块的数据结构对图4的方法进行描述。当然图4还可应用于其它包含多个元数据区的Flash数据布局方式,本发明实施例在此不作限制。
S410,接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据。
可选地,在接收写入IO请求命令之后,所述方法还可以包括如下步骤:
根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
若需要进行拆分,则根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行获取当前正在处理的元数据组为第一元数据组的步骤。
具体地,缓存装置预先获取Flash中的数据块的大小,举例来说,获取到的数据块的大小可以为16K。在接收到写入IO请求命令之后,假设该写入IO请求命令的大小为32K(数据块的2倍),则需要对上述写入IO请求命令进行拆分。在拆分时,当该写入IO请求命令的偏移为0时,则将上述IO请求命令拆分为两个第一写入IO请求命令,其中,每个第一写入IO请求命令的大小为16K;当该写入IO请求命令的偏移不为0时,则将上述IO请求命令拆分为三个第一写入IO请求命令。该步骤可以保证缓存装置向Flash中写入数据块的大小与Flash内部的数据块大小相统一,从而可以提高向Flash中写入数据的效率。
需要说明的是,步骤S410中判断所述多个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中的步骤可参考现有技术实现,本发明实施例在此不做赘述。
S420,获取当前正在处理的元数据组为第一元数据组,一个所述元数据组对应于一个所述元数据块,包含内存中的多个空闲块。
需要说明的是,可以预先获取内存中用来存储数据块对应的元数据的存储空间的总大小,并获取Flash中数据块对应的元数据的大小,然后将存储空间的总大小除以数据块对应的元数据的大小,就可以得到内存中空闲块的总个数。可以理解的是,空闲块的大小即为元数据的大小。此外,元数据组对应于Flash中的元数据块,则元数据组中包含空闲块的个数可以根据Flash中元数据块的大小和数据块对应的元数据的大小计算得到,举例来说,元数据块的大小为4K,数据块对应的元数据的大小为64B,则元数据组包含空闲块的个数为4K/64B=64个,即一个元数据组可以包含64个空闲块。可选地,元数据组中包含的空闲块是按地址连续排列的。其中,每个空闲块用于存储待写入数据的元数据。在此说明,待写入数据的元数据的大小与Flash中数据块对应的元数据的大小一致。
在此说明,缓存装置将当前正在处理的元数据组作为第一元数据组,而将当前未在处理的元数据组作为第二元数据组。可以理解的是,当缓存装置处理完第一元数据组,而开始处理第二元数据组时,则该第二元数据组作为第一元数据组。即上述名称仅仅是为了区分元数据组是否正在处理。S430,判断所述第一元数据组中是否有剩余空闲块。
在此说明,由于空闲块是用于存储待写入数据的元数据,因此在缓存装置处理多个写入IO请求命令之后,第一元数据组中空闲块的个数就会相应的减少。如前述例子中,一个元数据组中可以包含64个空闲块,当缓存装置向该元数据组中写入64个元数据时,则该元数据组不再有剩余空闲块。因此,在缓存装置每次向空闲块中写入元数据时,需要判断第一元数据组是否有剩余空闲块。具体地,可根据第一元数据组对应的metadata_head判断是否有剩余空闲块。
S440,当所述第一元数据组中有剩余空闲块时,则向所述剩余空闲块中的一个空闲块写入所述待写入数据的元数据,并向与所述第一元数据组对应的元数据块中写入所述待写入数据的元数据。
需要说明的是,可以根据第一元数据组对应的metadata_head,获取第一元数据组在Flash中对应的元数据块,并向该数据块中写入上述待写入数据的元数据。
可选地,在向与所述第一元数据组对应的元数据块中写入所述待写入数据的元数据之前,所述方法还可以包括:
缓存装置判断是否处理完成了所有的第一写入IO请求命令,如果没有处理完成,则继续对其他的第一写入IO请求命令作S420-S440的处理;如果已经处理完成,则判断这些写入IO请求命令是否可以合并,如果可以合并,则根据合并后的IO请求命令,向Flash中写入数据。本发明中,每次优先从第一元数据组中获取空闲块,由于从同一组中获取的空闲块的地址都是连续的,由此可以增加写入IO请求命令的合并概率,从而可以减小向Flash中写入数据的次数。
需要说明的是,判断写入IO请求命令是否可以合并可参考现有技术实现,在此不做赘述。
S450,当所述第一元数据组中没有剩余空闲块时,则判断第二元数据组是否有剩余空闲块,所述第二元数据组为当前未在处理的元数据组,若所述第二元数据组有剩余空闲块,则获取所述第二元数据组,并向所述第二元数据组的剩余空闲块中的一个空闲块写入所述待写入数据的元数据。
具体地,通过多级队列对第二元数据组进行管理,参见图5所示的多级队列与第二元数据组的关系示意图。图5中,多级队列的数据结构multi_q_node及含义如下所示:
可选地,所述方法还可以包括:根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的各队列中,所述各队列还包括该队列记录的各第二元数据组包含的空闲块的总数目;
其中,所述判断第二元数据组是否有剩余空闲块包括:
根据各队列记录的各第二元数据组包含的空闲块的总数目,判断第二元数据组是否有剩余空闲块。
需要说明的是,根据队列的类型的数据结构invalid_q_type可知,多级队列中各队列的类型是不同的,如第一个队列只记录空闲块的个数小于等于8的第二元数据组,第二个队列只记录空闲块的个数大于8小于等于16的第二元数据组,这样依次类推。因此,若第二元数据组包含的空闲块的个数为4个时,则将该第二元数据组记录到第一个队列中。此外,还需要将各第二元数据组包含的空闲块的总数目记录到对应的队列中,举例来说,假如,第一个队列记录了5个第二元数据组,各第二元数据组分别包含了4、3、2、1和1个空闲块,则需要将11(4+3+2+1+1)记录到第一个队列的total_num中。当缓存装置判断第二元数据组是否有剩余空闲块时,则根据多级队列中各队列记录的total_numl来判断。
具体地,参见图5,每个metadata_head对应一个第二元数据组,多级队列包括5个队列,其中,前两个队列中记录了第二元数据组,且第一队列只记录空闲块的个数小于等于4的第二元数据组。如图5中,第一队列记录的第二元数据组分别包含了4、3、2、1和1个空闲块,最后将各第二元数据组包含的空闲块的总数目记录到第一队列中,如,记录到第一个队列的total_num中,也即将11记录到第一队列的total_num中;同理,第二队列只记录空闲块的个数大于4的第二元数据组,第二队列记录的第二元数据组分别包含了7、6、5、5和5个空闲块,最后将第二个队列中各第二元数据组包含的空闲块的总数目也记录到第二队列中,也即将28(7+6+5+5+5)记录到第二个队列的total_num中。可选地,当所述多级队列的任一队列中记录多个所述第二元数据组时,则根据所述第二元数据组包含的空闲块的个数,对所述第二元数据组进行排列。
参见图5,前两个队列中记录了第二元数据组,第一个队列记录了5个第二元数据组,各第二元数据组分别包含了4、3、2、1和1个空闲块,且第一个队列中的各第二元数据组按照各自包含的空闲块的个数依次排列。具体地,第一队列中的各第二元数据组按照包含的空闲块的个数从大到小依次排列。第二个队列记录了5个第二元数据组,各第二元数据组分别包含了7、6、5、5和5个空闲块,且第二个队列中的各第二元数据组按照各自包含的空闲块的个数依次排列,也即第二队列中的各第二元数据组也按照包含的空闲块的个数从大到小依次排列。
优选地,在判断第二元数据组中是否有剩余空闲块时,缓存装置优先判断多级队列中记录空闲块的个数的范围最大的队列中的total_num,如果其值为0,再判断多级队列中记录空闲块的个数的范围次大的队列中的total_num,这样依次类推;如果不为0,则获取该队列中包含空闲块的个数最多的第二元数据组,如前述例子中,各队列中的各第二元数据组是按照各自包含的空闲块的个数依次排列的,因此获取该队列中的第一个第二元数据组即可。如图5中,先判断第二个队列的total_num,该值为28不为0,则获取该队列中的第一个第二元数据组,该第二元数据组中包含7个空闲块,同时将该第二元数据组从上述队列中删除,同时更新上述队列的total_num,也即更新后的total_num=total_num-5。
需要说明的是,在判断多级队列中各队列的total_num均为0时,则缓存装置不对写入IO请求命令进行处理,将该写入IO请求命令加入到等待队列中,当第二元数据组中有剩余空闲块时,再对上述写入IO请求命令进行处理。
对于上述获取到的第二元数据组,包含7个空闲块,从该7个空闲块中摘取一个空闲块,则上述第二元数据组包含的剩余空闲块为6个,并向上述摘取的一个空闲块中写入所述待写入数据的元数据。
S460,向与所述第二元数据组对应的元数据块中写入所述待写入数据的元数据。
可选地,在S460之前,所述方法还可以包括:缓存装置将判断是否处理完成了所有的第一写入IO请求命令,如果没有处理完成,则继续对其他的第一写入IO请求命令作S420-S450的处理;如果已经处理完成,则判断这些写入IO请求命令是否可以合并,如果可以合并,则根据合并后的写入IO请求命令,向Flash中写入数据。本发明中,每次优先从第一元数据组中获取空闲块,由于从同一组中获取的空闲块的地址都是连续的,由此可以增加写入IO请求命令的合并概率,从而可以减小向Flash中写入数据的次数。
本发明实施例提供的向缓存中写入数据的方法,通过元数据组记录内存中的空闲块,当接收到写入IO请求命令时,从上述元数据组中获取空闲块,并将上述写入IO请求命令中包括的待写入数据的元数据写入获取到的空闲块中,从而可以增大元数据的合并概率,进而可以解决频繁向Flash中写入元数据,而影响Flash的寿命的问题。
对通过上述方法获取到的空闲块,当写入该空闲块的元数据为无效的元数据时,则缓存装置需要将该空闲块回收到内存中,具体地,将该空闲块重新加入到其所属的元数据组中。其中,回收空闲块的步骤可以包括:
接收回收元数据指令,所述回收元数据指令包括待回收元数据的所属的空闲块的地址;
根据所述空闲块的地址,获取所述空闲块所属的元数据组;
若所述元数据组为第一元数据组,则将所述空闲块加入所述第一元数据组中,并对所述第一元数据组中的空闲块重新排序;
若所述元数据组为第二元数据组,则判断所述第二元数据组包含的空闲块个数是否大于第二阈值,若是,则从记录所述第二元数据组的队列中删除所述第二元数据组,将所述空闲块加入所述第二元数据组后,将所述第二元数据组记录到多级队列的其它队列中,若否,则将所述空闲块加入所述第二元数据组中。
具体地,所述将所述第二元数据组记录到多级队列的其它队列中包括:
根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的其它队列中。需要说明的是,判断所述第二元数据组包含的空闲块个数是否大于第二阈值的步骤,是为了确保能够根据第二元数据组包含的空闲块的个数,将第二元数据组记录到相应的队列中。例如,假设多级队列中有两个队列,第一队列只记录空闲块的个数小于等于8的第二元数据组,而第二队列记录空闲块的个数大于8的第二元数据组,且假设某一第二元数据组开始时包含的空闲块的个数为8个,则将该第二元数据组记录到第一队列中,当该第二元数据组回收到一个空闲块时,该第二元数据组包含的空闲块的个数为9个,不满足第一队列记录的第二元数据组的空闲块的个数。因此,需要将该第二元数据组记录到第二队列中。
可选地,在所述从记录所述第二元数据组的队列中删除所述第二元数据组,将所述空闲块加入所述第二元数据组后,将所述第二元数据组记录到多级队列的其它队列中之后,所述方法还包括:
更新记录所述第二元数据组的队列中记录的空闲块的总数目,并更新所述第二元数据组加入的队列中记录的空闲块的总数目。
如前述例子中,更新第一队列的total_num,也即第一队列更新后的total_num=total_num-8;同时更新第二队列的total_num,也即第二队列更新后的total_num=total_num+8+1;其中,1为上述第二元数据组新回收的空闲块。
通过上述回收空闲块的步骤,可以将回收的空闲块回收到其所属的元数据组中,从而可以保证通过本发明的方法,在获取空闲块时,获取到的空闲块的地址是连续的,由此可以增大元数据的合并概率,进而可以解决频繁向Flash中写入元数据,而影响Flash的寿命的问题。
本发明实施例提供了的方法,通过元数据管理,结合元数据合并,大大增加元数据合并的概率,从而可以大量的减少元数据IO,对提供系统的性能具体重大的作用,同时建设写IO的次数,大量的减少因为元数据的操作IO,对提高FLASH卡的寿命具体重大的作用。
对于大块的IO,通过元数据管理,尽量对大块的IO,分配的空闲块在物理卡中的位置也是尽量连在一起的,这样的带来的作用,可以通过WriteV接口,把几个IO进行合并写,在大块的场景中,可以大量的减少IO的次数,可以大大的降低系统的CPU的利用率,通过实际的测试,在大块的场景中,CPU的利用率可以减少20-30%。
由于在分配空闲块的时候,IO的物理位置是尽量连在一起的,所以在刷盘的时候,在大块场景中,或者顺序IO的场景中,降大大的增加读合并的效果;也可以大量的减少读IO的请求,对降低CPU的利用率作用非常大。
图6为本发明实施例二提供的向Cache中写入数据的装置示意图。所述装置用于执行图4所述的方法。图6中,该装置的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,包括:接收单元601、第一获取单元602、判断单元603、第一写入单元604、第二获取单元605和第二写入单元606。
接收单元601,用于接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据。
第一获取单元602,用于获取当前正在处理的元数据组为第一元数据组,一个所述元数据组对应于一个所述元数据块,包含内存中的多个空闲块。
判断单元603,用于判断第一获取单元602获取的所述第一元数据组中是否有剩余空闲块。
第一写入单元604,用于当判断单元603判断所述第一元数据组中有剩余空闲块时,则向所述剩余空闲块中的一个空闲块写入所述待写入数据的元数据,并向与所述第一元数据组对应的元数据块中写入所述待写入数据的元数据。
第二获取单元605,用于当判断单元603判断所述第一元数据组中没有剩余空闲块时,则判断第二元数据组是否有剩余空闲块,所述第二元数据组为当前未在处理的元数据组,若所述第二元数据组有剩余空闲块,则获取所述第二元数据组,并向所述第二元数据组的剩余空闲块中的一个空闲块写入所述待写入数据的元数据。
第二写入单元606,用于向与所述第二元数据组对应的元数据块中写入所述待写入数据的元数据。
可选地,所述元数据组中包含的空闲块的个数是根据所述元数据块的大小和所述数据块对应的元数据的大小计算得到的。
可选地,所述元数据组中包含的空闲块是按地址连续排列的。
可选地,所述多级队列中各队列记录的第二元数据组包含的空闲块的个数是不相同的。
可选地,所述装置还包括:记录单元607,用于根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的各队列中,所述各队列还包括该队列记录的各第二元数据组包含的空闲块的总数目;
第二获取单元605具体用于:根据各队列记录的各第二元数据组包含的空闲块的总数目,判断第二元数据组是否有剩余空闲块。
可选地,装置还包括:拆分单元608。
判断单元603,还用于根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分。
拆分单元608,用于若判断单元603判断需要进行拆分,则根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令。
判断单元603,还用于对拆分单元608得到的所述多个第一写入IO请求命令,分别判断所述各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行获取当前正在处理的元数据组为第一元数据组的步骤。
可选地,所述装置还包括:排列单元609,用于当所述多级队列中任一队列记录多个第二元数据组时,则根据所述第二元数据组包含的空闲块的个数,对所述多个第二元数据组进行排列。
可选地,所述装置还包括:加入单元610。
接收单元601,还用于接收回收元数据指令,所述回收元数据指令包括待回收元数据的所属的空闲块的地址。
第一获取单元602,还用于根据接收单元601接收的所述空闲块的地址,获取所述空闲块所属的元数据组。
加入单元610,用于若第一获取单元602获取的所述元数据组为第一元数据组,则将所述空闲块加入所述第一元数据组中,并对所述第一元数据组中的空闲块重新排序。
判断单元603,还用于若第一获取单元602获取的所述元数据组为第二元数据组,则判断所述第二元数据组包含的空闲块个数是否大于第二阈值,若是,则从记录所述第二元数据组的队列中删除所述第二元数据组,将所述空闲块加入所述第二元数据组后,将所述第二元数据组记录到多级队列的其它队列中,若否,则将所述空闲块加入所述第二元数据组中。
可选地,判断单元603具体用于:
根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的其它队列中。
可选地,所述装置还包括:更新单元611,用于更新记录所述第二元数据组的队列中记录的空闲块的总数目,并更新所述第二元数据组加入的队列中记录的空闲块的总数目。
本发明实施例提供的向缓存中写入数据的装置,通过元数据组记录内存中的空闲块,当接收到写入IO请求命令时,从上述元数据组中获取空闲块,并将上述写入IO请求命令中包括的待写入数据的元数据写入获取到的空闲块中,从而可以增大元数据的合并概率,进而可以解决频繁向Flash中写入元数据,而影响Flash的寿命的问题。
相应的,本发明实施例还提供了一种计算存储一体机,如图7所示,包括使用闪存Flash 701的cache(图中仅示出Flash 701)、内存702和处理器703。
闪存Flash 701的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应。
处理器703接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
处理器703获取当前正在处理的元数据组为第一元数据组,一个所述元数据组对应于一个所述元数据块,包含内存702中的多个空闲块;
处理器703判断所述第一元数据组中是否有剩余空闲块;
当所述第一元数据组中有剩余空闲块时,处理器703向所述剩余空闲块中的一个空闲块写入所述待写入数据的元数据,并向与所述第一元数据组对应的元数据块中写入所述待写入数据的元数据;
当所述第一元数据组中没有剩余空闲块时,处理器703判断第二元数据组是否有剩余空闲块,所述第二元数据组为当前未在处理的元数据组,若所述第二元数据组有剩余空闲块,则获取所述第二元数据组,并向所述第二元数据组的剩余空闲块中的一个空闲块写入所述待写入数据的元数据;
处理器703向与所述第二元数据组对应的元数据块中写入所述待写入数据的元数据。
进一步的,所述元数据组中包含的空闲块的个数是处理器703根据所述元数据块的大小和所述数据块对应的元数据的大小计算得到的。
进一步的,所述元数据组中包含的空闲块是按地址连续排列的。
进一步的,所述元数据组中包含的空闲块的个数被记录在内存702的多级队列中,其中,所述多级队列中各队列记录的第二元数据组包含的空闲块的个数是不相同的。
进一步的,处理器703根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的各队列中,所述各队列还包括该队列记录的各第二元数据组包含的空闲块的总数目;
处理器703根据各队列记录的各第二元数据组包含的空闲块的总数目,判断第二元数据组是否有剩余空闲块。
进一步的,在处理器703接收写入IO请求命令之后,并且在获取当前正在处理的元数据组为第一元数据组之前,处理器703还根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
若需要进行拆分,则处理器703根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
处理器703对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行获取当前正在处理的元数据组为第一元数据组的步骤。
进一步的,当所述多级队列中任一队列记录多个第二元数据组时,处理器703根据所述第二元数据组包含的空闲块的个数,对所述多个第二元数据组进行排列。
进一步的,处理器703接收回收元数据指令,所述回收元数据指令包括待回收元数据的所属的空闲块的地址;根据所述空闲块的地址,获取所述空闲块所属的元数据组;若所述元数据组为第一元数据组,则将所述空闲块加入所述第一元数据组中,并对所述第一元数据组中的空闲块重新排序;若所述元数据组为第二元数据组,则处理器703判断所述第二元数据组包含的空闲块个数是否大于第二阈值,若是,则处理器703从记录所述第二元数据组的队列中删除所述第二元数据组,将所述空闲块加入所述第二元数据组后,将所述第二元数据组记录到多级队列的其它队列中,若否,则处理器703将所述空闲块加入所述第二元数据组中。其中,将所述第二元数据组记录到多级队列的其它队列中包括:根据所述第二元数据组包含的空闲块的个数,处理器703将所述第二元数据组记录到多级队列的其它队列中。
再进一步的,在处理器703将第二元数据组记录到多级队列的其它队列中之后,处理器703更新记录所述第二元数据组的队列中记录的空闲块的总数目,并更新所述第二元数据组加入的队列中记录的空闲块的总数目。
本发明实施例提供的计算存储一体机,通过元数据组记录内存中的空闲块,当接收到写入IO请求命令时,从上述元数据组中获取空闲块,并将上述写入IO请求命令中包括的待写入数据的元数据写入获取到的空闲块中,从而可以增大元数据的合并概率,进而可以解决频繁向Flash中写入元数据,而影响Flash的寿命的问题。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (18)

1.一种向缓存Cache中写入数据的方法,其特征在于,所述Cache的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,所述方法包括:
接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
获取当前正在处理的元数据组为第一元数据组,一个所述元数据组对应于一个所述元数据块,包含内存中的多个空闲块;
判断所述第一元数据组中是否有剩余空闲块;
当所述第一元数据组中有剩余空闲块时,则向所述剩余空闲块中的一个空闲块写入所述待写入数据的元数据,并向与所述第一元数据组对应的元数据块中写入所述待写入数据的元数据;
当所述第一元数据组中没有剩余空闲块时,则判断第二元数据组是否有剩余空闲块,所述第二元数据组为当前未在处理的元数据组,若所述第二元数据组有剩余空闲块,则获取所述第二元数据组,并向所述第二元数据组的剩余空闲块中的一个空闲块写入所述待写入数据的元数据;
向与所述第二元数据组对应的元数据块中写入所述待写入数据的元数据;
所述元数据组中包含的空闲块的个数被记录在内存的多级队列中,其中,所述多级队列中各队列记录的第二元数据组包含的空闲块的个数是不相同的。
2.根据权利要求1所述的方法,其特征在于,所述元数据组中包含的空闲块的个数是根据所述元数据块的大小和所述数据块对应的元数据的大小计算得到的。
3.根据权利要求1所述的方法,其特征在于,所述元数据组中包含的空闲块是按地址连续排列的。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的各队列中,所述各队列还包括该队列记录的各第二元数据组包含的空闲块的总数目;
所述判断第二元数据组是否有剩余空闲块包括:
根据各队列记录的各第二元数据组包含的空闲块的总数目,判断第二元数据组是否有剩余空闲块。
5.根据权利要求1-4任一所述的方法,其特征在于,在所述接收写入IO请求命令之后,在所述获取当前正在处理的元数据组为第一元数据组之前,所述方法还包括:
根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
若需要进行拆分,则根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行获取当前正在处理的元数据组为第一元数据组的步骤。
6.根据权利要求4所述的方法,其特征在于,当所述多级队列中任一队列记录多个第二元数据组时,则根据所述第二元数据组包含的空闲块的个数,对所述多个第二元数据组进行排列。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收回收元数据指令,所述回收元数据指令包括待回收元数据的所属的空闲块的地址;
根据所述空闲块的地址,获取所述空闲块所属的元数据组;
若所述元数据组为第一元数据组,则将所述空闲块加入所述第一元数据组中,并对所述第一元数据组中的空闲块重新排序;
若所述元数据组为第二元数据组,则判断所述第二元数据组包含的空闲块个数是否大于第二阈值,若是,则从记录所述第二元数据组的队列中删除所述第二元数据组,将所述空闲块加入所述第二元数据组后,将所述第二元数据组记录到多级队列的其它队列中,若否,则将所述空闲块加入所述第二元数据组中。
8.根据权利要求7所述的方法,其特征在于,所述将所述第二元数据组记录到多级队列的其它队列中包括:
根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的其它队列中。
9.根据权利要求7或8所述的方法,其特征在于,在所述从记录所述第二元数据组的队列中删除所述第二元数据组,将所述空闲块加入所述第二元数据组后,将所述第二元数据组记录到多级队列的其它队列中之后,所述方法还包括:
更新记录所述第二元数据组的队列中记录的空闲块的总数目,并更新所述第二元数据组加入的队列中记录的空闲块的总数目。
10.一种向缓存Cache中写入数据的装置,其特征在于,所述装置的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,所述装置包括:接收单元、第一获取单元、判断单元、第一写入单元、第二获取单元和第二写入单元;
所述接收单元,用于接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
所述第一获取单元,用于获取当前正在处理的元数据组为第一元数据组,一个所述元数据组对应于一个所述元数据块,包含内存中的多个空闲块;
所述判断单元,用于判断所述第一获取单元获取的所述第一元数据组中是否有剩余空闲块;
所述第一写入单元,用于当所述判断单元判断所述第一元数据组中有剩余空闲块时,则向所述剩余空闲块中的一个空闲块写入所述待写入数据的元数据,并向与所述第一元数据组对应的元数据块中写入所述待写入数据的元数据;
所述第二获取单元,用于当所述判断单元判断所述第一元数据组中没有剩余空闲块时,则判断第二元数据组是否有剩余空闲块,所述第二元数据组为当前未在处理的元数据组,若所述第二元数据组有剩余空闲块,则获取所述第二元数据组,并向所述第二元数据组的剩余空闲块中的一个空闲块写入所述待写入数据的元数据;
所述第二写入单元,用于向与所述第二元数据组对应的元数据块中写入所述待写入数据的元数据;
所述元数据组中包含的空闲块的个数被记录在内存的多级队列中,其中,所述多级队列中各队列记录的第二元数据组包含的空闲块的个数是不相同的。
11.根据权利要求10所述的装置,其特征在于,所述元数据组中包含的空闲块的个数是根据所述元数据块的大小和所述数据块对应的元数据的大小计算得到的。
12.根据权利要求10所述的装置,其特征在于,所述元数据组中包含的空闲块是按地址连续排列的。
13.根据权利要求10所述的装置,其特征在于,所述装置还包括:记录单元,用于根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的各队列中,所述各队列还包括该队列记录的各第二元数据组包含的空闲块的总数目;
所述第二获取单元具体用于:根据各队列记录的各第二元数据组包含的空闲块的总数目,判断第二元数据组是否有剩余空闲块。
14.根据权利要求10-13任一所述的装置,其特征在于,装置还包括:拆分单元;
所述判断单元,还用于根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
所述拆分单元,用于若所述判断单元判断需要进行拆分,则根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
所述判断单元,还用于对所述拆分单元得到的所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行获取当前正在处理的元数据组为第一元数据组的步骤。
15.根据权利要求13所述的装置,其特征在于,所述装置还包括:排列单元,用于当所述多级队列中任一队列记录多个第二元数据组时,则根据所述第二元数据组包含的空闲块的个数,对所述多个第二元数据组进行排列。
16.根据权利要求10所述的装置,其特征在于,所述装置还包括:加入单元;
所述接收单元,还用于接收回收元数据指令,所述回收元数据指令包括待回收元数据的所属的空闲块的地址;
所述第一获取单元,还用于根据所述接收单元接收的所述空闲块的地址,获取所述空闲块所属的元数据组;
所述加入单元,用于若所述第一获取单元获取的所述元数据组为第一元数据组,则将所述空闲块加入所述第一元数据组中,并对所述第一元数据组中的空闲块重新排序;
所述判断单元,还用于若所述第一获取单元获取的所述元数据组为第二元数据组,则判断所述第二元数据组包含的空闲块个数是否大于第二阈值,若是,则从记录所述第二元数据组的队列中删除所述第二元数据组,将所述空闲块加入所述第二元数据组后,将所述第二元数据组记录到多级队列的其它队列中,若否,则将所述空闲块加入所述第二元数据组中。
17.根据权利要求16所述的装置,其特征在于,所述判断单元具体用于:
根据所述第二元数据组包含的空闲块的个数,将所述第二元数据组记录到多级队列的其它队列中。
18.根据权利要求16或17所述的装置,其特征在于,所述装置还包括:更新单元,用于更新记录所述第二元数据组的队列中记录的空闲块的总数目,并更新所述第二元数据组加入的队列中记录的空闲块的总数目。
CN201410471711.7A 2014-09-16 2014-09-16 向缓存中写入数据的方法及装置 Active CN104238962B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201410471711.7A CN104238962B (zh) 2014-09-16 2014-09-16 向缓存中写入数据的方法及装置
PCT/CN2015/083383 WO2016041401A1 (zh) 2014-09-16 2015-07-06 向缓存中写入数据的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410471711.7A CN104238962B (zh) 2014-09-16 2014-09-16 向缓存中写入数据的方法及装置

Publications (2)

Publication Number Publication Date
CN104238962A CN104238962A (zh) 2014-12-24
CN104238962B true CN104238962B (zh) 2018-02-06

Family

ID=52227129

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410471711.7A Active CN104238962B (zh) 2014-09-16 2014-09-16 向缓存中写入数据的方法及装置

Country Status (2)

Country Link
CN (1) CN104238962B (zh)
WO (1) WO2016041401A1 (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104238962B (zh) * 2014-09-16 2018-02-06 华为技术有限公司 向缓存中写入数据的方法及装置
CN104778131B (zh) * 2015-04-29 2017-07-21 浪潮电子信息产业股份有限公司 一种数据缓存方法及一种缓冲存储器
CN106445405B (zh) * 2015-08-13 2020-02-07 北京忆恒创源科技有限公司 一种面向闪存存储的数据访问方法及其装置
CN105117351B (zh) * 2015-09-08 2018-07-03 华为技术有限公司 向缓存写入数据的方法及装置
CN107250992B (zh) * 2015-11-13 2020-08-07 华为技术有限公司 一种文件写入方法及文件服务器
KR20190032809A (ko) * 2017-09-20 2019-03-28 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법
CN109683823B (zh) * 2018-12-20 2022-02-11 湖南国科微电子股份有限公司 一种管理存储器多并发请求的方法及装置
CN110007853B (zh) * 2019-01-30 2022-06-28 镕铭微电子(济南)有限公司 一种Nandflash命令处理方法、装置、终端及存储介质
CN110968268B (zh) * 2019-11-15 2023-03-17 成都智邦科技有限公司 一种基于spiflash的存储管理方法及存储结构
CN113467698A (zh) * 2020-03-30 2021-10-01 珠海全志科技股份有限公司 基于文件系统的写方法、装置、计算机设备和存储介质
US11586554B2 (en) * 2020-07-23 2023-02-21 Arm Limited Cache arrangements for data processing systems
CN112035065B (zh) * 2020-08-28 2022-06-07 北京浪潮数据技术有限公司 一种数据写入方法、装置、设备及计算机可读存储介质
CN113050893B (zh) * 2021-03-30 2022-08-30 重庆紫光华山智安科技有限公司 一种高并发的文件存储方法、系统、介质及电子终端

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1632765A (zh) * 2004-12-31 2005-06-29 大唐微电子技术有限公司 一种闪存文件系统管理方法
CN101493794A (zh) * 2009-01-19 2009-07-29 成都市华为赛门铁克科技有限公司 一种闪存数据处理方法及装置
CN103425438A (zh) * 2013-07-15 2013-12-04 记忆科技(深圳)有限公司 优化固态硬盘写请求的方法及其固态硬盘
CN103473185A (zh) * 2013-09-06 2013-12-25 华为数字技术(苏州)有限公司 缓存写入的方法、缓存装置和存储系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI451247B (zh) * 2010-09-23 2014-09-01 Phison Electronics Corp 資料寫入方法、記憶體控制器與記憶體儲存裝置
CN103049394A (zh) * 2012-11-30 2013-04-17 记忆科技(深圳)有限公司 固态硬盘数据缓存的方法及其系统
CN104238962B (zh) * 2014-09-16 2018-02-06 华为技术有限公司 向缓存中写入数据的方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1632765A (zh) * 2004-12-31 2005-06-29 大唐微电子技术有限公司 一种闪存文件系统管理方法
CN101493794A (zh) * 2009-01-19 2009-07-29 成都市华为赛门铁克科技有限公司 一种闪存数据处理方法及装置
CN103425438A (zh) * 2013-07-15 2013-12-04 记忆科技(深圳)有限公司 优化固态硬盘写请求的方法及其固态硬盘
CN103473185A (zh) * 2013-09-06 2013-12-25 华为数字技术(苏州)有限公司 缓存写入的方法、缓存装置和存储系统

Also Published As

Publication number Publication date
WO2016041401A1 (zh) 2016-03-24
CN104238962A (zh) 2014-12-24

Similar Documents

Publication Publication Date Title
CN104238962B (zh) 向缓存中写入数据的方法及装置
CN105117351B (zh) 向缓存写入数据的方法及装置
US9983821B2 (en) Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application
CN100498740C (zh) 一种数据缓存处理方法、系统及数据缓存装置
US8595451B2 (en) Managing a storage cache utilizing externally assigned cache priority tags
Bender et al. Don't thrash: How to cache your hash on flash
CN105468298B (zh) 一种基于日志结构合并树的键值存储方法
CN103106158A (zh) 包括键-值存储的存储器系统
CN104765575A (zh) 信息存储处理方法
CN111400306B (zh) 基于rdma与非易失性内存的基数树访问系统
CN104765574A (zh) 数据云端存储方法
US10769064B1 (en) Method for retrieving key value pairs and groups of key value pairs
CN102024060B (zh) 存储文件及恢复误删除文件的方法
CN104778100A (zh) 一种安全备份数据的方法
CN1963810A (zh) 在Flash存储介质上的关于文件分配表的缓存实现方法
CN111984651A (zh) 一种基于持久性内存的列式存储方法、装置及设备
CN106168883A (zh) 一种高效的数据组织与访问方法
CN115933994A (zh) 一种数据处理方法、装置、电子设备及存储介质
CN113326262B (zh) 基于键值数据库的数据处理方法、装置、设备及介质
CN115421648A (zh) 内存垃圾回收方法、装置、设备、存储介质和程序产品
CN107506156B (zh) 一种块设备的io优化方法
Chang et al. Emt: Elegantly measured tanner for key-value store on ssd
CN116383098B (zh) 地址索引方法、装置、可读存储介质及电子设备
CN113721839B (zh) 用于处理图数据的计算系统和存储分层方法
US11880593B2 (en) Host, operating method of host and storage system

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20220214

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Patentee after: Huawei Cloud Computing Technologies Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.

TR01 Transfer of patent right