面向SSD与HA-SMR混合存储系统数据管理方法、存储介质及设备与流程

文档序号:22400685发布日期:2020-09-29 18:12阅读:284来源:国知局
面向SSD与HA-SMR混合存储系统数据管理方法、存储介质及设备与流程

本发明属于计算机存储技术领域,具体涉及一种面向ssd与ha-smr混合存储系统的写友好型数据管理方法、存储介质及设备。



背景技术:

smr叠瓦式磁盘作为近年来一种较为新型的、廉价的、适用于冷数据大规模存储的磁介质,具有价格便宜、存储密度高以及生产工艺简单的优势,适用于如今海量数据的存储,但是由于磁盘容量的提升是依靠压缩磁道而使其重叠,同时需要更大、更宽的磁头产生更强的磁场。对于读请求和顺序写请求,smr与普通的hdd磁盘毫无差异,但是在随机写的时候,由于磁头会对目标磁道下游相邻磁道进行干扰,造成下游数据的擦除,因此每次需要对数据执行读-改-写操作,由此产生的所谓的“写放大”会对上层应用的io带来响应延迟。而ssd固态硬盘普遍采用flash芯片组成,相对于磁盘具有更强随机读写能力,使用ssd作为缓存可以有效的应对上层业务的随机io。

但是,ssd也具有读写不对称特性,由于有限的擦除次数,频繁的擦除操作会造成闪存芯片“写穿”,为数据存储是稳定性带来不可逆的影响。与此同时,相较于早期的设备管理式smr,主机管理式和主机感知式的smr可以将磁盘内部状态与设备信息暴露给上层应用,以帮助上层应用更好的了解底层信息。然而,现有的此类混合存储系统的数据管理策略,通常只是简单的使用lru算法将长时间未使用的数据淘汰或是基于局部性原理将数据尽可能写入ssd,以使缓存层具有较高的命中率,这些没有充分考虑底层存储介质的特性,对使用寿命和系统整体性能均有很大程度影响。

因此,如何使上层应用利用ha-smr(主机感知的叠瓦式磁盘)的内部信息对业务io流更好的组织使其顺序化,减少对ssd无效流量的写入以延长ssd的使用寿命;以及如何利用这一信息使作为缓存层的ssd制定合适的缓存替换策略将冷热状态不同的数据合理写回smr,减少smr写放大对上层业务io的影响,是混合存储系统的数据高效管理需要考虑的问题。



技术实现要素:

本发明所要解决的技术问题在于针对上述现有技术中的不足,提供一种面向ssd与ha-smr混合存储系统的写友好型数据管理方法,面向ssd作为缓存层、ha-smr作为容量层组成的混合存储系统,解决以写请求为主混合部分读请求的应用业务场景,同时考虑ssd寿命、缓存命中率与smr写放大问题等因素,在主机端完成实现;在数据进入ssd时,根据ha-smr的写指针状态信息,判断写入路径是直接写入容量层还是缓存层;同时,缓存层的数据写回容量层时让属于同一个zone的数据一起写回,一方面提升缓存层的可用空间,另一方面降低smr中持久缓冲层的清理时间,将更多地的随机写转换为顺序写,减少smr写放大率。从而整体提升混合存储系统的性能。

本发明采用以下技术方案:

一种面向ssd与ha-smr混合存储系统的写友好型数据管理方法,包括以下步骤:

s1、在ssd缓存层中,将属于smr中同一zone的block聚簇为一组set集合,将block块以lba升序的方式插入setblock管理链表,并以set为基本单位写回到smr容量层;同时以fifo先进先出的方式,将set集合插入zoneset临时管理链表;

s2、为set集合中每个block块分别设定write标志位和read标志位,记录block的读和写次数,初始值设为0,读写请求命中后每次加1;

s3、根据步骤s2记录的读和写次数,计算更新set中每个block的综合热度;同时计算更新set集合的覆盖率;

s4、根据步骤s3中每个block的综合热度和覆盖率,计算更新每个set的最终权值,按照权值降序的方式重新加入到zoneset缓存淘汰链表;

