一种快速处理固态硬盘TRIM的方法与流程

文档序号:16667110发布日期:2019-01-18 23:20阅读:283来源:国知局
一种快速处理固态硬盘TRIM的方法与流程

本发明涉及固态存储相关技术领域,尤其是指一种快速处理固态硬盘trim的方法。



背景技术:

固态硬盘(solidstatedrives,ssd)采用非易失性存储器(non-volatilememory,nvm)作为存储介质。该种介质物理上不支持覆盖写,需要擦除操作之后才能写入数据,而且需按照块(block)的粒度进行擦除,按照页(page)的粒度进行写入,所以即使当某个块当中的有些页的数据已经无效,也不能将其擦除,而是要通过垃圾回收(garbagecollection,gc)将有效的页搬移到其他块并修改逻辑页和物理页地址的映射关系(logicaltophysical,l2p),使得该块的有效页计数(validpagecounter,vpc)为0,再将其擦除。由于系统读写的物理带宽资源及介质的擦除次数均是有限的,所以gc的行为将直接影响到系统的读写性能和使用寿命。

操作系统在删除一个文件时候,文件系统会把相应的空间标识成空,允许新的数据进行覆盖写,但是下层的ssd控制器无法感知这些空间已经无效,还会继续将这些已经无效的数据进行搬移,从而影响ssd设备的性能和使用寿命。为此,微软联合各大ssd厂商提出一种trim指令:主机通过向ssd设备下发trim命令,告诉ssd设备哪些空间将不被再用,使ssd设备可以避免无效数据的搬移。主机每次下发的trim命令包含起始逻辑地址(lba)和范围。ssd控制器在处理每个lba的trim的时候需要将对应页的l2p修改成无效,并将对应块的vpc减1。当主机需要trim的lba范围增加的时候,这种逐个lba处理的所需的时间呈线性增加,后续所有主机下发的io命令将会被阻塞,导致巨大的主机io延时,甚至超时。所以,如何快速地完成trim命令显得非常关键,也是ssd控制器设计的一个难点。



技术实现要素:

本发明是为了克服现有技术中存在上述的不足,提供了一种能够有效解决trim命令处理延时的快速处理固态硬盘trim的方法。

为了实现上述目的,本发明采用以下技术方案:

一种快速处理固态硬盘trim的方法,采用trim状态表和trim节点状态表记录主机下发的待trim的lba并快速向主机返回trim命令,之后通过设备表项处理模块在背景中处理待trim的lba,具体操作步骤如下:

(1)trim状态表以lba为索引,代表对应的lba是否等待trim,将k个lba映射到一个trim节点,以trim节点为索引建立一个trim节点状态表,trim节点状态表的内容为每个节点的状态;

(2)当主机下发trim命令后,ssd控制器根据起始lba地址和范围将trim状态表和trim节点状态表更新,将主机所要trim的lba信息记录下来,更新完trim状态表和trim节点状态表的时候向主机返回trim命令;

(3)设备表项处理模块在背景上将记录的待trim的lba进行trim操作完成。

本发明提出一种通过建立多个trim相关表项,快速地将主机trim的lba记录下来并返回trim命令,之后在背景中处理trim的各个操作,解决trim命令处理延时巨大的问题的方法。同时,该方法在trim背景处理过程中优先响应主机io的表项的请求,使得ssd的性能不受背景trim操作的明显影响。通过上述方法可以通过少量的trim状态表和trim节点状态表的修改,就可以记住主机所要trim的lba;随着主机发送的trim的lba范围的增加,所需要修改的表项增加量极小,trim返回的时间对trim范围不敏感,可以保证任意trim范围下ssd控制器快速返回trim给主机;由于表项处理模块的处理属于控制面处理,相对于数据面在整个系统中不易成为系统瓶颈,所以系统背景trim操作可以很快完成。由于系统在trim背景处理过程中,优先响应主机的表项访问,所以背景trim的处理过程中,不会对系统性能产生明显的影响。

作为优选,在步骤(1)中,k的取值根据系统调整,通过trim节点状态表可以获悉:该节点中是否有lba待trim,是所有lba待trim还是部分lba待trim的信息;如果是部分lba待trim,则可以通过查找该节点中每个lba对应的trim状态表得知哪些lba待trim;初始时,所有的trim状态表设成m0状态,表示对应的lba不需要trim;所有的tirm节点状态表设成s0,表示对应节点中没有lba需要trim。

