CN111435331B - 存储卷写数据方法、装置、电子设备及机器可读存储介质 - Google Patents
存储卷写数据方法、装置、电子设备及机器可读存储介质 Download PDFInfo
- Publication number
- CN111435331B CN111435331B CN201910030255.5A CN201910030255A CN111435331B CN 111435331 B CN111435331 B CN 111435331B CN 201910030255 A CN201910030255 A CN 201910030255A CN 111435331 B CN111435331 B CN 111435331B
- Authority
- CN
- China
- Prior art keywords
- metadata
- data
- value
- parameter
- request
- 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
-
- 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/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0615—Address space extension
- G06F12/063—Address space extension for I/O modules, e.g. memory mapped I/O
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
本申请提供存储卷的写数据方法、装置、电子设备及机器可读存储介质。在本申请中,应用程序对所述存储卷存在读写IO,当所述读写IO为写请求时,基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,其中,所述元数据用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态;基于所述索引查询预设的元数据索引表,获得与所述索引对应的第一数据指针,其中所述第一数据指针指向一个元数据;若所述第一数据指针为空,则将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间,实现了灵活地依据特定元数据进行数据快速读写,并大幅提高了存储性能。
Description
技术领域
本申请涉及存储技术领域,尤其涉及存储卷的写数据方法、装置、电子设备及机器可读存储介质。
背景技术
在存储领域存在某些特定的应用程序,当其对存储卷进行数据访问时,所遵循的存储模型为:若该应用程序对该存储卷的物理空间从未进行数据写入,则该应用程序从所述存储卷的物理空间读出的数据预期为全零。比如:VMware(Virtual Machine ware,虚拟机软件)的虚拟化新特性VVols(vSphere APIs for Virtual Volumes)应用,就是该类应用程序的一个代表。由此可见,该类应用程序并不需要预先初始化存储卷上的物理空间存储的数据,从而为降低存储卷的性能损耗提供了进一步优化的可能。
发明内容
本申请提供一种存储卷的写数据方法,应用程序对所述存储卷存在读写IO,其中所述读写IO至少包括起始地址、数据长度、数据内容,所述存储卷对应的物理空间包含一个或多个区块,其中所述区块是指将所述存储卷按预设容量尺寸划分的多个大小相同的区间,当所述读写IO为写请求时,所述方法包括:
基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,其中,所述元数据用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态;
基于所述索引查询预设的元数据索引表,获得与所述索引对应的第一数据指针,其中所述第一数据指针指向一个元数据;
若所述第一数据指针为空,则将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间。
可选的,所述元数据保存在非易失性缓存中,所述元数据至少包括元数据数据头、元数据数据内容,其中,所述元数据数据头用于记录所述元数据的基本信息,所述元数据数据内容用于指示所述元数据对应物理空间包含的一个或多个区块的数据写入状态。
可选的,所述元数据数据内容基于一个或多个bit位,其中,每个bit位对应标识一个区块的数据写入状态,所述bit位的可能取值包括:第一取值或第二取值,默认值为第二取值。
可选的,所述元数据数据头至少包括第一参数、第二参数、第三参数、第四参数、第五参数,其中,所述第一参数用于指示所述元数据在所述元数据索引表中的位置,所述第二参数用于指示所述元数据对应的一个或多个区块的起始区块号,所述第三参数用于指示所述元数据对应的区块的个数,所述第四参数用于指示所述元数据数据内容是否都为第一取值,若是则所述第四参数的值为真,否则所述第四参数的值为假,所述第五参数用于指示所述元数据数据内容的校验。
可选的,还包括:
若所述第一数据指针不为空,则获取所述第一数据指针指向的第一元数据。
可选的,还包括:
若所述第一元数据的第四参数的值为真,则将所述写请求的数据内容写到对应的物理空间。
可选的,还包括:
若所述第一元数据的第四参数的值为假,则基于所述写请求对应的第一元数据的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间。
可选的,所述基于所述写请求对应的第一元数据的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间,包括:
获取第一元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第一队列,bit位的取值为第二取值的保存为第二队列;
将所述写请求中与所述第一队列对应区块的数据内容写到对应的物理空间;
将所述写请求中与所述第二队列对应区块执行对齐,并将对齐后的所述写请求中与所述第二队列对应区块的数据内容写到对应的物理空间。
可选的,所述将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间,包括:
检查所述写请求对应的物理空间是否区块对齐;
若不对齐,则将所述写请求补齐区块,得到补齐后的写请求,其中所述补齐后的写请求的被补齐区块对应的数据内容为全零;
基于所述补齐后的写请求的起始地址、数据长度,将所述补齐后的写请求的数据内容写到对应的物理空间。
可选的,基于所述补齐后的写请求的起始地址、数据长度,还包括:
在所述元数据索引表中,创建与所述补齐后的写请求对应第二元数据及指向所述第二元数据的第二数据指针;
设置所述第二数据指针指向的第二元数据的元数据数据头的第一参数、第二参数、第三参数、第四参数;
设置所述第二数据指针指向的第二元数据的元数据数据内容对应的一个或多个bit位的取值为第一取值。
可选的,当所述IO为读请求时,还包括:
基于所述读请求的起始地址、数据长度,计算与所述读请求对应的元数据的索引;
基于所述索引查询所述元数据索引表,获得与所述索引对应的第三数据指针,其中所述第三数据指针指向一个元数据;
若所述第三数据指针为空,则将所述读请求的数据内容设置为全零。
可选的,还包括:
若所述第三数据指针不为空,则获取所述第三数据指针指向的第三元数据。
可选的,还包括:
若所述第三元数据的第四参数的值为真,则基于所述读请求的起始地址、数据长度,获取所述读请求对应区块;
从所述读请求对应区块的物理空间中读取数据,将所述数据保存至所述读请求的数据内容。
可选的,还包括:
若所述第三元数据的第四参数的值为假,则基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理。
可选的,所述基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理,包括:
获取第三元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第三队列,bit位的取值为第二取值的保存为第四队列;
获取所述第三队列对应区块的数据,并将所述第三队列对应区块的数据保存为D1;
设置与所述第四队列对应区块的数据为全零,并将所述第四队列对应区块的数据保存为D2,其中,所述读请求的数据内容由D1与D2交错拼接而成。
可选的,当所述元数据索引表异常丢失时,还包括:
基于所述元数据的元数据头,恢复所述元数据索引表。
本申请还提出一种存储卷的写数据装置,应用程序对所述存储卷存在读写IO,其中所述读写IO至少包括起始地址、数据长度、数据内容,所述存储卷对应的物理空间包含一个或多个区块,其中所述区块是指将所述存储卷按预设容量尺寸划分的多个大小相同的区间,当所述读写IO为写请求时,所述装置包括:
获取模块,用于基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,其中,所述元数据用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态;
所述获取模块,基于所述索引查询预设的元数据索引表,获得与所述索引对应的第一数据指针,其中所述第一数据指针指向一个元数据;
处理模块,用于若所述第一数据指针为空,则将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间。
可选的,所述元数据保存在非易失性缓存中,所述元数据至少包括元数据数据头、元数据数据内容,其中,所述元数据数据头用于记录所述元数据的基本信息,所述元数据数据内容用于指示所述元数据对应物理空间包含的一个或多个区块的数据写入状态。
可选的,所述元数据数据内容基于一个或多个bit位,其中,每个bit位对应标识一个区块的数据写入状态,所述bit位的可能取值包括:第一取值或第二取值,默认值为第二取值。
可选的,所述元数据数据头至少包括第一参数、第二参数、第三参数、第四参数、第五参数,其中,所述第一参数用于指示所述元数据在所述元数据索引表中的位置,所述第二参数用于指示所述元数据对应的一个或多个区块的起始区块号,所述第三参数用于指示所述元数据对应的区块的个数,所述第四参数用于指示所述元数据数据内容是否都为第一取值,若是则所述第四参数的值为真,否则所述第四参数的值为假,所述第五参数用于指示所述元数据数据内容的校验。
可选的,还包括:
所述获取模块进一步,若所述第一数据指针不为空,则获取所述第一数据指针指向的第一元数据。
可选的,还包括:
所述处理模块进一步,若所述第一元数据的第四参数的值为真,则将所述写请求的数据内容写到对应的物理空间。
可选的,还包括:
所述处理模块进一步,若所述第一元数据的第四参数的值为假,则基于所述写请求对应的第一元数据的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间。
可选的,所述基于所述写请求对应的第一元数据的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间,包括:
所述获取模块进一步,获取第一元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第一队列,bit位的取值为第二取值的保存为第二队列;
所述处理模块进一步,将所述写请求中与所述第一队列对应区块的数据内容写到对应的物理空间;
所述处理模块进一步,将所述写请求中与所述第二队列对应区块执行对齐,并将对齐后的所述写请求中与所述第二队列对应区块的数据内容写到对应的物理空间。
可选的,所述将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间,所述处理模块进一步,包括:
检查所述写请求对应的物理空间是否区块对齐;
若不对齐,则将所述写请求补齐区块,得到补齐后的写请求,其中所述补齐后的写请求的被补齐区块对应的数据内容为全零;
基于所述补齐后的写请求的起始地址、数据长度,将所述补齐后的写请求的数据内容写到对应的物理空间。
可选的,基于所述补齐后的写请求的起始地址、数据长度,所述处理模块进一步,还包括:
在所述元数据索引表中,创建与所述补齐后的写请求对应第二元数据及指向所述第二元数据的第二数据指针;
设置所述第二数据指针指向的第二元数据的元数据数据头的第一参数、第二参数、第三参数、第四参数;
设置所述第二数据指针指向的第二元数据的元数据数据内容对应的一个或多个bit位的取值为第一取值。
可选的,当所述IO为读请求时,还包括:
所述获取模块进一步,基于所述读请求的起始地址、数据长度,计算与所述读请求对应的元数据的索引;
所述获取模块进一步,基于所述索引查询所述元数据索引表,获得与所述索引对应的第三数据指针,其中所述第三数据指针指向一个元数据;
所述处理模块进一步,若所述第三数据指针为空,则将所述读请求的数据内容设置为全零。
可选的,还包括:
所述获取模块进一步,若所述第三数据指针不为空,则获取所述第三数据指针指向的第三元数据。
可选的,还包括:
所述获取模块进一步,若所述第三元数据的第四参数的值为真,则基于所述读请求的起始地址、数据长度,获取所述读请求对应区块;
所述处理模块进一步,从所述读请求对应区块的物理空间中读取数据,将所述数据保存至所述读请求的数据内容。
可选的,还包括:
所述处理模块进一步,若所述第三元数据的第四参数的值为假,则基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理。
可选的,所述基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理,包括:
所述获取模块进一步,获取第三元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第三队列,bit位的取值为第二取值的保存为第四队列;
所述处理模块进一步,获取所述第三队列对应区块的数据,并将所述第三队列对应区块的数据保存为D1;
所述处理模块进一步,设置与所述第四队列对应区块的数据为全零,并将所述第四队列对应区块的数据保存为D2,其中,所述读请求的数据内容由D1与D2交错拼接而成。
可选的,当所述元数据索引表异常丢失时,还包括:
恢复模块,用于基于所述元数据的元数据头,恢复所述元数据索引表。
本申请还提供一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述的方法。
本申请还提供一种机器可读存储介质,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述方法。
通过以上实施例,应用程序对所述存储卷存在读写IO,当所述读写IO为写请求时,基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,其中,所述元数据用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态;基于所述索引查询预设的元数据索引表,获得与所述索引对应的第一数据指针,其中所述第一数据指针指向一个元数据;若所述第一数据指针为空,则将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间,实现了灵活地依据特定元数据进行数据快速读写,并大幅提高了存储性能。
附图说明
图1是一示例性实施例提供的一种存储卷的写数据方法的流程图。
图2是一示例性实施例提供的一种存储卷的读数据方法的流程图。
图3是一示例性实施例提供的一种存储卷的写数据装置的框图。
图4是一示例性实施例提供的一种电子设备的硬件结构图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了使本技术领域的人员更好地理解本申请实施例中的技术方案,下面先对本申请实施例涉及的存储卷的写数据的相关技术,进行简要说明。
在一些场景下,基于上述背景技术中所描述的应用程序,若该应用程序对存储卷的物理空间从未进行数据写入,通常现有技术方案利用存储卷的后台写零功能,实现上述应用程序读取存储卷中未写数据的物理空间时,返回数据为全零,其中所述存储卷的后台写零功能是指存储卷关联给上述应用程序后,在应用程序触发从上述存储卷中的未写数据的物理空间中读数据之前,存储设备自动在后台将上述存储卷中的未写数据的物理空间的数据内容全部写为零,具体为:构造N个写请求,其中每个写请求都包含全零数据以及对应全零数据的长度,依据待写入全零数据的物理空间的容量大小来确定N值;依据上述N个写请求,实现存储卷的后台写零功能。由上可见,现有技术方案存在的缺点为,若存储卷中未写数据的物理空间的容量较大,则需要耗费较长时间才能完成存储卷的后台写零;此外,在存储卷后台写零过程中,会消耗较多的资源,导致存储IO流量压力增大,可能导致其它应用程序的存储IO延时异常升高。
基于此,本申请提出一种存储卷的写数据方案,该方案应用于存储设备,应用程序对存储设备管理的存储卷存在读写IO,其中所述读写IO至少包括起始地址、数据长度、数据内容,所述存储卷对应的物理空间包含一个或多个区块,其中所述区块是指将所述存储卷按预设容量尺寸划分的多个大小相同的区间,当所述读写IO为写请求时,所述方案包括:基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,其中,所述元数据用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态;基于所述索引查询预设的元数据索引表,获得与所述索引对应的第一数据指针,其中所述第一数据指针指向一个元数据;若所述第一数据指针为空,则将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间,实现了灵活地依据特定元数据进行数据快速读写,并大幅提高了存储性能。
下面通过具体实施例并结合具体的应用场景对本申请进行描述。
请参考图1,图1是本申请一实施例1提供的一种存储卷的写数据方法,应用于存储设备;应用程序对存储设备所管理的存储卷存在读写IO,其中所述读写IO至少包括起始地址、数据长度、数据内容,所述存储卷对应的物理空间包含一个或多个区块,其中所述区块是指将所述存储卷按预设容量尺寸划分的多个大小相同的区间,当所述读写IO为写请求时,上述方法执行以下步骤:
步骤102、基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,其中,所述元数据用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态。
本申请提到的应用程序是指类似上述背景技术中所描述的应用程序,比如:VMware的虚拟化新特性VVols应用,具体应用程序在本申请中不作限定。本申请提到的存储卷是指与上述应用程序关联,可以被上述应用程序访问并被存储设备管理的LUN(LogicalUnit Number,逻辑单元号),所述LUN是指存储设备对外提供存储业务的一种实体。所述存储卷也即所述LUN,对应的物理空间包含一个或多个区块,其中所述区块是指将所述存储卷按预设容量尺寸划分的多个大小相同的区间,比如:区块大小为512KB(Kilobyte,千字节),存储卷对应物理空间的容量为100GB(Gigabyte,十亿字节),则存储卷对应由204800个区块组成。上述应用程序对存储设备所管理的存储卷存在读写IO,本申请提到的读写IO具体可以是写请求,也可以是读请求,其中所述读写IO至少包括起始地址、数据长度、数据内容,其中所述起始地址用于标记上述应用程序的某个写请求将要所述数据内容写入到所述存储卷对应物理空间的存储位置,所述数据长度为所述数据内容的长度。
本申请提到的元数据是指用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态的特定数据。元数据保存在非易失性缓存中,元数据至少包括元数据数据头、元数据数据内容,其中,所述元数据数据头用于记录所述元数据的基本信息,所述元数据数据内容用于指示所述元数据对应物理空间包含的一个或多个区块的数据写入状态。所述元数据数据头至少包括第一参数、第二参数、第三参数、第四参数、第五参数,其中,所述第一参数用于指示所述元数据在所述元数据索引表中的位置,所述第二参数用于指示所述元数据对应的一个或多个区块的起始区块号,所述第三参数用于指示所述元数据对应的区块的个数,其中,若存在多个所述元数据,则每个所述元数据对应的区块个数也即每个所述元数据的元数据头第三参数,可以是相同的,也可以是不同的,所述第四参数用于指示所述元数据数据内容是否都为第一取值,若是则所述第四参数的值为真,否则所述第四参数的值为假,所述第五参数用于指示所述元数据数据内容的校验。
具体地,以上述存储卷100GB对应由204800个区块构成继续举例,每个区块对应的数据写入状态由元数据的元数据数据内容基于一个bit位指示,其中,每个bit位对应标识一个区块的数据写入状态,所述bit位的可能取值包括:第一取值或第二取值,比如:上述第一取值为1,指示所述bit位对应区块“已写过数据”状态,上述第二取值为0,指示所述bit位对应区块“未写过数据”状态。上述一个区块的数据写入状态可能是“已写过数据”状态,也可能是“未写过数据”状态,所述bit位对应的区块默认为“未写过数据”状态,这里的数据写入是指本申请背景中所提及类型的应用程序,并非普通的应用程序。
具体地,以上述例子继续举例,比如:一个元数据最多对应100个区块,多个元数据中每个元数据对应的区块个数(对应每个元数据的第三参数)都为100为例,则元数据索引表存在2048条元数据,每个元数据的元数据数据头的第一参数用于指示所述元数据在所述元数据索引表中的位置,例如,上述第一参数可以是1至2048之间自然数,也可以基于一定预设规则计算获得的不连续的64位的整数,上述第一参数的具体编号规则,在本申请中不作具体限定。每个元数据的元数据数据头的第二参数,用于指示所述元数据对应的一个或多个区块的起始区块号,比如:第1条元数据对应区块1至区块100,一共100个区块,则上述第二参数则为1,即起始区块为区块1,上述第三参数则为100,即区块个数为100。第1条元数据的元数据数据内容由100个bit位组成,其中每个bit位用于指示第1条元数据的元数据数据头中对应100个区块中的每个区块的数据写入状态。可选的,在示出的一种实施方式中,若上述100个bit位都为1,即第1条元数据的元数据数据头对应的100个区块的数据的写入状态为“已写过数据”(第一取值),则第1条元数据的元数据数据头的第四参数的值为真;可选的,在示出的一种实施方式中,若上述100个bit位至少有一个bit位的值不为1,则第1条元数据的元数据数据头的第四参数的值为假,上述示例仅为可能情况,实际存在多种情况,具体不作赘述和限定。上述第五参数用于指示所述元数据数据内容的校验,在示出的一种实施方式中,比如,基于上述100个bit位的值的异或后获得校验值,则上述第五参数的值为所述校验值,上述校验过程仅为示例,实际可采用其它校验算法,比如:CRC(CyclicalRedundancy Check,循环冗余码校验)等,具体校验算法不作赘述和限定。此外,上述一个或多个元数据都保存在非易失性缓存中,这里的非易失性缓存包括且不限于闪存(FlashMemory)等。
具体地,以上述例子继续举例,存储设备基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,比如:所述写请求的起始地址为区块1的起始地址,数据长度为10MB,则根据预设算法计算所述写请求对应的元数据的索引Index,比如:预设算法为Index为所述写请求的起始地址对应的区块1的编号1与所述写请求的数据长度所包含的单个区块个数20之和,即Index=21。上述索引计算过程仅为示例,Index可能不为自然数,需要针对Index进行取整操作,实际还可能采用其它算法,不作具体限定。
步骤104、基于所述索引查询预设的元数据索引表,获得与所述索引对应的第一数据指针,其中所述第一数据指针指向一个元数据。
具体地,以上述例子继续举例,比如:存储设备以索引Index为21查询预设的元数据索引表,所述元数据索引表请参考表1所示例:
表1
如上述表所示,元数据1即第一条元数据,P1为所述元数据1的数据指针,21为P1对应的索引。在一种优选的实施方式中,这里的元数据索引表保存在易失性的缓存中,比如:所述易失性的缓存为内存,方便存储设备快速读写。存储设备获得与索引Index为21的第一数据指针P1,其中,一种示例的可能实施方式为数据指针P1指向元数据1,即第一数据指针P1和元数据1的元数据头的第一参数相同,另一种示例的可能实施方式为数据指针P1为空NULL。由于所述元数据索引表保存的缓存为易失性,则当存储设备发生断电或重启等情况时,会导致所述元数据索引表异常丢失;然而如上述步骤102中所述,一个或多个元数据保存在非易失性的缓存中,则存储设备基于上述过程,可以遍历每个元数据,从所述每个元数据中获取的元数据数据头的第一参数,其中,所述第一参数用于指示所述元数据在所述元数据索引表中的位置,恢复所述元数据索引表。
步骤106、若所述第一数据指针为空,则将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间。
具体地,以上述例子继续举例,比如:存储设备检查第一数据指针P1,若P1为空,即P1为NULL,也即P1不指向任何一个元数据,则存储设备将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间,执行以下步骤:
a)存储设备检查所述写请求对应的物理空间是否区块对齐。
若对齐,则存储设备继续执行步骤b,具体请参考步骤b描述;若不对齐,则将所述写请求补齐区块,得到补齐后的写请求,其中所述补齐后的写请求的被补齐区块对应的数据内容为全零。
具体地,比如:如步骤102所述的一个写请求T的数据内容为D1,在所述存储卷的物理空间的区块20至区块30写入数据。上述区块对齐是指D1的数据容量是否为一个区块容量的整数倍,比如:一个区块大小为512KB,D1的数据容量为5632KB,则D1的数据容量刚好完整占用11个区块,即区块对齐。再比如:一个区块大小为512KB,D1的数据容量为5121KB,则D1的数据容量完整占用10个区块,第11个区块仅占用了1KB,还有511KB空间未占用,即区块不对齐。若写请求T的数据内容D1区块对齐,即D1的数据容量刚好完整占用11个区块,则存储设备执行如下步骤b,具体过程请参见步骤b描述;若写请求T的数据内容D1区块不对齐,比如:D1的数据容量为5121KB,则D1的数据容量完整占用10个区块,第11个区块仅占用了1KB,还有511KB空间未占用,则存储设备将上述第11个区块中剩余的511KB空间补齐设置其对应数据内容为全零。
b)基于所述补齐后的写请求的起始地址、数据长度,将所述补齐后的写请求的数据内容写到对应的物理空间。
具体地,以上述例子中不对齐情况,继续举例,比如:基于所述补齐后的写请求的起始地址、数据长度,比如:存储设备将所述补齐后的写请求T的数据内容,即D1和511KB全零数据,所述补齐后的写请求T的数据长度为完整11个区块的长度,即为5632KB,写到所述生产卷对应包含的区块20至区块30一共11个完整区块对应的物理空间中。若如上述步骤a所述,所述的写请求T是对齐的情况,即D1的数据容量刚好完整占用11个区块,则存储设备直接将写请求T的数据内容,即D1,写到所述生产卷对应包含的区块20至区块30一共11个完整区块对应的物理空间中。
c)基于所述补齐后的写请求,判断是否需要创建第二数据指针及对应第二元数据。
这里的补齐后的写请求是包括如上述步骤a或步骤b所述两种情况,即所述的写请求T是对齐的情况或所述的写请求T是不对齐但已被补齐的情况。基于所述补齐后的写请求的起始地址、数据长度,存储设备判断是否需要创建创建新的元数据,以上述例子继续举例,在一种示例的可能实施方式A中,写请求T的数据内容对应对应包含的区块20至区块30,如上述步骤102所述元数据1已存在并且对应区块1至区块100,则存储设备不需要创建第二数据指针及对应第二元数据。在另一种示例的可能实施方式B中,比如:写请求T的数据内容对应对应包含的区块101至区块130,存储设备需要创建第二数据指针及对应第二元数据,执行以下步骤:
c1)在所述元数据索引表中,创建与所述补齐后的写请求对应第二元数据及指向所述第二元数据的第二数据指针。
具体地,比如:存储设备创建与所述补齐后的写请求对应元数据2及指向元数据2的数据指针P2,并基于数据指针P2,在易失性的缓存中创建对应的元数据索引记录,所述元数据索引表请参考表2所示例:
表2
如上述表2所示,元数据1即第一条元数据,P1为所述元数据1的数据指针,21为P1对应的索引;元数据2即新创建的第二条元数据,P2为所述元数据2的数据指针,121为P2对应的索引。
c2)设置所述第二数据指针指向的第二元数据的元数据数据头的第一参数、第二参数、第三参数、第四参数。
具体地,以上述例子继续举例,存储设备设置P2指向的元数据2的元数据数据头的多个参数,比如:类似步骤104中所述,第二数据指针P2和第二条元数据的元数据头的第一参数相同,即设置元数据数据头的第一参数为121;设置第二条元数据的元数据头的第二参数为20,即元数据2对应的多个区块的起始区块号为20;设置第二条元数据的元数据头的第三参数为11,即元数据2对应区块数为11个;设置第二条元数据的元数据头的第四参数的值为真,即元数据2的数据内容对应的11个区块的数据的写入状态为“已写过数据”(第一取值)。
c3)设置所述第二数据指针指向的第二元数据的元数据数据内容对应的一个或多个bit位的取值为第一取值。
具体地,以上述例子继续举例,存储设备设置数据2的数据内容,即设置对应11个区块的11个bit位的每个bit位的取值为1(第一取值),用于指示对应区块20至区块30,一共11个区块的数据写入状态都为“已写过数据”(第一取值)。此外,如步骤102中所述,存储设备还基于元数据2的数据内容,按预设校验算法获得校验值,所述校验值作为元数据2的元数据数据头的第五参数的值,具体过程不再赘述。
至此,完成图1所示的流程,通过图1所示的流程可以看出,存储设备获取应用程序对所述存储卷的读写IO,当所述读写IO为写请求时,基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,其中,所述元数据用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态;基于所述索引查询预设的元数据索引表,获得与所述索引对应的第一数据指针,其中所述第一数据指针指向一个元数据;若所述第一数据指针为空,则将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间。
应用本申请实施例,通过获取类似上述背景技术中所描述的应用程序对存储卷的写请求,实现了灵活地依据特定元数据进行数据快速写入,并大幅提高了存储性能。
可选的,本申请还提供的另一种存储卷的写数据方法的实施例2,对应在上述存储卷的写数据方法的实施例1中如上述步骤106描述的另一种可能情况。请参考实施例1中步骤106的描述,存储设备检查第一数据指针P1,在本实施例2中,若所述第一数据指针不为空,则存储设备获取所述第一数据指针指向的第一元数据,也即元数据1;检查元数据1的第四参数的值是否为真,若是,则将所述写请求的数据内容写到对应的物理空间,具体写入过程类似实施例1中步骤106所述的数据写入过程,不再赘述。
存储设备检查元数据1的第四参数的值不为真,即元数据1的第四参数的值为假,则存储设备基于所述写请求对应的元数据1的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间,上述方法执行以下步骤:获取元数据1的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第一队列,bit位的取值为第二取值的保存为第二队列;将所述写请求中与所述第一队列对应区块的数据内容写到对应的物理空间;将所述写请求中与所述第二队列对应区块执行对齐,并将对齐后的所述写请求中与所述第二队列对应区块的数据内容写到对应的物理空间。
具体地,比如:元数据1对应区块1至区块100,元数据1的元数据数据内容为100个bit位,其中,第1至第99个bit位的取值都为1,即上述99个区块数据写入状态为“已写过数据”(第一取值),第100个bit位的取值为0,即上述第100个区块数据写入状态为“未写过数据”(第二取值),存储设备获取的一个写请求为在所述存储卷的物理空间的区块1至区块100写入数据。基于上述背景下,存储设备获取元数据1的元数据数据内容的每个bit位的取值,将bit位的取值为1(第一取值)的保存为第一队列,bit位的取值为0(第二取值)保存为第二队列;存储设备将写请求中与所述第一队列对应区块1至区块99的数据内容写到对应的物理空间;将所述写请求中与所述第二队列对应区块100执行对齐,并将对齐后的所述写请求中与所述第二队列对应区块的数据内容写到对应的物理空间,所述对齐过程类似实施例1中步骤106中步骤a所述过程,不再赘述。上述过程仅为示例的一种可能,实际可能存在多种可能,比如:在示例的一种可能实施方式中,bit位的取值为1(第一取值)的对应为第一队列的对应区块和bit位的取值为0(第二取值)对应为第二队列的对应区块是交错相间的,则存储设备在实际进行数据写入过程中,也根据对应区块的编号顺序并结合每个区块对应的数据写入状态(即bit位的取值)对应交错相间写数据过程,所述写数据过程可以执行类似实施例1中步骤106中步骤所述过程,再比如:一个写请求对应要写数据到区块1至区块3,合计3个区块,其中区块1对应第一bit位的值为1,区块2对应第二bit位的值为0,区块3对应第三bit位的值为1,则存储设备将写请求中与区块1对应的数据内容写入到区块1对应的物理空间;将针对写请求中与区块2对应的数据内容,先执行对齐和数据补零,再写入到区块2对应的物理空间,具体过程请参见上述步骤106中对齐和数据补零的示例,具体不再赘述;存储设备将写请求中与区块3对应的数据内容写入到区块3对应的物理空间。
应用本申请实施例,通过获取类似上述背景技术中所描述的应用程序对存储卷的写请求,实现了灵活地依据特定元数据进行数据快速写入,并大幅提高了存储性能。
可选的,本申请还提供的一种存储卷的读数据方法的实施例,基于上述存储卷的写数据的多个实施例的过程,多个写请求的数据内容已被写到所述存储卷后,当所述IO为读请求时,存储设备执行一种存储卷的读数据方法的流程,如图2所示例,执行如下步骤:
步骤202、基于所述读请求的起始地址、数据长度,计算与所述读请求对应的元数据的索引。
具体地,比如:所述读请求的起始地址为区块201的起始地址,数据长度为10MB,则根据预设算法计算所述读请求对应的元数据的索引Index,比如:预设算法为Index为所述读请求的起始地址对应的区块201的编号201与所述读请求的数据长度所包含的单个区块个数20之和,即Index=221。
步骤204、基于所述索引查询所述元数据索引表,获得与所述索引对应的第三数据指针,其中所述第三数据指针指向一个元数据。
具体地,以上述例子继续举例,比如:存储设备以索引Index为221查询预设的元数据索引表,所述元数据索引表请参考表3所示例:
表3
如上述表3所示,元数据1即第一条元数据,P1为所述元数据1的数据指针,21为P1对应的索引;元数据2即新创建的第二条元数据,P2为所述元数据2的数据指针,121为P2对应的索引;元数据3即第三条元数据,P3为所述元数据3的数据指针,221为P3对应的索引。存储设备获得与索引Index为221的第三数据指针P3,其中,一种示例的可能实施方式为数据指针P3指向元数据3,即第三数据指针P3和元数据3的元数据头的第一参数相同,另一种示例的可能实施方式为数据指针P3为空NULL。
步骤206、若所述第三数据指针为空,则将所述读请求的数据内容设置为全零。
具体地,以上述例子继续举例,在示出的一种实施方式中,存储设备检查第三数据指针P3,若P3为空,即P3为NULL,也即P3不指向任何一个元数据,则存储设备将所述读请求的数据内容设置为全零,用于后续将上述全零数据的数据内容返回给所述读请求对应的应用程序。
可选的,作为上述步骤206所述的相反的情况,在示出的另一种实施方式中,存储设备检查第三数据指针P3,若所述第三数据指针不为空,则存储设备获取所述第三数据指针指向的第三元数据。若所述第三元数据的第四参数的值为真,则基于所述读请求的起始地址、数据长度,获取所述读请求对应区块;从所述读请求对应区块的物理空间中读取数据,将所述数据保存至所述读请求的数据内容;若所述第三元数据的第四参数的值为假,则存储设备基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理,执行如下步骤:获取第三元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第三队列,bit位的取值为第二取值的保存为第四队列;获取所述第三队列对应区块的数据,并将所述第三队列对应区块的数据保存为D1;设置与所述第四队列对应区块的数据为全零,并将所述第四队列对应区块的数据保存为D2,其中,所述读请求的数据内容由D1与D2交错拼接而成。
具体地,在一些场景下,比如:元数据3对应区块201至区块220,元数据3的元数据数据内容为20个bit位,其中,第1至第19个bit位的取值都为1,即上述19个区块数据写入状态为“已写过数据”(第一取值),第20个bit位的取值为0,即上述第20个区块数据写入状态为“未写过数据”(第二取值),存储设备获取的一个读请求为需要从所述存储卷的物理空间的区块201至区块220读取数据。
基于上述场景,在示例的一种可能的实施方式中,存储设备检查第三数据指针P3,若所述第三数据指针不为空,则存储设备获取所述第三数据指针指向的元数据3,检查元数据3的第四参数的值是否为真,若是,即元数据3的第四参数的值为真,则将基于读请求的起始地址,即对应区块201的地址、数据长度即20个区块的容量尺寸10MB,获取读请求对应区块,即所述对应区块为区块201至区块220;从所述读请求对应区块201至区块220的物理空间中读取数据,将所述数据保存至读请求的数据内容中,用于后续将上述读请求的数据内容返回给所述读请求对应的应用程序。
基于上述场景,在示例的另一种可能的实施方式中,存储设备检查第三数据指针P3,若所述第三数据指针不为空,则存储设备获取所述第三数据指针指向的元数据3,检查元数据3的第四参数的值是否为真,若不是,即元数据3的第四参数的值为假,则存储设备获取元数据3的元数据数据内容的每个bit位的取值,将bit位的取值为1(第一取值)的保存为第三队列,bit位的取值为0(第二取值)保存为第四队列;存储设备从所述读请求与所述第三队列对应区块1至区块19的物理空间中读取数据,将所述数据保存至读请求中区块对应的数据内容D1中,也即D1对应为已读取的区块1至区块19中的数据;存储设备设置与所述第四队列对应区块20的数据为全零,并将所述第四队列对应区块的数据保存为D2,其中,所述读请求的数据内容由D1与D2交错拼接而成。
具体地,比如:一个读请求对应从区块1至区块3读取数据,合计3个区块,其中区块1对应第一bit位的值为1,区块2对应第二bit位的值为0,区块3对应第三bit位的值为1,则存储设备从读请求中与区块1对应的物理空间读取数据,并将所述已都读取的数据保存为读请求的对应的数据内容DB1。存储设备将针对读请求中与区块2对应的数据,先设置区块2对应数据为全零,再所述已都读取的全零数据保存为读请求的对应的数据内容DB2;存储设备从读请求中与区块1对应的物理空间读取数据,并将所述已都读取的数据保存为读请求的对应的数据内容DB3。基于上述过程,读请求的对应3个区块容量的数据内容为DB1、DB2(全零数据)、DB3交错拼接而成。这里的交错拼接就是指如上述过程所述。存储设备根据获取元数据3的元数据数据内容的每个bit位的取值,去灵活获取所述读请求待读取的数据内容,并将所述数据内容依据对应区块次序保存在一起,即统一存在所述读请求的数据内容中,用于后续将上述读请求的数据内容返回给所述读请求对应的应用程序。
应用本申请上述多个实施例,通过获取类似上述背景技术中所描述的应用程序对存储卷的写请求,实现了灵活地依据特定元数据进行数据快速读写,并大幅提高了存储性能。
图3是本申请一示例性实施例提供的一种存储卷的写数据装置的框图。与上述方法实施例相对应,本申请还提供了一种存储卷的写数据装置的实施例,应用程序对所述存储卷存在读写IO,其中所述读写IO至少包括起始地址、数据长度、数据内容,所述存储卷对应的物理空间包含一个或多个区块,其中所述区块是指将所述存储卷按预设容量尺寸划分的多个大小相同的区间,请参考图3所示例的一种存储卷的写数据装置30,当所述读写IO为写请求时,所述装置包括:
获取模块301,用于基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,其中,所述元数据用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态;
所述获取模块301,基于所述索引查询预设的元数据索引表,获得与所述索引对应的第一数据指针,其中所述第一数据指针指向一个元数据;
处理模块302,用于若所述第一数据指针为空,则将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间。
在本实施例中,所述元数据保存在非易失性缓存中,所述元数据至少包括元数据数据头、元数据数据内容,其中,所述元数据数据头用于记录所述元数据的基本信息,所述元数据数据内容用于指示所述元数据对应物理空间包含的一个或多个区块的数据写入状态。
在本实施例中,所述元数据数据内容基于一个或多个bit位,其中,每个bit位对应标识一个区块的数据写入状态,所述bit位的可能取值包括:第一取值或第二取值,默认值为第二取值。
在本实施例中,所述元数据数据头至少包括第一参数、第二参数、第三参数、第四参数、第五参数,其中,所述第一参数用于指示所述元数据在所述元数据索引表中的位置,所述第二参数用于指示所述元数据对应的一个或多个区块的起始区块号,所述第三参数用于指示所述元数据对应的区块的个数,所述第四参数用于指示所述元数据数据内容是否都为第一取值,若是则所述第四参数的值为真,否则所述第四参数的值为假,所述第五参数用于指示所述元数据数据内容的校验。
在本实施例中,还包括:
所述获取模块301进一步,若所述第一数据指针不为空,则获取所述第一数据指针指向的第一元数据。
在本实施例中,还包括:
所述处理模块302进一步,若所述第一元数据的第四参数的值为真,则将所述写请求的数据内容写到对应的物理空间。
在本实施例中,还包括:
所述处理模块302进一步,若所述第一元数据的第四参数的值为假,则基于所述写请求对应的第一元数据的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间。
在本实施例中,所述基于所述写请求对应的第一元数据的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间,包括:
所述获取模块301进一步,获取第一元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第一队列,bit位的取值为第二取值的保存为第二队列;
所述处理模块302进一步,将所述写请求中与所述第一队列对应区块的数据内容写到对应的物理空间;
所述处理模块302进一步,将所述写请求中与所述第二队列对应区块执行对齐,并将对齐后的所述写请求中与所述第二队列对应区块的数据内容写到对应的物理空间。
在本实施例中,所述将所述写请求执行对齐区块,并将对齐后的写请求的数据内容写到对应的物理空间,所述处理模块302进一步,包括:
检查所述写请求对应的物理空间是否区块对齐;
若不对齐,则将所述写请求补齐区块,得到补齐后的写请求,其中所述补齐后的写请求的被补齐区块对应的数据内容为全零;
基于所述补齐后的写请求的起始地址、数据长度,将所述补齐后的写请求的数据内容写到对应的物理空间。
在本实施例中,基于所述补齐后的写请求的起始地址、数据长度,所述处理模块302进一步,还包括:
在所述元数据索引表中,创建与所述补齐后的写请求对应第二元数据及指向所述第二元数据的第二数据指针;
设置所述第二数据指针指向的第二元数据的元数据数据头的第一参数、第二参数、第三参数、第四参数;
设置所述第二数据指针指向的第二元数据的元数据数据内容对应的一个或多个bit位的取值为第一取值。
在本实施例中,当所述IO为读请求时,还包括:
所述获取模块301进一步,基于所述读请求的起始地址、数据长度,计算与所述读请求对应的元数据的索引;
所述获取模块301进一步,基于所述索引查询所述元数据索引表,获得与所述索引对应的第三数据指针,其中所述第三数据指针指向一个元数据;
所述处理模块302进一步,若所述第三数据指针为空,则将所述读请求的数据内容设置为全零。
在本实施例中,还包括:
所述获取模块301进一步,若所述第三数据指针不为空,则获取所述第三数据指针指向的第三元数据。
在本实施例中,还包括:
所述获取模块301进一步,若所述第三元数据的第四参数的值为真,则基于所述读请求的起始地址、数据长度,获取所述读请求对应区块;
所述处理模块302进一步,从所述读请求对应区块的物理空间中读取数据,将所述数据保存至所述读请求的数据内容。
在本实施例中,还包括:
所述处理模块302进一步,若所述第三元数据的第四参数的值为假,则基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理。
在本实施例中,所述基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理,包括:
所述获取模块301进一步,获取第三元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第三队列,bit位的取值为第二取值的保存为第四队列;
所述处理模块302进一步,获取所述第三队列对应区块的数据,并将所述第三队列对应区块的数据保存为D1;
所述处理模块302进一步,设置与所述第四队列对应区块的数据为全零,并将所述第四队列对应区块的数据保存为D2,其中,所述读请求的数据内容由D1与D2交错拼接而成。
在本实施例中,当所述元数据索引表异常丢失时,还包括:
恢复模块303,用于基于所述元数据的元数据头,恢复所述元数据索引表。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本申请的存储卷的写数据装置的实施例可以应用在图4所示的电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将机器可读存储介质中对应的计算机程序指令读取后运行形成的机器可执行指令。从硬件层面而言,如图4所示,为本申请的存储卷写数据装置所在电子设备的一种硬件结构图,除了图4所示的处理器、通信接口、总线以及机器可读存储介质之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
对应地,本申请实施例还提供了图3所示装置的一种电子设备的硬件结构,请参见图4,图4为本申请实施例提供的一种电子设备的硬件结构示意图。该设备包含:通信接口401、处理器402、机器可读存储介质403和总线404;其中,通信接口401、处理器402、机器可读存储介质403通过总线404完成相互间的通信。其中,通信接口401,用于进行网络通信。处理器402可以是一个中央处理器(CPU),处理器402可以执行机器可读存储介质403中存储的机器可读指令,以实现以上描述的方法。
本文中提到的机器可读存储介质403可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:易失存储器、非易失性存储器或者类似的存储介质。具体地,机器可读存储介质403可以是RAM(Radom Access Memory,随机存取存储器)、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、DVD等),或者类似的存储介质,或者它们的组合。
至此,完成图4所示的硬件结构描述。
此外,本申请实施例还提供了一种包括机器可执行指令的机器可读存储介质,例如图4中的机器可读机器可读存储介质403,所述机器可执行指令可由数据处理装置中的处理器402执行以实现以上描述的数据处理方法。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (32)
1.一种存储卷的写数据方法,其特征在于,应用程序对所述存储卷存在读写IO,其中所述读写IO至少包括起始地址、数据长度、数据内容,所述存储卷对应的物理空间包含一个或多个区块,其中所述区块是指将所述存储卷按预设容量尺寸划分的多个大小相同的区间,当所述读写IO为写请求时,所述方法包括:
基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,其中,所述元数据用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态;
基于所述索引查询预设的元数据索引表,获得与所述索引对应的第一数据指针,其中所述第一数据指针指向一个元数据;
若所述第一数据指针为空,检查所述写请求对应的物理空间是否区块对齐;
若不对齐,则将所述写请求补齐区块,得到补齐后的写请求,其中所述补齐后的写请求的被补齐区块对应的数据内容为预设数据;
基于所述补齐后的写请求的起始地址、数据长度,将所述补齐后的写请求的数据内容写到对应的物理空间。
2.根据权利要求1所述的方法,其特征在于,所述元数据保存在非易失性缓存中,所述元数据至少包括元数据数据头、元数据数据内容,其中,所述元数据数据头用于记录所述元数据的基本信息,所述元数据数据内容用于指示所述元数据对应物理空间包含的一个或多个区块的数据写入状态。
3.根据权利要求2所述的方法,其特征在于,所述元数据数据内容基于一个或多个bit位,其中,每个bit位对应标识一个区块的数据写入状态,所述bit位的可能取值包括:第一取值或第二取值,默认值为第二取值。
4.根据权利要求3所述的方法,其特征在于,所述元数据数据头至少包括第一参数、第二参数、第三参数、第四参数、第五参数,其中,所述第一参数用于指示所述元数据在所述元数据索引表中的位置,所述第二参数用于指示所述元数据对应的一个或多个区块的起始区块号,所述第三参数用于指示所述元数据对应的区块的个数,所述第四参数用于指示所述元数据数据内容是否都为第一取值,若是则所述第四参数的值为真,否则所述第四参数的值为假,所述第五参数用于指示所述元数据数据内容的校验。
5.根据权利要求4所述的方法,其特征在于,还包括:
若所述第一数据指针不为空,则获取所述第一数据指针指向的第一元数据。
6.根据权利要求5所述的方法,其特征在于,还包括:
若所述第一元数据的第四参数的值为真,则将所述写请求的数据内容写到对应的物理空间。
7.根据权利要求5所述的方法,其特征在于,还包括:
若所述第一元数据的第四参数的值为假,则基于所述写请求对应的第一元数据的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间。
8.根据权利要求7所述的方法,其特征在于,所述基于所述写请求对应的第一元数据的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间,包括:
获取第一元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第一队列,bit位的取值为第二取值的保存为第二队列;
将所述写请求中与所述第一队列对应区块的数据内容写到对应的物理空间;
将所述写请求中与所述第二队列对应区块执行对齐,并将对齐后的所述写请求中与所述第二队列对应区块的数据内容写到对应的物理空间。
9.根据权利要求1所述的方法,其特征在于,基于所述补齐后的写请求的起始地址、数据长度,还包括:
在所述元数据索引表中,创建与所述补齐后的写请求对应第二元数据及指向所述第二元数据的第二数据指针;
设置所述第二数据指针指向的第二元数据的元数据数据头的第一参数、第二参数、第三参数、第四参数;
设置所述第二数据指针指向的第二元数据的元数据数据内容对应的一个或多个bit位的取值为第一取值。
10.根据权利要求4所述的方法,其特征在于,当所述IO为读请求时,还包括:
基于所述读请求的起始地址、数据长度,计算与所述读请求对应的元数据的索引;
基于所述索引查询所述元数据索引表,获得与所述索引对应的第三数据指针,其中所述第三数据指针指向一个元数据;
若所述第三数据指针为空,则将所述读请求的数据内容设置为全零。
11.根据权利要求10所述的方法,其特征在于,还包括:
若所述第三数据指针不为空,则获取所述第三数据指针指向的第三元数据。
12.根据权利要求11所述的方法,其特征在于,还包括:
若所述第三元数据的第四参数的值为真,则基于所述读请求的起始地址、数据长度,获取所述读请求对应区块;
从所述读请求对应区块的物理空间中读取数据,将所述数据保存至所述读请求的数据内容。
13.根据权利要求11所述的方法,其特征在于,还包括:
若所述第三元数据的第四参数的值为假,则基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理。
14.根据权利要求13所述的方法,其特征在于,所述基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理,包括:
获取第三元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第三队列,bit位的取值为第二取值的保存为第四队列;
获取所述第三队列对应区块的数据,并将所述第三队列对应区块的数据保存为D1;
设置与所述第四队列对应区块的数据为全零,并将所述第四队列对应区块的数据保存为D2,其中,所述读请求的数据内容由D1与D2交错拼接而成。
15.根据权利要求4所述的方法,其特征在于,当所述元数据索引表异常丢失时,还包括:
基于所述元数据的元数据头,恢复所述元数据索引表。
16.一种存储卷的写数据装置,其特征在于,应用程序对所述存储卷存在读写IO,其中所述读写IO至少包括起始地址、数据长度、数据内容,所述存储卷对应的物理空间包含一个或多个区块,其中所述区块是指将所述存储卷按预设容量尺寸划分的多个大小相同的区间,当所述读写IO为写请求时,所述装置包括:
获取模块,用于基于所述写请求的起始地址、数据长度,计算与所述写请求对应的元数据的索引,其中,所述元数据用于标记所述存储卷对应物理空间包含的一个或多个区块的数据是否为已被写入过数据的状态;
所述获取模块,基于所述索引查询预设的元数据索引表,获得与所述索引对应的第一数据指针,其中所述第一数据指针指向一个元数据;
处理模块,用于若所述第一数据指针为空,检查所述写请求对应的物理空间是否区块对齐;
若不对齐,则将所述写请求补齐区块,得到补齐后的写请求,其中所述补齐后的写请求的被补齐区块对应的数据内容为预设数据;
基于所述补齐后的写请求的起始地址、数据长度,将所述补齐后的写请求的数据内容写到对应的物理空间。
17.根据权利要求16所述的装置,其特征在于,所述元数据保存在非易失性缓存中,所述元数据至少包括元数据数据头、元数据数据内容,其中,所述元数据数据头用于记录所述元数据的基本信息,所述元数据数据内容用于指示所述元数据对应物理空间包含的一个或多个区块的数据写入状态。
18.根据权利要求17所述的装置,其特征在于,所述元数据数据内容基于一个或多个bit位,其中,每个bit位对应标识一个区块的数据写入状态,所述bit位的可能取值包括:第一取值或第二取值,默认值为第二取值。
19.根据权利要求18所述的装置,其特征在于,所述元数据数据头至少包括第一参数、第二参数、第三参数、第四参数、第五参数,其中,所述第一参数用于指示所述元数据在所述元数据索引表中的位置,所述第二参数用于指示所述元数据对应的一个或多个区块的起始区块号,所述第三参数用于指示所述元数据对应的区块的个数,所述第四参数用于指示所述元数据数据内容是否都为第一取值,若是则所述第四参数的值为真,否则所述第四参数的值为假,所述第五参数用于指示所述元数据数据内容的校验。
20.根据权利要求19所述的装置,其特征在于,还包括:
所述获取模块进一步,若所述第一数据指针不为空,则获取所述第一数据指针指向的第一元数据。
21.根据权利要求20所述的装置,其特征在于,还包括:
所述处理模块进一步,若所述第一元数据的第四参数的值为真,则将所述写请求的数据内容写到对应的物理空间。
22.根据权利要求20所述的装置,其特征在于,还包括:
所述处理模块进一步,若所述第一元数据的第四参数的值为假,则基于所述写请求对应的第一元数据的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间。
23.根据权利要求22所述的装置,其特征在于,所述基于所述写请求对应的第一元数据的元数据数据内容的每个bit位的取值,将所述写请求的数据内容写到对应的物理空间,包括:
所述获取模块进一步,获取第一元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第一队列,bit位的取值为第二取值的保存为第二队列;
所述处理模块进一步,将所述写请求中与所述第一队列对应区块的数据内容写到对应的物理空间;
所述处理模块进一步,将所述写请求中与所述第二队列对应区块执行对齐,并将对齐后的所述写请求中与所述第二队列对应区块的数据内容写到对应的物理空间。
24.根据权利要求16所述的装置,其特征在于,基于所述补齐后的写请求的起始地址、数据长度,所述处理模块进一步,还包括:
在所述元数据索引表中,创建与所述补齐后的写请求对应第二元数据及指向所述第二元数据的第二数据指针;
设置所述第二数据指针指向的第二元数据的元数据数据头的第一参数、第二参数、第三参数、第四参数;
设置所述第二数据指针指向的第二元数据的元数据数据内容对应的一个或多个bit位的取值为第一取值。
25.根据权利要求19所述的装置,其特征在于,当所述IO为读请求时,还包括:
所述获取模块进一步,基于所述读请求的起始地址、数据长度,计算与所述读请求对应的元数据的索引;
所述获取模块进一步,基于所述索引查询所述元数据索引表,获得与所述索引对应的第三数据指针,其中所述第三数据指针指向一个元数据;
所述处理模块进一步,若所述第三数据指针为空,则将所述读请求的数据内容设置为全零。
26.根据权利要求25所述的装置,其特征在于,还包括:
所述获取模块进一步,若所述第三数据指针不为空,则获取所述第三数据指针指向的第三元数据。
27.根据权利要求26所述的装置,其特征在于,还包括:
所述获取模块进一步,若所述第三元数据的第四参数的值为真,则基于所述读请求的起始地址、数据长度,获取所述读请求对应区块;
所述处理模块进一步,从所述读请求对应区块的物理空间中读取数据,将所述数据保存至所述读请求的数据内容。
28.根据权利要求26所述的装置,其特征在于,还包括:
所述处理模块进一步,若所述第三元数据的第四参数的值为假,则基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理。
29.根据权利要求28所述的装置,其特征在于,所述基于所述读请求对应的第三元数据的元数据数据内容的每个bit位的取值、所述读请求的起始地址、数据长度,进行对应数据的读取处理,包括:
所述获取模块进一步,获取第三元数据的元数据数据内容的一个或多个bit位的取值,其中,bit位的取值为第一取值的保存为第三队列,bit位的取值为第二取值的保存为第四队列;
所述处理模块进一步,获取所述第三队列对应区块的数据,并将所述第三队列对应区块的数据保存为D1;
所述处理模块进一步,设置与所述第四队列对应区块的数据为全零,并将所述第四队列对应区块的数据保存为D2,其中,所述读请求的数据内容由D1与D2交错拼接而成。
30.根据权利要求19所述的装置,其特征在于,当所述元数据索引表异常丢失时,还包括:
恢复模块,用于基于所述元数据的元数据头,恢复所述元数据索引表。
31.一种电子设备,其特征在于,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行如权利要求1至15任一项所述的方法。
32.一种机器可读存储介质,其特征在于,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现权利要求1至15任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910030255.5A CN111435331B (zh) | 2019-01-14 | 2019-01-14 | 存储卷写数据方法、装置、电子设备及机器可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910030255.5A CN111435331B (zh) | 2019-01-14 | 2019-01-14 | 存储卷写数据方法、装置、电子设备及机器可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111435331A CN111435331A (zh) | 2020-07-21 |
CN111435331B true CN111435331B (zh) | 2022-08-26 |
Family
ID=71580459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910030255.5A Active CN111435331B (zh) | 2019-01-14 | 2019-01-14 | 存储卷写数据方法、装置、电子设备及机器可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111435331B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035379B (zh) * | 2020-09-09 | 2022-06-14 | 浙江大华技术股份有限公司 | 存储空间的使用方法、装置、存储介质以及电子装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814045A (zh) * | 2010-04-22 | 2010-08-25 | 华中科技大学 | 一种用于备份服务的数据组织方法 |
CN101903866A (zh) * | 2007-11-21 | 2010-12-01 | 提琴存储器公司 | 非易失存储介质中的数据存储的方法和系统 |
CN103034562A (zh) * | 2011-07-14 | 2013-04-10 | Lsi公司 | 闪存介质控制器中的元数据处理 |
CN103207883A (zh) * | 2012-01-12 | 2013-07-17 | Lsi公司 | 用于元数据持久存储的方法 |
CN104866435A (zh) * | 2015-06-06 | 2015-08-26 | 成都云祺科技有限公司 | 一种连续数据保护方法 |
CN106062717A (zh) * | 2014-11-06 | 2016-10-26 | 华为技术有限公司 | 一种分布式存储复制系统和方法 |
CN106201923A (zh) * | 2016-07-20 | 2016-12-07 | 杭州宏杉科技有限公司 | 读写数据方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8725934B2 (en) * | 2011-12-22 | 2014-05-13 | Fusion-Io, Inc. | Methods and appratuses for atomic storage operations |
US10817502B2 (en) * | 2010-12-13 | 2020-10-27 | Sandisk Technologies Llc | Persistent memory management |
CN103019953B (zh) * | 2012-12-28 | 2015-06-03 | 华为技术有限公司 | 一种元数据的构建系统及其方法 |
CN103207916B (zh) * | 2013-04-24 | 2017-09-19 | 曙光信息产业(北京)有限公司 | 元数据处理的方法和装置 |
CN108062200B (zh) * | 2016-11-08 | 2019-12-20 | 杭州海康威视数字技术股份有限公司 | 一种磁盘数据读写方法及装置 |
US10831385B2 (en) * | 2017-04-17 | 2020-11-10 | StorageOS Limited | System and method for managing volumes of data in a block storage system |
CN108459826B (zh) * | 2018-02-01 | 2020-12-29 | 杭州宏杉科技股份有限公司 | 一种处理io请求的方法及装置 |
-
2019
- 2019-01-14 CN CN201910030255.5A patent/CN111435331B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101903866A (zh) * | 2007-11-21 | 2010-12-01 | 提琴存储器公司 | 非易失存储介质中的数据存储的方法和系统 |
CN101814045A (zh) * | 2010-04-22 | 2010-08-25 | 华中科技大学 | 一种用于备份服务的数据组织方法 |
CN103034562A (zh) * | 2011-07-14 | 2013-04-10 | Lsi公司 | 闪存介质控制器中的元数据处理 |
CN103207883A (zh) * | 2012-01-12 | 2013-07-17 | Lsi公司 | 用于元数据持久存储的方法 |
CN106062717A (zh) * | 2014-11-06 | 2016-10-26 | 华为技术有限公司 | 一种分布式存储复制系统和方法 |
CN104866435A (zh) * | 2015-06-06 | 2015-08-26 | 成都云祺科技有限公司 | 一种连续数据保护方法 |
CN106201923A (zh) * | 2016-07-20 | 2016-12-07 | 杭州宏杉科技有限公司 | 读写数据方法及装置 |
Non-Patent Citations (1)
Title |
---|
长寿命星载NAND Flash自适应坏块管理策略;王文思等;《计算机科学》;20161015;第43卷(第10期);第193-195+205页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111435331A (zh) | 2020-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10235298B2 (en) | Shared data cache for kernel bypass applications | |
US11461027B2 (en) | Deduplication-aware load balancing in distributed storage systems | |
CN107111452B (zh) | 应用于计算机系统的数据迁移方法和装置、计算机系统 | |
CN107728937B (zh) | 一种使用非易失性内存介质的键值对持久存储方法及系统 | |
US10628200B2 (en) | Base state for thin-provisioned volumes | |
CN109902034B (zh) | 快照创建方法、装置、电子设备及机器可读存储介质 | |
US10747593B2 (en) | Lock free container packing | |
US11061788B2 (en) | Storage management method, electronic device, and computer program product | |
CN108628541B (zh) | 一种文件存储的方法、装置及存储系统 | |
US11556466B2 (en) | Logical-to-physical data structures | |
US20180113810A1 (en) | Method and system for efficient hashing optimized for hardware accelerated caching | |
CN107817946B (zh) | 用于混合存储设备读写数据的方法以及装置 | |
CN109976669B (zh) | 一种边缘存储方法、装置和存储介质 | |
TW201941197A (zh) | 混合式記憶體系統 | |
US10198352B2 (en) | Efficient pointer swizzling for persistent objects | |
CN111666046B (zh) | 一种数据存储方法、装置及设备 | |
CN113360093A (zh) | 内存系统和设备 | |
US20150347320A1 (en) | ENCRYPTION FOR SOLID STATE DRIVES (SSDs) | |
CN110187834B (zh) | 重删副本的数据处理方法、装置、电子设备 | |
CN111435331B (zh) | 存储卷写数据方法、装置、电子设备及机器可读存储介质 | |
CN108304142A (zh) | 一种数据管理方法和装置 | |
CN110955545B (zh) | 一种数据完整性校验方法、系统及相关设备 | |
CN107632779A (zh) | 数据处理方法和装置、服务器 | |
CN115793957A (zh) | 写数据的方法、装置及计算机存储介质 | |
CN111435285B (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 |