CN117687577A - 基于备份的命名空间固态硬盘读优化方法、控制器及系统 - Google Patents

基于备份的命名空间固态硬盘读优化方法、控制器及系统 Download PDF

Info

Publication number
CN117687577A
CN117687577A CN202311819624.1A CN202311819624A CN117687577A CN 117687577 A CN117687577 A CN 117687577A CN 202311819624 A CN202311819624 A CN 202311819624A CN 117687577 A CN117687577 A CN 117687577A
Authority
CN
China
Prior art keywords
read
data
request
partition
backup
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311819624.1A
Other languages
English (en)
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.)
Huazhong University of Science and Technology
Original Assignee
Huazhong University of Science and Technology
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 Huazhong University of Science and Technology filed Critical Huazhong University of Science and Technology
Priority to CN202311819624.1A priority Critical patent/CN117687577A/zh
Publication of CN117687577A publication Critical patent/CN117687577A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了基于备份的命名空间固态硬盘读优化方法、控制器及系统,属于信息存储领域,包括:分区状态设置步骤:在ACTIVE分区数量达到第一阈值,且需写入一个新分区时,检测各ACTIVE分区中空闲空间所占比例,若大于第二阈值,则将其状态置为USABLE_FULL,并将其写指针保持在当前位置;否则,将其状态置为FULL,并将其写指针移动至分区末尾;读热数据备份步骤:对于未备份的读热数据Drh,获取至多N个足以容纳Drh的USABLE_FULL分区并备份Drh;Drh与其备份位于不同芯片;读热数据读取步骤:若所读取的读热数据D'rh所在芯片未被阻塞,则直接读取D'rh;否则,读取D'rh的备份。本发明能够有效缓解命名空间固态硬盘中同一芯片上写请求对读请求的阻塞导致的读性能下降。

Description

