基于固态硬盘的Trim执行效率提升方法和装置与流程

文档序号:18939130发布日期:2019-10-23 01:00阅读:258来源:国知局
基于固态硬盘的Trim执行效率提升方法和装置与流程

本发明涉及固态硬盘技术领域,特别是涉及一种基于固态硬盘的trim执行效率提升方法、装置、计算机设备和存储介质。



背景技术:

目前,ssd(固态硬盘)已经被广泛应用于各种场合,由于其在性能、功耗、环境适应性等方面的优秀指标,正逐步替换传统的硬盘。当前主流的ssd均采用闪存作为存储介质,闪存特性之一为物理块需要擦除后才能写入新的数据,主机的文件系统为了适应ssd这种特性,特地发明了trim机制,当主机不再需要之前写入到ssd中的一部分数据,则主机发送一个trim命令,告诉ssd这一部分数据(协议中为一段lba区间)主机不再需要了,这里暗示ssd需要将这一部分lba区间对应的映射信息置为无映射(nomap),如此ssd可以将这些lba对应的物理块直接擦除掉,迅速腾出物理空间。

在传统技术中,当前的trim执行方式为ssd固件将trim命令指定的lba区间对应的映射表置为nomap,然后将更新后的映射表写入闪存,最后回复主机trim完成,主机要求这几步操作需要在一定时间内完成,这里假设为1秒。

这种执行方式对小容量的ssd没有问题,因为小容量的映射表也小,1秒时间内足够完成以上几步,但是对于大容量的ssd,映射表比较大,比如4tb的ssd,以4kb为映射单元,则映射表有4gb,ssd的闪存性能需要达到4gb/s才能在1秒内将映射表写入闪存,但是目前主流的闪存和控制器基本都达不到这个性能。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种可以实现在任何ssd容量下都能在规定时间内完成trim命令的基于固态硬盘的trim执行效率提升方法、装置、计算机设备和存储介质。

一种基于固态硬盘的trim执行效率提升方法,所述方法包括:

获取基于固态硬盘的trim执行效率提升请求;

根据所述请求为对应的映射表生成trim信息表,其中所述trim信息表用于记录所述映射表中被trim的颗粒状态;

更新所述trim信息表的状态,并将更新后的trim信息表写入到dram中;

当写入完成后返回主机trim命令已完成。

在其中一个实施例中,所述根据所述请求为对应的映射表生成trim信息表的步骤包括:

将映射表从逻辑上按照一定的颗粒度切割成多段颗粒;

ssd为每段颗粒设置一个1bit的trim状态,所述trim状态表示该段颗粒是否被主机trim掉;

多个所述1bit的trim状态共同组成对应的trim信息表并缓存在dram中。

在其中一个实施例中,所述trim状态表示该段颗粒是否被主机trim掉的步骤包括:

所述trim状态置1表示该段颗粒已被主机trim掉;

所述trim状态清0表示该段颗粒没有被主机trim或者表示被主机trim了且已执行nomap操作和写入闪存操作。

在其中一个实施例中,在所述当写入完成后回复主机trim命令已完成的步骤之后还包括:

ssd启动trim信息表的内部任务,所述内部任务用于将trim信息表中置1的颗粒对应的映射表置为无映射且将颗粒状态清0;

ssd退出所述内部任务并查看是否有主机请求需要响应;

若有则响应所述主机请求直至trim信息表中所有的颗粒状态都为0。

一种基于固态硬盘的trim执行效率提升装置,所述装置包括:

获取模块,所述获取模块用于获取基于固态硬盘的trim执行效率提升请求;

生成模块,所述生成模块用于根据所述请求为对应的映射表生成trim信息表,其中所述trim信息表用于记录所述映射表中被trim的颗粒状态;

状态更新模块,所述状态更新模块用于更新所述trim信息表的状态,并将更新后的trim信息表写入到dram中;

返回模块,所述返回模块用于当写入完成后返回主机trim命令已完成。

在其中一个实施例中,所述生成模块还用于:

将映射表从逻辑上按照一定的颗粒度切割成多段颗粒;