s5、当缓存的剩余空间小于规定阈值时,从步骤s4的zoneset缓存淘汰链表中选择淘汰对象,并执行缓存替换算法,将符合要求的数据从缓存中替换至容量层,完成后将执行步骤s6;

s6、将ssd缓存层中被替换出去的数据块的write和read标志位清零;

s7、当读请求达到时,首先检查请求的块是否存在于缓存中,若存在,则从ssd缓存层读取目标数据返回给上层应用,随后执行步骤s2;如果读请求没有在缓存中命中,则从smr容量层读取目标数据返回给上层应用;

s8、当写请求到达时,首先检查请求的数据块是否存在于缓存中,若存在,则直接在ssd缓存层更新目标数据,随后执行步骤s2;若缓存层中不存在目标数据,则判断目标数据块的lba是否与smr中zone对的写指针对齐,如果两者对齐则直接写入smr中的zone;反之,判断非顺序写请求的大小是否超过设定的非顺序写阈值tnsw,若超过则视为大的非顺序写,写入smr磁盘内部的持久缓冲区;若以上两种情况都不符合,需要写入ssd缓存层中,并执行步骤s1和s2;写请求完成后判断剩余空间是否小于剩余空间阈值tfree,若小于阈值tfree,则执行步骤s5,实现ssd与ha-smr混合存储系统的写友好型数据管理。

具体的,步骤s1中,上层io请求的最小单位为4kb的block块,ha-smr以256mb大小zone作为管理单位,由65536个4kb大小的block组成;set由属于同一zone且位于ssd中的所有block块组成,对于set集合内部的各个block块,按照lba地址升序插入setblock管理链表;ssd中的每个set对应smr中的一个zone,set集合的大小最小为4kb,最大为256mb,同时对于每个set集合,以fifo的形式插入到zoneset临时管理链表。

具体的,步骤s3中,分别对进入缓存的每个block增加write和read标志位,分别记录更新和读的次数,计算缓存中每个块的综合热度。

具体的,步骤s3中,更新set集合的覆盖率为ci=set_block/zone_block,0≤ci≤1,zone_block为常数,表示256mb大小的zone中有65536个4kb大小的block;set_block表示集合中4kb大小块的数量,0≤set_block≤65536。

具体的,步骤s4中,通过步骤s3得到块的综合热度以及set集合的覆盖率,求出set的综合权值,每个set集合按照综合权重大小降序插入zoneset管理链表,同时各节点包括综合权重wi和覆盖率ci的信息。

具体的,步骤s5具体为:

s501、读请求达到时,根据映射表检查请求的block块是否存在于缓存中,若存在,则从ssd缓存层读取目标数据返回给上层应用,随后执行步骤s502;

s502、对命中读请求的block块,更新其read标志位,记录次数加1;

s503、当读请求没有在缓存中命中,则从smr容量层读取目标数据返回给上层应用。

具体的,步骤s6具体为:

s601、当写请求到达时,根据映射表检查请求的数据块是否存在于缓存中,若存在,直接在ssd缓存层更新目标数据,随后执行步骤s602;

s602、对命中写请求的block块,更新其write标志位,记录次数加1;

s603、如果缓存层中不存在目标数据,判断目标数据块的lba是否与smr中zone对的写指针对齐,满足条件直接写入smr中的zone,反之则进入步骤s604;

s604、根据s603的判断结果,如果目标数据块的lba与smr中zone对的写指针对未齐,再次判断非顺序写请求的大小是否超过设定的非顺序写阈值tnsw,若超过tnsw=1mb则视为大的非顺序写,写入smr磁盘内部的持久缓冲区,反之,则进入步骤s605;

s605、由于步骤s603和步骤s604的条件都不成立,数据写入ssd缓存层,进入步骤s606;

s606、对新进入ssd缓存层的block块,增加write和read标志位,并对write标志位记录次数加1;随后,如果已存在对应的setblock管理链表则加入链表中,否则创建新的setblock管理链表,完成以上步骤后将新的set集合加入zoneset临时管理链表;