作为优选,在步骤(2)中,更新方法如下:lba范围所覆盖的节点中,中间节点的节点状态一律更新成s1,表示该节点的所有lba待trim,对应的trim状态表无需处理;对于头尾节点,如果没有按照节点的粒度对齐,则将其节点状态更新成s2,表示该节点有部分lba待trim,并根据该节点中待trim的lba分布将对应的trim状态表更新成m1,表示对应的lba需要trim。

作为优选,在步骤(3)中,具体的trim操作如下:设备的表项处理模块在空闲的时候将状态为s1或者s2的trim节点逐个处理,如果是s1的节点,先把该节点状态改成s2,所对应的所有的trim状态表状态改成m1,然后按照trim状态表逐个lba进行处理,处理完之后退出该节点,并将该节点状态更新成s0;如果是s2的节点,直接按照trim状态表逐个lba进行处理,处理完成后退出该节点,并将该节点状态更新成s0。

作为优选,在步骤(3)中,当有主机io读写命令下发到设备的时候,如果设备正在处理某一个trim节点,设备立即退出当前的节点转而处理主机io读写所击中的lba表项操作,待完成后再继续执行背景trim;如果主机下发的是io正好是待trim的lba,那么如果主机下发的是io读,则直接返回无效;如果主机下发的是io写,且该lba是待trim的lba,则更新l2p表和vpc表,更新trim状态表为m0。

作为优选,在步骤(3)中,在垃圾回收的时候,ssd控制器先查找trim状态表确认将要搬移的lba是否是待trim的lba,如果是,就不进行搬移,防止搬移无效的数据。

本发明的有益效果是:快速地将主机trim的lba记录下来并返回trim命令,之后在背景中处理trim的各个操作,解决trim命令处理延时巨大的问题的方法;在trim背景处理过程中优先响应主机io的表项的请求,使得ssd的性能不受背景trim操作的明显影响。

附图说明

图1是本发明的表项映射关系示意图;

图2是本发明的表项映射关系实例图;

图3是本发明的表项更新示意图;

图4是本发明的trim节点状态转换示意图。

具体实施方式

下面结合附图和具体实施方式对本发明做进一步的描述。

一种快速处理固态硬盘trim的方法,采用trim状态表和trim节点状态表记录主机下发的待trim的lba并快速向主机返回trim命令,之后通过设备表项处理模块在背景中处理待trim的lba,具体操作步骤如下:

(1)trim状态表以lba为索引,代表对应的lba是否等待trim,将k个lba映射到一个trim节点,以trim节点为索引建立一个trim节点状态表,trim节点状态表的内容为每个节点的状态,如图1所示;k的取值根据系统调整,通过trim节点状态表可以获悉:该节点中是否有lba待trim,是所有lba待trim还是部分lba待trim的信息;如果是部分lba待trim,则可以通过查找该节点中每个lba对应的trim状态表得知哪些lba待trim;初始时,所有的trim状态表设成m0状态,表示对应的lba不需要trim;所有的tirm节点状态表设成s0,表示对应节点中没有lba需要trim。

(2)当主机下发trim命令后,ssd控制器根据起始lba地址和范围将trim状态表和trim节点状态表更新,将主机所要trim的lba信息记录下来,更新完trim状态表和trim节点状态表的时候向主机返回trim命令;更新方法如下:lba范围所覆盖的节点中,中间节点的节点状态一律更新成s1,表示该节点的所有lba待trim,对应的trim状态表无需处理;对于头尾节点,如果没有按照节点的粒度对齐,则将其节点状态更新成s2,表示该节点有部分lba待trim,并根据该节点中待trim的lba分布将对应的trim状态表更新成m1,表示对应的lba需要trim。

(3)设备表项处理模块在背景上将记录的待trim的lba进行trim操作完成;具体的trim操作如下:设备的表项处理模块在空闲的时候将状态为s1或者s2的trim节点逐个处理,如果是s1的节点,先把该节点状态改成s2,所对应的所有的trim状态表状态改成m1,然后按照trim状态表逐个lba进行处理,处理完之后退出该节点,并将该节点状态更新成s0;如果是s2的节点,直接按照trim状态表逐个lba进行处理,处理完成后退出该节点,并将该节点状态更新成s0。

当有主机io读写命令下发到设备的时候,如果设备正在处理某一个trim节点,设备立即退出当前的节点转而处理主机io读写所击中的lba表项操作,待完成后再继续执行背景trim;如果主机下发的是io正好是待trim的lba,那么如果主机下发的是io读,则直接返回无效;如果主机下发的是io写,且该lba是待trim的lba,则更新l2p表和vpc表,更新trim状态表为m0。

在垃圾回收的时候,ssd控制器先查找trim状态表确认将要搬移的lba是否是待trim的lba,如果是,就不进行搬移,防止搬移无效的数据。

