本发明涉及存储设备,特别涉及一种存储装置的p2l数据管理方法及装置。
背景技术:
1、nand flash是一种非易失性存储介质,广泛应用于sd,emmc,ufs,ssd等闪存存储产品(以下简称为闪存)。根据现有技术可知,闪存存储产品具有以下三个特性:1.擦后写,只有被擦除过后,该页才能被写入新数据;2.读/写操作以页为粒度,擦除操作以块为粒度;3.每个块具有有限的擦除次数。基于上述特性,闪存存储产品无法像传统的磁盘一样与主机的文件系统直接相连,而是需要使用闪存转换层(ftl)来隐藏闪存的三个特性带来的接口不一致问题,使得文件系统可以像机械硬盘(hard disk drive,hdd)一样访问闪存。ftl主要包括地址映射、垃圾回收和损耗均衡三个功能模块。地址映射记录逻辑地址与物理地址的映射关系。为了减少擦后写特性带来的写放大影响,在ftl层提出异地更新技术来减少擦除和数据移动的开销。由于异地更新会产生一些无效的空间,当闪存没有足够的剩余空间,系统会触发垃圾回收操作来回收无效的空间。为避免由于频繁擦写操作带来的物理失效,提出损耗均衡技术来使所有块均匀的损耗从而延长闪存寿命。
2、为了实现上述三个功能模块,现有技术中需要建立l2p(逻辑地址到物理地址,logical_2_physical)表和p2l(物理地址到逻辑地址,physical_2_logical)表,其中,l2p记录逻辑地址与物理地址映射关系,记录的内容是物理地址,表的地址偏移与逻辑地址是一一对应关系;p2l记录物理地址与逻辑地址映射关系,记录的内容是逻辑地址,表的地址偏移与物理地址是一一对应关系。地址映射是由主机发起的,主要包括读、写操作:读操作时用逻辑地址从l2p表中获取物理地址,从该物理地址中读取对应的数据。写操作时,用逻辑地址从l2p表获取表中的信息,如果是0x7fff,则表示该逻辑地址是空闲的,即该逻辑地址未被分配有对应的物理地址,于是分配新的物理地址给该写请求,假如正在分配的块分配完毕,则分配新块,否则从正在分配的块分配下一页物理地址,然后将新分配的物理地址更新至l2p表,并更新p2l上新分配物理地址对应的逻辑地址。写操作时,用逻辑地址从l2p表获取表中的信息,如果该逻辑地址已经有物理地址(称之为旧物理地址)与其相对应,则无效掉该旧物理地址在p2l表上的逻辑地址,具体操作为将p2l表中该旧物理地址对应的表项修改成0xffff,表示该旧物理地址为无效状态。垃圾回收(gc)是由闪存装置主动发起的,主要包括擦除、移动操作:判断某个块符合垃圾回收(gc)条件时,扫描要进行垃圾回收的块的p2l表,通过识别p2l表中各物理页对应的表项中的标志数据是否为0xffff,从而判断各页是否为无效状态,通过识别p2l表中各物理页对应的表项中的标志数据是否为0x0000,从而判断各页是否为有效状态,假如是有效状态,表明该页是有效数据,则产生移动操作,其中移动操作与写操作类似。当选定的块扫描完毕且有用数据都已经被移到新的地址后,执行擦除操作,完成垃圾回收。其中,擦除操作首先修改p2l表,将要擦除的物理块的p2l表初始化为0x7fff,表示空闲状态。其中关于p2l映射表中用于标识物理地址是否有效的现有技术可以参照专利文献1,如图4所示,所述映射表包括描述性的标志数据,其代表物理地址和逻辑地址之间的映射关系以及对应所述物理地址的页面的数据状态。更确切地,参照图4中的映射表,物理地址p2对应逻辑地址l2,并且物理地址p2的页面数据状态是有效状态0x0000。
3、根据上述内容可知,p2l表是闪存装置运行过程中不可或缺的数据结构,因此闪存装置需要分配相应的存储单元用于储存对应的p2l表,因此,如何降低存储p2l表所需的存储空间是需要优化的方向。经检索,专利文献2公开了一种可以提高缓存l2p映射表内映射记录密度的方案,该方案应用于对l2p表占用的缓存空间进行优化,其原理为调整l2p映射条目的数据结构,原来的每条l2p映射条目仅包括逻辑地址和对应的物理地址(即映射记录),而专利文献2中,为每条映射条目增加了长度字段,对于若干个连续的l2p映射记录,将其合并成一条l2p映射条目,调整后的每条l2p映射条目包括若干连续映射记录的最小逻辑地址、最小逻辑地址对应的物理地址,以及长度字段记录的连续l2p映射记录的数量(即长度),该方案实现了利用一条l2p映射条目记录多条l2p映射记录,从而提高缓存l2p映射表内映射记录密度。
4、发明人在专利文献2提供的提高缓存l2p映射表内映射记录密度的方案基础上,对如何提高p2l映射表的映射记录密度进行研究,研究过程中发现专利文献2的方案仍然存在以下不足:
5、1、原来的每条映射条目仅包括一对逻辑地址和对应的物理地址(即一条映射记录),而专利文献2中的方案,要在每条映射条目中新增长度字段,需要对映射条目的数据结构进行调整,每条映射条目都需要增加字段后,实现映射表的编程任务也会变得更复杂。例如,需要修改现有映射条目数据结构的代码并编写新的代码来实现映射条目的新数据结构。
6、2、由于专利文献2中对于每条映射条目都需要增加长度字段,即与原来的映射条目数据结构不同,想要达到其提高缓存映射表内映射记录密度的效果,就必须对闪存中映射表的所有内容进行全部更新,意味着对于有部分映射条目已经写入数据的闪存装置,只能够将该闪存装置格式化后才能实现达到其提高缓存映射表内映射记录密度的效果,即无法实现热更新。
7、3、对于长度为1的映射条目,在写操作时,也需要维护其长度字段,即将其设置为1,增加了维护开销。
8、专利文献1:中国专利,专利名称,非易失性存储设备中数据管理方法和映射表更新方法,授权公告号,cn101458961b,授权公告日,2014-06-18。
9、专利文献2:中国专利,专利名称,提高地址映射表中映射信息密度的方法,授权公告号,cn107066393b,授权公告日,2020-06-09。
技术实现思路
1、本发明的目的在于提供一种存储装置的p2l数据管理方法及装置,能够在提高p2l映射表的映射记录密度的基础上,无需重新编写代码实现p2l映射条目的数据结构,并且对于有部分映射条目已经写入数据的闪存装置(即存储装置),可以实现热更新来提高p2l映射表的映射记录密度。
2、为了实现上述发明目的,提供如下技术方案:
3、第一方面,提供一种存储装置的p2l数据管理方法,所述方法包括:
4、在写入数据时,将数据按页为单位进行分割,再按逻辑地址从低到高的顺序将数据依次写入闪存中具有多个连续空闲页的块内,存储后的每一页数据均对应一条p2l映射记录,则根据这些p2l映射记录生成一到多条p2l映射条目;如果写入时没有产生跨块写入,则p2l映射记录是连续的,能够合并成一组相邻的2条p2l映射条目;如果写入时产生了跨块写入,则存储在同一个块内的数据对应的p2l映射记录是连续的,所对应的全部p2l映射记录能够合并成一组相邻的2条p2l映射条目;因此,如果写入数据页时产生了跨块存储并分布在s个块,则共生成了2s或2s-1条p2l映射条目,基于p2l映射条目建立p2l映射表;
5、其中,每条p2l映射条目仅包括物理地址和逻辑映射数据,包括物理地址和逻辑映射数据所占的字节数相同;对于仅由1条p2l映射记录组成的p2l映射条目,所述逻辑映射数据为用于指示所在p2l映射条目的物理地址对应的逻辑地址;
6、对于由多条p2l映射记录合并成的每一组相邻的2条p2l映射条目:同一组中相邻的2条p2l映射条目的物理地址相同;同一组中第一条p2l映射条目的逻辑映射数据为用于指示所在组的多条p2l映射记录中的最小逻辑地址;同一组中第二条p2l映射条目的逻辑映射数据为用于指示所在组合并的多条p2l映射记录的数量数据。
7、作为进一步的改进,所述数量数据的最高前n位为预设的标志符号,所述数量数据除了最高前n位之外的其他位共同组成的数用于指示所在组合并的多条p2l映射记录的数量,n为自然数。
8、作为进一步的改进,所述方法还包括:
9、在写入数据时,跳过逻辑地址中的最高前n位与预设的标志符号相同的逻辑地址范围。
10、作为进一步的改进,所述方法还包括从p2l映射表中计算出目标物理地址对应的逻辑地址的流程,该流程具体包括:
11、检索p2l映射表,在能够直接从p2l映射条目的物理地址中检索到目标物理地址的情况下,将该p2l映射条目的物理地址对应的逻辑地址作为目标物理地址对应的逻辑地址;
12、检索p2l映射表,在不能直接从p2l映射条目的物理地址中检索到目标物理地址的情况下,比对目标物理地址和各映射条目所表示的物理地址范围来判断该目标物理地址paa是否落在某一组相邻的2条p2l映射条目所表示的物理地址范围内;
13、对于某个合并的多条p2l映射记录的数量为n的一组相邻的2条p2l映射条目,其第一条p2l映射条目中存储的物理地址paa1,逻辑地址为laa1,当paa>paa1,且paa<=paa1+n-1,则表示目标物理地址命中了p2l映射表中的一组相邻的2条p2l映射条目,目标物理地址paa对应的逻辑地址laa的计算方法为:laa=laa1+paa-paa1,通过计算即可完成对逻辑地址的寻址。
14、作为进一步的改进,在执行垃圾回收操作时,所述方法还包括:
15、获取目标块的块首物理地址;所述目标块为需要进行垃圾回收的块;
16、获取p2l映射表中与所述块首物理地址同属一个目标块的全部p2l映射条目;
17、从与所述块首物理地址同属一个目标块的全部p2l映射条目中计算出各p2l映射条目包含的各物理地址及其对应的逻辑地址,以恢复该块所有的p2l映射记录,作为目标p2l映射记录集合;
18、从闪存中的l2p映射表中加载与目标p2l映射记录集合中对应的所有逻辑地址对应的l2p映射记录到内存中,作为目标l2p映射记录集合;
19、比较目标p2l映射记录集合和目标l2p映射记录集合二者中,具有相同逻辑地址的p2l映射记录和l2p映射记录,如果二者都指向相同的物理地址,表明该物理地址指向的页是有效数据,则产生移动操作;
20、当该目标块中的有效数据都已经被移到新的地址后,执行擦除操作,完成该目标块的垃圾回收。
21、作为进一步的改进,在执行垃圾回收操作时,所述方法还包括:
22、获取目标块的块首物理地址;所述目标块为需要进行垃圾回收的块;
23、获取p2l映射表中与所述块首物理地址同属一个目标块的全部p2l映射条目;
24、检测到同属一个目标块的全部p2l映射条目仅包括属于同一组相邻的2条p2l映射条目,并且根据该组相邻的2条p2l映射条目中第二条p2l映射条目的逻辑映射数据指示所在组合并的多条p2l映射记录的数量等于目标块的页数时,从闪存中的l2p映射表中加载与目标块的全部p2l映射条目包含的所有逻辑地址对应的l2p映射记录到内存中,作为目标l2p映射记录集合;
25、对目标块的全部p2l映射条目包含的物理地址依次加1,分别计算出目标块的全部p2l映射条目包含的物理地址及其对应的逻辑地址,以在每次计算时得到一条当前计算对应的p2l映射记录并删除上一次计算得到的p2l映射记录,并在每次计算得到一条p2l映射记录时,比较该条p2l映射记录和目标l2p映射记录集合中具有相同逻辑地址的l2p映射记录,如果二者都指向相同的物理地址,表明该物理地址指向的页是有效数据,则产生移动操作;
26、当该目标块中的有效数据都已经被移到新的地址后,执行擦除操作,完成该目标块的垃圾回收。
27、作为进一步的改进,所述方法还包括:
28、在写入数据时,如果写入数据的页数为n,存储装置中具有多个连续空闲页的块中的连续空闲页数量为m,且n>m时,则需要跨块存储,即需要剩余的数据页按逻辑地址从低到高的顺序将数据依次写入其他具有多个连续空闲页的块内,直至所有数据页均被写入存储装置中;
29、如果写入数据页时产生了跨块存储,则每一组相邻的2条p2l映射条目中第二条p2l映射条目的逻辑映射数据指示所在组合并的多条p2l映射记录的数量即为相应块中所存储数据页的数量。
30、作为进一步的改进,所述每一组相邻的2条p2l映射条目存储了若干个连续的p2l映射记录;如果一条物理地址paa为p的p2l映射记录mprec1,其逻辑地址laa为l,如果另外一条物理地址paa为p+1的p2l映射记录mprec2,其逻辑地址laa为l+1,则p2l映射记录mprec1和mprec2是连续的,如果另外一条物理地址paa为p+2的p2l映射记录mprec3,其逻辑地址laa为l+2,则p2l映射记录mprec1、mprec2和mprec3是连续的,以此类推,有n条p2l映射记录,其物理地址paa的值从低到高是按照p、p+1、p+2、…、p+n-1连续增长的,相邻p2l映射记录中记录的物理地址的值相差1,而其逻辑地址laa的值也是从低到高是按照l、l+1、l+2、…、l+n-1连续增长的,相邻p2l映射记录中记录的逻辑地址的值相差1,这样的n条p2l映射记录即为连续的p2l映射记录。
31、第二方面,提供了一种存储装置,包括闪存、内存、处理器以及存储在闪存上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的一种存储装置的p2l数据管理方法中的各个步骤。
32、第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的一种存储装置的p2l数据管理方法中的各个步骤。
33、相较于现有技术,本发明提供的一种存储装置的p2l数据管理方法及装置,至少具有如下有益效果:
34、1、由一组相邻的2条p2l映射条目来表示连续的多条p2l映射记录,并且每条p2l映射条目仅包括物理地址和逻辑映射数据,包括物理地址和逻辑映射数据所占的字节数相同,即不需要改变p2l映射条目的数据结构,因此能够在提高p2l映射表的映射记录密度的基础上,无需重新编写代码实现p2l映射条目的数据结构。
35、2、对于有部分映射条目已经写入数据的闪存装置,由于用于表示连续的多条p2l映射记录的数据结构与已经写入数据的部分映射条目相同,因此对于已经生成的p2l映射表中的部分p2l映射条目可以不需要修改,而对于未生成的p2l映射条目中存在p2l映射记录连续的情况,可以无需将存储装置全部数据格式化或删除,而是直接将用于表示连续的多条p2l映射记录的一组相邻的2条p2l映射条目写入到已经创建的p2l映射表对应的映射条目中,可以实现热更新来提高p2l映射表的映射记录密度。
36、3、由于无需在每个p2l映射条目都增加专门的长度字段,因此对于长度为1的p2l映射条目,在写操作时,无需维护其长度字段,而是直接将对应的逻辑地址写入到对应的物理地址所在映射条目即可,无需额外对长度为1的p2l映射记录进行长度字段的维护,即一条p2l映射条目对应1条p2l映射记录,降低了维护长度为1的映射条目的开销。