s607、当写请求完成后,判断剩余空间是否小于剩余空间阈值tfree,即tfree=ssd缓存容量*10%,若小于阈值tfree,则执行步骤s7开始缓存清理操作。

具体的,步骤s7具体为:

s701、根据步骤s2记录的更新次数,计算各个set中block块的综合热度,并计算各个set的覆盖率;随后,计算求出zoneset临时管理链表中各个set集合的最终综合权值;

s702、依据综合权值从大到小降序的规则,将set集合依次加入到zoneset淘汰链表中;

s703、从zoneset淘汰链表末尾、即权重最低的一端开始,首先检查各个节点的setblock管理链表中是否存在起始lba与其要写回目的zone的写指针对齐、并且覆盖率ci达到10%的候选者,如果存在,则作为淘汰者,按照顺序写的方式写回到smr的zone中,直到缓存空间的容量回到剩余空间阈值tfree之上;如果不存在这样的候选者,则进入步骤s704;

s704、再次从zoneset链表末端开始,检查各个节点的覆盖率信息,将覆盖率ci达到50%以上集合作为候选者写回到smr中的持久缓冲区中,直到缓存空间的容量回到剩余空间阈值tfree之上;此时写回操作将变为非顺序写,由设备端执行读-改-写操作将持久缓冲区的数据依次写回到smr的zone中,若不符合上述条件则进入步骤s705;

s705、当上述情况的候选者均不存在时,则从zoneset链表末端开始,选择权重最低的节点作为候选者写回到smr中的持久缓冲区中,直到缓存空间的容量回到剩余空间阈值tfree之上;此时写回操作将变为非顺序写,由设备端执行读-改-写操作将持久缓冲区中数据依次写回到smr的zone中。

一种存储一个或多个程序的计算机可读存储介质,其特征在于,所述一个或多个程序包括指令,所述指令当由计算设备执行时,使得所述计算设备执行根据权利要求1至8所述的方法中的任一方法。

一种管理设备,其特征在于,包括:

一个或多个处理器、存储器及一个或多个程序,其中一个或多个程序存储在所述存储器中并被配置为所述一个或多个处理器执行,所述一个或多个程序包括用于执行根据权利要求1至8所述的方法中的任一方法的指令。

与现有技术相比,本发明至少具有以下有益效果:

本发明一种面向ssd与ha-smr混合存储系统的写友好型数据管理方法,基于ssd有限擦除次数的使用寿命和smr随机写会产生“写放大”这一事实,利用ssd随机写能力更强,使用ssd作为缓存层,一方面,以上层的io请求起始地址是否与smr的写指针对齐为原则,将符合写指针对齐条件的“顺序”io请求直接定向到smr,更好地了利用机械硬盘顺序写的能力;对于写指针未对齐但是超过设定阈值tnsw的非顺序写可以写入到smr磁盘内部的持久缓冲区,进一步对ssd“价值低”的写流量过滤,通过上述步骤减少对ssd的写入次数,避免频繁的擦除,延长其使用寿命;最后,只有小的非顺序写能够进入随机写能力好的ssd缓冲层,通过对同一个zone的块进行聚簇和重排序,转换为有利于ha-smr中持久缓冲层执行“读-改-写”清理操作的较大连续的块,缩短了prt-系统性能恢复时间,并减少smr的写放大率。

进一步的,通过将属于同一zone的block进行聚簇一起写回到smr,可以减少设备端执行读-改-写操作的频率,同时提高了设备端的持久缓冲区的清理效率,缩短了磁盘的prt性能恢复时间,减少了smr的写放大率,从而提升系统的整体性能。

进一步的,通过给block块增加read和write标志位,可以更加细粒度的区分块的读写特征。

进一步的,通过记录的读写次数,可以分别计算出block块的读热度和写热度,以此求出块的综合热度;并通过某个zone对应set集合在缓存中得块数计算出得到相应的覆盖率,以此得到某个zone在缓存中的占比。

