一种SSD主机休眠优化的方法与流程

文档序号:15760601发布日期:2018-10-26 19:15阅读:1353来源:国知局
一种SSD主机休眠优化的方法与流程

本发明涉及存储技术领域,尤其涉及一种ssd主机休眠优化的方法。



背景技术:

ssd(固态硬盘)已经被广泛应用于各种场合,目前在pc市场,已经逐步替代传统的hdd,从可靠性和性能方面为用户提供较好的体验。

作为ssd的主要存储介质,nand一直在更新换代。随着工艺的演进,颗粒的可靠性面临较大的挑战,配合一定的纠错策略,颗粒可以提供一定的擦写次数。

在nand固定擦写次数的前提下,由于写放大的存在,ssd能够提供给host写入的数据量会下降。如何降低写放大,是提高ssd寿命的关键因素。在pc用户模型下,除了用户显式写入的数据,如excel、word…文件会产生nand的写入,系统隐性地也会产生较大的写入数据,如文件系统、缓存文件等等。而在这当中,随着操作系统的升级换代,其引入的快速恢复技术–休眠,是引发系统隐性写放大的重要因素之一。

随着新的os对于开机恢复时间以及功耗的诉求越来越高,其在特定场景下会将当前工作场景下的数据备份到ssd上,同时将系统掉电;开机后,从对应的存储空间加载信息,从而实现快速开机。

由于此过程比较频繁,且伴随着大量的数据写入,对于ssd来说,由于写放大的存在,会导致ssd消耗过多的擦写次数,进而极大地影响了ssd寿命。

图1是ssd内部数据存储示例;为了加快访问速度,一般对于tlc类型的ssd都会分出一部分的空间转换为slc类型或者直接增加部分slc类型的存储空间,将需要频繁访问的系统管理数据存储在slc区域上,如映射表、坏块表等等,其具备访问速度快,可靠性高的特定。但其物理空间较小,一般为盘容量的1%左右;将主机host写入的用户数据存储在tlc区域中,存放主机写入的数据,容量大,访问速度和可靠性相对较低。

图2是常规主机休眠流程图。主流os的特定场景存储、恢复的流程,以下以window休眠为例进行说明:

当主机触发进入休眠流程时,会将cpuregister(寄存器)以及dram中的进程数据、缓冲区等进行压缩compression,并按照os所定义的封包格式进行打包format,然后写入到ssd特定的文件上,如hiberfil.sys;完成写入后,主机发送刷新缓存指令flushcache,确保数据写入到ssdnand上;最后发送安全关机的命令。

当主机触发休眠恢复流程时,上电后首先读取之前保存的文件hiberfil.sys的头文件,解析上次保存的信息;加载对应的文件内容也就是休眠数据到主机端进行解压decompression和提取extract,并放置到匹配的位置(cpuregister或者dram);当完成所有的场景数据恢复后,由于cpu的运行上下文都和掉电前保持一致,所以cpu可以继续运行,极大地加速了开机恢复过程。

在休眠恢复流程的最后,主机会通过特殊的命令标识休眠文件无效:将hiberfil.sys的头字段清0,或者将头字段状态修改为”wkup”等状态,或者将hiberfil.sys的文件主体trim(修剪)掉等等……具体策略和os以及文件系统的版本关联。

在此过程中,在频繁进出休眠hibernation的场景下,需要频繁保存恢复cpuregister/dram的数据。而随着主机性能的提升,dram空间越来越大,从4gb到8gb乃至更高,从而使得每次ssd的数据写入量很大。

进一步的,传统的ssd中将主机写入的数据都混合保存在图1所示的tlc区域,此区域在ssd运行态下总是存在一定的写放大,典型的也就意味着主机每写入1gb的数据,就会带来2gb的nand写入,从而极大地降低了ssd寿命。



技术实现要素:

针对以上缺陷,本发明目的在于如何降低休眠进入和恢复引入的隐性写放大问题。

为了实现上述目的,本发明提供了一种ssd主机休眠优化的方法,其特征在于增加模式识别引擎,所述模式识别实现获取休眠需要保存的有效休眠逻辑块地址范围记为check_range,主机触发进入休眠时,先检查是否已经完成模式识别,如果已经完成则直接根据主机命令访问的数据的逻辑块地址是否落入休眠逻辑块地址范围,如果落入则将该命令访问的数据写入主机休眠数据区,所述主机休眠数据区设置在slc区域;如果没有落入休眠逻辑块地址范围,则直接将数据写入用户数据区;如果未完成模式识别,则记录每个命令访问的数据的逻辑块地址范围,同时将数据写入用户数据区;当主机上电触发恢复时,先检查是否已经完成模式识别,如果已经完成则直接从主机休眠数据区加载休眠数据。

所述的ssd主机休眠优化的方法,其特征在于所述模式识别具体为,分别统计记录多次安全关机需要保存现场数据的范围和休眠恢复时需要恢复的现场数据的范围来合并获得有效休眠逻辑块地址范围并记为power_range,具体为:

当接收到安全关机命令也就是触发进入休眠时,将所记录的最近n秒内的命令访问的数据的逻辑块地址的范围lbarange进行拟合,获取其访问的上限lba和下限lba,获取本次的关机逻辑块地址范围powerofflbarange,并写入ssd的系统管理数据区域;