本发明的优点在于:可以通过少量的trim状态表和trim节点状态表的修改,就可以记住主机所要trim的lba;随着主机发送的trim的lba范围的增加,所需要修改的表项增加量极小,trim返回的时间对trim范围不敏感,可以保证任意trim范围下ssd控制器快速返回trim给主机;由于表项处理模块的处理属于控制面处理,相对于数据面在整个系统中不易成为系统瓶颈,所以系统背景trim操作可以很快完成。由于系统在trim背景处理过程中,优先响应主机的表项访问,所以背景trim的处理过程中,不会对系统性能产生明显的影响。

以下是本发明的一种具体实例:

如图2所示,每个l2p表位宽32bit,trim状态表位宽为1bit,trim节点状态表位宽为2bit。32k个trim状态表单元以作为一个组映射到一个trim节点表的单元。每个lba的大小为4kb,如果ssd设备的容量为1tb,则l2p表的大小为1gb,trim状态表为32mb,tirm节点状态表为2kb。

trim状态表一共有两种状态:0表示无需处理,1表示待trim。tirm节点状态表,一共有3种状态:idle(2’b00),pending(2’b01),dirty(2’b10)。其中idle表示该节点没有待trim的lba;pending表示该节点的所有lba待trim;dirty表示该节点中有部分lba待trim,需要根据trim状态表获悉哪些lba等待被trim。

ssd设备上电初始化的时候,所有的trim节点状态表都初始化成idle状态,所有trim状态清0。当主机下发trim命令后,ssd控制器根据起始lba地址和范围将对应的trim节点状态表更新成pending状态,如果主机下发trim的lba范围没有按照trim节点的粒度对齐,则将头尾非对其的lba所对应的trim节点的状态成dirty并将对应的trim状态表置成1,随后向主机返回trim命令完成。如图3所示,为主机下发trim的lba范围从lba(32k-2)~lba(96k+1),该范围共覆盖的lba个数为62k+4,涉及两个完成的节点和两个不完整的头尾节点。ssd控制器将节点0和3的节点状态表改成dirty状态,并将相应的trim状态表置成1;同时将节点1和2的节点状态表改成pending状态,然后向主机返回trim命令。处理该64k+4个lba的trim,ssd控制器只需要头尾trim节点各两个trim状态表及两个中间接点的trim节点状态表,一共2bit+2bit+2x2bit=8bit,就可以返回trim命令。

trim命令返回后,ssd控制器表项处理模块可以在背景上将主机需要trim的lba真正trim掉。每个lba的trim包括:l2p表项的修改、将原数据所在的块的vpc减1等操作。设备的表项处理模块将pending或者dirty的节点按照trim状态表逐个处理:如果是pending的节点,先把改节点所对应的trim比特表置位并将其状态改为dirty,然后按照trim比特表逐个lba进行处理,处理完每个lba的时候将对应的trim状态表清0,直至处理完所有lba后退出该节点,并将该节点状态更新成idle;如果是dirty节点,直接按照trim状态表逐个lba进行处理,处理完成后退出该节点,并将该节点状态更新成idle,如图4所示。

ssd控制器在背景上处理待trim的lba的时候,如果主机再下发trim命令的时候上一条trim命令的背景操作还未完成,同样可以按照上述流程进行处理。

实例中,ssd控制器正在处理trim节点0的时候:

如果主机下发了写lba(100k),ssd控制器立即退出当前的节点0转而处理主机io写所击中的lba(100k)的表项操作,由于lba(100k)不属于待tirm的lba,ssd控制器按照正常写来处理lba(100k)表项操作,然后返回继续处理节点0;如果主机下发写lba(64k),ssd控制器立即退出节点0,由于lba(64k)位于节点2,且该节点状态为pending,ssd控制器先将节点2改成dirty状态,将该节点所有trim状态表置成1,再将lba(64k)对应trim状态表清0,然后再更改l2p表,修改vpc表等操作,然后再继续执行背景trim。

如果主机下发了读lba(100k),ssd控制器立即退出节点0转而处理主机io读所击中的lba(100k)的表项操作,由于lba(100k)不属于待trim的lba,ssd控制器将l2p里面指向的物理地址中的数据返回给主机。如果主机下发读lba(64k),ssd控制器立即退出节点0,由于lba(64k)位于节点2,该节点是状态为pending,ssd控制器将向主机返回无效的数据。然后表项处理模块继续处理背景的trim。

ssd控制器在做垃圾回收的时候,先查找将要搬移的lba是否是待trim的lba,如果是,就不进行搬移,防止搬移无效的数据。

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