进一步的,通过计算set集合中各个block块的综合热度,以及zone所对应的set集合在缓存中的覆盖,综合考虑数据块的热度以及数量因素,依据以上两者得到set集合的综合权值,并将set集合按照权值大小降序的方式加入zoneset缓存淘汰链表。

进一步的,在发生缓存替换时,通过计算得到的综合权值,从zoneset缓存淘汰链表末端选择出最佳淘汰者。

进一步的,将ssd缓存层中被替换出去的数据块不会再次从容量层进入缓存层,因此将其write和read标志位清除。

进一步的,当读请求达到时,通过查找映射表定位数据存储的位置,将数据从对应的层次读出返回给上层应用。

进一步的,当写请求到达时,首先查找映射表定位数据具体的存储位置,若缓存命中则直接写,否则根据数据的lba逻辑地址与写指针是否对齐,决定是否写入smr的zone,而对于较大的随机写,则将其写入到smr的持久缓冲区,只有小的、不可避免的随机写才写入到ssd缓存层,以上操作,可以减少对ssd的“无必要”写流量,减少对ssd的写入延长ssd使用寿命,并合理的利用了smr顺序写能力,同时将较大的随机写写入到smr持久缓冲区也有助于其清理效率,减少后期清理操作的代价与次数。

综上所述,本发明通过综合考虑缓存命中率、ssd使用寿命以及smr写放大这三类因素,从而尽可能提高混合存储系统的综合性能。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

图1为本发明的混合存储系统体系结构示意图;

图2为本发明的数据流向图

图3为本发明以fifo管理的zoneset临时管理链表示意图;

图4为本发明以lba降序管理的zoneset缓存淘汰链表示意图;

图5为本发明处理读i/o请求处理流程图;

图6为本发明处理写i/o请求处理流程图;

图7为本发明缓存替换操作流程图。

具体实施方式

请参阅图1,本发明管理方法使用混合存储系统的整体逻辑结构中,以单独的内核模块实现,因此无需修改linux操作系统。模块以伪块设备的形式位于块层中,主要包括缓存管理和io重定向功能,分别用于触发缓存空间清理时的数据写回操作以及在不同条件下响应读写请求实现io的重定位。

请参阅图2,为本发明的具体数据流向,当读写请求到达时,不同的条件、类型数据流向的存储位置不同,或者当发生缓存替换时,数据的流向也会发生改变。

本发明提供了一种面向ssd与ha-smr混合存储系统的写友好型数据管理方法,通过判断数据流向,将不同类型的请求定位到不同存储层次的位置,并在缓存清理操作触发时降符合要求的数据写回到容量层。具体步骤如下:

s1、在ssd缓存层中,将属于smr中同一zone的block聚簇为一组set集合,将block块以lba升序的方式插入setblock管理链表,并以set为基本单位写回到smr容量层。同时以fifo先进先出的方式,将set集合插入zoneset临时管理链表,如图3所示;

上层io请求的最小单位为4kb的block块,而ha-smr均以256mb大小zone作为管理单位,由65536个4kb大小的block组成。即set由属于同一zone且位于ssd中的所有block块组成,对于set集合内部的各个block块,按照lba地址升序插入setblock管理链表。因此,ssd中的每个set对应smr中的一个zone,set集合的大小最小为4kb,最大为256mb,同时对于每个set集合,则是以fifo的形式插入到zoneset临时管理链表。

s2、为set集合中每个block块分别设定write标志位和read标志位,记录block的读和写次数,初始值设为0,读写请求命中后每次加1;

s3、根据s2记录的读和写次数,计算更新set中每个block的综合热度;同时计算更新set集合的覆盖率;

为了使缓存对读写请求均有较高的命中率,因此,分别对进入缓存的每个block增加write和read标志位,分别记录更新和读的次数,利用公式hi=wi+x*ri,计算缓存中每个块的综合热度,其中0<x<1,x表示在写请求为主混合部分读请求场景中,读请求所占比例。同时,wi和ri初始值均为0,表示该块进入缓存后更新和读的次数。