当接收到上电触发休眠恢复时,记录恢复阶段每个命令的访问的数据的逻辑块地址的范围lbarange,并进行拟合,获取其访问的上限lba和下限lba,获取本次的上电逻辑块地址范围poweronlbarange;

将一个轮次的powerofflbarange与poweronlbarange进行取交集,记录为一次power_cycle_x_range,x为检测轮次数;

当检测的轮次数大于预先设置轮次阀值check_cnt_th,且各轮次的power_cycle_x_range的重合度达到预先设置的值时,则标识为已经完成模式识别,并将合并的地址范围存储为有效休眠逻辑块地址范围记为check_range;否则表识为未完成模式识别。

所述的ssd主机休眠优化的方法,其特征在于当上电触发休眠恢复加载完休眠数据后,直接将slc区域中整个主机休眠数据区进行回收。

本发明提供的技术方案可有效降低主机特定场景数据(如休眠)写入的写放大,进而提升了ssd的寿命;并且由于写入高速slc区域,可进一步降低主机进出特定场景(如休眠)的延迟,可有效地提升产品竞争力。

附图说明

图1是ssd内部数据存储示例;

图2是常规主机休眠流程图;

图3是改进后的数据写入策略示意图;

图4是模式识别流程图;

图5是完成模式识别后进入休眠的流程图;

图6是休眠恢复流传图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图3是改进后的数据写入策略示意图;针对主机特定数据模式识别以及不同写入的策略:

1、进入过程:

当主机触发休眠数据写入时,ssd内部检查是否已经完成模式识别(默认为没有完成)。

如已经完成模式识别,则按照本发明的优化策略,识别所写入的数据是否为特定的主机系统数据(如休眠),如是则写入到指定nand区域,否则写入用户数据nand区域。

如尚未完成模式识别,则记录每个命令的访问逻辑块地址lbarange,同时将数据写入到用户数据区域。

重复如上流程直到主机完成所有休眠数据写入。

当接收到安全关机命令,将所记录的最近n秒(n可配置,典型如10秒)内的命令的lbarange进行拟合,获取其访问的上下限lba,组合为powerofflbarange,写入到ssd的系统管理数据区域。

2、恢复过程:

主机上电触发休眠恢复,ssd内部检查是否已经完成模式识别(默认为没有完成)。

如已经完成模式识别,则按照本发明的优化策略,识别所读取的数据是否为特定的主机系统数据,如是从指定区域读取,否则从用户数据区域读取。

如尚未完成模式识别,则记录每个命令的访问lbarange,同时将数据加载并返回主机。

重复如上流程直到所有数据加载完成。

主机结束休眠恢复,并标识休眠文件无效。将本次poweron后的lbarange进行拟合,获取其访问的上下限lba,组合为poweron/offlbarange。

进入主机workload识别flow。

图4是模式识别流程图;

获取本次ssd所记录的记录:poweron/offlbarange;

获取两个lbarange的交集,记为power_cycle_x_range,x为检测次数,依次为1/2/3…;

检查记录的有效powercyclerange有效个数是否大于阈值(check_cnt_th,可自定义,典型为3);

检查有效powercyclerange的重合度,是否均重合且range对应的大小小于阈值(check_size_th,自定义,典型为16gb);

如果检查成功,则标识”完成模式识别”并记录该lbarange为后续的check_range;

如果检查失败,则删除最早的一份power_cycle_x_range,并在后续的poweroff/on周期内继续探测。

图5是完成模式识别后进入休眠的流程图;主机写入用户数据,ssd端判断非休眠数据,故写入传统的tlc区域;主机写入休眠数据,ssd端根据check_range,写入到独立的slc区域。

由于使用了slc区域,其写入性能远远高于tlc区域,所以能够在较快时间内完成主机场景保存,从而加速了休眠进入过程。

图6是休眠恢复流传图:

主机上电后,加载休眠数据;

如果判断为休眠数据,ssd从slc区域加载对应数据;

如果判断为普通用户数据,则从tlc区域加载;

完成休眠恢复后,主机会通过特殊的命令标识休眠文件无效:将hiberfil.sys的头字段清0,将头字段状态修改为”wkup”等状态,将hiberfil.sys的文件主体trim掉等等。具体策略和os以及文件系统的版本关联。

当完成休眠文件加载后,ssd内部将slc区域整个释放掉。当下次休眠进入时,可以直接写入,而不需要进行额外的垃圾回收。

以8gbslc空间为例,同等tlc只能转换为1/3容量的slc,tlc擦写次数为3000,slc擦写次数为30000。在传统ssd中,考虑到写放大存在,能够承受(8gb*3*3000/2),大约36tb的写入量;而在本方案下,则能提供(8gb*30000),大约240tb的写入量。

综合如上策略,因为从高速slc区域加载,所以开机恢复时间可大大加快;又由于才用独立slc区域存储休眠文件,极大地提升了ssd寿命。

以上所揭露的仅为本发明一种实施例而已,当然不能以此来限定本之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于本发明所涵盖的范围。

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