用于ssd上的写时复制的系统和方法

文档序号:10552838阅读:308来源:国知局
用于ssd上的写时复制的系统和方法
【专利摘要】用于SSD上的写时复制的系统和方法。公开用于SSD中改进的写时复制功能的技术。在一些实施例中,可将所述技术实现为用于在SSD中提供改进的写时复制功能的方法,包括在装置的存储器中提供间接数据结构。间接数据结构可包括用于克隆数据的主条目以及用于克隆数据的克隆条目,主条目具有对一个或多个索引的引用,克隆条目具有以下至少一个:对主索引的引用、对次索引的引用和指示数据结构结尾的值。所述技术可包括利用计算机处理器使用一个或多个引用遍历克隆数据的一个或多个副本。
【专利说明】
用于SSD上的写时复制的系统和方法
技术领域
[0001 ]本发明涉及在SSD中提供改进的写时复制功能的系统和方法。
【背景技术】
[0002]高速非易失性存储器(NVMe)规范是用于访问通过高速外围组件互连(PCIe)总线连接的固态装置(SSD)和其他目标装置的规范。NVMe SSD PCIe主机接口限定命名空间的概念,命名空间类似于由SAS RAID(独立磁盘冗余阵列)适配器支持的逻辑卷。SSD中的写时复制功能可以利用命名空间来实现。命名空间通常被实施为在SSD的间接系统中跟踪的全局逻辑块地址(LBA)空间之上的抽象。
[0003]LBA元数据仅指示一个主机LBA,并且它不包括引用计数。在元数据中包括或添加引用计数会引起附加写入,用新的元数据重写数据,这是一个差的方案。如果在LBA元数据中没有这种引用计数,就没有确定附加克隆副本是否存在的机制(如该附加LBA指向相同的数据)。因此,管理SSD上数据的多个克隆副本关于垃圾收集面临特别挑战。例如,当主机在复制操作之后修改“源” LBA时,它会产生垃圾收集问题。源副本实际上可以是进行复制操作将数据复写到一个或多个附加主机LBA之前写入的“主”副本。在修改该主LBA时,无复制察觉垃圾收集算法可以在下一次机会释放物理数据,因为不存在有效修改数据的元数据从而指示更多的主机LBA指向该数据的方法。

【发明内容】