进一步的,set覆盖率表示,smr中某个zone所属block在缓存层中的比例,可以通过公式ci=setblock/zoneblock可以得到具体数据值,0≤ci≤1。其中,zoneblock为常数,表示256mb大小的zone中有65536个4kb大小的block;而setblock表示集合中4kb大小块的数量,其中0≤setblock≤65536。

s4、根据s3中每个block的综合热度和覆盖率,计算更新每个set的最终权值,按照权值降序的方式重新加入到zoneset缓存淘汰链表;

请参阅图4,通过步骤s3得到的块的综合热度以及set集合的覆盖率,根据公式wi=∑hi/ci求出set的综合权值,其中ci表示第i个集合seti的覆盖率,而∑hi表示缓存内的第i个集合seti中所有block块的综合热度之和;进一步的,每个set集合按照综合权重大小降序插入zoneset管理链表,同时各节点包括综合权重wi和覆盖率ci的信息。

s5、当缓存的剩余空间小于规定阈值时,从s4的zoneset缓存淘汰链表中选择淘汰对象,并执行缓存替换算法,将符合要求的数据从缓存中替换至容量层,完成后将执行步骤s6;

请参阅图5,对于io重定向功能的数据流向分析,如果到达的是读请求,处理读请求包括以下步骤:

s501、读请求达到时,首先根据映射表检查请求的block块是否存在于缓存中,若存在,则从ssd缓存层读取目标数据返回给上层应用,其数据流向路径如图2的黑色虚线,随后执行步骤s502;

s502、对命中读请求的block块,更新其read标志位,记录次数加1;

s503、当读请求没有在缓存中命中,则从smr容量层读取目标数据返回给上层应用,此时数据可能存在smr的持久缓冲层或者zone中,其数据流向的路径分别沿图2中的标号2或标号3返回上层,并无需调整相应链表中set集合的位置。

s6、将ssd缓存层中被替换出去的数据块的write和read标志位清零;

请参阅图6,如果到达的是写请求,具体步骤如下:

s601、当写请求到达时,首先根据映射表检查请求的数据块是否存在于缓存中,若存在,则直接在ssd缓存层更新目标数据,其数据流向如图2中标号1所指,随后执行步骤s602;

s602、对命中写请求的block块,更新其write标志位,记录次数加1;

s603、如果缓存层中不存在目标数据,则判断目标数据块的lba是否与smr中zone对的写指针对齐,满足条件则可以直接写入smr中的zone,其数据流向路径为图2中标号2所指,反之则进入步骤s604;

s604、根据s603的判断结果,如果目标数据块的lba与smr中zone对的写指针对未齐,再次判断非顺序写请求的大小是否超过设定的非顺序写阈值tnsw,若超过tnsw则视为较大的“非顺序写”,有利于提高磁盘持久缓冲区的清理效率,可以写入smr磁盘内部的持久缓冲区,其数据流向路径为图2中标号3所指,反之,则进入步骤s605;

s605、由于s603和s604的条件都不成立,此时,数据需要写入到ssd缓存层中,其数据流向路径再次变为图中标号1所指方向,进入步骤s606;

s606、对新进入ssd缓存层的block块,增加write和read标志位,并对write标志位记录次数加1。随后,如果已存在对应的setblock管理链表则将其加入链表中,否则需要创建新的setblock管理链表,完成以上步骤后将新的set集合加入zoneset临时管理链表;

s607、当写请求完成后,判断剩余空间是否小于剩余空间阈值tfree,若小于阈值tfree,则执行步骤s7开始缓存清理操作。

在一定时间过后,smr容量层内部的持久缓冲区或执行读-改-写的清理操作,此时数据将写回到zone中,其数据流向如图2中标号4所指。

s7、当读请求达到时,首先检查请求的块是否存在于缓存中,若存在,则从ssd缓存层读取目标数据返回给上层应用,随后执行步骤s2;如果读请求没有在缓存中命中,则从smr容量层读取目标数据返回给上层应用;