ssd为每段颗粒设置一个1bit的trim状态,所述trim状态表示该段颗粒是否被主机trim掉;

多个所述1bit的trim状态共同组成对应的trim信息表并缓存在dram中。

在其中一个实施例中,所述trim状态表示该段颗粒是否被主机trim掉包括:

所述trim状态置1表示该段颗粒已被主机trim掉;

所述trim状态清0表示该段颗粒没有被主机trim或者表示被主机trim了且已执行nomap操作和写入闪存操作。

在其中一个实施例中,所述装置还包括:

内部任务模块,所述内部任务模块用于ssd启动trim信息表的内部任务,所述内部任务用于将trim信息表中置1的颗粒对应的映射表置为无映射且将颗粒状态清0;

请求响应模块,所述请求响应模块用于ssd退出所述内部任务并查看是否有主机请求需要响应;若有则响应所述主机请求直至trim信息表中所有的颗粒状态都为0。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意一项方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项方法的步骤。

上述基于固态硬盘的trim执行效率提升方法、装置、计算机设备和存储介质,通过获取基于固态硬盘的trim执行效率提升请求;根据所述请求为对应的映射表生成trim信息表,其中所述trim信息表用于记录所述映射表中被trim的颗粒状态;更新所述trim信息表的状态,并将更新后的trim信息表写入到dram中;当写入完成后返回主机trim命令已完成。本发明通过ssd固件中增加一个比较小的trim信息表,记录映射表中被trim的颗粒状态,并且ssd只需要将trim信息表写入闪存后就可回复主机trim完成,极大的提升了trim命令的执行效率。

附图说明

图1为传统技术中全盘写入数据过程的流程示意图;

图2为传统技术中trim执行过程的流程示意图;

图3为一个实施例中基于固态硬盘的trim执行效率提升方法的流程示意图;

图4为另一个实施例中基于固态硬盘的trim执行效率提升方法的流程示意图;

图5为再一个实施例中基于固态硬盘的trim执行效率提升方法的流程示意图;

图6为一个实施例中trim信息表构成的示意图;

图7为一个实施例中基于固态硬盘的trim执行效率提升装置的结构框图;

图8为另一个实施例中基于固态硬盘的trim执行效率提升装置的结构框图;

图9为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

假设主机已对ssd全盘写入过数据,ssd中映射表以及逻辑地址lba与闪存物理地址的对应关系如图1所示,接着主机发起一个trim命令,将整个ssd的lba区间都trim掉,则执行如下步骤:

第一步:ssd固件根据trim命令的lba区间计算出对应的映射表区间,并且更新对应的物理块状态为nomap。

第二步:将更新后的映射表写入到闪存,如图2所示。该操作是必要的,因为映射表是存储在dram中的,dram是掉电丢失数据的,假如没有这一步而直接跳到第三步的话,当第三步刚完成主机就掉电了,则dram中最新的映射表丢失了,后续上电后ssd从闪存读取出来的旧的映射表,所有lba都是存在映射关系的,即ssd认为闪存上的数据都是主机需要的。而主机却认为ssd已经知道之前写入的数据都无用了。这会造成主机与ssd的通信障碍,引起后续操作的性能急速下降。

第三步:在主机规定的时间内(此处假设1秒)ssd回复主机trim命令完成。

当前主流的闪存介质和控制器能达到的顺序写入性能基本不会超过2gb/s,所以当ssd容量不大于2tb时,对应的映射表不大于2gb,该方案可以保证在1秒内完成trim命令,然后当ssd容量进一步增加后,基本满足不了主机的要求了。

本发明针对现有技术的缺陷,提出另外一种高效的trim执行方案,期望在任何ssd容量下都能在规定时间内完成trim命令。

在一个实施例中,如图3所示,提供了一种基于固态硬盘的trim执行效率提升方法,该方法包括:

步骤302,获取基于固态硬盘的trim执行效率提升请求;

步骤304,根据请求为对应的映射表生成trim信息表,其中trim信息表用于记录映射表中被trim的颗粒状态;

步骤306,更新trim信息表的状态,并将更新后的trim信息表写入到dram中;