基于备份的命名空间固态硬盘读优化方法、控制器及系统
技术领域
本发明属于信息存储领域,更具体地,涉及基于备份的命名空间固态硬盘读优化方法、控制器及系统。
背景技术
由于具有快速的顺序写入速度、低动态随机存取器使用率和无设备端垃圾回收的特性,新兴的非易失存储器标准接口——命名空间存储接口有望替代传统固态硬盘中的块接口。命名空间接口将逻辑地址空间组织成固定大小的分区(Zone)。每个分区都可以执行随机或顺序读取,但必须用写指针顺序写入,该指针指定下一个可写地址。所有逻辑页都不能被覆盖写,除非相应的分区被重置,即擦除该分区中的所有数据,并将写指针更新到该分区的第一个逻辑页地址(Logical Page Address,LPA)。命名空间接口允许主机直接管理分区,从而将设备从许多任务中解放出来。例如,主机端负责空间回收,可以主动将具有相同生存周期的数据放入相同的分区中。
图1展示了命名空间接口固态硬盘的典型物理布局。与传统固态硬盘一样,命名空间固态硬盘具有多个并行通道(Channel),每个通道包含多个闪存芯片(Die)。每个闪存芯片(Die)由多个擦除块(Erase Block)组成,而每个擦除块又有多个与或闪存页(NANDFlashPage),这些闪存页也称为物理页(Physical Page)。擦除块中的闪存页应按顺序写入,在擦除整个块之前不能重写。为充分利用并行性,一个分区通常跨越所有芯片,且依次从各个芯片上选取闪存页。
芯片是最小的并行单元,当两个请求访问同一个芯片时,它们应该被顺序执行。NAND闪存具有非对称读写性能。具体来说,写延迟可能是读延迟的10倍到60倍,并且读写延迟的差距会随着NAND闪存密度的增加而扩大。因此,如果一个读操作访问一个正在进行写操作的芯片,那么读操作必须等待很长时间,这将大大降低读性能,这一现象称为闪存的读写干扰。目前,命名空间固态硬盘多采用高密度NAND闪存颗粒,使得读写延迟的差距更为明显,因此存在严重的读写干扰,读性能大幅下降,然而,目前对于命名空间接口固态硬盘还未有读写干扰的研究工作,该问题亟需解决。
发明内容
针对现有技术的缺陷和改进需求,本发明提供了基于备份的命名空间固态硬盘读优化方法、控制器及系统,其目的在于,基于数据的访问体特性以及命名空间固态硬盘的空间组织特点,充分利用命名空间固态硬盘中被浪费的空闲空间,利用该空闲空间备份读热数据,以缓解命名空间固态硬盘中同一芯片上写请求对读请求的阻塞导致的读性能下降。
为实现上述目的,按照本发明的一个方面,提供了一种基于备份的命名空间固态硬盘读优化方法,包括:
分区状态设置步骤:在命名空间固态硬盘中处于ACTIVE状态的分区数量达到预设第一阈值,且主机试图写入一个新的分区时,检测每一个处于ACTIVE状态的分区中空闲空间所占的比例,若大于预设第二阈值,则将其状态置为USABLE_FULL,并将其写指针保持在当前位置;否则,将其状态置为FULL,并将其写指针移动至分区末尾;
读热数据备份步骤:对于还未进行备份的读热数据Drh,获取至多N个处于USABLE_FULL状态且总的空闲空间足以容纳读热数据Drh的分区,将读热数据Drh备份到所获取的分区的空闲空间中;读热数据Drh与其备份位于不同芯片;
读热数据读取步骤:若所读取的读热数据D'rh所在芯片未被阻塞,则直接读取读热数据D'rh;否则,从读热数据D'rh的备份中读取所需数据;
其中,N为预设正整数。
进一步地,读热数据备份步骤还包括:
获取至多N个处于USABLE_FULL状态且总的空闲空间足以容纳读热数据Drh的分区时,若获取失败,则分配一个新的分区后,将读热数据Drh备份到所分配的分区中;读热数据Drh与其备份位于不同芯片。
进一步地,本发明提供的基于备份的命名空间固态硬盘读优化方法,还包括:处理请求之前,按照如下方式进行请求队列分析与I/O调度:
(S1)若请求队列中存在读请求,则转入(S2);否则,转入步骤(S4);
(S2)初始化插入位置为第一个读请求之后;
(S3)遍历第一个度请求之前的写请求,对于遍历到的每一个写请求,判断是否占用一半以上的芯片,若是,则将其拆分为前、后两个子请求,将拆分得到的后子请求插入当前的插入位置,并将插入位置移动到所插入的子请求之后;
前子请求与原写请求的起始地址相同且占用一半芯片;
(S4)依次获取请求队列中的请求并执行,直至执行完第一个读请求或所有请求执行完成;
(S5)若请求队列中还存在未执行的请求,则转入步骤(S1);否则,请求队列分析与I/O调度结束;
并且,读热数据备份步骤中,用于备份读热数据Drh的芯片序号i与读热数据Drh所在的芯片序号j满足|i-j|=num/2;
其中,num表示芯片总数。
进一步地,步骤(S3)还包括:对于遍历到的每一个写请求,若其所占用的芯片与其前写请求所占用的芯片不同,或者,其所访问的目标分区与其前写请求所访问的目标分区相同,则将第一个读请求及其后插入的后子请求均调度到当前所遍历的写请求之前,并转入步骤(S4);否则,继续遍历下一个写请求。
进一步地,本发明提供的基于备份的命名空间固态硬盘读优化方法,还包括:在主机端与命名空间固态硬盘之间设置持久化内存作为中间层;
并且,步骤(S4)中,若从请求队列中获取的请求为拆分后的写请求,则在执行该写请求的同时,将对应的后子请求所需写入的数据写入中间层;
并且,步骤(S4)中,执行完第一个读请求之后,还包括:将中间层中的数据刷写到命名空间固态硬盘中。
进一步地,步骤(S3)中,在对写请求进行拆分之前,还包括:
判断当前已拆分的写请求所需占用的中间层容量是否超过了预设的第三阈值,若是,则将第一个读请求及其后插入的后子请求均调度到当前所遍历的写请求之前,并转入步骤(S4)。
进一步地,本发明提供的基于备份的命名空间固态硬盘读优化方法,还包括:
当读热数据转换为写热数据时,将新写入的数据写入新的分区,并将旧的数据及其备份置为无效;
当写热数据转换为读热数据时,执行以下步骤:
(T1)判断原写热数据所在分区Z中有效数据的数据量是否低于预设的第四阈值,若是,则将分区Z中的有效数据迁移至新分区后,对分区Z进行垃圾回收,之后转入步骤(T3);否则,转入步骤(T2);
(T2)从分区Z内的有效数据中识别出读热数据,若读热数据占有效数据的比例超过预设的第五阈值,则利用所述读热数据备份步骤对分区Z内的数据均进行备份;否则,利用所述读热数据备份步骤对所述识别出的读热数据进行备份;
(T3)处理完成。
进一步地,本发明提供的基于备份的命名空间固态硬盘读优化方法,还包括:当运行于命名空间固态硬盘的应用为键值存储引擎RocksDB时,使键值存储引擎RocksDB依托数据块的粒度进行合并排序,将实际发生键值对更新的数据块作为参与合并排序的数据块;
在定义数据访问模式时,将数据块参与合并排序的频率作为写频率;
其中,访问模式包括:读热数据和写热数据。
按照本发明的又一个方面,提供了一种命名空间固态硬盘控制器,包括:
计算机可读存储介质,用于存储计算机程序;
以及处理器,用于读取计算机可读存储介质中存储的计算机程序,执行本发明提供的上述基于备份的命名空间固态硬盘读优化方法。
按照本发明的又一个方面,提供了一种存储系统,包括:命名空间固态硬盘,以及本发明提供的上述命名空间固态硬盘控制器。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
(1)本发明对命名空间固态硬盘中分区的状态转换过程进行修改,具体来说,在处于ACTIVE状态的分区数量达到预设限制,且主机试图写入一个新的分区时,并不像现有的状态转换机制那样直接将处于ACTIVE状态的分区状态转换为FULL状态,而是识别出其中具有较多空闲空间的ACTIVE分区,将其标记为一种新的状态USABLE_FULL,并维持其写指针在原本的位置,使得该分区在后续仍可以使用,避免了存储空间的浪费;进一步将读热数据备份到这些空闲空间中的不同芯片上,使得读请求所访问的芯片被写请求占用时,能够利用其副本进行响应,在不造成额外空间开销的情况下,减少了大多数写请求对读请求的阻塞,有效减少读请求的平均响应时间以及读尾延迟,提升命名空间固态硬盘的读性能的效果。
(2)本发明在进行读热数据备份时,允许分配多个USABLE_FULL状态的分区,以确保能够对读热数据进行有效备份,同时对允许分配的USABLE_FULL状态的分区的数量进行了限制,避免了因数据太过分散而影响系统的整体性能。
(3)本发明在进行读热数据备份时,若无法获得所需的USABLE_FULL状态的分区,则直接分配新的空闲分区进行读热数据备份,由此能够保证读热数据的有效备份,提升读性能,研究表明,无法获得所需的USABLE_FULL状态的分区的情况出现的概率极小,因此,额外的空间开销极小,不会对系统性能造成实质性的影响。
(4)本发明通过写请求拆分的方式,使得至多允许一半的芯片被写操作占用,同时,将读热数据备份到与其所在芯片的序号相差num/2的芯片上,这保证了读热数据及其备份所在芯片不会被同时占用,因此读请求总能被响应,进一步减少了读操作被写操作阻塞的情况,提高了系统的读性能。
(5)本发明在主机与命名空间固态硬盘间设置持久化内存作为中间存,用于缓存被拆分的写请求中无法及时写入的数据,由此能够使得写请求得到及时响应,而无需等到读请求被执行完成再响应,在提高度性能的同时,有效补偿了由于请求拆分而可能导致的写吞吐量下降。
(6)本发明提出了读热数据与写热数据之间的转换机制,具体来说,在读热数据转换为写热数据时,将新写入的数据写入新的分区,并将旧的数据及其备份置为无效,在写热数据转换为读热数据时,则使用分区的访问历史记录、分区内的访问分布、以及区域中剩余的有效数据来确定是否应该迁移数据,并预测该区域中的哪些数据需要迁移和备份,由此能够根据数据的访问特性实时更新数据的访问模式,并及时对需要进行备份的读热数据进行备份,保证了系统整体的读写性能。
(7)在命名空间固态硬盘上运行的应用为键值存储引擎RocksDB时,由于RocksDB以排序字符串表(SortedStringTable,SST)为粒度存储数据,难以以页为粒度定义数据访问模式,而以SST为粒度定义访问模式则会由于对数据的写频率统计不准确而导致数据访问模式的定义十分不准确,从而导致性能受限,本发明在在命名空间固态硬盘上运行的应用为键值存储引擎RocksDB时,使键值存储引擎RocksDB依托数据块的粒度进行合并排序,将实际发生键值对更新的数据块作为参与合并排序的数据块,并在定义数据访问模式时,将数据块参与合并排序的频率作为写频率,能够较为准确地定义数据的访问模式,为后续的读性能优化提供重要的依据。
附图说明
图1为现有的命名空间固态硬盘中一个分区的典型物理布局;
图2为命名空间固态硬盘分区经典的状态机;
图3为本发明实施例提供的分区状态设置步骤示意图;
图4为本发明实施例提供的读热数据备份过程中使用的索引结构;
图5为本发明实施例提供的读热数据备份步骤示意图;
图6为本发明实施例提供的请求拆分及I/O调度的示例以及过程示例;其中,(a)、(b)、(c)、(d)、(e)和(f)分别为不同情况的示例;
图7为本发明实施例提供的RocksDB中块粒度合并排序以及访问模式定义示例。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
在本发明中,本发明及附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
为了解决现有的命名空间固态硬盘中,由于读写干扰而导致读性能大幅下降的问题,本发明提供了基于备份的命名空间固态硬盘读优化方法、控制器及系统,其整体思路在于:基于数据的访问体特性以及命名空间固态硬盘的空间组织特点,充分利用命名空间固态硬盘中被浪费的空闲空间,利用该空闲空间备份读热数据,以缓解命名空间固态硬盘中同一芯片上写请求对读请求的阻塞导致的读性能下降,从而优化命名空间固态硬盘的读性能。
在详细解释本发明的技术方案之前,先对命名空间固态硬盘中分区的状态转换机制进行介绍如下。
命名空间固态硬盘通过图2所示的分区状态机和相应的命令来管理分区,识别分区是否可写。分区从EMPTY状态开始,在写入时切换到OPEN状态,在完全写入时转换到FULL状态。由于设备内部资源有限,限制了处于OPEN状态的分区数量。当达到这个限制并且主机尝试打开一个新分区时,应该将一个处于OPEN状态的分区切换到CLOSED。处于CLOSED状态的分区可以在切换回OPEN后再次写入。CLOSED和OPEN都被定义为ACTIVE。ACTIVE分区的数量也是有限的。如果达到这个限制,并且主机试图写入一个新的分区,那么处于ACTIVE状态的分区应该被“完成”(FINISH),并转换到FULL状态,同时,无论该分区实际上是否被写满,其写指针都将被移动到分区末尾,使得该分区无法再次写入数据。
这一状态转换机制使得在命名空间固态硬盘中,许多标记为“已写满”(FULL)的分区实际上并没有满。也就是说,存在着大量的闲置空间,这些空间被浪费掉了,直到相应的分区被整体重置后才能被用户重新使用,空闲空间是命名空间固态硬盘本身机制所导致的结果。
在命名空间固态硬盘中,不同的数据可能具有不同的访问模式,依据数据被读取/写入的频率,可以定义数据的访问模式。本发明使用数据页最近的三次访问请求来确定该数据页的访问模式,即读热或写热。当数据最近三次访问请求均为写请求时,该数据页的访问模式被定义为写热。反之,当数据最近三次访问请求均为读请求时,该数据页的访问模式被定义为读热。应当说明的是,此处数据访问模式的定义方式仅为一种可选的实施方式,其他用于定义数据访问模式的方式也可应用于本发明。
读热数据,是被频繁读取的数据,如果能够优化这一部分数据的读取性能,则系统整体的读性能将得到显著的优化,基于此,本发明将读热数据备份到FULL的分区中的空闲空间中,且使读热数据与其备份位于不同的并行单元(芯片)上,则当读热数据所在芯片被写操作占用时,可利用其备份来响应用于访问读热数据的读请求,从而避免该读操作被写操作阻塞,有效提高读性能。
以下为实施例。
实施例1:
一种基于备份的命名空间固态硬盘读优化方法,包括:分区状态设置步骤、读热数据备份步骤以及读热数据读取步骤。其中,分区状态设置步骤对命名空间固态硬盘中原有的分区状态转换机制进行了改进,以避免实际存在较多空闲空间的分区被标记为写满(“FULL”)状态,同时会给这样的分区标记新的状态USABLE_FULL,这些分区中的空闲空间在后续将获得进一步的利用。读热数据备份步骤则在分区状态设置步骤的基础上,将读热数据备份到USABLE_FULL状态的分区中。读热数据读取步骤,在所读取的数据所在芯片被写操作占用时,利用读热数据的备份响应读操作,由此缓解了读操作被写操作阻塞的问题。各步骤的具体实施方式具体如下。
如图3所示,本实施例的分区状态设置步骤具体包括:
在命名空间固态硬盘中处于ACTIVE状态的分区数量达到预设第一阈值,且主机试图写入一个新的分区时,检测每一个处于ACTIVE状态的分区中空闲空间所占的比例,若大于预设第二阈值,则将其状态置为USABLE_FULL,并将其写指针保持在当前位置;否则,将其状态置为FULL,并将其写指针移动至分区末尾。
本实施例中,第一阈值为原状态转换机制中所设定的ACTIVE分区的数量上限。通过上述状态转换方式,本实施例能够识别出存在较多空闲空间的分区,并进行特殊的状态标记USABLE_FULL,同时这些分区的写指针将保持在原位。
本实施例中,标记为USABLE_FULL状态的分区将用于备份读热数据,为了在充分利用空闲空间的同时,确保能够有效进行数据备份,本实施例中,第二阈值具体设定为25%,应当说明的是,在本发明其他的一些实施例中,第二阈值也可根据实际需要调整为其他值。
如图3所示,本实施例中,读热数据备份步骤包括:对于还未进行备份的读热数据Drh,获取至多N个处于USABLE_FULL状态且总的空闲空间足以容纳读热数据Drh的分区,将读热数据Drh备份到所获取的分区的空闲空间中;读热数据Drh与其备份位于不同芯片。
本实施例中,为了保证能够对读热数据进行有效地备份,允许将同一个读热数据备份到多个USABLE_FULL状态的分区中。但是,命名空间固态硬盘的顺序读性能远优于随机读性能,若将数据分散到太多不同的分区中,则在利用数据备份响应读操作时,将导致顺序读操作退化为随机读操作,为了避免数据分散到太多不同的分区中而降低系统的整体性能,本实施例同时对同一读热数据所能备份到的分区数量进行了限制,可选地,本实施例中,N=3,也即是说,同一份读热数据,至多可备份到3个USABLE_FULL状态的分区中。需要说明的是,在其他的一些实施例中,进行读热数据备份时,允许分配的USABLE_FULL分区的数量上限N也可以根据实际情况设置为其他值。
本实施例中,在获取到用于备份的分区zoneui后,在进行数据备份之前,需要先判断该分区zoneui的写指针所指向的芯片是否与需要备份的数据所在芯片相同,若相同,则向分区zoneui中随机写入一个数据页(例如内容全为0的数据页)后,再进行备份,以确保备份数据和原始数据驻留在不同的芯片中。
考虑在实际应用中,在数量受限的情况下,可能无法获取到足以容纳所需备份数据的USABLE_FULL分区,为了保证能够对读热数据进行有效备份,本实施例的读热数据备份步骤还包括:
获取至多N个处于USABLE_FULL状态且总的空闲空间足以容纳读热数据Drh的分区时,若获取失败,则分配一个新的分区后,将读热数据Drh备份到所分配的分区中;读热数据Drh与其备份位于不同芯片。
研究表明,无法获得所需的USABLE_FULL状态的分区的情况出现的概率极小,因此,额外的空间开销极小,不会对系统性能造成实质性的影响。而本实施例能够确保读热数据都进行有效的备份,则能够有效提升系统的读性能。
为了快速定位备份,本实施例提出并使用图4中名为BackupMap的数据结构来记录原始数据与备份之间的地址映射关系。每个具有读热访问模式的分区都有一个BackupMap。在数据结构BackupMap中,属性isMapped表示该分区是否已备份,MappedTimes表示备份被分散到多少个USABLE_FULL分区,剩下的MappedTimes个条目表示LPA的映射。为了尽量减少这个新数据结构带来的开销,本实施例只记录原始数据的起始LPA(记录为ori_start)、备份的起始LPA(记录为bkp_start)和备份的连续数据页的数量(记录为len)。
为方便说明,给出图4中的示例,该分区有50页数据需要备份,从LPA 64到LPA113。备份完成后,将LPA 64至LPA 93的数据拷贝到LPA 435至LPA 464,将LPA 94至LPA 113的数据拷贝到LPA 721至LPA 740。
上述读热数据备份步骤可表示为图5,其中,右侧的①②③分别代表备份时的三种情况,下方的①②③分别代表三种备份情况对应的BackupMap数据结构。
本实施例中,读热数据读取步骤具体包括:
若所读取的读热数据D'rh所在芯片未被阻塞,则直接读取读热数据D'rh;否则,从读热数据D'rh的备份中读取所需数据;
由于本实施例利用BackupMap来记录每一个读热数据的备份信息,因此,在读操作所访问芯片被写操作占用时,可以依据BackupMap快速重定向读操作。假设一个阻塞的读操作访问LPAblocked开始的连续n个逻辑页。先确定此操作访问的分区,并读取相应的BackupMap以重定向此读操作。首先,检查这个分区是否已经被属性isMapped备份了。如果没有,则立即进行备份。否则,开始计算相应备份的LPA。遍历所有映射条目,并使用相应的ori_start和len来确定应该使用哪个条目。然后通过如下公式计算开始读取的逻辑地址LPAbackup
确定起始地址后,从起始地址开始连续读取n个逻辑页即可。
由于本实施例在设备端实现,分区的物理布局和LPA与芯片之间的映射可以很容易地被获得。
当工作负载以读写混合模式访问数据时,数据的访问模式会发生变化,为了能够根据数据的访问特性及时更新数据的访问模式,并及时对需要备份的读热数据进行备份,本实施例提出了读热数据与写热数据之间的转换机制,具体地,对于原本是读热但转变为写热的数据,无需做额外的数据迁移,直接将旧数据置为无效并将新数据写入具有对应访问模式的分区中。对于原本是写热数据但转变为读热的数据,则需要进行更为复杂的处理。对于这样的数据,使用分区的访问历史记录、分区内的访问分布、以及区域中剩余的有效数据来确定是否应该迁移数据,并预测该区域中的哪些数据需要迁移和备份。具体地,如果一个原本的访问模式为写热的分区被连续读取了Tr次,则根据访问的局部性,认为该分区至少在接下来一段时间都会只接收读请求。接下来检测该分区中的剩余有效数据占比Tvd,如果比例大于Tvd_shouldGC则代表迁移数据需要太大的开销,因此直接改变该分区的访问模式为热读。接下来分析访问分布,如果所有有效数据趋于被均匀读取,则认为所有数据都是读热数据,需要被备份。如果访问模式具有明显热点,则认为只有被访问的是热读数据,仅将这些数据被备份。其余数据被认为是不会被访问的数据或者后续会变为失效数据,无需进一步处理。最后对需要对这些数据进行备份。由于剩余的有效数据大概率在地址上不是连续的,因此允许这些分区的BakcupMap数据结构中拥有多个(大于3)条目以便确保所有的备份都能被检索,但一个分区中的所有数据仍然只能备份到至多三个USABLE_FULL分区中。当分区中剩余有效数据占比Tvd小于Tvd_shouldGC,则迁移有效数据,并回收空间。有效数据被重新写入硬盘时同时备份。
总的来说,本实施例对命名空间固态硬盘中分区的状态转换过程进行修改,具体来说,在处于ACTIVE状态的分区数量达到预设限制,且主机试图写入一个新的分区时,并不像现有的状态转换机制那样直接将处于ACTIVE状态的分区状态转换为FULL状态,而是识别出其中具有较多空闲空间的ACTIVE分区,将其标记为一种新的状态USABLE_FULL,并维持其写指针在原本的位置,使得该分区在后续仍可以使用,避免了存储空间的浪费;进一步将读热数据备份到这些空闲空间中的不同芯片上,使得读请求所访问的芯片被写请求占用时,能够利用其副本进行响应,在不造成额外空间开销的情况下,减少了大多数写请求对读请求的阻塞,有效减少读请求的平均响应时间以及读尾延迟,提升命名空间固态硬盘的读性能的效果。
实施例2:
一种基于备份的命名空间固态硬盘读优化方法,本实施例与上述实施例1类似,所不同之处在于,本实施例考虑到,由于分区特定的组织形式,可能存在部分写操作占用较多的芯片,从而导致读热数据备份失效的情况。例如,一个写操作同时占据了所有芯片,那么该写操作执行时将占用所有芯片,从而,即使针对热度数据进行了备份,也无法响应读操作。为了避免可能出现的备份失效的情况,本实施例对读热数据的备份方案进行了进一步地改进,并相应地对请求处理机制进行了改进,基本思想在于,只允许一半的芯片被写操作占用,这样读操作就可以利用另外一半。具体地,本实施例在上述实施例1的基础上还包括:
处理请求之前,按照如下方式进行请求队列分析与I/O调度:
(S1)若请求队列中存在读请求,则转入(S2);否则,转入步骤(S4);
(S2)初始化插入位置为第一个读请求之后;
(S3)遍历第一个度请求之前的写请求,对于遍历到的每一个写请求,判断是否占用一半以上的芯片,若是,则将其拆分为前、后两个子请求,将拆分得到的后子请求插入当前的插入位置,并将插入位置移动到所插入的子请求之后;
前子请求与原写请求的起始地址相同且占用一半芯片;
(S4)依次获取请求队列中的请求并执行,直至执行完第一个读请求或所有请求执行完成;
(S5)若请求队列中还存在未执行的请求,则转入步骤(S1);否则,请求队列分析与I/O调度结束;
并且,读热数据备份步骤中,用于备份读热数据Drh的芯片序号i与读热数据Drh所在的芯片序号j满足|i-j|=num/2;num表示芯片总数,容易理解的是,芯片序号i、j均为0~num-1之间的自然数。
由于本实施例中,通过写操作拆分的方式,使得读操作之前的写操作至多只能占用一半的芯片,因此,第i块芯片上的数据和第i+num/2块芯片上的数据不会同时被写请求访问,而在本实施例所提出的备份方式下,由于原数据及其备份数据分别位于第i块芯片上和第i+num/2块芯片上,因此,读操作总能得到响应。
为了使本实施例中的请求队列分析与I/O调度的具体方式更为清楚,以下结合图6所示的示例进行说明。假设一共有4块芯片,图6中的(a)中,写请求W1访问了五个逻辑页面,根据分区布局,写请求W1占据了一半以上的芯片,因此拆分为前子请求W1-1和后子请求W1-2。W1-1具有与W1相同的起始LPA,但是要访问的页面数量等于芯片数量的一半。其余的逻辑页面可以通过W1-2访问。拆分后,在读请求R1后插入W1-2。然后继续分析下一个写请求W2。如果W2或W2-1访问的芯片与W1-1访问的芯片相同,如图6中的(b)所示,那么按照对写请求W1的分析方式开始分析写请求W2。但是,实际情况可能类似于图6中的(d)所示,即W2访问的芯片与W1或W1-1不同,这意味着这些写请求一起占用了一半以上的芯片。又或者,如果写请求W2的目标分区与W1相同,则意味着不能将W1-2安排在W2之后,否则将不能服从顺序写入。在这些情况下,直接将读请求R1及其后插入的写请求调度到写请求W2的前面,并且在当前的调度中,W2不必像图6中的(e)那样拆分。
在分析写请求,并按需对写请求进行拆分之后,可以开始分析读请求R1,如果读请求R1碰巧访问了另外一半的芯片,如图6中的(c)所示,那么这个读请求不再被阻塞,可以直接服务;如果读请求R1访问的芯片仍然与之前的写请求重叠,如图6中的(f)所示,那么将读请求拆分成两个,其中一个访问被阻塞在芯片上的页面,另一份访问其备份所在的芯片。访问数据备份所在芯片时,可使用相应的BackupMap来查找备份,以服务被阻塞的分割读请求。如图6中的(f)所示,读操作不再被写操作阻塞。本实施例提出的请求队列分析与I/O调度的方式,不仅为读操作预留了一半的芯片,而且保证了第i块芯片上的数据和第i+num/2块芯片不会同时被写操作访问,基于此,如果对一个芯片的读取操作被阻塞,那么其备份数据肯定可以为图操作提供服务,对于需要备份的读热数据,确定它在哪个芯片上,并计算应该将其备份到哪个目标芯片上,然后遍历所有USABLE_FULL分区,找到一个写指针位于目标芯片上的分区。如果找到,备份数据并更新相应的BackupMap。如果没有,选择一个具有足够空闲空间的USABLE_FULL分区,写入多个为零的页面,直到写指针指向所需芯片上的页面,然后备份数据并更新相应的BackupMap。所有其他细节和限制与上述实施例1的备份策略相同,具体可参考上述实施例1的描述。
基于以上考虑,本实施例中,步骤(S3)在上述实施例1的基础上还包括:对于遍历到的每一个写请求,若其所占用的芯片与其前写请求所占用的芯片不同,或者,其所访问的目标分区与其前写请求所访问的目标分区相同,则将第一个读请求及其后插入的后子请求均调度到当前所遍历的写请求之前,并转入步骤(S4);否则,继续遍历下一个写请求。
本实施例对写请求进行拆分后,被拆分的写请求的处理延迟将增大,从而导致写吞吐量下降,为了补偿由于请求分割而导致的写吞吐量下降,本实施例还包括:在主机端与命名空间固态硬盘之间设置持久化内存作为中间层;
并且,步骤(S4)中,若从请求队列中获取的请求为拆分后的写请求,则在执行该写请求的同时,将对应的后子请求所需写入的数据写入中间层;
并且,步骤(S4)中,执行完第一个读请求之后,还包括:将中间层中的数据刷写到命名空间固态硬盘中。
本实施例在主机和命名空间固态硬盘间设置持久化内存作为中间层缓存被拆分的写,被拆分的写请求无需再等待读被执行完再被响应,而是可以直接将数据写入持久化内存,等读执行完再刷写到命名空间接口固态硬盘中,避免了写吞吐量的下降。
可选地,本实施例中,中间层具体为一块512MB的持久化内存,成本较低;同时,为了避免持久化内存被写满而导致写吞吐提升受限,在请求拆分的过程中监控持久化内存的剩余容量。当容量不足时,直接将读请求以及能够被持久化内存容纳的写请求调度到前面,避免后续的写请求拆分。具体来说,本实施例的步骤(S3)中,在对写请求进行拆分之前,还包括:
判断当前已拆分的写请求所需占用的中间层容量是否超过了预设的第三阈值,若是,则将第一个读请求及其后插入的后子请求均调度到当前所遍历的写请求之前,并转入步骤(S4)。
本实施例通过写请求拆分的方式,使得每至多允许一半的芯片被写操作占用,同时,将读热数据备份到与其所在芯片的序号相差num/2的芯片上,这保证了读热数据及其备份所在芯片不会被同时占用,因此读请求总能被响应,进一步减少了读操作被写操作阻塞的情况,提高了系统的读性能;在主机与命名空间固态硬盘间设置持久化内存作为中间存,用于缓存被拆分的写请求中无法及时写入的数据,由此能够使得写请求得到及时响应,而无需等到读请求被执行完成再响应,在提高度性能的同时,有效补偿了由于请求拆分而可能导致的写吞吐量下降。提出了读热数据与写热数据之间的转换机制,能够根据数据的访问特性实时更新数据的访问模式,并及时对需要进行备份的读热数据进行备份,保证了系统整体的读写性能。
实施例3:
一种基于备份的命名空间固态硬盘读优化方法,本实施例与上述实施例2类似,所不同之处在于,本实施例中,运行于命名空间固态硬盘的应用具体为键值存储引擎RocksDB。
键值存储系统具有顺序写的特性,因此非常适合部署在命名空间固态硬盘上,其中RocksDB已经对命名空间有了较好的适配。由于RocksDB以排序字符串表(SortedStringTable,SST)为粒度存储数据,难以以页为粒度定义数据访问模式,但如果以SST为粒度定义访问模式则会十分不准确,从而导致性能受限。因此,为了准确定义数据访问模式,本实施例使键值存储引擎RocksDB依托数据块的粒度进行合并排序,将实际发生键值对更新的数据块作为参与合并排序的数据块;在定义数据访问模式时,将数据块参与合并排序的频率作为写频率。
数据块是对SST进一步划分得到的。图7所示为本实施例中RocksDB采用块粒度进行合并排序的示例,为了更加准确地定义访问模式,仅对真正发生了键值对更新的数据块进行访问历史和访问模式的更新,其中,Li和Li+1分别表示LSM Tree中的第i层和第i+1层,从上至下的三个Li+1分别表示合并排序过程中LSM Tree中第i+1层的状态。在图7的示例中,数据块A和数据块C发生了合并排序,生成了新的数据块D和数据块E,仅键为36的数据发生了实际更新,而键为40的数据块未发生更新,因此,数据块D的访问历史是以数据块A的访问历史进行更新而得到,而数据块E的访问历史则直接由数据块C复制得到。
本实施例以块为粒度进行合并排序,并以块为粒度对数据进行访问模式的定义,使用块参与合并排序的频率代表写请求频率,能够较为准确地定义数据的访问模式,为后续的读性能优化提供重要的依据。
本实施例中,其余步骤的具体实施方式可参考上述实施例1和实施例2的描述,在此将不做复述。
实施例4:
一种命名空间固态硬盘控制器,包括:
计算机可读存储介质,用于存储计算机程序;
以及处理器,用于读取计算机可读存储介质中存储的计算机程序,执行上述实施例1~3任一项提供的基于备份的命名空间固态硬盘读优化方法。
实施例5:
一种存储系统,包括:命名空间固态硬盘,以及上述实施例4提供的命名空间固态硬盘控制器。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于备份的命名空间固态硬盘读优化方法,其特征在于,包括:
分区状态设置步骤:在所述命名空间固态硬盘中处于ACTIVE状态的分区数量达到预设第一阈值,且主机试图写入一个新的分区时,检测每一个处于ACTIVE状态的分区中空闲空间所占的比例,若大于预设第二阈值,则将其状态置为USABLE_FULL,并将其写指针保持在当前位置;否则,将其状态置为FULL,并将其写指针移动至分区末尾;
读热数据备份步骤:对于还未进行备份的读热数据Drh,获取至多N个处于USABLE_FULL状态且总的空闲空间足以容纳所述读热数据Drh的分区,将所述读热数据Drh备份到所获取的分区的空闲空间中;所述读热数据Drh与其备份位于不同芯片;
读热数据读取步骤:若所读取的读热数据D'rh所在芯片未被阻塞,则直接读取所述读热数据D'rh;否则,从所述读热数据D'rh的备份中读取所需数据;
其中,N为预设正整数。
2.如权利要求1所述的基于备份的命名空间固态硬盘读优化方法,其特征在于,所述读热数据备份步骤还包括:
获取至多N个处于USABLE_FULL状态且总的空闲空间足以容纳所述读热数据Drh的分区时,若获取失败,则分配一个新的分区后,将所述读热数据Drh备份到所分配的分区中;所述读热数据Drh与其备份位于不同芯片。
3.如权利要求1或2所述的基于备份的命名空间固态硬盘读优化方法,其特征在于,还包括:处理请求之前,按照如下方式进行请求队列分析与I/O调度:
(S1)若所述请求队列中存在读请求,则转入(S2);否则,转入步骤(S4);
(S2)初始化插入位置为第一个读请求之后;
(S3)遍历第一个度请求之前的写请求,对于遍历到的每一个写请求,判断是否占用一半以上的芯片,若是,则将其拆分为前、后两个子请求,将拆分得到的后子请求插入当前的插入位置,并将插入位置移动到所插入的子请求之后;
前子请求与原写请求的起始地址相同且占用一半芯片;
(S4)依次获取所述请求队列中的请求并执行,直至执行完第一个读请求或所有请求执行完成;
(S5)若所述请求队列中还存在未执行的请求,则转入步骤(S1);否则,请求队列分析与I/O调度结束;
并且,所述读热数据备份步骤中,用于备份读热数据Drh的芯片序号i与所述读热数据Drh所在的芯片序号j满足|i-j|=num/2;
其中,num表示芯片总数。
4.如权利要求3所述的基于备份的命名空间固态硬盘读优化方法,其特征在于,所述步骤(S3)还包括:对于遍历到的每一个写请求,若其所占用的芯片与其前写请求所占用的芯片不同,或者,其所访问的目标分区与其前写请求所访问的目标分区相同,则将第一个读请求及其后插入的后子请求均调度到当前所遍历的写请求之前,并转入步骤(S4);否则,继续遍历下一个写请求。
5.如权利要求4所述的基于备份的命名空间固态硬盘读优化方法,其特征在于,还包括:在主机端与所述命名空间固态硬盘之间设置持久化内存作为中间层;
并且,所述步骤(S4)中,若从所述请求队列中获取的请求为拆分后的写请求,则在执行该写请求的同时,将对应的后子请求所需写入的数据写入所述中间层;
并且,所述步骤(S4)中,执行完第一个读请求之后,还包括:将所述中间层中的数据刷写到所述命名空间固态硬盘中。
6.如权利要求5所述的基于备份的命名空间固态硬盘读优化方法,其特征在于,所述步骤(S3)中,在对写请求进行拆分之前,还包括:
判断当前已拆分的写请求所需占用的中间层容量是否超过了预设的第三阈值,若是,则将第一个读请求及其后插入的后子请求均调度到当前所遍历的写请求之前,并转入步骤(S4)。
7.如权利要求1~6任一项所述的基于备份的命名空间固态硬盘读优化方法,其特征在于,还包括:
当读热数据转换为写热数据时,将新写入的数据写入新的分区,并将旧的数据及其备份置为无效;
当写热数据转换为读热数据时,执行以下步骤:
(T1)判断原写热数据所在分区Z中有效数据的数据量是否低于预设的第四阈值,若是,则将分区Z中的有效数据迁移至新分区后,对分区Z进行垃圾回收,之后转入步骤(T3);否则,转入步骤(T2);
(T2)从分区Z内的有效数据中识别出读热数据,若读热数据占有效数据的比例超过预设的第五阈值,则利用所述读热数据备份步骤对分区Z内的数据均进行备份;否则,利用所述读热数据备份步骤对所述识别出的读热数据进行备份;
(T3)处理完成。
8.如权利要求7所述的基于备份的命名空间固态硬盘读优化方法,其特征在于,还包括:当运行于所述命名空间固态硬盘的应用为键值存储引擎RocksDB时,使所述键值存储引擎RocksDB依托数据块的粒度进行合并排序,将实际发生键值对更新的数据块作为参与合并排序的数据块;
在定义数据访问模式时,将数据块参与合并排序的频率作为写频率;
其中,所述访问模式包括:读热数据和写热数据。
9.一种命名空间固态硬盘控制器,其特征在于,包括:
计算机可读存储介质,用于存储计算机程序;
以及处理器,用于读取所述计算机可读存储介质中存储的计算机程序,执行权利要求1~8任一项所述的基于备份的命名空间固态硬盘读优化方法。
10.一种存储系统,其特征在于,包括:命名空间固态硬盘,以及权利要求9所述的命名空间固态硬盘控制器。
CN202311819624.1A 2023-12-26 2023-12-26 基于备份的命名空间固态硬盘读优化方法、控制器及系统 Pending CN117687577A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311819624.1A CN117687577A (zh) 2023-12-26 2023-12-26 基于备份的命名空间固态硬盘读优化方法、控制器及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311819624.1A CN117687577A (zh) 2023-12-26 2023-12-26 基于备份的命名空间固态硬盘读优化方法、控制器及系统