[0004]公开用于SSD中改进的写时复制功能的技术。在一些实施例中,可将所述技术实现为用于在SSD中提供改进的写时复制功能的方法,包括在PCIe装置的存储器中提供间接数据结构。间接数据结构可包括用于克隆数据的原始副本或源副本的主条目以及用于克隆数据的克隆条目,主条目具有对主索引的引用以及对次索引的引用,克隆条目具有对主索引的引用以及对次索引的引用。所述技术可包括利用计算机处理器,使用一个或多个引用遍历克隆数据的一个或多个副本。
[0005]根据本示例性实施例的附加方案,主机装置可包括以下至少其中一个:企业服务器、数据库服务器、工作站和计算机。
[0006]根据本示例性实施例的附加方案,间接数据结构可包括多个物理地址。
[0007]根据本示例性实施例的进一步方案,所述间接数据结构可以是环形链表的一部分,其中用于所述克隆数据的所述主条目包括对于主索引的引用以及对于次索引的引用。
[0008]根据本示例性实施例的其他方案,所述间接数据结构可以是环形链表的一部分,其中用于所述克隆数据的所述克隆条目包括对于所述主索引的引用以及对于所述次索引的引用。
[0009]根据本示例性实施例的附加方案,所述间接数据结构可以是单个结尾的链表的一部分,其中,索引中的条目提供该索引是主索引的指示。
[0010]根据本示例性实施例的进一步方案,所述引用可包括用于逻辑块寻址的平面间接表中的条目。
[0011]根据本示例性实施例的其他方案,所述引用可包括用于逻辑块寻址的树形数据结构中的条目。
[0012]根据本示例性实施例的附加方案,所述改进的写时复制功能可包括改进的命名空间复制功能。
[0013]根据本示例性实施例的进一步方案,所述技术可包括设置用于一个或多个压缩逻辑块的指示符,以指示所述一个或多个压缩逻辑块被克隆。
[0014]根据本示例性实施例的其他方案,所述主条目的主索引可指向所述主条目。
[0015]根据本示例性实施例的附加方案,所述克隆条目的主索引可指向所述主条目。
[0016]根据本示例性实施例的进一步方案,数据结构中最后的克隆条目的次索引可指向所述主条目。
[0017]根据本示例性实施例的其他方案,所述技术可包括:确定所述克隆数据的克隆条目是唯一克隆条目,其中所述确定包括:确定所述克隆条目的次索引与所述克隆条目的主索引匹配;确定所述主条目的次索引指向所述克隆条目;通过将所述克隆条目的所述次索引设置为指示压缩逻辑块的间接条目以及将所述主索引条目设置为指示压缩逻辑块的间接条目来解克隆所述克隆数据的克隆条目;以及通过将所述主条目的所述次索引设置为指示原始主条目的第一压缩逻辑块的第一间接条目以及将所述主条目的主索引设置为指示所述原始主条目的第二压缩逻辑块的第二间接条目来解克隆所述克隆数据的主条目。
[0018]根据本示例性实施例的附加方案,所述技术可包括:确定所述克隆数据的克隆条目是多个克隆条目的其中一个,其中所述确定包括确定以下至少其中一个:所述克隆条目的次索引与所述克隆条目的主索引不匹配;以及所述主条目的次索引不指向所述克隆条目;以及通过将前一条目的次索引设置为指向通过所述克隆条目的次索引指示的条目来解克隆所述克隆数据的克隆条目。
[0019]根据本示例性实施例的进一步方案,所述技术可包括:在垃圾收集处理期间复查条目;确定所述条目包含克隆指示符;以及基于确定所述条目包含所述克隆指示符,确定所述垃圾收集处理中的条目是不要被删除的有效条目。
[0020]在其他实施例中,可将所述技术实现为一种计算机程序产品,包括在计算机上可执行的一系列指令。所述计算机程序产品可进行用于在SSD中提供改进的写时复制功能的处理。所述计算机程序可实施以下步骤:在装置的存储器中提供间接数据结构,所述间接数据结构包括:用于克隆数据的主条目,所述主条目具有对一个或多个索引的引用;用于所述克隆数据的克隆条目,所述克隆条目具有以下至少一个:对主索引的引用、对次索引的引用和指示数据结构结尾的值;以及利用计算机处理器,使用一个或多个所述引用遍历克隆数据的一个或多个副本。
[0021]在其他实施例中,可将所述技术实现为一种用于在SSD中提供改进的写时复制功能的系统。所述系统可包括:第一装置,其中所述第一装置包括在存储器中存储的被存储指令。所述指令可包括:在所述第一装置的存储器中提供间接数据结构的指令,所述间接数据结构包括:用于克隆数据的主条目,所述主条目具有对一个或多个索引的引用;用于所述克隆数据的克隆条目,所述克隆条目具有以下至少一个:对主索引的引用、对次索引的引用和指示数据结构结尾的值;以及利用计算机处理器,使用一个或多个所述引用遍历克隆数据的一个或多个副本。
[0022]根据本示例性实施例的附加方案,所述间接数据结构可包括多个物理地址。
[0023]根据本示例性实施例的进一步方案,所述间接数据结构可以是环形链表的一部分,其中用于所述克隆数据的所述主条目包括对于主索引的引用以及对于次索引的引用。
[0024]根据本示例性实施例的其他方案,所述间接数据结构可以是环形链表的一部分,其中用于所述克隆数据的所述克隆条目包括对于所述主索引的引用以及对于所述次索引的引用。
[0025]根据本示例性实施例的附加方案,所述间接数据结构可以是单个结尾的链表的一部分,其中,索引中的条目提供该索引是主索引的指示。
[0026]根据本示例性实施例的进一步方案,所述引用可包括用于逻辑块寻址的平面间接表中的条目。
[0027]根据本示例性实施例的其他方案,所述第一装置可包括高速外围组件互连(PCIe)
目.ο
[0028]根据本示例性实施例的附加方案,所述技术可进一步包括将用于一个或多个压缩逻辑块的指示符设置为指示所述一个或多个压缩逻辑块被克隆的指令。
[0029]根据本示例性实施例的进一步方案,所述主条目的所述主索引以及所述克隆条目的所述主索引指向所述主条目,且所述数据结构中最后的克隆条目的次索引指向所述主条目。
[0030]根据本示例性实施例的附加方案,目标装置(例如,PCIe装置)可包括以下至少其中一个:图形处理单元、音频/视频采集卡、硬盘、主机总线适配器、以及高速非易失性存储器(NVMe)控制器。根据某些实施例,目标装置可以是NVMe兼容装置。
[0031]下面参照附图所示的示例性实施例更详细地描述本公开。虽然下面参照示例性实施例描述了本公开,但是应当理解,本公开并不限于此。得益于本文教导的本领域技术人员应当认识到落入本文所述本公开范围、并且本公开关于其有显著效用的附加实施方式、修改、实施例以及其他用途。
【附图说明】
[0032]为了帮助更完整地理解本公开,下面对附图进行引用,在附图中用相似的标记引用相似的元件。这些附图不应视为限制本公开,而只是要成为示例。其中
[0033]图1示出示例性方框图,描述根据本公开实施例,与主机装置通信的多个PCIe装置。
[0034]图2描述根据本公开实施例,表示解克隆压缩逻辑块的数据结构。
[0035]图3描述根据本公开实施例,表示主间接数据结构条目和克隆间接数据结构条目的表格。
[0036]图4描述根据本公开实施例,用于SSD中改进的写时复制功能的示例性模块。
[0037]图5描述根据本公开实施例,示出SSD中改进的写时复制功能的流程图。
[0038]图6A描述根据本公开实施例,主C组块数据结构条目格式的数据结构。
[0039]图6B描述根据本公开实施例,克隆C组块数据结构条目格式的数据结构。
【具体实施方式】
[0040]本公开涉及改进的写时复制功能。在一些实施例中,该写时复制功能可包括命名空间副本。NVMe SSD PCIe主机接口限定命名空间的概念,命名空间类似于由SAS RAID(独立磁盘冗余阵列)适配器支持的逻辑卷。命名空间可以专用于虚拟机(VM)。在SSD中,命名空间可以在逻辑上相互分离,且能够可靠地擦除和重新利用,而不会影响其它命名空间。
[0041 ]命名空间标识符可连同该命名空间中的LBA—起,包括在主机发出的介质存取命令中。SSD可以利用数据结构(如表查找、树、哈希映射、位图等),将命名空间与LBA的组合转化为SSD内部使用的全局LBA。根据一些实施例,对LBA的引用可以参照该全局LBA。
[0042]本公开的实施例描述用于实现有效“命名空间副本”功能的系统和方法,该功能避免在SSD上复写数据。这样减少了在SSD中引发的写入放大,在提供更高性能的同时延长SSD的寿命。
[0043]命名空间副本是“写时复制”功能的一种形式。在复制功能中,产生指向介质上单个副本的指针。在写入时产生和更新介质上的新副本。命名空间副本功能需要在SSD上“写时复制”的有效实施方式。可将本公开的实施例应用于命名空间副本。此外,对于SSD,可将本公开的实施例应用于其他“写时复制”实施方式。例如,可将“快照”副本用于产生命名空间的时间点图像,并且可将本实施例的实施方式用于跟踪快照副本。
[0044]本公开的实施例提供包括指向相同物理位置的多个条目的SSD间接系统(如平面LBA表格)或方法。在多个引用存在时,这种实施方式可以实现有效的垃圾收集。跟踪多个引用或处理多个指针(例如,指向NAND闪存数据)可以改进垃圾收集。可以利用包括用于数据的主LBA的非易失性存储装置(例如,NAND闪存、NOR闪存等等)上的元数据来进行垃圾收集。通过在间接数据结构(如表、树、哈希映射、位图等)中查找这些LBA,以查看数据结构是否仍然指向该物理位置,垃圾收集算法可以确定哪个主扇区仍然有效。如果不是,则算法释放该块。
[0045]本文所述一个或多个实施例利用单个标志以及跟踪一个或多个复写主LBA的替代间接条目格式,提供复写间接条目的有效表示。一个或多个实施例可以利用用于跟踪指向相同物理地址的多个逻辑块地址的平面间接查找数据结构。可以利用哈希映射、树或者用于跟踪复写LBA的基于组分系统来实现其他实施例。
[0046]下面更详细地讨论SSD技术中的改进写时复制功能。
[0047]下面参照附图,图1是描述根据本公开实施例,与主机装置通信的PCIe装置的示例性方框图。可以在诸如主机系统102、主机CPU 104以及PCI专用根复合体(express rootcomplex) 106这样的一个或多个计算技术中实现写时复制功能改进。PCI专用切换器108可以经由PCI专用根复合体106,把诸如目标110、116和122这样的多个目标(例如,像基于NVMe的目标这样的PCIe装置)通信耦合到主机系统102。
[0048]目标110可包含NVMe控制器112和非易失性存储装置114。目标116可包含NVMe控制器118和非易失性存储装置120。目标122可包含NVMe控制器124和非易失性存储装置126。
[0049]系统存储器128可包含基于存储器的资源,主机系统102可经由存储器接口访问这些资源(例如,双数据速率三同步动态随机存取存储器(DDR3SDRAM))。系统存储器128可采用任何合适的形式,例如但不限于固态存储器(例如,闪存、或固态装置(SSD))、光存储器、以及磁存储器。系统存储器128可以是易失性存储器或者非易失性存储器。系统存储器128可包括一个或多个数据结构。
[0050]根据一些实施例,可将除了PCIe之外的接口标准用于一个或多个部分,包括但不限于串行高级技术附件(SATA)、高级技术附件(ATA)、小型计算机系统接口(SCSI)、PCI扩展(PC1-X)、光纤通道、串行连接SCSI(SAS)、安全数字(SD)、嵌入式多媒体卡(EMMC)和通用闪存(UFS) 0
[0051]主机系统102可采用任何合适的形式,例如但不限于企业服务器、数据库主机、工作站、个人计算机、移动电话、游戏机、个人数字助理(PDA)、电子邮件/文本通讯装置、数码相机、数字媒体(例如,MP3)播放器、GPS导航装置以及电视系统。
[0052]主机系统102和目标装置可包括附加组件,为了简化附图,在图1中未示出。此外,在一些实施例中,并非所示的全部组件都出现。例如,可以按照任何合适的方式来实现各种控制器、块和接口。例如,控制器可采用一个或多个微处理器或处理器和计算机可读介质、逻辑门、切换器、专用集成电路(ASIC)、可编程逻辑控制器以及嵌入式微控制器的形式,计算机可读介质存储可通过(微)处理器执行的计算机可读程序代码(例如,软件或固件)。
[0053]参照图2,示出根据本公开实施例,表示解克隆的压缩逻辑块的数据结构。本实施例中示出8个4千字节的压缩逻辑块。这些解克隆的压缩逻辑块(PLB)可将逻辑块地址(LBA)映射到物理地址。如图所示,可将LBA 0-7映射到物理地址块O,将LBA 7_15映射到物理地址块I,将LBA 16-23映射到物理地址块2,将LBA 24-31映射到物理地址块3,将LBA 32-39映射到物理地址块4,将LBA 40-47映射到物理地址块5,将LBA 48-55映射到物理地址块6,将LBA56-63映射到物理地址块7。
[0054]图3描述根据本公开实施例,表示主间接数据结构条目和克隆间接数据结构条目的表格。如参照图3所述,在以下实施例中,可以在平面间接系统中实现写时复制改进。PLB可以是查找数据结构(例如,平面间接查找表)中的“压缩逻辑块”。可将克隆操作中涉及的8个连续的8-PLB-对准的PLB的集合称为“C组块”。对于一C组块,其在介质上的数据用适用于该C组块(即原始副本)的PLB标记,则该C组块称为“主C组块”。可将C组块中用于全部PLB的间接数据结构条目聚集在一起形成单个“C条目”。可将数据驻留在介质上的C组块所对应的C条目称为主C条目。可将描述作为主LBA范围的副本的LBA范围的C条目称为克隆C条目。一个或多个SSD可以限定PLB,以跟踪4KB的客户数据加元数据(例如,8 X 512B扇区)。在以下实施例中,PLB可以只是表格中的一个条目。可将间接数据结构条目扩展(例如,扩展一个比特),以便于写时复制。额外比特可以是“克隆跟踪”比特,可将“克隆跟踪”比特设置为I,以指示或者有其他PLB因此该PLB充当主副本的,或者这是具有作为其主副本的一些其他PLB的克隆。具有克隆跟踪比特集合的间接数据结构条目的其余比特可以包含NAND存储器地址(例如,就像没有比特集合的条目那样),也可以不包含。用于“克隆跟踪=1”的替代数据结构以较之典型PLB条目更粗的粒度被跟踪,且包括产生克隆条目的链表的字段以及指向主条目的指针。利用单个C条目来描述相比于解克隆间接条目更大的LBA组块(例如,2X),可以获得用于这些附加字段的空间。这个权衡是合理的,因为克隆数据趋向于涉及大的分割或文件集合而非个别主机LBA。
[0055]个别主机LBA的物理地址被分配为使得对于某些LBA要求附加查找。这样可以为在每个主条目和克隆条目中包括主指针和克隆指针腾出地方。但是用于取得物理地址的DRAM存取的数量并未显著增加。如图3所示,主C条目可包含映射到全部物理地址8-15的LBAJS是只包含与物理地址8-11、14和15的实际映射(可以从克隆C条目获得与物理地址12、13的映射)。如图3的克隆C条目所示,可将映射提供给与物理地址8-13相对应的LBA。未在主C条目(物理地址12和13)中映射的两个物理块提供用于主索引和次索引的空间。未在克隆C条目(物理地址14和15)中映射的两个物理块提供用于主索引和次索引的空间。主C条目中的主索引总是指向自己。克隆C条目中的主索引总是指向主C条目。主C条目的次索引指向链条中的第一克隆C条目。如果有一个以上克隆C条目,则克隆C条目的次索引指向次克隆C条目。如果只有一个克隆C条目或者它是最后一个克隆C条目,则次索引可以指回主C索引(或者,它可以指向指示列表结尾的特殊值,例如空指针)。这样可以允许主C条目以及一个或多个克隆C条目的遍历。
[0056]在具有平面间接数据结构的实施例中,PLB(物理位置块)表示在单个查找表中包含物理NAND存储器地址的个别条目。典型PLB粒度为单个数据结构条目贡献4KB(例如,8*512B扇区)。作为示例,考虑8个PLB的克隆组块尺寸一一对于克隆范围的完全随机单个扇区存取所要求的DRAM存取的平均数量是1.25。如果克隆组块尺寸更大,在更小粒度克隆边界与“解克隆” PLB组块所要求的更多NAND存取之间有一个权衡,那么这个数量可以更低。
[0057]如果主机读取PLB查找指向克隆条目,则SSD需要(I)物理地址和(2)在写入数据时使用的LBA。在主条目与克隆条目之间分配物理地址,可以选择性地用重复数据填充所有可用的PLB条目,以降低目标LBA要求第二DRAM读取的可能性。对于#2,可以基于每个克隆条目中的主指针来计算主LBA—一这样不要求故意的附加DRAM存取,并且可把主指针从原始的PLB查找取到缓存(连同次克隆指示符)。
[0058]在一些实施例中,为了使附加信息适合现有间接数据结构,可以只以是PLB尺寸的某些倍数的粒度来跟踪克隆。在一些实施例中,为了实现与给定LBA相对应的C组块的索引的有效计算,可将粒度选择为PLB尺寸乘以2的幂。作为示例,该乘数可以是8,但是可以使用更大的克隆粒度。克隆可以涉及一次克隆大范围的LBA(例如,整个命名空间),因此对于使用更大粒度的惩罚可以最小。
[0059]在一些实施例中,间接数据结构可将表示相同数据的一个或多个C组块的环形链表嵌入其中。在其他实施例中,可以使用链表的其他形式(例如,单个结尾的链表)。在用于该C组块列表的间接条目中,可将描述C组块的数据的物理地址展开。
[0060]对一C组块,其数据在物理上驻留在介质中,用适用于该C组块(即原始副本W^PLB来标记,可称为“主C组块”。当前指代相同数据、没有在介质中存储副本的其他C组块可称为“克隆C组块”。
[0061]可将C组块中用于全部PLB的间接数据结构条目聚集在一起形成单个“C条目”。对于主C组块,C条目可以采用图6A所示的格式。如图所示,主C组块可包含物理地址0-3(范围中前面4个物理地址),后面是物理地址6和7。在克隆C条目中可以映射这两个错过的物理地址,并且可以使用两个额外位置(slot)来提供主索引和次索引。如图所示,可将“克隆跟踪”指示符设置为I。这样可以指示应当忽略C条目的垃圾收集处理。
[0062]对于克隆C组块,C条目可以采用图6B所示的格式。如图所示,可以映射物理地址0-5,并且可以错过物理地址6和7。在主C条目中可以映射错过的两个物理地址,并且可以使用两个额外位置来提供主索引和次索引。如图所示,可将“克隆跟踪”指示符设置为I。这样可以指示应当忽略C条目的垃圾收集处理。
[0063]在一个或多个实施例中,NAND地址i可以是用于主C组块的第i个PLB的NAND地址(i=0表示第一个PLB)。主索引可以是主C条目的间接数据结构索引(因为它消耗8个PLB条目的空间,所以除以8)。次索引可以是用于指向相同数据的次克隆C条目的间接数据结构索引(因为它消耗8个PLB条目的空间,所以除以8)。如果没有更多的克隆C条目要表示,那么次索引指回主C条目。在一些实施例中,该次索引可以指向指示列表结束的值(例如,空指针)。
[0064]在一些实施例中,可以利用一个或多个测试来确定C组块是否为主条目。例如,当且仅当C条目的主索引指向C条目自己时C组块是主条目。
[0065]主C条目与克隆C条目之间经由主索引和次索引的关系可以允许有效地进行一个或多个以下操作。
[0066]为了克隆8个连续的8-PLB-对准的PLB的集合,可以使用一个或多个方法。例如,在一个或多个实施例中,克隆PLB的集合可包括:
[0067]1.在产生主C条目和克隆C条目时,读取用于原始副本的PLB的8个NAND地址;
[0068]2.产生主C条目代替8个原始PLB的间接条目。次索引可以指向新的克隆C条目;以及
[0069]3.产生克隆C条目代替现在要充当克隆的8个PLB的间接条目。次索引可以指向新的主C条目。
[0070]为了将C组块克隆为新的C组块,可以使用一个或多个方法。例如,在一个或多个实施例中,将C组块克隆为新的C组块可包括:
[0071 ] 1.如果源C组块是主条目,则跟随源C条目的次索引来找到克隆C条目并将其复制到新C条目的位置。如果源C组块不是主条目,则将源C条目复制到新C条目的位置。
[0072]2.用主C条目的当前次索引将新C条目的次索引更新;
[0073]3.将主C条目的次索引更新,以指向新的C条目。
[0074]为了在间接条目具有克隆跟踪比特集合的PLB上读取查找,可以使用一个或多个方法。例如,在一个或多个实施例中,在具有间接比特集合的PLB上进行读取查找可包括:
[0075]1.观看包含该PLB的间接条目的C条目。确定该C条目是不是主C条目。基于该确定,进一步确定用于期望的主PLB的NAND地址是否存储在该C条目中。
[0076]2.如果NAND地址存储在第一C条目读取中,就可以返回NAND地址以及主索引。可将主索引用于确定用什么PLB数来标记数据,不需要进行任何附加的间接查找。
[0077]3.如果NAND地址不是存储在第一C条目读取中并且第一C条目读取是主C条目,就可以跟随次索引来找到包含所需NAND地址的克隆C条目。可以返回该NAND地址以及主索引。
[0078]4.如果NAND地址不是存储在第一C条目读取中并且是克隆C条目,就可以跟随主索引来找到包含所需NAND地址的主C条目。可以返回该NAND地址以及主索引。
[0079]为了“解克隆”克隆C组块,可以使用一个或多个技术。例如,在一些实施例中,技术可包括:
[0080]1.确定是否只有一个克隆。例如,如果目标的C条目的次索引与其主索引匹配并且主C条目的次索引指向目标C条目,那么只有一个克隆。对于主条目和克隆条目两者读取C条目并且通过用于这些PLB的“正常”间接条目将主C条目覆写(overwrite)。
[0081]2.如果目标C条目的次索引与其主索引不匹配或者主C条目的次索引不指向目标C条目,那么还有其他克隆。从其环形列表中去除该C条目。
[0082]3.在任一情况下,读取用于主C组块的数据并将其复制为克隆C组块,用指示新副本的NAND地址的正常间接条目将克隆C条目覆写。
[0083]为了“解克隆”主C组块,可以使用一个或多个技术。例如,在一些实施例中,技术可包括:
[0084]1.读取主C条目和第一克隆C条目;以及
[0085]2.从用于主C组块的存储介质读取数据,并通过将其写入新的存储介质位置以及将主机LBA元数据与对应的克隆C组块相关联,将其复制到第一克隆C组块的PLB;
[0086]3.如果第一克隆是唯一的克隆(S卩,它的次索引指回主条目),那么对于我们刚才产生的副本,用指向NAND地址的正常间接条目将第一克隆C条目覆写。用指向原始主C组块的正常间接条目将主C条目覆写;
[0087]4.如果第一克隆不是唯一克隆,那么从其环形链表中去除主条目。对于我们刚才产生的副本,用新的主C条目将第一克隆C条目覆写。这样可以促使旧主C条目的第一克隆C条目变为用于自己以及剩余的克隆C条目的新的主C条目。
[0088]当具有克隆跟踪比特集合的目标PLB所要求的间接更新,该技术可以在原子量级包括:
[0089]1.解克隆PLB的C组块;以及
[0090]2.正常进行间接更新。
[0091]可以实施垃圾收集,使得垃圾收集算法对于在间接系统中用克隆跟踪比特标记其PLB的任何物理数据都不丢弃数据。也就是说,垃圾收集算法可以考虑用克隆跟踪比特标记的所有PLB都成为要求重定位而不是擦除的“有效”数据。
[0092]在一个或多个实施例中,可将小型计数bloom过滤器存储在SRAM中,以跟踪系统中出现的C组块。在写入时,如果bloom过滤器指示没有PLB成为C组块一部分的可能性,就可以安全地进行间接系统的更新,不需要首先读取当前的数据结构条目。因为克隆趋向于成为大的序列范围,所以用于bloom过滤器的哈希函数大致像:f (C-Entry Index) =C-EntryIndex/Filter Size而不是随机函数。
[0093]图4描述根据本公开实施例,用于SSD中改进的写时复制功能的示例性模块。如图4所示,写时复制模块410可包含间接产生模块412、间接管理模块414以及错误处理模块416。
[0094]间接产生模块412可以产生用于跟踪写时复制副本的一个或多个数据结构。PLB可以只是表格中的一个条目。可将间接数据结构条目扩展(例如,扩展一个比特),以帮助写时复制。额外比特可以是“克隆跟踪”比特,可将“克隆跟踪”比特设置为I,以指示或者有该PLB因此充当主副本的其他PLB,或者这是具有作为其主副本的一些其他PLB的克隆。具有克隆跟踪比特集合的间接数据结构条目的剩余比特可以包含NAND地址(例如,就像没有比特集的条目那样),也可以不包含。用于“克隆跟踪=I”的替代数据结构包括产生克隆条目的链表的字段以及指向主条目的指针。利用单个条目来描述相比于解克隆间接条目更大的LBA组块(例如2X),获得用于这些附加字段的空间。
[0095]间接管理模块414可以利用间接数据结构进行一个或多个操作。间接管理模块414可以帮助数据克隆、读取克隆数据、解克隆数据以及利用参照图3所述的一个或多个方法帮助安全有效的垃圾收集。
[0096]错误处理模块416可以捕获、记录、报告和/或处理与管理克隆数据相关联的一个或多个错误。
[0097]图5描述根据本公开实施例,示出SSD中改进的写时复制功能的流程图。但是处理500只是示例。例如通过增加、改变、去除或重置步骤,可以改变处理500。在步骤502,处理开始。
[0098]在步骤504,可以建立主C条目。对一C组块,其数据物理驻留在介质中,用适合该C组块(即原始副本)的PLB来标记,被称之为“主C组块”。当前指代相同数据、没有在介质中存储副本的其他C组块可称为“克隆C组块”。
[0099]可将C组块中用于全部PLB的间接数据结构条目聚集在一起形成单个“C条目”。对于主C组块,C条目可以采用图6A所示的格式。
[0100]在步骤506,可以建立克隆C条目。对于克隆C组块,该C条目可以采用图6B所示的格式。
[0101]在一个或多个实施例中,NAND地址i可以是用于主C组块的第i个PLB的NAND地址(i=0表示第一PLB)。
[0102]在步骤508,可以分配指示主索引的块。主索引可以是主C条目的间接数据结构索弓丨(因为它消耗8个PLB条目的空间,所以除以8)。主C条目和克隆C条目两者的主索引都可以指向主C条目。
[0103]在步骤510,可以分配指示次索引的块。次索引可以是用于指向相同数据的次克隆C条目的间接数据结构索引(因为它消耗8个PLB条目的空间,所以除以8)。如果没有更多的克隆C条目要表示,那么次索引指回主C条目。
[0104]在一些实施例中,可以利用一个或多个测试来确定C组块是否为主条目。例如,当且仅当C条目的主索引指向C条目自身时,该C组块可以是主条目。
[0105]在步骤512,方法500结束。
[0106]其它实施例也在本发明的范围和精神内。例如,可以用软件、硬件、固件、硬接线或者它们的任意组合来实现上述功能。根据如上所述的本公开,根据指令操作的一个或多个计算机处理器可以在SSD中实现与改进写时复制功能相关联的功能。如果是这样,那么在本公开的范围内,可将这些指令存储在一个或多个非短暂性处理器可读存储介质上(例如,磁盘或其他存储介质)。此外,可将实现功能的模块在物理上定位在各个位置,包括被分配为使得在不同的物理位置实现功能的不同部分。
[0107]本公开的范围不限于本文所述具体实施例。实际上,根据前面的描述和附图,除了本文所述的实施例之外,本公开的其他各种实施例和修改对于本领域技术人员而言显而易见。因此,这些其他实施例和修改皆落入本公开范围之内。此外,虽然本文在为了特定目的的特定环境中的特定实施方式的背景下描述了本公开,但是本领域技术人员应当认识到,其用途不限于此,并且可以在为了任意数量目的的任意数量环境中有利地实现本公开。因此,应当考虑本文所述本公开的全部范围和精神来解释下面提出的权利要求。
【主权项】
1.一种用于在SSD中提供改进的写时复制功能的方法,包括: 在装置的存储器中提供间接数据结构,该间接数据结构包括: 用于克隆数据的主条目,所述主条目具有对一个或多个索引的引用; 用于所述克隆数据的克隆条目,所述克隆条目具有以下至少一个:对主索引的引用、对次索引的引用和指示数据结构结尾的值;以及 利用计算机处理器,使用一个或多个所述引用遍历所述克隆数据的一个或多个副本。2.权利要求1的方法,其中所述间接数据结构包括多个物理地址。3.权利要求1的方法,其中所述间接数据结构是环形链表的一部分,其中用于克隆数据的所述主条目包括对于主索引的引用以及对于次索引的引用。4.权利要求1的方法,其中所述间接数据结构是环形链表的一部分,其中用于克隆数据的所述克隆条目包括对于所述主索引的引用以及对于所述次索引的引用。5.权利要求1的方法,其中所述间接数据结构是单个结尾的链表的一部分,其中,索引中的条目提供该索引是主索引的指示。6.权利要求1的方法,其中所述引用包括用于逻辑块寻址的平面间接表中的条目。7.权利要求1的方法,其中所述引用包括用于逻辑块寻址的树形数据结构中的条目。8.权利要求1的方法,其中所述改进的写时复制功能包括改进的命名空间复制功能。9.权利要求1的方法,进一步包括设置用于一个或多个压缩逻辑块的指示符,以指示所述一个或多个压缩逻辑块被克隆。10.权利要求1的方法,其中所述主条目的主索引指向所述主条目。11.权利要求3的方法,其中所述克隆条目的主索引指向所述主条目。12.权利要求4的方法,其中数据结构中最后的克隆条目的次索引指向所述主条目。13.权利要求4的方法,进一步包括: 确定所述克隆数据的克隆条目是唯一克隆条目,其中所述确定包括: 确定所述克隆条目的次索引与所述克隆条目的主索引匹配; 确定所述主条目的次索引指向所述克隆条目; 通过把所述克隆条目的次索引设置为指示压缩逻辑块的间接条目以及把所述主索引条目设置为指示压缩逻辑块的间接条目来解克隆所述克隆数据的克隆条目;以及 通过把所述主条目的次索引设置为指示原始主条目的第一压缩逻辑块的第一间接条目以及把所述主条目的主索引设置为指示所述原始主条目的第二压缩逻辑块的第二间接条目来解克隆所述克隆数据的主条目。14.权利要求4的方法,进一步包括: 确定所述克隆数据的克隆条目是多个克隆条目之一,其中所述确定包括确定以下至少其中一个: 所述克隆条目的次索引与所述克隆条目的主索引不匹配;以及 所述主条目的次索引不指向所述克隆条目;以及 通过把前一条目的次索引设置为指向由所述克隆条目的次索引指示的条目来解克隆所述克隆数据的克隆条目。15.权利要求1的方法,进一步包括: 在垃圾收集处理期间复查条目; 确定所述条目包含克隆指示符;以及 基于确定所述条目包含所述克隆指示符,确定所述垃圾收集处理中的条目是不要被删除的有效条目。16.—种计算机程序产品,包括在计算机上可执行的一系列指令,所述计算机程序产品进行用于在SSD中提供改进的写时复制功能的处理;所述计算机程序实现以下步骤: 在装置的存储器中提供间接数据结构,所述间接数据结构包括: 用于克隆数据的主条目,所述主条目具有对一个或多个索引的引用; 用于所述克隆数据的克隆条目,所述克隆条目具有以下至少一个:对主索引的引用、对次索引的引用和指示数据结构结尾的值;以及 利用计算机处理器,使用一个或多个所述引用遍历所述克隆数据的一个或多个副本。17.—种用于在SSD中提供改进的写时复制功能的系统,所述系统包括: 第一装置; 其中所述第一装置包括在存储器中存储的被存储指令,所述指令包括: 在所述第一装置的存储器中提供间接数据结构的指令,所述间接数据结构包括: 用于克隆数据的主条目,所述主条目具有对一个或多个索引的引用; 用于所述克隆数据的克隆条目,所述克隆条目具有以下至少一个:对主索引的引用、对次索引的引用和指示数据结构结尾的值;以及 利用计算机处理器,使用一个或多个所述引用遍历所述克隆数据的一个或多个副本。18.权利要求17的系统,其中所述间接数据结构包括多个物理地址。19.权利要求17的系统,其中所述间接数据结构是环形链表的一部分,其中用于所述克隆数据的所述主条目包括对于主索引的引用以及对于次索引的引用。20.权利要求17的系统,其中所述间接数据结构是环形链表的一部分,其中用于所述克隆数据的所述克隆条目包括对于所述主索引的引用以及对于所述次索引的引用。21.权利要求17的系统,其中所述间接数据结构是单个结尾的链表的一部分,其中,索引中的条目提供该索引是主索引的指示。22.权利要求17的系统,其中所述引用包括用于逻辑块寻址的平面间接表中的条目。23.权利要求17的系统,其中所述第一装置包括高速外围组件互连(PCIe)装置。24.权利要求17的系统,进一步包括: 把用于一个或多个压缩逻辑块的指示符设置为指示所述一个或多个压缩逻辑块被克隆的指令。25.权利要求20的系统,其中所述主条目的所述主索引以及所述克隆条目的所述主索引指向所述主条目,且数据结构中最后的克隆条目的次索引指向所述主条目。
【文档编号】G06F12/16GK105912475SQ201610104585
【公开日】2016年8月31日
【申请日】2016年2月25日
【发明人】迪伦·马克·德威特, 亚当·迈克尔·埃斯普瑟, 科林·克里斯多夫·麦坎布里奇, 大卫·乔治·德赖尔
【申请人】Hgst荷兰有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1