本发明涉及固态存储设备领域,更具体地说是指一种固态存储设备快速trim方法及其系统。
背景技术
现有ssd系统中,trim(ata命令集的命令,用于通知设备哪些逻辑地址不再被占用)的实现方式可能是采用同步方式实现,即在接收到trim命令时,根据trim命令指定的逻辑地址空间,更新映射表,然后将更新过的映射表写入nand完成trim命令处理。同步处理方式的缺点是,当trim命令指定的逻辑地址空间很大时,更新映射表及存储更新后的映射表都会花费较长时间,使得trim命令响应时间过长。
技术实现要素:
本发明的目的在于克服现有技术的缺陷,提供一种固态存储设备快速trim方法及其系统。
为实现上述目的,本发明采用以下技术方案:
一种固态存储设备快速trim方法,包括以下步骤;
s1,判断主机当前是否有请求需要处理;若是,则进入s2,若不是,则进入s4;
s2,执行trim命令,将trim区间按tu划分,非tu对齐的部分更新映射表,其余部分转换为trim表中相应的比特;
s3,将更新的trim表和映射表写入nand;
s4,扫描trim表,逐个对tu处理;当tu处理到一定数量时,将更新的trim表和映射表写入nand。
其进一步技术方案为:所述s2具体包括以下步骤:
s21,执行trim命令,将trim区间按tu划分;
s22,判断是否获取一个待处理的tu;若是,则进入s23,若不是,则进入s3;
s23,判断tu是否完整;若是,则进入s25,若不是,则进入s24;
s24,根据tu更新映射表,并返回s22;
s25,将tu转换为trim表中相应的比特,并返回s22。
其进一步技术方案为:所述s3步骤之后还包括:
发送trim信息通知至主机。
其进一步技术方案为:所述s4具体包括以下步骤:
s41,判断是否从trim表中获取一个tu;若是,则进入s42,若不是,则进入s45;
s42,根据tu更新映射表,将tu对应trim表中的比特设置为0;
s43,判断tu处理数量是否达到预设值;若是,则进入s44,若不是,则返回s1;
s44,将更新的trim表和映射表写入nand;
s45,结束trim后台处理。
其进一步技术方案为:所述s42具体包括以下步骤:
s421,根据tu更新映射表;
s422,清除tu对应trim表中的比特。
其进一步技术方案为:所述s43中,tu处理数量的预设值为5-50个。
一种固态存储设备快速trim系统,包括主机判断单元,执行划分单元,更新写入单元,以及扫描更新单元;
所述主机判断单元,用于判断主机当前是否有请求需要处理;
所述执行划分单元,用于执行trim命令,将trim区间按tu划分,非tu对齐的部分更新映射表,其余部分转换为trim表中相应的比特;
所述更新写入单元,用于将更新的trim表和映射表写入nand;
所述扫描更新单元,用于扫描trim表,逐个对tu处理;当tu处理到一定数量时,将更新的trim表和映射表写入nand。
其进一步技术方案为:所述执行划分单元包括执行模块,待处理判断模块,tu完整性判断模块,更新模块,以及转换模块;
所述执行模块,用于执行trim命令,将trim区间按tu划分;
所述待处理判断模块,用于判断是否获取一个待处理的tu;
所述tu完整性判断模块,用于判断tu是否完整;
所述更新模块,用于根据tu更新映射表;
所述转换模块,用于将tu转换为trim表中相应的比特。
其进一步技术方案为:所述扫描更新单元包括获取判断模块,更新清除模块,预设值判断模块,写入模块,以及处理模块;
所述获取判断模块,用于判断是否从trim表中获取一个tu;
所述更新清除模块,用于根据tu更新映射表,清除tu对应trim表中的比特;
所述预设值判断模块,用于判断tu处理数量是否达到预设值;
所述写入模块,用于将更新的trim表和映射表写入nand;
所述处理模块,用于结束trim后台处理。
其进一步技术方案为:所述tu处理数量的预设值为5-50个。
本发明与现有技术相比的有益效果是:通过判断主机当前是否有请求需要处理;执行trim命令,将trim区间按tu划分,非tu对齐(即上述所说的不完整的tu)的部分直接更新映射表,其余部分转换为trim表中相应的比特;将更新的trim表和映射表写入nand;扫描trim表,逐个对tu处理;当tu处理到一定数量时,将更新的trim表和映射表写入nand;采用标准化存储trim命令及trim后台处理方法,极大降低了ssd响应主机trim命令的时间。
下面结合附图和具体实施例对本发明作进一步描述。
附图说明
图1为本发明一种固态存储设备快速trim方法的流程图;
图2为图1中s2的具体步骤流程图;
图3为图1中s4的具体步骤流程图;
图4为图3中s42的具体步骤流程图;
图5为映射表及trim表在ram中的布局及trim命令执行后对表的更新示意图;
图6为写命令导致映射表和trim表更新的示意图;
图7为本发明一种固态存储设备快速trim系统的方框图。
10主机判断单元20执行划分单元
21执行模块22待处理判断模块
23tu完整性判断模块24更新模块
25转换模块30更新写入单元
40扫描更新单元41获取判断模块
42更新清除模块43预设值判断模块
44写入模块45处理模块
具体实施方式
为了更充分理解本发明的技术内容,下面结合具体实施例对本发明的技术方案进一步介绍和说明,但不局限于此。
如图1到图7所示的具体实施例,其中,如图1至图6所示,本发明公开了一种固态存储设备快速trim方法,包括以下步骤;
s1,判断主机当前是否有请求需要处理;若是,则进入s2,若不是,则进入s4;
s2,执行trim命令,将trim区间按tu划分,非tu对齐的部分更新映射表,其余部分转换为trim表中相应的比特;
s3,将更新的trim表和映射表写入nand;
s4,扫描trim表,逐个对tu处理;当tu处理到一定数量时,将更新的trim表和映射表写入nand。
具体地,如图2所示,s2具体包括以下步骤:
s21,执行trim命令,将trim区间按tu划分;
s22,判断是否获取一个待处理的tu;若是,则进入s23,若不是,则进入s3;
s23,判断tu是否完整;若是,则进入s25,若不是,则进入s24;
s24,根据tu更新映射表,并返回s22;
s25,将tu转换为trim表中相应的比特,并返回s22。
其中,在s3步骤之后还包括:发送trim信息通知至主机。
具体地,如图3所示,s4具体包括以下步骤:
s41,判断是否从trim表中获取一个tu;若是,则进入s42,若不是,则进入s45;
s42,根据tu更新映射表,将tu对应trim表中的比特设置为0;
s43,判断tu处理数量是否达到预设值;若是,则进入s44,若不是,则返回s1;
s44,将更新的trim表和映射表写入nand;
s45,结束trim后台处理。
具体地,如图4所示,s42具体包括以下步骤:
s421,根据tu更新映射表;
s422,清除tu对应trim表中的比特。
其中,s43中,tu处理数量的预设值为5-50个。
其中,tu处理数量的预设值是个变量,可根据s44花费时间及写入数据量权衡:若一次处理的tu过少,则s44总的写入数据量会多(因每次写入都有额外的overhead);若一次处理tu过多,则s44耗时过长,可能影响在此期间对主机命令的响应。
其中,在本发明中,将trim信息的标准化存储,将整个逻辑地址空间划分为固定大小的片段(简称为tu,trimunit),每个片段用1个比特描述该片段的逻辑地址空间是否需要被trim,每个片段描述的逻辑地址空间大小可根据系统ram大小确定,在系统ram中保存整个位图信息,称此位图为trim表;trim表的存储方式和映射表存储方式相同,并与映射表一起存入映射块中;将trim命令转换为标准的trim表中的位图,既方便多个主机trim命令的合并,亦便于trim信息和映射表采用同样的格式存储处理,无需新增额外的处理逻辑。
具体地,图5给出了一个有1tb逻辑地址空间ssd的映射表和trim表在ram的布局及nand中存储示例;
其中,lbn:logicalblocknumber,用户读写基本单元,常见大小为512bytes;
lpn:logicalpagenumber,映射单元,通常为4kb;
mpn:mappingpagenumber,映射表存储单元,本示例中为4kb;
ppn:physicalpagenumber,nand页号,本示例中页大小为8kb
其中,1tb的逻辑地址空间划分为256mlpn,对应256k的mpn;相应的trim表大小为32kb,分配的mpn为256k-256k+7。在收到trimlbn8184-16383的命令后,其中,对lbn8192-16383的trim转换为trim表中的第二个比特,对lbn8184-8191的trim则转换为将映射表中的lpn1023处的表项设置为无映射值,然后将更新的mpn0和mpn256k写入nand,就可向主机报告trim命令处理完成。
其中,如图1至图4中的trim命令的执行过程,ssd接收到trim命令后,将非tu对齐的部分直接更新映射表,其余部分转换为trim表中相应的比特,在将更新的trim表和映射表写入nand后即可通知主机trim命令完成;如此使得trim命令处理过程需要更新的映射表和写入nand的数据都能保持在一个较低的水平,达到快速响应主机trim命令的目的。当主机没有请求需要处理时,系统会在后台根据trim表中的trim信息将对应的映射表项设置为无映射值,直至清空trim表
其中,如图1至图4中的trim命令的后台处理流程,当主机没有请求需要处理时,扫描trim表,逐个tu处理;当处理到一定数量时,保存映射表和trim表,防止因异常掉电导致过多的重复处理;当系统非空闲时,退出后台处理。
其中,在写命令处理过程中,对于写命令涉及的每个lpn,若其对应的tu在trim表置位,则先根据tu更新映射表,然后清除tu在trim表中对应的比特。待后续保存映射表时,同时保存更新过的trim表部分。
如图6所示,描述了写命令导致映射表和trim表更新的示例,当收到用户写lbn8192-8199(对应lpn1024)命令时,检查到该写入区间对应的tu在trim表中已被标记,故先将该tu对应的映射表(lpn1024-2047)项设置为无映射值,并清除trim表中相应的标记,后再处理用户的写命令(lpn1024映射到新分配的写入地址),之后待系统内部发起保存映射表时,上述被更新的mpn1和mpn256k也会被写入nand。
其中,读命令的执行过程,对于读命令涉及的每个lpn,若其对应的tu在trim表置位,则表示该lpn无映射,返回固定的数据给主机即可,否则进行正常的读处理。
如图3所示,本发明还公开了一种固态存储设备快速trim系统,包括主机判断单元10,执行划分单元20,更新写入单元30,以及扫描更新单元40;
主机判断单元10,用于判断主机当前是否有请求需要处理;
执行划分单元20,用于执行trim命令,将trim区间按tu划分,非tu对齐的部分直接更新映射表,其余部分转换为trim表中相应的比特;
更新写入单元30,用于将更新的trim表和映射表写入nand;
扫描更新单元40,用于扫描trim表,逐个对tu处理;当tu处理到一定数量时,将更新的trim表和映射表写入nand。
其中,执行划分单元20包括执行模块21,待处理判断模块22,tu完整性判断模块23,更新模块24,以及转换模块25;
执行模块21,用于执行trim命令,将trim区间按tu划分;
待处理判断模块22,用于判断是否获取一个待处理的tu;
tu完整性判断模块23,用于判断tu是否完整;
更新模块24,用于根据tu更新映射表;
转换模块25,用于将tu转换为trim表中相应的比特。
其中,扫描更新单元40包括获取判断模块41,更新清除模块42,预设值判断模块43,写入模块44,以及处理模块45;
获取判断模块41,用于判断是否从trim表中获取一个tu;
更新清除模块42,用于根据tu更新映射表,清除tu对应trim表中的比特;
预设值判断模块43,用于判断tu处理数量是否达到预设值;
写入模块44,用于将更新的trim表和映射表写入nand;
处理模块45,用于结束trim后台处理。
进一步地,tu处理数量的预设值为5-50个。
本发明采用标准化存储trim命令及trim后台处理方法,极大降低了ssd响应主机trim命令的时间。
上述仅以实施例来进一步说明本发明的技术内容,以便于读者更容易理解,但不代表本发明的实施方式仅限于此,任何依本发明所做的技术延伸或再创造,均受本发明的保护。本发明的保护范围以权利要求书为准。