步骤308,当写入完成后返回主机trim命令已完成。

在传统技术中,由于整个映射表在规定时间内无法写入到闪存,那么可以为映射表生成一个trim信息表,这个trim信息表具备以下特性:首先,该trim信息表可以缓存在dram中,最后需要写入到闪存中。其次,该trim信息表的大小远比映射表本身小。此外,该trim信息表能够描述映射表被trim的信息。最后,闪存中的trim信息表应当保持最新。

具体地,参考图6所示,将映射表从逻辑上按照一定的颗粒度(颗粒度的大小可根据需要配置,这里假设为16kb)切割成n块,ssd固件为每个16kb的颗粒设置一个1bit的trim状态,它表示该颗粒是否被主机trim掉,置1表示该段颗粒已被主机trim掉(暗示对应的映射表还没有执行nomap操作),清0表示该段颗粒没有被主机trim或者表示被主机trim了且已执行nomap操作和写入闪存操作。

这些1bit的trim状态组成一张trim信息表,缓存在dram中,每次更新都需要将最新的表写入到闪存中,该表的大小为ssd容量/颗粒度(bit),以4tb大小容量的ssd和16kb的颗粒度为例,该表大小为4tb/16kb(bit)=32mb,相对于4gb的映射表而言,这是相当小的,且写入到闪存大概只需花费20ms。

ssd固件根据trim的lba区间计算出所有的颗粒,并将对应的trim状态置1,即更新dram中的trim信息表,本实施例中trim信息表的所有颗粒状态都被置1。然后,将trim信息表写入到闪存。最后,ssd回复主机trim命令已完成。

在本实施例中,通过获取基于固态硬盘的trim执行效率提升请求;根据所述请求为对应的映射表生成trim信息表,其中所述trim信息表用于记录所述映射表中被trim的颗粒状态;更新所述trim信息表的状态,并将更新后的trim信息表写入到dram中;当写入完成后返回主机trim命令已完成。本实施例通过ssd固件中增加一个比较小的trim信息表,记录映射表中被trim的颗粒状态,并且ssd只需要将trim信息表写入闪存后就可回复主机trim完成,极大的提升了trim命令的执行效率。

在一个实施例中,如图4所示,提供了一种基于固态硬盘的trim执行效率提升方法,该方法中根据请求为对应的映射表生成trim信息表的步骤包括:

步骤402,将映射表从逻辑上按照一定的颗粒度切割成多段颗粒;

步骤404,ssd为每段颗粒设置一个1bit的trim状态,trim状态表示该段颗粒是否被主机trim掉;

步骤406,多个1bit的trim状态共同组成对应的trim信息表并缓存在dram中。

在一个实施例中,当trim状态置1表示该段颗粒已被主机trim掉;当trim状态清0表示该段颗粒没有被主机trim或者表示被主机trim了且已执行nomap操作和写入闪存操作。

可结合参考图6所示的trim信息表,将映射表从逻辑上按照一定的颗粒度(颗粒度的大小可根据需要配置,这里假设为16kb)切割成n块,ssd固件为每个16kb的颗粒设置一个1bit的trim状态,它表示该颗粒是否被主机trim掉,置1表示该段颗粒已被主机trim掉(暗示对应的映射表还没有执行nomap操作),清0表示该段颗粒没有被主机trim或者表示被主机trim了且已执行nomap操作和写入闪存操作。

这些1bit的trim状态组成一张trim信息表,缓存在dram中,每次更新都需要将最新的表写入到闪存中,该表的大小为ssd容量/颗粒度(bit),以4tb大小容量的ssd和16kb的颗粒度为例,该表大小为4tb/16kb(bit)=32mb,相对于4gb的映射表而言,这是相当小的,且写入到闪存大概只需花费20ms。

在一个实施例中,如图5所示,提供了一种基于固态硬盘的trim执行效率提升方法,该方法在当写入完成后回复主机trim命令已完成的步骤之后还包括:

步骤502,ssd启动trim信息表的内部任务,内部任务用于将trim信息表中置1的颗粒对应的映射表置为无映射且将颗粒状态清0;

