CN112162703B - 缓存实现方法及缓存管理模块 - Google Patents
缓存实现方法及缓存管理模块 Download PDFInfo
- Publication number
- CN112162703B CN112162703B CN202011027496.3A CN202011027496A CN112162703B CN 112162703 B CN112162703 B CN 112162703B CN 202011027496 A CN202011027496 A CN 202011027496A CN 112162703 B CN112162703 B CN 112162703B
- Authority
- CN
- China
- Prior art keywords
- target
- cache
- block
- data
- sub
- 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
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- 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
- G06F12/0871—Allocation or management of cache space
-
- 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
- G06F12/0873—Mapping of cache memory to specific storage devices or parts thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
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)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请提供一种缓存实现方法及缓存管理模块。该方法在首次向缓存块中写入数据时,利用魔术字填充未写入数据的区域,而无需缓存缓存块的缓存位图,因此,可大大降低对缓存盘的空间消耗。
Description
技术领域
本申请涉及存储技术领域,尤其涉及一种缓存实现方法及缓存管理模块。
背景技术
缓存是分布式存储集群中的重要组件。在集群节点中,通常采用性能较高的磁盘,比如,固态硬盘(英文:Solid State Disk,缩写:SSD)作为缓存盘,为后端相对较慢的机械硬盘提供缓存服务。
缓存盘需要缓存的信息主要包括:用户数据和日志数据。其中,日志数据主要用于记录缓存用户数据过程中生成的映射关系,包括用户数据在逻辑单元号(英文:LogicalUnit Number,缩写:LUN)中的逻辑地址、用户数据在缓存盘中的地址以及用户数据大小。
缓存盘通常以追加的方式缓存用户数据以及日志数据。即使该用户数据是针对同一逻辑区间的重复写入,在缓存盘中也会以追加的方式单独存储,造成缓存空间浪费。
发明内容
有鉴于此,本申请提出一种缓存实现方法及缓存管理模块,用以节约缓存空间。
为实现上述申请目的,本申请提供了如下技术方案:
第一方面,本申请提供一种缓存实现方法,应用于缓存管理模块,所述缓存管理模块部署于分布式存储集群的集群节点上,所述集群节点包括用于临时存放数据的缓存盘和持久化存储数据的存储盘,所述缓存盘按照预设缓存粒度划分为多个缓存块,每一个缓存块按照存储盘的扇区大小划分为多个子缓存块,所述分布式存储集群还配置有至少一个LUN,每一个LUN按照预设缓存粒度划分为多个逻辑区间,所述方法包括:
在接收到针对目标LUN的写请求时,确定该写请求涉及到的所述目标LUN中的各目标逻辑区间,将所述写请求携带的数据拆分成待写入各目标逻辑区间的目标数据块;
针对每一个目标逻辑区间执行如下处理:
查询本地维护的缓存映射表中是否存在与目标逻辑区间对应的目标缓存块,所述缓存映射表用于记录LUN中已写入数据的逻辑区间与缓存块的映射关系;
如果不存在与目标逻辑区间对应的目标缓存块,为该目标逻辑区间分配对应的目标缓存块;
如果待写入目标逻辑区间的目标数据块的大小小于缓存块的大小,则在将该目标数据块写入目标缓存块的同时,利用魔术字填充所述目标缓存块中未写入数据的各子缓存块,所述魔术字的大小等于子缓存块的大小;
将该目标逻辑区间与目标缓存块的映射关系添加到所述缓存映射表中,并将该映射关系存储至所述缓存盘中。
可选的,所述方法还包括:
如果存在与目标逻辑区间对应的目标缓存块,将待写入该目标逻辑区间的目标数据块写入目标缓存块;
禁止向所述缓存盘中写入该目标逻辑区间与目标缓存块的映射关系。
可选的,将所述目标数据块写入所述目标缓存块,包括:
确定目标数据块在目标缓存块中对应的各目标子缓存块,将该目标数据块拆分成各目标子缓存块对应的目标子数据块;
针对每一个目标子数据块,确定该目标子数据块是否等于魔术字;
如果各目标子数据块均不等于所述魔术字,将所述目标数据块写入所述目标缓存块;否则,将所述目标数据块写入指定存储盘。
可选的,所述确定该目标子数据块是否等于魔术字,包括:
获取所述魔术字中指定位置的第一字段与目标子数据块中相同位置的第二字段;
如果所述第一字段与所述第二字段不同,确定所述目标子数据块不等于所述魔术字;
如果所述第一字段与所述第二字段相同,比较所述魔术字与目标子数据块;
如果相同,确定所述目标子数据块等于所述魔术字;否则,确定所述目标子数据块不等于所述魔术字。
可选的,每一个缓存块对应一个缓存位图,所述缓存位图中的每一位用于标识对应子缓存块是否缓存有数据,所述方法还包括:
当集群节点重启时,获取预设的位图恢复模式;
在达到所述位图恢复模式所标识的恢复条件时,针对缓存块中的每一个子缓存块,确定子缓存块中的数据是否等于魔术字;
如果子缓存块中的数据不等于魔术字,设置该子缓存块在缓存位图中对应位的值为第一值;否则,设置该子缓存块在缓存位图中对应位的值为第二值;
其中,所述第一值用于标识子缓存块中缓存有数据;所述第二值用于标识子缓存块中未缓存数据。
第二方面,本申请提供一种缓存管理模块,所述缓存管理模块部署于分布式存储集群的集群节点上,所述集群节点包括用于临时存放数据的缓存盘和持久化存储数据的存储盘,所述缓存盘按照预设缓存粒度划分为多个缓存块,每一个缓存块按照存储盘的扇区大小划分为多个子缓存块,所述分布式存储集群还配置有至少一个LUN,每一个LUN按照预设缓存粒度划分为多个逻辑区间,所述模块包括:
第一确定单元,用于在接收到针对目标LUN的写请求时,确定该写请求涉及到的所述目标LUN中的各目标逻辑区间,将所述写请求携带的数据拆分成待写入各目标逻辑区间的目标数据块;
查询单元,用于针对每一个目标逻辑区间,查询本地维护的缓存映射表中是否存在与目标逻辑区间对应的目标缓存块,所述缓存映射表用于记录LUN中已写入数据的逻辑区间与缓存块的映射关系;
分配单元,用于如果不存在与目标逻辑区间对应的目标缓存块,为该目标逻辑区间分配对应的目标缓存块;
写入单元,用于如果待写入目标逻辑区间的目标数据块的大小小于缓存块的大小,则在将该目标数据块写入目标缓存块的同时,利用魔术字填充所述目标缓存块中未写入数据的各子缓存块,所述魔术字的大小等于子缓存块的大小;
添加单元,用于将该目标逻辑区间与目标缓存块的映射关系添加到所述缓存映射表中,并将该映射关系存储至所述缓存盘中。
可选的,所述模块还包括:
所述写入单元,还用于如果存在与目标逻辑区间对应的目标缓存块,将待写入该目标逻辑区间的目标数据块写入目标缓存块;
禁止单元,用于禁止向所述缓存盘中写入该目标逻辑区间与目标缓存块的映射关系。
可选的,所述写入单元将所述目标数据块写入所述目标缓存块,包括:
确定目标数据块在目标缓存块中对应的各目标子缓存块,将该目标数据块拆分成各目标子缓存块对应的目标子数据块;
针对每一个目标子数据块,确定该目标子数据块是否等于魔术字;
如果各目标子数据块均不等于所述魔术字,将所述目标数据块写入所述目标缓存块;否则,将所述目标数据块写入指定存储盘。
可选的,所述写入单元确定该目标子数据块是否等于魔术字,包括:
获取所述魔术字中指定位置的第一字段与目标子数据块中相同位置的第二字段;
如果所述第一字段与所述第二字段不同,确定所述目标子数据块不等于所述魔术字;
如果所述第一字段与所述第二字段相同,比较所述魔术字与目标子数据块;
如果相同,确定所述目标子数据块等于所述魔术字;否则,确定所述目标子数据块不等于所述魔术字。
可选的,每一个缓存块对应一个缓存位图,所述缓存位图中的每一位用于标识对应子缓存块是否缓存有数据,所述模块还包括:
获取单元,用于当集群节点重启时,获取预设的位图恢复模式;
第二确定单元,用于在达到所述位图恢复模式所标识的恢复条件时,针对缓存块中的每一个子缓存块,确定子缓存块中的数据是否等于魔术字;
设置单元,用于如果子缓存块中的数据不等于魔术字,设置该子缓存块在缓存位图中对应位的值为第一值;否则,设置该子缓存块在缓存位图中对应位的值为第二值;其中,所述第一值用于标识子缓存块中缓存有数据;所述第二值用于标识子缓存块中未缓存数据。
由以上描述可以看出,本申请实施例中,在首次向缓存块中写入数据时,利用魔术字填充未写入数据的区域,而无需缓存缓存块的缓存位图,因此,可大大降低对缓存盘的空间消耗。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例示出的一种缓存实现示意图;
图2是本申请实施例示出的一种缓存实现示意图;
图3是本申请实施例示出的一种缓存实现示意图;
图4是本申请实施例示出的一种缓存实现示意图;
图5是本申请实施例示出的一种缓存实现方法流程图;
图6是本申请实施例示出的一种缓存实现示意图;
图7是本申请实施例示出的一种缓存实现示意图;
图8是本申请实施例示出的一种向目标缓存块写入数据的处理流程;
图9是本申请实施例示出的一种确定目标子数据块是否等于魔术字的处理流程;
图10是本申请实施例示出的一种恢复缓存位图的实现流程;
图11是本申请实施例示出的一种缓存管理模块的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。
在本申请实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请实施例。在本申请实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请实施例范围的情况下,协商信息也可以被称为第二信息,类似地,第二信息也可以被称为协商信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
分布式存储集群通常包括多台服务器(亦称为集群节点)。每一个集群节点包括至少一块用于持久化存储数据的机械硬盘(简称为存储盘),该存储盘的读写性能相对较慢。为了提升分布式存储集群的读写性能,通常在集群节点中部署高性能的缓存盘,比如,SSD盘,用于临时存放数据。
参见图1,为示例性示出的一种缓存实现示意图。该示意图以向LUN1中写入数据块A和数据块B为例,数据块A和数据块B被临时存放在缓存盘中。该缓存盘被预先划分为两个部分,一部分用于缓存用户数据,可称为数据空间;另一部分用于缓存日志数据,可称为日志空间。
其中,日志数据主要用于记录缓存用户数据过程中生成的缓存映射关系。比如,图1中,L1为缓存数据块A时生成的日志数据,用于记录数据块A在LUN1中对应逻辑地址与在缓存盘中对应缓存地址之间的映射关系;L2缓存数据块B时生成的日志数据,用于记录数据块B在LUN1中对应逻辑地址与在缓存盘中对应缓存地址之间的映射关系。
在图1基础上,若写入数据块C,则如图2所示在缓存盘中追加数据块C以及对应的日志数据L3。但是,从图2可以看出,数据块C与原数据块A的后半部分存在地址重叠(图2中将数据块A的前半部分数据记为Af),缓存中数据块A的后半部分数据已不再有价值,这部分数据的缓存无疑造成缓存空间浪费。
针对上述问题,在一些实施例中,可将缓存盘的数据空间按照预设缓存粒度(比如,64KB)划分为多个缓存块;LUN按照缓存粒度划分为多个逻辑区间,比如,【0,64KB】、【64KB,128KB】、【128KB,192KB】,以此类推。
如图3所示,当LUN1中写入数据块A(比如,数据块A大小为32KB,写入起始地址为P1)时,该数据块A被写入缓存盘的缓存块1中,同时,L1中记录数据块A在LUN1中所写入逻辑区间(逻辑区间的起始地址P1)与缓存块1的映射关系,此外,还包括缓存块1的缓存位图(bitmap),比如:
缓存块1→[bitmap:111……111000……000]
这里,需要说明的是,每一个缓存块可按照扇区(机械硬盘的最小读写单位)大小(比如,256Btye)划分为多个子缓存块。缓存位图中的每一位对应缓存块中的一个子缓存块,用于标识对应子缓存块是否缓存有数据。
一个64KB的缓存块按照扇区大小(512Btye)划分,可划分为128个子缓存块,对应需要一个包括128bit的缓存位图,来标识各子缓存块的缓存情况(是否缓存有数据)。比如,bit=0,表示对应子缓存块中未缓存数据;bit=1,表示对应子缓存块中缓存有数据。
仍以缓存块1→[bitmap:111……111000……000]为例,该缓存位图表示缓存块1的前一半(前64个)子缓存块均缓存有数据,后一半(后64个)子缓存块为空。
同理,当在LUN1中写入数据块B(比如,数据块B大小为48KB,写入起始地址为P2+16KB)时,该数据块B被写入缓存盘的缓存块2中。L2中记录数据块B在LUN1中所写入逻辑区间(逻辑区间的起始地址P2)与缓存块2的映射关系,此外,还记录缓存块2的缓存位图,比如:
缓存块2→[bitmap:00……011……111……111……1]
即,缓冲块2中的前四分之一(前32个)子缓存块为空,后四分之三(后96个)子缓存块缓存有数据。
当在图3基础上写入数据块C(数据块C大小为48KB,在LUN1中写入起始地址为P1+16KB)时,由于数据块C与数据块A属于同一逻辑区间(该逻辑区间起始地址为P1),该逻辑区间在缓存盘中被映射到缓存块1,因此,将该数据块C写入缓存块1中,在缓存块1中的偏移地址为16KB,如图4所示。
同时,在缓存盘中追加数据块C的日志数据L3。该L3中记录数据块C在LUN1中所写入逻辑区间(逻辑区间的起始地址P1)与缓存块1的映射关系,以及缓存块1的缓存位图(bitmap):
缓存块1→[bitmap:111……111111……111]
即,当前缓存块1中各子缓存块均缓存有数据。
从图4中可以看出,在缓存盘中,数据块C覆盖了原数据块A的后半部分数据(不再有价值的数据),相比于图2所示缓存方式,可有效解决缓存盘的数据空间。但是,日志数据仍采用追加的方式存储,且需要存储大量缓存位图,无疑增加了日志空间的消耗。
为此,本申请实施例提出一种缓存实现方法,该方法针对缓存盘中的每一个缓存块只记录一个日志数据,且无需存储缓存位图,因此,可大大降低对缓存盘的空间消耗。
为了使本申请实施例的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本申请实施例执行详细描述:
参见图5,为本申请实施例示出的一种缓存实现方法的流程图。该流程应用于缓存管理模块。
该缓存管理模块部署于分布式存储集群的集群节点上。该集群节点包括用于临时存放数据的缓存盘和持久化存储数据的存储盘。缓存管理模块负责对缓存盘进行管理。作为一个实施例,该缓存管理模块可以为缓存盘的服务进程。
本申请实施例中,缓存盘可按照预设缓存粒度(比如,64KB)划分为多个缓存块,每一个缓存块可按照存储盘的扇区大小(比如,512Byte)划分为多个子缓存块。
如图5所示,该流程可包括以下步骤:
步骤501,在接收到针对目标LUN的写请求时,确定写请求涉及到的目标LUN中的各目标逻辑区间,将写请求携带的数据拆分成待写入各目标逻辑区间的目标数据块。
这里,将当前写请求待操作的LUN称为目标LUN。可以理解的是,之所以称为目标LUN,只是为了便于区分而进行的命名,并非用于限定。
本申请实施例中,LUN可按照预设缓存粒度(比如,64KB)划分为多个逻辑区间,比如,【0,64KB】、【64KB,128KB】、【128KB,192KB】,以此类推。
缓存管理模块可根据写请求的写入范围,确定该写请求在目标LUN中对应的各逻辑区间。这里,将写请求在目标LUN中对应的各逻辑区间均称为目标逻辑区间。可以理解的是,之所以称为目标逻辑区间,只是为了便于区分而进行的命名,并非用于限定。
比如,写请求的写入范围为LUN1的【0,96KB】,则可确定该写请求涉及到LUN1的两个逻辑区间,分别为【0,64KB】和【64KB,128KB】。
缓存管理模块将写请求携带的数据拆分成待写入各目标逻辑区间的数据块。这里,将拆分后待写入各目标逻辑区间的数据块均称为目标数据块。可以理解的是,之所以称为目标数据块,只是为了便于区分而进行的命名,并非用于限定。
针对每一个目标逻辑区间执行后续处理。
步骤502,查询本地维护的缓存映射表中是否存在与目标逻辑区间对应的目标缓存块。
缓存映射表用于记录LUN中已写入数据的逻辑区间与缓存块的映射关系。通过该映射关系标识写入逻辑区间的数据被缓存到哪一个缓存块中。
缓存管理模块通过查询内存中维护的缓存映射表,可确定当前目标逻辑区间是否写入过数据。
具体为,如果缓存映射表中存在与目标逻辑区间对应的目标缓存块,说明该目标逻辑区间已写入过数据,或者说,对应目标缓存块中已缓存有数据,则转步骤506。这里,将用于缓存目标逻辑区间对应数据的缓存块称为目标缓存块。可以理解的是,之所以称为目标缓存块,只是为了便于区分而进行的命名,并非用于限定。
如果缓存映射表中不存在与目标逻辑区间对应的目标缓存块,说明该目标逻辑区间为首次写入,还未为其分配对应的目标缓存块,则转步骤503。
步骤503,为目标逻辑区间分配对应的目标缓存块,转步骤504。
步骤504,如果待写入目标逻辑区间的目标数据块的大小小于缓存块的大小,则在将该目标数据块写入目标缓存块的同时,利用魔术字填充目标缓存块中未写入数据的各子缓存块。
这里,魔术字通常指具有特殊含义的一组字符。在本申请实施例中,该魔术字的大小等于子缓存块的大小,比如,512Byte。
作为一个示例,该魔术字可以为截取自斐波拉契数列的512Byte数据,比如,“11235813213455891442333776109871597258441816765109461771128657463687502512139319641831781151422983204013462692178309352457857028879227465149303522415781739088169632459861023341551655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920250473078196140527395378816557470319842106102098577231716768017756527777890035288449455702128537272346024814111766903046”。
以图6所示向LUN1中写入数据块A为例。该数据块A在LUN1中的写入起始地址为64KB,数据块大小为32KB,则可确定该数据块A待写入逻辑区间【64KB,128KB】。当前缓存映射表不存在该逻辑区间【64KB,128KB】的映射关系,则缓存管理模块为该逻辑区间【64KB,128KB】分配缓存块,比如,缓存块1。即,指定缓存块1用于缓存逻辑区间【64KB,128KB】对应数据。
由于数据块A在逻辑区间【64KB,128KB】中的偏移量为0,因此,其在缓存块1中的偏移量也为0。数据块A的大小为32KB,小于缓存块的大小64KB,为此,本申请实施例在缓存块1的后32KB存储空间中填充魔术字(记为Magic)。具体为,在后32KB包括的每一个子缓存块(每一个子缓存块的大小为512Byte)中一个魔术字(魔术字大小为512Byte)。
步骤505,将目标逻辑区间与目标缓存块的映射关系添加到缓存映射表中,并将该映射关系存储至缓存盘中。
仍以图6为例,缓存管理模块将逻辑区间【64KB,128KB】与缓存块1的映射关系添加到缓存映射表中,并将该映射关系存储至缓存盘中,记为L1。
至此,完成向目标逻辑区间首次写入数据的处理流程。可以看出,本申请实施例虽然增加了首次写入的数据量(增加了魔术字),但并没有增加对缓存空间的消耗。
步骤506,将待写入目标逻辑区间的目标数据块写入目标缓存块。
如前所述,如果缓存映射表中存在与目标逻辑区间对应的目标缓存块,说明该目标逻辑区间已写入过数据,或者说,对应目标缓存块已缓存有数据,此次为针对目标逻辑区间的重复写入,则将待写入该目标逻辑区间的目标数据块直接写入目标缓存块,转步骤507。
步骤507,禁止向缓存盘中写入该目标逻辑区间与目标缓存块的映射关系。
本申请实施例中,针对同一目标逻辑区间的重复写入,不再追加日志数据(目标逻辑区间与目标缓存块的映射关系),可有效降低对缓存盘的缓存空间消耗。且由于不执行该向缓存盘写日志数据的操作,可减少写入耗时,提升系统性能。
现举例说明:比如,在图6基础上,向LUN1写入数据块C。该数据块C在LUN1中的写入起始地址为80KB,数据块大小为48KB,则可确定该数据块C待写入逻辑区间【64KB,128KB】。当前缓存映射表中已存在该逻辑区间【64KB,128KB】与缓存块1的映射关系,则缓存管理模块将数据块C直接写入缓存块1,且无需追加新的日志数据,如图7所示。
至此,完成向目标逻辑区间重复写入数据的处理流程。
通过图5所示流程可以看出,本申请实施例缓存的日志数据中不再包括缓存位图,且针对同一逻辑区间的重复写入,不再追加日志数据,可大大降低对缓存盘的缓存空间消耗。同时,由于减少了写入日志数据的次数,降低了写入耗时,可有效提升系统性能。
下面对步骤504和步骤506中将目标数据块写入目标缓存块的过程进行描述。参见图8,为本申请实施例示出的一种向目标缓存块写入数据的处理流程。
如图8所示,该流程可包括以下步骤:
步骤801,确定目标数据块在目标缓存块中对应的各目标子缓存块,将该目标数据块拆分成各目标子缓存块对应的目标子数据块。
这里,将目标数据块在目标缓存块中对应的各子缓存块均称为目标子缓存块;将目标数据块中待写入每一个目标子缓存块的数据称为目标子数据块。可以理解的是,之所以称为目标子缓存块、目标子数据块,只是为便于区分而进行的命名,并非用于限定。
以图6所示缓存示意图为例,在向缓存块1写入数据块A之前,确定数据块A在缓存块1中对应的各子缓存块。缓存块1按照512Btye扇区大小可划分为128个子缓存块。数据块A在缓存块1中的偏移量为0,大小为32KB,则其在缓存块1中对应前64个子缓存块。将数据块A拆分成该64个子缓存块分别对应的子数据块,可拆分成64个子数据块。
步骤802,针对每一个目标子数据块,确定该目标子数据块是否等于魔术字。
如果目标数据块中的每一个目标子数据块均不等于魔术字,即,不存在与魔术字相同的数据,则转步骤803;否则,说明目标数据块中存在与魔术字相同的数据,转步骤804。
步骤803,将目标数据块写入目标缓存块。
步骤804,将目标数据块写入指定存储盘。
为了避免与用于填充缓存块的魔术字混淆,直接将该目标数据块写入指定存储盘,不再通过缓存盘缓存。
至此,完成图8所示流程。通过图8所示流程实现向缓存块中写入数据。
下面对步骤802中确定目标子数据块是否等于魔术字的过程进行描述。参见图9,为本申请实施例示出的一种确定目标子数据块是否等于魔术字的处理流程。
如图9所示,该流程可包括以下步骤:
步骤901,获取魔术字中指定位置的第一字段与目标子数据块中相同位置的第二字段。
比如,分别获取魔术字的前8Byte和目标子数据块的前8Byte。
这里,第一字段、第二字段只是为了便于区分而进行的命名,并非用于限定。
步骤902,比较第一字段与第二字段是否相同。
如果第一字段与第二字段不同,转步骤903;否则,转步骤904。
步骤903,确定目标子数据块不等于魔术字。
步骤904,比较整个魔术字与目标子数据块是否相同。
如果相同,转步骤905;否则,转步骤903。
步骤905,确定目标子数据块等于魔术字。
至此,完成图9所示流程。
通过图9所示流程可以看出,本申请实施例首先采用较少(部分)数据进行比对,来确定目标子数据块是否等于魔术字。这样可降低运算量,提升处理效率。且绝大部分情况下,基于该较少数据已可识别目标子数据块是否等于魔术字。
此外,需要说明的是,本申请实施例中,虽然没有在缓存中存储各缓存块的缓存位图,但是,集群节点的内存中仍维护有缓存位图。当集群节点重启时,内存中的缓存位图会丢失,为此,本申请实施例提出一种可以恢复缓存位图的方法。
参见图10,为本申请实施例示出的一种恢复缓存位图的实现流程。如图10所示,该流程可包括以下步骤:
步骤1001,当集群节点重启时,获取预设的位图恢复模式。
本申请实施例中,可根据系统承担的业务特性,预先设置位图恢复模式。该位图恢复模式可包括同步模式、异步模式。其中,同步模式是指在节点重启时,立即执行对缓存位图的恢复,以尽早恢复缓存位图;异步模式是指在实际发生读写、刷盘等操作时,针对命中的缓存块恢复缓存块的缓存位图。
步骤1002,在达到位图恢复模式所标识的恢复条件时,针对缓存块中的每一个子缓存块,确定子缓存块中的数据是否等于魔术字。
具体确定子缓存块中的数据是否等于魔术字的过程,可参见图9所示流程,这里不再赘述。
如果子缓存块中的数据不等于魔术字,说明该子缓存块中缓存有用户数据,转步骤1003;如果子缓存块中的数据等于魔术字,说明该子缓存块中不存在用户数据,转步骤1004。
这里,需要说明的是,由于包含魔术字的用户数据已直接存入后端存储盘,缓存盘中的魔术字均为填充的非用户数据,因此,本步骤通过魔术字比对,可区分出缓存有用户数据的子缓存块和未缓存用户数据的子缓存块,进而恢复缓冲块的缓存位图。
步骤1003,设置该子缓存块在缓存位图中对应位的值为第一值。
该第一值用于标识子缓存块中缓存有数据。
步骤1004,设置该子缓存块在缓存位图中对应位的值为第二值。
该第二值用于标识子缓存块中未缓存数据。
至此,完成图10所示流程。通过图10所示流程实现在不需要存储缓存位图的情况下,自动恢复缓存位图。
以上对本申请实施例提供的方法进行了描述,下面对本申请实施例提供的缓存管理模块进行描述:
参见图11,为本申请实施例提供的缓存管理模块的结构示意图。该模块包括:第一确定单元1101、查询单元1102、分配单元1103、写入单元1104以及添加单元1105,其中:
第一确定单元1101,用于在接收到针对目标LUN的写请求时,确定该写请求涉及到的所述目标LUN中的各目标逻辑区间,将所述写请求携带的数据拆分成待写入各目标逻辑区间的目标数据块;
查询单元1102,用于针对每一个目标逻辑区间,查询本地维护的缓存映射表中是否存在与目标逻辑区间对应的目标缓存块,所述缓存映射表用于记录LUN中已写入数据的逻辑区间与缓存块的映射关系;
分配单元1103,用于如果不存在与目标逻辑区间对应的目标缓存块,为该目标逻辑区间分配对应的目标缓存块;
写入单元1104,用于如果待写入目标逻辑区间的目标数据块的大小小于缓存块的大小,则在将该目标数据块写入目标缓存块的同时,利用魔术字填充所述目标缓存块中未写入数据的各子缓存块,所述魔术字的大小等于子缓存块的大小;
添加单元1105,用于将该目标逻辑区间与目标缓存块的映射关系添加到所述缓存映射表中,并将该映射关系存储至所述缓存盘中。
作为一个实施例,所述模块还包括:
所述写入单元1104,还用于如果存在与目标逻辑区间对应的目标缓存块,将待写入该目标逻辑区间的目标数据块写入目标缓存块;
禁止单元,用于禁止向所述缓存盘中写入该目标逻辑区间与目标缓存块的映射关系。
作为一个实施例,所述写入单元1104将所述目标数据块写入所述目标缓存块,包括:
确定目标数据块在目标缓存块中对应的各目标子缓存块,将该目标数据块拆分成各目标子缓存块对应的目标子数据块;
针对每一个目标子数据块,确定该目标子数据块是否等于魔术字;
如果各目标子数据块均不等于所述魔术字,将所述目标数据块写入所述目标缓存块;否则,将所述目标数据块写入指定存储盘。
作为一个实施例,所述写入单元1104确定该目标子数据块是否等于魔术字,包括:
获取所述魔术字中指定位置的第一字段与目标子数据块中相同位置的第二字段;
如果所述第一字段与所述第二字段不同,确定所述目标子数据块不等于所述魔术字;
如果所述第一字段与所述第二字段相同,比较所述魔术字与目标子数据块;
如果相同,确定所述目标子数据块等于所述魔术字;否则,确定所述目标子数据块不等于所述魔术字。
作为一个实施例,每一个缓存块对应一个缓存位图,所述缓存位图中的每一位用于标识对应子缓存块是否缓存有数据,所述模块还包括:
获取单元,用于当集群节点重启时,获取预设的位图恢复模式;
第二确定单元,用于在达到所述位图恢复模式所标识的恢复条件时,针对缓存块中的每一个子缓存块,确定子缓存块中的数据是否等于魔术字;
设置单元,用于如果子缓存块中的数据不等于魔术字,设置该子缓存块在缓存位图中对应位的值为第一值;否则,设置该子缓存块在缓存位图中对应位的值为第二值;其中,所述第一值用于标识子缓存块中缓存有数据;所述第二值用于标识子缓存块中未缓存数据。
由以上描述可以看出,本申请实施例中,在首次向缓存块中写入数据时,利用魔术字填充未写入数据的区域,而无需缓存缓存块的缓存位图,因此,可大大降低对缓存盘的空间消耗。
以上所述仅为本申请实施例的较佳实施例而已,并不用以限制本申请,凡在本申请实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种缓存实现方法,其特征在于,应用于缓存管理模块,所述缓存管理模块部署于分布式存储集群的集群节点上,所述集群节点包括用于临时存放数据的缓存盘和持久化存储数据的存储盘,所述缓存盘按照预设缓存粒度划分为多个缓存块,每一个缓存块按照存储盘的扇区大小划分为多个子缓存块,所述分布式存储集群还配置有至少一个LUN,每一个LUN按照预设缓存粒度划分为多个逻辑区间,所述方法包括:
在接收到针对目标LUN的写请求时,确定该写请求涉及到的所述目标LUN中的各目标逻辑区间,将所述写请求携带的数据拆分成待写入各目标逻辑区间的目标数据块;
针对每一个目标逻辑区间执行如下处理:
查询本地维护的缓存映射表中是否存在与目标逻辑区间对应的目标缓存块,所述缓存映射表用于记录LUN中已写入数据的逻辑区间与缓存块的映射关系;
如果不存在与目标逻辑区间对应的目标缓存块,为该目标逻辑区间分配对应的目标缓存块;
如果待写入目标逻辑区间的目标数据块的大小小于缓存块的大小,则在将该目标数据块写入目标缓存块的同时,利用魔术字填充所述目标缓存块中未写入数据的各子缓存块,所述魔术字的大小等于子缓存块的大小;
将该目标逻辑区间与目标缓存块的映射关系添加到所述缓存映射表中,并将该映射关系存储至所述缓存盘中;
如果存在与目标逻辑区间对应的目标缓存块,将待写入该目标逻辑区间的目标数据块写入目标缓存块。
2.如权利要求1所述的方法,其特征在于,所述如果存在与目标逻辑区间对应的目标缓存块,将待写入该目标逻辑区间的目标数据块写入目标缓存块之后,所述方法还包括:
禁止向所述缓存盘中写入该目标逻辑区间与目标缓存块的映射关系。
3.如权利要求1或2所述的方法,其特征在于,将所述目标数据块写入所述目标缓存块,包括:
确定目标数据块在目标缓存块中对应的各目标子缓存块,将该目标数据块拆分成各目标子缓存块对应的目标子数据块;
针对每一个目标子数据块,确定该目标子数据块是否等于魔术字;
如果各目标子数据块均不等于所述魔术字,将所述目标数据块写入所述目标缓存块;否则,将所述目标数据块写入指定存储盘。
4.如权利要求3所述的方法,其特征在于,所述确定该目标子数据块是否等于魔术字,包括:
获取所述魔术字中指定位置的第一字段与目标子数据块中相同位置的第二字段;
如果所述第一字段与所述第二字段不同,确定所述目标子数据块不等于所述魔术字;
如果所述第一字段与所述第二字段相同,比较所述魔术字与目标子数据块;
如果相同,确定所述目标子数据块等于所述魔术字;否则,确定所述目标子数据块不等于所述魔术字。
5.如权利要求1所述的方法,其特征在于,每一个缓存块对应一个缓存位图,所述缓存位图中的每一位用于标识对应子缓存块是否缓存有数据,所述方法还包括:
当集群节点重启时,获取预设的位图恢复模式;
在达到所述位图恢复模式所标识的恢复条件时,针对缓存块中的每一个子缓存块,确定子缓存块中的数据是否等于魔术字;
如果子缓存块中的数据不等于魔术字,设置该子缓存块在缓存位图中对应位的值为第一值;否则,设置该子缓存块在缓存位图中对应位的值为第二值;
其中,所述第一值用于标识子缓存块中缓存有数据;所述第二值用于标识子缓存块中未缓存数据。
6.一种缓存管理模块,其特征在于,所述缓存管理模块部署于分布式存储集群的集群节点上,所述集群节点包括用于临时存放数据的缓存盘和持久化存储数据的存储盘,所述缓存盘按照预设缓存粒度划分为多个缓存块,每一个缓存块按照存储盘的扇区大小划分为多个子缓存块,所述分布式存储集群还配置有至少一个LUN,每一个LUN按照预设缓存粒度划分为多个逻辑区间,所述模块包括:
第一确定单元,用于在接收到针对目标LUN的写请求时,确定该写请求涉及到的所述目标LUN中的各目标逻辑区间,将所述写请求携带的数据拆分成待写入各目标逻辑区间的目标数据块;
查询单元,用于针对每一个目标逻辑区间,查询本地维护的缓存映射表中是否存在与目标逻辑区间对应的目标缓存块,所述缓存映射表用于记录LUN中已写入数据的逻辑区间与缓存块的映射关系;
分配单元,用于如果不存在与目标逻辑区间对应的目标缓存块,为该目标逻辑区间分配对应的目标缓存块;
写入单元,用于如果待写入目标逻辑区间的目标数据块的大小小于缓存块的大小,则在将该目标数据块写入目标缓存块的同时,利用魔术字填充所述目标缓存块中未写入数据的各子缓存块,所述魔术字的大小等于子缓存块的大小;
添加单元,用于将该目标逻辑区间与目标缓存块的映射关系添加到所述缓存映射表中,并将该映射关系存储至所述缓存盘中;
所述写入单元,还用于如果存在与目标逻辑区间对应的目标缓存块,将待写入该目标逻辑区间的目标数据块写入目标缓存块。
7.如权利要求6所述的模块,其特征在于,所述模块还包括:
禁止单元,用于在所述写入单元确定存在与目标逻辑区间对应的目标缓存块,并将待写入该目标逻辑区间的目标数据块写入目标缓存块之后,禁止向所述缓存盘中写入该目标逻辑区间与目标缓存块的映射关系。
8.如权利要求6或7所述的模块,其特征在于,所述写入单元将所述目标数据块写入所述目标缓存块,包括:
确定目标数据块在目标缓存块中对应的各目标子缓存块,将该目标数据块拆分成各目标子缓存块对应的目标子数据块;
针对每一个目标子数据块,确定该目标子数据块是否等于魔术字;
如果各目标子数据块均不等于所述魔术字,将所述目标数据块写入所述目标缓存块;否则,将所述目标数据块写入指定存储盘。
9.如权利要求8所述的模块,其特征在于,所述写入单元确定该目标子数据块是否等于魔术字,包括:
获取所述魔术字中指定位置的第一字段与目标子数据块中相同位置的第二字段;
如果所述第一字段与所述第二字段不同,确定所述目标子数据块不等于所述魔术字;
如果所述第一字段与所述第二字段相同,比较所述魔术字与目标子数据块;
如果相同,确定所述目标子数据块等于所述魔术字;否则,确定所述目标子数据块不等于所述魔术字。
10.如权利要求6所述的模块,其特征在于,每一个缓存块对应一个缓存位图,所述缓存位图中的每一位用于标识对应子缓存块是否缓存有数据,所述模块还包括:
获取单元,用于当集群节点重启时,获取预设的位图恢复模式;
第二确定单元,用于在达到所述位图恢复模式所标识的恢复条件时,针对缓存块中的每一个子缓存块,确定子缓存块中的数据是否等于魔术字;
设置单元,用于如果子缓存块中的数据不等于魔术字,设置该子缓存块在缓存位图中对应位的值为第一值;否则,设置该子缓存块在缓存位图中对应位的值为第二值;其中,所述第一值用于标识子缓存块中缓存有数据;所述第二值用于标识子缓存块中未缓存数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011027496.3A CN112162703B (zh) | 2020-09-25 | 2020-09-25 | 缓存实现方法及缓存管理模块 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011027496.3A CN112162703B (zh) | 2020-09-25 | 2020-09-25 | 缓存实现方法及缓存管理模块 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112162703A CN112162703A (zh) | 2021-01-01 |
CN112162703B true CN112162703B (zh) | 2022-02-22 |
Family
ID=73864096
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011027496.3A Active CN112162703B (zh) | 2020-09-25 | 2020-09-25 | 缓存实现方法及缓存管理模块 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112162703B (zh) |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9251064B2 (en) * | 2014-01-08 | 2016-02-02 | Netapp, Inc. | NVRAM caching and logging in a storage system |
US20150347310A1 (en) * | 2014-05-30 | 2015-12-03 | Lsi Corporation | Storage Controller and Method for Managing Metadata in a Cache Store |
CN104133642B (zh) * | 2014-07-29 | 2018-07-13 | 浙江宇视科技有限公司 | SSD Cache填充方法及装置 |
CN105808151B (zh) * | 2014-12-29 | 2019-09-27 | 华为技术有限公司 | 固态硬盘存储设备和固态硬盘存储设备的数据存取方法 |
CN106155947B (zh) * | 2015-04-03 | 2019-02-22 | 南京理工大学 | 一种数据存储模块的实现方法 |
US10152422B1 (en) * | 2017-06-13 | 2018-12-11 | Seagate Technology Llc | Page-based method for optimizing cache metadata updates |
CN107506309B (zh) * | 2017-06-30 | 2020-05-19 | 深圳市硅格半导体有限公司 | 终端及闪存数据写入方法和计算机可读存储介质 |
CN107402724B (zh) * | 2017-07-31 | 2020-07-24 | 苏州浪潮智能科技有限公司 | 一种SSD中Journal元数据的保存方法及系统 |
-
2020
- 2020-09-25 CN CN202011027496.3A patent/CN112162703B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112162703A (zh) | 2021-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107066393B (zh) | 提高地址映射表中映射信息密度的方法 | |
US9298384B2 (en) | Method and device for storing data in a flash memory using address mapping for supporting various block sizes | |
US6968424B1 (en) | Method and system for transparent compressed memory paging in a computer system | |
US7694087B2 (en) | Duplicate data storing system, duplicate data storing method, and duplicate data storing program for storage device | |
US10120795B2 (en) | Wear-leveling nandflash memory reading/writing method | |
CN108604165B (zh) | 存储装置 | |
US9524238B2 (en) | Systems and methods for managing cache of a data storage device | |
US20060010293A1 (en) | Cache for file system used in storage system | |
KR20170098187A (ko) | 저장 서브시스템을 위한 연관적 및 원자적 라이트-백 캐싱 시스템 및 방법 | |
CN114356246B (zh) | Ssd内部数据的存储管理方法、装置、存储介质及ssd设备 | |
US11797207B2 (en) | Base and compressed difference data deduplication | |
CN108491290B (zh) | 一种数据写入方法及装置 | |
KR101077901B1 (ko) | 로그 블록 단위 매핑 기법을 이용한 플래시 메모리 관리 장치 및 방법 | |
CN116540950B (zh) | 一种存储器件及其写入数据的控制方法 | |
CN111443874B (zh) | 基于内容感知的固态盘内存缓存管理方法、设备及固态盘 | |
CN112162703B (zh) | 缓存实现方法及缓存管理模块 | |
CN108958657B (zh) | 一种数据存储方法、存储设备及存储系统 | |
CN110209600B (zh) | 一种基于精简lun的cache空间分配方法及系统 | |
CN110795031A (zh) | 一种基于全闪存储的数据重删方法、装置和系统 | |
JPH07261938A (ja) | 記憶制御方法及びそれを用いた圧縮機能付きディスクシステム | |
CN112817520B (zh) | 数据刷盘方法及装置 | |
CN112559384B (zh) | 一种基于非易失存储器的混合固态盘动态分区方法 | |
CN114625318A (zh) | 应用于固态硬盘的数据写入方法、装置、设备 | |
CN112631518B (zh) | 一种数据存储的方法和设备 | |
CN113050891B (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 |