请参阅图7,对于缓存管理功能的数据流向的分析,当剩余空间不足需要执行缓存替换算法时,具体步骤如下;

s701、根据步骤s2记录的更新次数,利用公式hi=wi+x*ri计算各个set中block块的综合热度,并通过公式ci=setblock/zoneblock计算各个set的覆盖率;随后,利用公式wi=∑hi/ci计算求出图3所示的zoneset临时管理链表中各个set集合的最终综合权值;

s702、依据综合权值从大到小降序的规则,将set集合依次加入到zoneset淘汰链表中;

s703、从zoneset淘汰链表末尾、即权重最低的一端开始,首先检查各个节点的setblock管理链表中是否存在起始lba与其要写回目的zone的写指针对齐、并且覆盖率ci达到10%的候选者,如果存在,则将其作为淘汰者,按照顺序写的方式写回到smr的zone中,其数据流向如图2中标号5所示,清理操作直到缓存空间的容量回到剩余空间阈值tfree之上。如果不存在这样的候选者,则进入步骤s704;

s704、再次从zoneset链表末端开始,检查各个节点的覆盖率信息,将覆盖率ci达到50%以上集合作为候选者写回到smr中的持久缓冲区中,其数据流向如图2中标号6所示,清理操作直到缓存空间的容量回到剩余空间阈值tfree之上。此时写回操作将变为非顺序写,当设备端缓冲区已满或设备处于空闲状态,由设备端执行读-改-写操作将持久缓冲区的数据依次写回到smr的zone中,其数据流向如图2中标号4所示,若不符合上述条件则进入步骤s705;

s705、当上述两种情况的候选者均不存在时,则从zoneset链表末端开始,选择权重最低的节点作为候选者写回到smr中的持久缓冲区中,其数据流向如图2中标号6所示,直到缓存空间的容量回到剩余空间阈值tfree之上。此时写回操作将变为非顺序写,当设备端缓冲区已满或设备处于空闲状态,由设备端执行读-改-写操作将持久缓冲区中数据依次写回到smr的zone中。

s8、当写请求到达时,首先检查请求的数据块是否存在于缓存中,若存在,则直接在ssd缓存层更新目标数据,随后执行步骤s2;若缓存层中不存在目标数据,则判断目标数据块的lba是否与smr中zone对的写指针对齐,如果两者对齐则可以直接写入smr中的zone;反之,判断非顺序写请求的大小是否超过设定的非顺序写阈值tnsw,即tnsw=1mb,若超过则视为较大的“非顺序写”,可以写入smr磁盘内部的持久缓冲区;若以上两种情况都不符合,此时,需要写入ssd缓存层中,并执行步骤s1、s2;写请求完成后判断剩余空间是否小于剩余空间阈值tfree,即tfree=ssd缓存容量*10%,若小于阈值tfree,则执行步骤s5。

综上所述,本发明一种面向ssd与ha-smr混合存储系统的写友好型数据管理方法,通过考虑ssd使用寿命和smr的“写放大”现象以及缓存命中率这三类因素,使用ssd作为缓存层对随机写进行缓存,并以上层的io请求起始地址是否与smr的写指针对齐为原则,将符合写指针对齐条件的“顺序”io请求直接定向到smr,更好地了利用机械硬盘顺序写的能力;对于写指针未对齐但是超过设定阈值的非顺序写可以写入到smr磁盘内部的持久缓冲区,进一步对ssd“价值低”的写流量过滤,只将小的、不可避免的非顺序写写入ssd缓冲层。上述步骤减少对ssd的写入次数,避免频繁的擦除,延长其使用寿命,同时对同一个zone的块进行聚簇和重排序,转换为有利于ha-smr中持久缓冲层执行“读-改-写”清理操作的较大连续的块,缩短prt-系统性能恢复时间、减少smr的写放大率,基于以上方式可以有效提升混合存储系统的整体性能。

以上内容仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明权利要求书的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1