步骤504,ssd退出内部任务并查看是否有主机请求需要响应;

步骤506,若有则响应主机请求直至trim信息表中所有的颗粒状态都为0。

具体地,依然假设主机对ssd全盘写入数据后,下发一个trim全盘的trim命令,接下来详细介绍执行流程包括以下步骤:

第一步:ssd固件根据trim的lba区间计算出所有的颗粒,并将对应的trim状态置1,即更新dram中的trim信息表,该示例中trim信息表的所有颗粒状态都被置1。

第二步:将trim信息表写入到闪存。

第三步:ssd回复主机trim命令已完成。

第四步:ssd在没有主机请求时启动trim映射表的内部任务,该任务的功能为将trim信息表中置1的颗粒对应的映射表置为无映射且将颗粒状态清0,每次任务处理的颗粒数可根据需求灵活配置,这里假设为n,当n个颗粒对应的映射表都置为无映射后,ssd固件将当前的映射表和trim信息表一起写入到闪存中。如此可以保证闪存中存储的是最新的trim信息表和对应的映射表,如果在第四步期间ssd掉电了,重新上电后ssd也能从闪存中获得与掉电前一致的状态,没有任何信息丢失。

第五步:ssd退出内部任务,查看是否有主机请求需要响应,如果有则服务主机请求,否则继续执行第四步,直到trim信息表中所有的颗粒状态都为0。

如果在整个trim信息表还没完成清0操作前,主机又发起了对被trim掉的lba区间的读操作,ssd固件首先判断lba对应的trim信息表中的颗粒状态是否为1,如果是1说明该lba之前已被trim掉,直接作为nomap处理,否则从映射表中查找该lba对应的物理地址,从闪存中读取数据。此外,数据准确方面也没有问题。

随着ssd容量的增加,本实施例中可同比例增加颗粒度的大小,以此确保trim信息表的大小保持不变,即本实施例中trim命令的执行时间并不会受ssd容量影响。

应该理解的是,虽然图3-5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3-5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图7所示,提供了一种基于固态硬盘的trim执行效率提升装置700,该装置包括:

获取模块701,用于获取基于固态硬盘的trim执行效率提升请求;

生成模块702,用于根据请求为对应的映射表生成trim信息表,其中trim信息表用于记录映射表中被trim的颗粒状态;

状态更新模块703,用于更新trim信息表的状态,并将更新后的trim信息表写入到dram中;

返回模块704,用于当写入完成后返回主机trim命令已完成。

在一个实施例中,生成模块702还用于:

将映射表从逻辑上按照一定的颗粒度切割成多段颗粒;

ssd为每段颗粒设置一个1bit的trim状态,所述trim状态表示该段颗粒是否被主机trim掉;

多个所述1bit的trim状态共同组成对应的trim信息表并缓存在dram中。

在一个实施例中,trim状态表示该段颗粒是否被主机trim掉包括:

trim状态置1表示该段颗粒已被主机trim掉;

trim状态清0表示该段颗粒没有被主机trim或者表示被主机trim了且已执行nomap操作和写入闪存操作。

在一个实施例中,如图8所示,提供了一种基于固态硬盘的trim执行效率提升装置700,该装置还包括:

内部任务模块705,用于ssd启动trim信息表的内部任务,内部任务用于将trim信息表中置1的颗粒对应的映射表置为无映射且将颗粒状态清0;

请求响应模块706,用于ssd退出内部任务并查看是否有主机请求需要响应;若有则响应主机请求直至trim信息表中所有的颗粒状态都为0。

关于基于固态硬盘的trim执行效率提升装置的具体限定可以参见上文中对于基于固态硬盘的trim执行效率提升方法的限定,在此不再赘述。

在一个实施例中,提供了一种计算机设备,其内部结构图可以如图9所示。该计算机设备包括通过装置总线连接的处理器、存储器以及网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作装置、计算机程序和数据库。该内存储器为非易失性存储介质中的操作装置和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于固态硬盘的trim执行效率提升方法。

本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以上各个方法实施例中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以上各个方法实施例中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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