发明内容
本申请实施例旨在提供一种地址映射方法、固态硬盘控制器及固态硬盘,其解决了现有固态硬盘映射表占用空间大的技术问题,提高固态硬盘的可靠性。
为解决上述技术问题,本申请实施例提供以下技术方案:
第一方面,本申请实施例提供一种地址映射方法,应用于固态硬盘,所述方法包括:
将固态硬盘中的超级块划分为若干个业务超级块组和一个热备超级块组,其中,每一业务超级块组包括若干个业务超级块,所述热备超级块组包括若干个热备超级块;
建立每一逻辑地址段中的地址段与业务超级块组中的每一超级块的映射关系,并建立每一业务超级块的逻辑地址与物理地址的映射表;
当某一业务超级块对应的地址段被反复顺序写时,建立该业务超级块和热备超级块组中的一个热备超级块的映射关系,并刷新该业务超级块的逻辑地址与物理地址的映射表。
在一些实施例中,所述将固态硬盘中的超级块划分为若干个业务超级块组,包括:
若固态硬盘为首次使用,则顺序选择预设数量的业务超级块,以确定每一业务超级块组;
若固态硬盘被格式化后重新使用,根据每一业务超级块的擦写次数,确定每一业务超级块组。
在一些实施例中,所述根据每一业务超级块的擦写次数,确定每一业务超级块组,包括:
根据每一业务超级块的擦写次数,选择若干个业务超级块组成一个业务超级块组,使得不同的业务超级块组的平均擦写次数的差值均小于预设差值阈值。
在一些实施例中,所述建立每一逻辑地址段中的地址段与业务超级块组中的每一超级块的映射关系,包括:
将固态硬盘的逻辑地址分段,确定多个逻辑地址段;
建立每一逻辑地址段与每一业务超级块组的映射关系;
将每一逻辑地址段划分为多个地址段,建立每一地址段与业务超级块组中的每一超级块的映射关系。
在一些实施例中,所述方法还包括:
当某一业务超级块对应的地址段被反复顺序写时,从热备超级块组中选择一个热备超级块,将主机数据写入到该热备超级块。
在一些实施例中,所述方法还包括:
若某一热备超级块被写满,则从所述热备超级块组中获取一个新的热备超级块,并更新该业务超级块和热备超级块组中的热备超级块的映射关系。
在一些实施例中,所述方法还包括:
当某一业务超级块中的无效数据大于预设阈值时,将该业务超级块中的有效数据搬移到对应的热备超级块,并擦除该业务超级块;
将该业务超级块对应的热备超级块加入该业务超级块对应的业务超级块组,并将擦除后的业务超级块加入所述热备超级块组。
在一些实施例中,所述方法还包括:
当某一业务超级块出现坏块时,从热备超级块组中选择一个物理块作为该坏块的替换块,并将该坏块的有效数据写入到该替换块中,并更新重映射表;其中,所述重映射表存储坏块到替换块的映射关系。
在一些实施例中,在从热备超级块中选择一个物理块作为该坏块的替换块之前,所述方法还包括:从热备超级块组中预留一个热备超级块作为坏块的替换块,其中,预留的热备超级块与坏块位于同一个晶粒;
所述从热备超级块中选择一个物理块作为该坏块的替换块,包括:
将预留的热备超级块作为该坏块的替换块。
在一些实施例中,所述方法还包括:
获取固态硬盘的IO模式;
判断所述IO模式是否为顺序写模式;
若是,则进入第一地址映射模式,其中,所述第一地址映射模式,包括:将固态硬盘中的超级块划分为若干个业务超级块组和一个热备超级块组,其中,每一业务超级块组包括若干个业务超级块,所述热备超级块组包括若干个热备超级块;建立每一逻辑地址段中的地址段与业务超级块组中的每一超级块的映射关系,并建立每一业务超级块的逻辑地址与物理地址的映射表;当某一业务超级块对应的地址段被反复顺序写时,建立该业务超级块和热备超级块组中的一个热备超级块的映射关系,并刷新该业务超级块的逻辑地址与物理地址的映射表;
若否,则进入第二地址映射模式,其中,所述第二地址映射模式,包括:设置全局映射表,所述全局映射表用于确定逻辑地址和物理地址的映射关系。
第二方面,本申请实施例提供一种固态硬盘控制器,应用于固态硬盘,所述固态硬盘包括至少一个闪存介质,所述固态硬盘控制器包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如第一方面所述的地址映射方法。
第三方面,本申请实施例提供一种固态硬盘,包括:
如第二方面所述的固态硬盘控制器;
至少一个闪存介质,与所述固态硬盘控制器通信连接。
第四方面,本申请实施例还提供了一种非易失性计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使固态硬盘能够执行如上所述的地址映射方法。
本申请实施例的有益效果是:区别于现有技术的情况下,本申请实施例提供的一种地址映射方法,所述方法包括:将固态硬盘中的超级块划分为若干个业务超级块组和一个热备超级块组,其中,每一业务超级块组包括若干个业务超级块,所述热备超级块组包括若干个热备超级块;建立每一逻辑地址段中的地址段与业务超级块组中的每一业务超级块的映射关系,并建立每一业务超级块的逻辑地址与物理地址的映射表;当某一业务超级块对应的地址段被反复顺序写时,建立该业务超级块和热备超级块组中的一个热备超级块的映射关系,并刷新该业务超级块的逻辑地址与物理地址的映射表。一方面,通过将固态硬盘中的超级块划分为若干个业务超级块组和一个热备超级块组,建立每一逻辑地址段中的地址段与业务超级块组中的每一超级块的映射关系,本申请实施例能够实现逻辑地址与业务超级块的映射关系,另一方面,当某一业务超级块对应的地址段被反复顺序写时,建立该业务超级块和热备超级块组中的一个热备超级块的映射关系,并刷新该业务超级块的逻辑地址与物理地址的映射表,本申请实施例能够以业务超级块为粒度建立映射表,从而减少映射表对DRAM空间的占用,提高固态硬盘的可靠性。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
此外,下面所描述的本申请各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
典型的固态硬盘(Solid State Drives,SSD)通常包括固态硬盘控制器(主控制器)、闪存阵列、缓存单元以及其他外围单元。
其中,固态硬盘控制器用于作为控制运算单元,管理SSD内部系统;闪存阵列(NANDFlash),作为存储单元,用于存储数据,包括用户数据和系统数据,闪存阵列一般呈现多个通道(Channel,简写CH),一个通道独立连接一组NAND Flash,例如CH0/CH1……CHx。其中闪存(NAND Flash),其特性是写入之前,必须进行擦除,且每个闪存擦除次数有限;缓存单元,用于缓存映射表,所述缓存单元一般为动态随机存取存储器(Dynamic Random AccessMemory,DRAM)。其他外围单元可以包括传感器、寄存器等部件。
下面结合说明书附图具体地阐述本申请的技术方案。
请参阅图1,图1是本申请实施例提供的一种固态硬盘的结构示意图。
如图1所示,所述固态硬盘100包括闪存介质110以及与所述闪存介质110连接的固态硬盘控制器120。其中,所述固态硬盘100通过有线或无线的方式与所述主机200通信连接,用以实现数据交互。
闪存介质110,作为所述固态硬盘100的存储介质,也称作闪存、Flash、Flash存储器或Flash颗粒,属于存储器件的一种,是一种非易失性存储器,在没有电流供应的条件下也能够长久地保存数据,其存储特性相当于硬盘,使得闪存介质110得以成为各类便携型数字设备的存储介质的基础。
其中,闪存介质110可以为Nand FLASH,Nand FLASH以单晶体管作为二进制信号的存储单元,其结构与普通的半导体晶体管非常相似,区别在于Nand FLASH的单晶体管加入了浮动栅和控制栅,浮动栅用于贮存电子,表面被一层硅氧化物绝缘体所包覆,并通过电容与控制栅相耦合,当负电子在控制栅的作用下被注入到浮动栅中,Nand FLASH的单晶体的存储状态就由“1”变成了“0”,而当负电子从浮动栅中移走后,存储状态就由“0”变成了“1”,包覆在浮动栅表面的绝缘体用于将浮动栅中的负电子困住,实现数据存储。即Nand FLASH的存储单元为浮动栅晶体管,使用浮动栅晶体管以电荷的形式存储数据。存储电荷的多少与浮动栅晶体管所被施加的电压的大小有关。
一个Nand FLASH包括至少一个Chip芯片,每一个Chip芯片由若干个Block物理块组成,每一个Block物理块包括若干个Page页。其中,Block物理块是Nand FLASH执行擦除操作的最小单位,Page页为Nand FLASH执行读写操作的最小单位,一个Nand FLASH的容量等于其Block物理块的数量*一个Block物理块包含的Page页的数量*一个Page页的容量。具体的,闪存介质10按照存储单元的电压的不同层次,可分为SLC、MLC、TLC以及QLC。
固态硬盘控制器120,包括数据转换器121、处理器122、缓存器123、闪存控制器124以及接口125。
数据转换器121,分别与处理器122和闪存控制器124连接,所述数据转换器121用于将二进制数据转换为十六进制数据,以及将十六进制数据转换为二进制数据。具体地,当所述闪存控制器124向所述闪存介质110写入数据时,通过所述数据转换器121将待写入的二进制数据转换为十六进制数据,然后再写入闪存介质110。当所述闪存控制器124从所述闪存介质110读取数据时,通过所述数据转换器121将闪存介质110中存储的十六进制数据转换为二进制数据,然后从二进制数据页寄存器中读取转换后的数据。其中,所述数据转换器121可以包括二进制数据寄存器和十六进制数据寄存器。所述二进制数据寄存器可以用于保存由十六进制转换为二进制后的数据,所述十六进制数据寄存器可以用于保存由二进制转换为十六进制后的数据。
处理器122,分别与数据转换器121、缓存器123、闪存控制器124以及接口125连接,其中,处理器122与数据转换器121、缓存器123、闪存控制器124以及接口125可以通过总线或者其他方式连接,所述处理器用于运行存储在缓存器123中的非易失性软件程序、指令以及模块,从而实现本申请任一方法实施例。
缓存器123,主要用于缓存主机200发送的读/写指令以及根据主机200发送的读/写指令从闪存介质110获取的读数据或者写数据。缓存器123作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。缓存器123可以包括存储程序区,存储程序区可存储操作系统、至少一个功能所需要的应用程序。此外,缓存器123可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,缓存器123可选包括相对于处理器124远程设置的存储器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。所述缓存器123可以为静态随机存取存储器(StaticRandom Access Memory,SRAM)或者耦合内存(Tightly Coupled Memory,TCM)或者双倍速率同步动态随机存储器(Double DataRate Synchronous Dynamic Random AccessMemory,DDR SRAM)。
闪存控制器124,与闪存介质110、数据转换器121、处理器122以及缓存器123连接,用于访问后端的闪存介质110,管理闪存介质110的各种参数和数据I/O;或者,用于提供访问的接口和协议,实现对应的SAS/SATA target协议端或者NVMe协议端,获取主机200发出的I/O指令并解码和生成内部私有数据结果等待执行;或者,用于负责FTL(Flashtranslation layer,闪存转换层)的核心处理。
接口125,连接主机200以及数据转换器121、处理器122以及缓存器123,用于接收主机200发送的数据,或者,接收所述处理器122发送的数据,实现主机200与处理器122之间的数据传输,所述接口125可以为SATA-2接口、SATA-3接口、SAS接口、MSATA接口、PCI-E接口、NGFF接口、CFast接口、SFF-8639接口和M.2 NVME/SATA协议。
请再参阅图2,图2是本申请实施例提供的一种固态硬盘控制器的结构示意图;其中,该固态硬盘控制器属于上述的固态硬盘。
如图2所示,该固态硬盘控制器,包括:PCIe接口控制器126、DDR控制器127、NVMe接口控制器128、处理器122、外设模块129、数据通路模块1210以及闪存控制器124。
具体的,所述PCIe接口控制器126,用于PCIe通信协议的控制,所述DDR控制器127,用于动态随机存储器的控制,所述NVMe接口控制器128用于NVMe通信协议的控制,所述外设模块129用于其他相关通信协议的控制,所述数据通路模块1210用于数据通路的控制,例如:写缓存的管理,所述闪存控制器124用于闪存的数据处理。
其中,该固态硬盘控制器120,还包括数据转换器121、缓存器123、接口125等。
具体的,所述数据转换器121,分别与处理器和闪存控制器连接,所述数据转换器用于将二进制数据转换为十六进制数据,以及将十六进制数据转换为二进制数据。具体地,当所述闪存控制器向所述闪存介质写入数据时,通过所述数据转换器将待写入的二进制数据转换为十六进制数据,然后再写入闪存介质。当所述闪存控制器从所述闪存介质读取数据时,通过所述数据转换器将闪存介质中存储的十六进制数据转换为二进制数据,然后从二进制数据页寄存器中读取转换后的数据。其中,所述数据转换器可以包括二进制数据寄存器和十六进制数据寄存器。所述二进制数据寄存器可以用于保存由十六进制转换为二进制后的数据,所述十六进制数据寄存器可以用于保存由二进制转换为十六进制后的数据。
具体的,所述处理器122,分别与数据转换器121、缓存器123、闪存控制器124以及接口125连接,其中,处理器与数据转换器、缓存器、闪存控制器以及接口可以通过总线或者其他方式连接,所述处理器用于运行存储在缓存器中的非易失性软件程序、指令以及模块,从而实现本申请任一方法实施例。
具体的,所述缓存器,主要用于缓存主机发送的读/写指令以及根据主机发送的读/写指令从闪存介质获取的读数据或者写数据。缓存器作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。缓存器可以包括存储程序区,存储程序区可存储操作系统、至少一个功能所需要的应用程序。此外,缓存器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,缓存器可选包括相对于处理器远程设置的存储器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。所述缓存器可以为静态随机存取存储器(Static Random AccessMemory,SRAM)或者耦合内存(Tightly Coupled Memory,TCM)或者双倍速率同步动态随机存储器(Double DataRate Synchronous Dynamic Random Access Memory,DDR SRAM)。
具体的,所述闪存控制器,与闪存介质、数据转换器、处理器以及缓存器连接,用于访问后端的闪存介质,管理闪存介质的各种参数和数据I/O;或者,用于提供访问的接口和协议,实现对应的SAS/SATA target协议端或者NVMe协议端,获取主机发出的I/O指令并解码和生成内部私有数据结果等待执行;或者,用于负责FTL(Flash translation layer,闪存转换层)的核心处理。
具体的,所述接口,连接主机以及数据转换器、处理器以及缓存器,用于接收主机发送的数据,或者,接收所述处理器发送的数据,实现主机与处理器之间的数据传输,所述接口可以为SATA-2接口、SATA-3接口、SAS接口、MSATA接口、PCI-E接口、NGFF接口、CFast接口、SFF-8639接口和M.2NVME/SATA协议。
请再参阅图3,图3是本申请实施例提供的一种L2P表的示意图;
如图3所示,固态硬盘维护一张逻辑地址(LogicalAddress)到物理地址(PhysicalAddress)的映射表,即L2P表(L2PTable),当SSD把每一笔用户数据写入闪存地址空间时,便记录下此逻辑地址到物理地址的映射关系。当主机想要读取该数据时,SSD会查找该映射表中逻辑页对应的物理页,再访问Flash读取数据并返回给用户。
但是,L2P表的方式是一种中心化的思想,这种方式的缺点在于:L2P表的维护需要较高的空间成本;在业务量大时,需要密集的访问和更新L2P表,而固态硬盘在正常运行的时候,L2P表驻留在DRAM中,需要占用整个L2P表的DRAM的空间。一旦固态硬盘发生异常,如果容量很大,需要花很长的时间去恢复L2P表;在极端情况下,如果L2P表无法恢复,甚至会导致用户数据丢失。
基于此,本申请实施例提供一种地址映射方法,以解决现有的L2P表占用空间大的问题。
请参阅图4,图4是本申请实施例提供的一种地址映射方法的流程示意图;
如图4所示,该地址映射方法,包括:
步骤S401:将固态硬盘中的超级块划分为若干个业务超级块组和一个热备超级块组;
具体的,SSD系统将NAND颗粒切分成大小相等的若干个物理块,并均匀地分布在分组(PLANE)结构之中,假设SSD有N个PLANE,为了方便管理,系统会从每一个PLANE中选取一个物理块组成容量更大的超级块(Super Block,SBLK),将所有对块的操作(比如读写擦)转变为对超级块(SBLK)的操作。
将固态硬盘中的全部超级块划分为若干个业务超级块组(super block group,SBLK group)和一个热备超级块组(hot spare SBLK group),其中,每一业务超级块组包括若干个业务超级块,所述热备超级块组包括若干个热备超级块。
具体的,所述将固态硬盘中的超级块划分为若干个业务超级块组,包括:
若固态硬盘为首次使用,则顺序选择预设数量的业务超级块,以确定每一业务超级块组,其中,每一业务超级块组包括若干个业务超级块;
若固态硬盘被格式化后重新使用,根据每一业务超级块的擦写次数,确定每一业务超级块组。
例如:若所述固态硬盘为新盘,则顺序选择预设数量的业务超级块,以生成每一个业务超级块组,其中,每一业务超级块组包括相同数量的业务超级块;若所述固态硬盘为格式化后重新使用,则获取全部业务超级块组的每一业务超级块的擦写次数(PE cycles),以确定每一业务超级块组。
具体的,所述根据每一业务超级块的擦写次数,确定每一业务超级块组,包括:
根据每一业务超级块的擦写次数,选择若干个业务超级块组成一个业务超级块组,使得不同的业务超级块组的平均擦写次数的差值均小于预设差值阈值。具体的,每一业务超级块组的平均擦写次数=业务超级块组中的全部业务超级块的擦写次数之和/业务超级块组中的业务超级块的数量,所述预设差值阈值可以根据具体需要进行设置,例如:设置为全部业务超级块中的最大平均擦写次数与最小平均擦写次数的差值的一半,比如:每一业务超级块组的平均擦除次数与其他业务超级块组的平均擦除次数均小于全部业务超级块中的最大平均擦写次数与最小平均擦写次数的差值的一半。
例如:按照平均擦写次数从低到高的顺序,对全部的业务超级块进行排序,比如:业务超级块的平均擦写次数的排序为11,11,12,12,13,13。计算所有业务超级块的平均值为(11+11+12+12+13+13)/5=12,然后每个业务超级块组在选择的时候尽量让每一业务超级块组的平均值,靠近这个平均值,例如:划分为3个业务超级块组,分别为(11,13)、(11,13)、(12,12)对应的业务超级块。此时,全部业务超级块中的最大平均擦写次数为13,最小平均擦写次数为11,两者的差值的一半为(13-11)/2=1,即设置预设差值阈值为1,此时三个业务超级块组之间的平均擦除次数的差值均小于1,满足不同的业务超级块组的平均擦写次数的差值均小于预设差值阈值。
在本申请实施例中,通过确定多个业务超级块组,不同的业务超级块组的平均擦写次数的差值小于预设差值阈值,使得不同的业务超级块组之间的擦写次数相近,有利于实现各个业务超级块组的寿命相近。
可以理解的是,业务超级块和热备超级块的数量之和不大于固态硬盘中的全部超级块的数量,优选地,业务超级块和热备超级块的数量之和等于固态硬盘中的全部超级块的数量。
步骤S402:建立每一逻辑地址段中的地址段与业务超级块组中的每一业务超级块的映射关系,并建立每一业务超级块的逻辑地址与物理地址的映射表;
具体的,请再参阅图5,图5是图4中的步骤S402的细化流程图;
如图5所示,该步骤S402:建立每一逻辑地址段中的地址段与业务超级块组中的每一业务超级块的映射关系,包括:
步骤S4021:将固态硬盘的逻辑地址分段,确定多个逻辑地址段;
可以理解的是,固态硬盘在上报给主机自身的容量后,由于固态硬盘的容量是固定的,因此,主机能操作的逻辑地址(Logical Block Address,LBA)也是固定的。
请再参阅图6,图6是本申请实施例提供的一种逻辑地址与业务超级块组的示意图;
如图6所示,假设固态硬盘的逻辑地址为logicaddr 0至logic addr z,将固态硬盘的全部逻辑地址划分为多个逻辑地址段,例如:logic addr 0至logic addr h为一个逻辑地址段,以此类推,每一逻辑地址段包括相同数量的逻辑地址,以确定多个逻辑地址段。
步骤S4022:建立每一逻辑地址段与每一业务超级块组的映射关系;
具体的,逻辑地址段的数量与业务超级块组的数量相同,将每一逻辑地址段与一个业务超级块组进行一一对应,以建立每一逻辑地址段与每一业务超级块组的映射关系,如图6所示,SBLK group 0对应逻辑地址段0至logic addr z。
步骤S4023:将每一逻辑地址段划分为多个地址段,建立每一地址段与业务超级块组中的每一超级块的映射关系。
具体的,在业务超级块组中,需要通过逻辑地址进一步确定将数据写入对应的超级块,因此,将每一逻辑地址段划分为多个地址段,建立每一地址段与业务超级块组中的每一超级块的映射关系。
在本申请实施例中,建立每一地址段与业务超级块组中的每一超级块的映射关系由固态硬盘的固件的预设算法进行计算得到,一旦预设算法确定之后,由预设算法确定的规则来确定逻辑地址段与超级块的对应关系。可以理解的是,预设算法根据SBLK数量和每个SBLK存储的数据量确定每一地址段与业务超级块组中的每一超级块的映射关系。
请再参阅图7,图7是本申请实施例提供的一种地址段与超级块的映射关系的示意图;
如图7所示,SBLK group中包括N个SBLK,分别为第0个SBLK至第N-1个SBLK,每一SBLK对应一个地址段,其中,一个地址段与一个超级块对应,例如:第0号地址段对应SBLKa,在将地址段对应业务超级块之后,建立每一业务超级块的逻辑地址与物理地址的映射表,即每一业务超级块对应的L2P表。
步骤S403:当某一业务超级块对应的地址段被反复顺序写时,建立该业务超级块和热备超级块组中的一个热备超级块的映射关系,并刷新该业务超级块的逻辑地址与物理地址的映射表。
具体的,如果主机对某一区域反复顺序写时,即主机对某一地址段反复顺序写时,需要建立业务超级块与热备超级块的映射关系,从热备超级块组中选择一个或多个热备超级块与当前需要反复顺序写的业务超级块建立映射关系(SBLKmaptable)。
请再参阅图8,图8是本申请实施例提供的一种业务超级块和热备超级块的映射关系的示意图;
如图8所示,当主机对第0号地址段反复顺序写时,建立第0号地址段对应的业务超级块SBLKa与热备超级块hotspareSBLK 1;
进一步地,当主机对第1号地址段反复顺序写时,若热备超级块hot spare SBLK 2被写满,则进一步从热备超级块组中搜索热备超级块hot spare SBLK 3,以建立业务超级块SBLK b与热备超级块hot spare SBLK 2、热备超级块hot spare SBLK 3的映射关系,将数据写入到热备超级块hot spare SBLK 3中,之后刷新该业务超级块SBLK b的逻辑地址与物理地址的映射表,即该业务超级块对应的L2P表。
在本申请实施例中,当某一业务超级块对应的地址段被反复顺序写时,从热备超级块组中选择一个热备超级块,将主机数据写入到该热备超级块,其中,,所述热备超级块的选择方式可以从热备超级块组中选擦写次数最少的超级块,或者,也可以选择跟现有的业务超级块的擦写次数接近的热备超级块,具体可以通过固件厂商自定义。
具体的,请参阅图9,图9是本申请实施例提供的另一种业务超级块和热备超级块的映射关系的示意图;
如图9所示,SBLK group 0中的一个SBLK对应hotspare SBLK group中的一个SBLK,当SBLK group 0中的SBLK对应的地址段被反复顺序写时,将主机数据写入到hotspare SBLK group中的SBLK。
在本申请实施例中,若某一热备超级块被写满,则从所述热备超级块组中获取一个新的热备超级块,并更新该业务超级块和热备超级块组中的热备超级块的映射关系。
如图8所示,若热备超级块hot spare SBLK 2被写满,则从热备超级块组中获取hot spare SBLK 3,将主机数据写入到新的热备超级块中,并更新该业务超级块和热备超级块组中的热备超级块的映射关系,即业务超级块SBLK a映射到hot spare SBLK 2、hotspare SBLK 3,且hot spare SBLK 2映射到hot spare SBLK 3。
在本申请实施例中,所述方法还包括:
当某一业务超级块中的无效数据大于预设阈值时,将该业务超级块中的有效数据搬移到对应的热备超级块,并擦除该业务超级块;
将该业务超级块对应的热备超级块加入该业务超级块对应的业务超级块组,并将擦除后的业务超级块加入所述热备超级块组。
具体的,所述预设阈值为预设比例阈值,通过计算业务超级块中的无效数据与全部数据的比例,若业务超级块中的无效数据与全部数据的比例大于所述预设阈值,则将该业务超级块中的有效数据搬移到对应的热备超级块,并擦除该业务超级块;之后,将该业务超级块对应的热备超级块加入该业务超级块对应的业务超级块组,并将擦除后的业务超级块加入所述热备超级块组,相当于将热备超级块转换为业务超级块,并将热备超级块转换为业务超级块,实现两者之间的转换。
在本申请实施例中,在将该业务超级块对应的热备超级块加入该业务超级块对应的业务超级块组,并将擦除后的业务超级块加入所述热备超级块组之后,更新映射关系,例如:将新的业务超级块对应热备超级块组中的一个热备超级块。
在本申请实施例中,所述方法还包括:
当某一业务超级块出现坏块时,从热备超级块组中选择一个物理块作为该坏块的替换块,并将该坏块的有效数据写入到该替换块中,并更新重映射表;其中,所述重映射表存储坏块到替换块的映射关系。
具体的,当某个晶粒(Die)上发现坏块时,用户在写数据的时候,不是跨过这个晶粒(Die),而是写到替换块上面去。采用替换策略,SSD内部需维护一张重映射表(RemapTable):坏块到替换块的映射。当SSD需要访问Block B时,它需要查找重映射表,实际访问的物理Block应该是B'。
在本申请实施例中,在从热备超级块组中选择一个物理块作为该坏块的替换块之前,所述方法还包括:从热备超级块组中预留一个热备超级块作为坏块的替换块;
所述从热备超级块组中选择一个物理块作为该坏块的替换块,包括:
选择预留的热备超级块中的一个物理块作为该坏块的替换块,其中,被选中的物理块与坏块位于同一个晶粒。
具体的,选择预留一个热备超级块来作为所有业务超级块组的坏块的替换块,并且,若所述固态硬盘为新盘,则随机选一个热备超级块作为坏块的替换块;如果所述固态硬盘为使用过的固态硬盘,则选择擦写次数最少的热备超级块作为坏块的替换块,并且,选择热备超级块中和坏块在同一个晶粒(die)上的物理块,以更好地保持并发性。
在本申请实施例中,以超级块为粒度,建立逻辑地址与物理地址的映射表,从而能够根据该映射表,获取到相应的数据。由于是顺序写和读场景下的,所以可以通过预取等方式,在DRAM空间里面加载少量L2P表,降低对DRAM空间的占用,比如应用程序在对地址段b读时,可以提前把地址段c和d对应的映射表导入DRAM空间;在读到地址段c时,就不需要在内存里保留地址段b了,可以把e地址段的映射表读上来,因此,可以大大减少映射表对DRAM空间的占用,进一步可以减少映射表的恢复时间,提高固态硬盘的可靠性。
请再参阅图10,图10是本申请实施例提供的另一种地址映射方法的流程示意图;
如图10所示,该地址映射方法,包括:
开始;
步骤S101:获取固态硬盘的IO模式;
步骤S102:判断IO模式是否为顺序写;
具体的,若所述IO模式为顺序写,则进入第一地址映射模式;若所述IO模式不为顺序写,则进入第二地址映射模式;
步骤S103:进入第一地址映射模式;
具体的,所述第一地址映射模式为业务超级块组和热备超级块组模式,其中,所述第一地址映射模式,包括:将固态硬盘中的超级块划分为若干个业务超级块组和一个热备超级块组,其中,每一业务超级块组包括若干个的业务超级块,所述热备超级块组包括若干个热备超级块;建立每一逻辑地址段中的地址段与业务超级块组中的每一超级块的映射关系,并建立每一业务超级块的逻辑地址与物理地址的映射表;当某一业务超级块对应的地址段被反复顺序写时,建立该业务超级块和热备超级块组中的一个热备超级块的映射关系,并刷新该业务超级块的逻辑地址与物理地址的映射表;
步骤S104:进入第二地址映射模式;
具体的,所述第二地址映射模式为全局L2P表模式,其中,所述第二地址映射模式,包括:设置全局映射表,即全部L2P表,所述全局映射表用于确定逻辑地址和物理地址的映射关系。
在本申请实施例中,以SBLK大小为粒度的L2P表更小维护更轻便。为了保持好的性能,目前通常在固态硬盘的DRAM里会存有全量的L2P表,占用DRAM的空间较大。本申请可以通过在DRAM空间中载入少量的L2P表,降低对DRAM空间的占用,提升了可靠性。
相比现有的全局L2P表的方式,如果全局L2P表出现问题(比如软件bug导致L2P表被踩),将导致整盘数据丢失。同时,出现异常需要恢复L2P时,也是一个漫长的过程(比如在主机写密集业务时出现异常掉电而没有将L2P及时更新时,大容量盘上电恢复(通过P2L)需要很长时间)。而以SBLK大小为粒度时,更新的是当前正在写的L2P表,表变小被破坏几率降低,同时异常恢复的时间也会缩短,有利于提高固态硬盘的可靠性。
在本申请实施例中,通过提供一种地址映射方法,包括:将固态硬盘中的超级块划分为若干个业务超级块组和一个热备超级块组,其中,每一业务超级块组包括若干个业务超级块,所述热备超级块组包括若干个热备超级块;建立每一逻辑地址段中的地址段与业务超级块组中的每一业务超级块的映射关系,并建立每一业务超级块的逻辑地址与物理地址的映射表;当某一业务超级块对应的地址段被反复顺序写时,建立该业务超级块和热备超级块组中的一个热备超级块的映射关系,并刷新该业务超级块的逻辑地址与物理地址的映射表,本申请实施例能够减少映射表对DRAM空间的占用,提高固态硬盘的可靠性。
本申请实施例还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,例如上述一个或多个处理器可执行上述任意方法实施例中的地址映射方法,例如,执行上述任意方法实施例中的地址映射方法,例如,执行以上描述的各个步骤。
以上所描述的装置或设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元模块可以是或者也可以不是物理上分开的,作为模块单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络模块单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用直至得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;在本申请的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本申请的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。