Publications (1)

Publication Number Publication Date
CN117687577A true CN117687577A (zh) 2024-03-12

Family

ID=90131879

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311819624.1A Pending CN117687577A (zh) 2023-12-26 2023-12-26 基于备份的命名空间固态硬盘读优化方法、控制器及系统

Country Status (1)

Country Link
CN (1) CN117687577A (zh)

Similar Documents

Publication Publication Date Title
CN110134514B (zh) 基于异构内存的可扩展内存对象存储系统
CN107193646B (zh) 一种基于混合主存架构的高效动态页面调度方法
JP6266019B2 (ja) データストレージシステム向けの優先度に基づくガベージコレクション
US8335896B1 (en) Digital locked loop on channel tagged memory requests for memory optimization
CN108139968B (zh) 确定垃圾收集器线程数量及活动管理的方法及设备
CN109947363B (zh) 一种分布式存储系统的数据缓存方法
CN112346666B (zh) 基于ocssd的键值存储系统的写、块粒度压缩合并方法和系统
WO2017149592A1 (ja) ストレージ装置
CN111158604B (zh) 一种闪存颗粒阵列的物联网时间序列数据存储与检索方法
CN110413537B (zh) 一种面向混合固态硬盘的闪存转换层及转换方法
CN107515728B (zh) 发挥闪存设备内部并发特性的数据管理方法和装置
CN109783398A (zh) 一种基于相关感知页面级ftl固态硬盘性能优化方法
CN109471594B (zh) 一种mlc闪存读写方法
CN105930282A (zh) 一种用于nand flash的数据缓存方法
TW201917581A (zh) 管理快閃記憶體模組的方法及相關的快閃記憶體控制器
CN108845957B (zh) 一种置换和回写自适应的缓冲区管理方法
CN110968269A (zh) 基于scm与ssd的键值存储系统及读写请求处理方法
CN111597125A (zh) 一种非易失内存文件系统索引节点的磨损均衡方法及系统
CN109324979A (zh) 3d闪存固态盘系统的数据缓存划分方法及数据分配方法
CN104298615B (zh) 一种存储器交换分区损耗的均衡方法
CN116364148A (zh) 一种面向分布式全闪存储系统的磨损均衡方法及系统
CN111352593A (zh) 一种区分快写和正常写的固态硬盘数据写入方法
JP6531574B2 (ja) ストレージ装置、ストレージ装置制御プログラム及びストレージ装置制御方法
CN111078143B (zh) 基于段映射进行数据布局和调度的混合存储方法及系统
CN102880553A (zh) 一种基于mcu的片外flash文件系统的读写方法

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