CN109416681A - 使用幽灵指纹进行工作负载优化的重复数据删除 - Google Patents
使用幽灵指纹进行工作负载优化的重复数据删除 Download PDFInfo
- Publication number
- CN109416681A CN109416681A CN201780041411.7A CN201780041411A CN109416681A CN 109416681 A CN109416681 A CN 109416681A CN 201780041411 A CN201780041411 A CN 201780041411A CN 109416681 A CN109416681 A CN 109416681A
- Authority
- CN
- China
- Prior art keywords
- data
- fingerprint
- state
- block
- data block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Retry When Errors Occur (AREA)
Abstract
数据存储系统的控制器生成写入数据存储系统的数据块的指纹。控制器在数据结构中维护多个数据块中的每一个的相应状态信息。可以独立地设置每个数据块的状态信息以指示多个状态中的任何状态,包括至少一个重复数据删除状态和至少一个非重复数据删除状态。在分配数据块时,控制器将数据块的状态信息初始化为非重复数据删除状态,此后,响应于检测到数据块的副本写入到数据存储系统,将数据块状态信息转换到重复数据删除状态。控制器基于数据结构中的状态信息并参考指纹,选择性地对写入数据存储系统的数据块执行重复数据删除。
Description
背景技术
本公开涉及数据处理和存储,并且更具体地,涉及数据存储系统,例如基于闪存的数据存储系统的管理,以优化重复数据删除。
NAND闪存是电可编程和可擦除非易失性存储器技术,其将每个存储器单元的一个或多个数据位存储为晶体管的浮栅或类似的电荷陷阱结构上的电荷。在典型的实现中,NAND闪存阵列被组织在物理存储器的块(也称为“擦除块”)中,每个块包括多个物理页面,每个物理页面又包含多个存储器单元。借助于用于访问存储器单元的字和位线的布置,闪存阵列通常可以基于页面编程,但是以块为基础擦除。
如本领域所公知的,在用新数据编程之前必须擦除NAND闪存的块。通过将高的正擦除电压脉冲施加到所选块的p阱体区域并通过将要擦除的存储器单元的所有字线偏置接地来擦除NAND闪存单元块。施加擦除脉冲促进电子从偏置到地的存储器单元的浮动栅极的隧穿,以给予它们净正电荷,从而将存储器单元的电压阈值转变为擦除状态。
在数千个编程/擦除周期中,由编程-擦除过程赋予的NAND闪存单元上的电压引起的应力导致编程到NAND闪存单元中的数据的误码率随时间增加并因此限制NAND闪存的使用寿命。因此,希望通过重复数据删除减少写入NAND闪存的数据量来减少NAND闪存的编程/擦除周期数(即,消除重复存储数据副本)。此外,重复数据删除降低了基于闪存的存储系统的每个有效容量的成本,并且可以降低基于闪存的存储系统的空间利用率,从而减少例如写入放大之类的内部数据存储开销。
通常,在重复数据删除过程期间,识别独特的数据块(例如,数据块或页面)并将其存储在NAND闪存中。将要存储在NAND闪存内的其他数据块与存储的数据块进行比较,并且当发生匹配时,将指向存储的数据块的引用存储在NAND闪存中以代替冗余的数据块。鉴于相同的数据模式可能发生数十次、数百次甚至超过数千次(匹配频率可能取决于块大小),重复数据删除可以大大减少必须存储的数据量。
数据存储系统可以使用在线(in-line)重复数据删除过程和后台重复数据删除过程中的任一个或两者来执行重复数据删除。利用在线重复数据删除,数据存储系统通过计算输入数据的散列(在本领域中也称为“指纹”)并在元数据数据结构中执行散列查找来确定要存储的输入数据是否复制已经存储在数据存储系统的存储介质上的现有数据。如果在元数据数据结构中找到匹配,则数据存储系统存储对现有数据的引用而不是传入数据。一些重复数据删除方法可另外执行旧数据和新数据的一对一比较。利用后台重复数据删除,数据存储系统将所有传入的写入数据存储到存储介质,并且后台进程随后通过引用另一数据副本来搜索和替换重复数据。与在线重复数据删除相比,后台数据重复数据删除可以减少存储延迟,因为在存储传入的写数据之前不需要执行用于确定数据的重复(以及可选地一对一数据比较)的哈希计算和查找。然而,实现后台重复数据删除通常采用资源密集型后台扫描,并且如果数据的重复数据删除率大于1则需要更大的存储容量并且与使用在线重复数据删除的数据存储系统相比导致存储介质上的磨损增加重。相反,在线重复数据删除需要较少的数据存储容量,并且可能减少存储介质的磨损,但是,如果管理不当,则可能导致明显更高的存储延迟和更低的写入带宽。
无论是采用在线还是后台重复数据删除,数据存储系统都需要在元数据数据结构中持久存储(例如,在NAND闪存中)大量的散列(“指纹”)。另外,为了实现相当好的性能,数据存储系统通常利用大量动态存储器(例如,动态随机存取存储器(DRAM))来实现对元数据数据结构的快速访问。然而,因为在现实世界的系统中动态存储器的大小必然是有限的,所以通常元数据数据结构的部分必须从非易失性存储器中进出、减小尺寸或完全丢弃,这通常最终对整体I/O性能和/或重复数据删除率产生负面影响。因此,对指纹的适当管理会产生影响重复数据删除性能以及整体I/O性能的问题。
US8392384B1公开了一种用于管理指纹的技术,其中管理指纹的总存储量以适合可能被访问到动态存储器(即,高速缓存)中的那些指纹。在该方法中,仅当高速缓存变满时,才通过二进制采样将指纹分类为采样和非采样类型,并且仅允许在高速缓存中替换非采样指纹。特别地,指纹的一个或多个比特可用于决定指纹属于哪种类型,从而将采样的条目重新分类为非采样的条目。在这种方法中,指纹索引中的所有指纹(包括缓存的指纹)对应于当前存储在重复数据删除存储系统中的数据块,这意味着覆盖(因此不再有效)数据的指纹不会保留在指纹索引中。
US9069786B2公开了另一种用于管理指纹的技术,其利用两个或更多个指纹查找表来存储指纹。在该方法中,第一表存储更可能遇到的指纹,第二表(和任何其他表)存储不太可能遇到的指纹。基于该分类,对可能遇到的那些指纹执行在线重复数据删除,并且对不太可能遇到的那些指纹执行后台重复数据删除。为了确定应该搜索哪些表,指示在在线重复数据删除中投入多少付出的属性与数据块或数据块组相关联。
发明内容
在至少一个实施例中,数据存储系统的控制器生成写入数据存储系统的数据块的指纹。控制器在数据结构中维护多个数据块中的每一个的相应状态信息。可以独立地设置每个数据块的状态信息以指示多个状态中的任何状态,包括至少一个重复数据删除状态和至少一个非重复数据删除状态。在分配数据块时,控制器将数据块的状态信息初始化为非重复数据删除状态,此后,响应于检测到数据块的副本写入到数据存储系统,将数据块状态信息转换到重复数据删除状态。控制器基于数据结构中的状态信息并参考指纹,选择性地对写入数据存储系统的数据块执行重复数据删除。
根据一个方面,提供了一种控制数据存储系统的方法,该方法包括:控制器,生成写入所述数据存储系统的数据块的指纹;所述控制器在数据结构中维护所述数据存储系统中的多个数据块中的每一个数据块的相应状态信息,其中每个数据块的所述状态信息可以独立地设置以指示多个状态中的任何一个,并且其中所述多个状态包括至少一个重复数据删除状态,其中对相关联的数据块执行重复数据删除,以及至少一个非重复数据删除状态,其中不对相关联的数据块执行重复数据删除,其中所述维护包括:在分配数据块时,将所述数据块的所述状态信息初始化为所述多个状态中的非重复数据删除状态;以及此后,响应于检测到所述数据块的副本写入到所述数据存储系统,将所述数据块的所述状态信息转换为所述多个状态中的重复数据删除状态;以及所述控制器基于所述数据结构中的所述状态信息并通过参考所述指纹,选择性地对写入所述数据存储系统的数据块执行重复数据删除。
根据另一方面,提供了一种数据处理系统,包括:数据存储系统的控制器,其中所述控制器被配置为执行:生成写入所述数据存储系统的数据块的指纹;在数据结构中维护所述数据存储系统中的多个数据块中的每一个数据块的相应状态信息,其中每个数据块的所述状态信息可以独立地设置以指示多个状态中的任何一个,并且其中所述多个状态信息包括至少一个重复数据删除状态,其中对相关联的数据块执行重复数据删除,以及至少一个非重复数据删除状态,其中不对相关联的数据块执行重复数据删除,其中所述维护包括:在分配数据块时,将所述数据块的状态信息初始化为所述多个状态中的非重复数据删除状态;以及此后,响应于检测到所述数据块的副本写入到所述数据存储系统,将数据块的状态信息转换为所述多个状态中的重复数据删除状态;以及基于所述数据结构中的所述状态信息并通过参考所述指纹,有选择地对写入所述数据存储系统的数据块执行重复数据删除。
根据另一方面,提供了一种程序产品,包括:存储设备;以及存储在所述存储设备中的程序代码,其中所述程序代码在由所述数据存储系统的控制器执行时使所述控制器执行:生成写入所述数据存储系统的数据块的指纹;在数据结构中维护所述数据存储系统中的多个数据块中的每一个数据块的相应状态信息,其中每个数据块的所述状态信息可以独立地设置以指示多个状态中的任何一个,并且其中所述多个状态信息包括至少一个重复数据删除状态,其中对相关联的数据块执行重复数据删除,以及至少一个非重复数据删除状态,其中不对相关联的数据块执行重复数据删除,其中所述维护包括:在分配数据块时,将所述数据块的状态信息初始化为所述多个状态中的非重复数据删除状态;以及此后,响应于检测到所述数据块的副本写入到所述数据存储系统,将数据块的状态信息转换为所述多个状态中的重复数据删除状态;以及基于所述数据结构中的所述状态信息并通过参考所述指纹,有选择地对写入所述数据存储系统的数据块执行重复数据删除。
附图说明
现在将仅通过示例的方式参考附图描述本发明的实施例,附图中:
图1A是根据一个实施例的数据处理环境的高级框图;
图1B是图1A中描述的数据存储系统的示例性接口节点的更详细的框图;
图1C是图1A中所示的数据存储系统的示例性闪存卡的更详细的框图;
图2描绘了根据一个实施例的重复数据删除的示例;
图3是根据一个实施例的图1C的地址映射数据结构的更详细视图;
图4是根据一个实施例的图1C的指纹索引的更详细视图;
图5是描绘了根据一个或多个实施例的存储阵列的块的阵列块状态(ABS)和指纹状态(FPS)的管理的状态图;
图6是描绘了根据一个实施例的其中幽灵指纹仅存储在存储器中的存储阵列的块的阵列块状态(ABS)和指纹状态(FPS)的管理的状态图;
图7A是描绘了根据一个实施例的其中在存储器和大容量存储介质中都保持幽灵指纹的存储阵列的块的阵列块状态(ABS)和指纹状态(FPS)的管理的状态图;
图7B是描绘了根据一个实施例的其中在存储器和大容量存储介质中懒惰地保持幽灵指纹的存储阵列块的阵列块状态(ABS)和指纹状态(FPS)的管理的状态图;
图8是说明根据又一实施例的其中在存储器和大容量存储介质中都保持幽灵指纹的存储阵列的块的阵列块状态(ABS)和指纹状态(FPS)的管理的状态图;以及
图9是描绘了根据又一实施例的区分由重复数据删除导致的阵列块共享和归因于存储系统支持的其他功能,例如卷快照、存储端复制命令(例如,XCOPY)或卷克隆操作的阵列块共享的存储阵列的块的阵列块状态(ABS)和指纹状态(FPS)的管理的状态图。
具体实施方式
现在参考附图并且特别参考图1A,其示出了根据本公开的一个或多个实施例的示例性数据处理环境100的高级框图,该数据处理环境100包括NAND基于闪存的数据存储系统和被配置为执行重复数据删除的控制器。通过阅读以下描述将理解,本文提供的数据处理环境100的特定架构细节不一定限制在本文公开的发明,并且所公开的发明适用于其他数据处理环境,包括采用替代或额外的块存储介质。
在所示示例中,数据处理环境100包括一个或多个主机,诸如具有处理指令和数据的一个或多个处理器104的处理器系统102。处理器系统102可以另外包括本地存储器106(例如,动态随机存取存储器(DRAM)或磁盘),其可以存储由处理器104执行的处理的程序代码、操作数和/或执行结果。在各种实施例中,处理器系统102可以是,例如,移动计算设备(例如智能手机或平板电脑)、膝上型或台式个人计算机系统、服务器计算机系统(例如可从国际商业机器公司获得的系列之一)、或大型计算机系统。处理器系统102还可以是使用例如POWER,Intel X86的各种处理器的嵌入式处理器系统,或与存储器高速缓存、存储器控制器、本地存储器,I/O总线集线器等组合的任何其他处理器。
每个处理器系统102还包括输入/输出(I/O)适配器108,其直接(即,没有任何中间设备)或间接(即,通过至少一个中间设备)通过I/O信道110耦合到数据存储系统120。在各种实施例中,I/O信道110可以采用已知或未来开发的通信协议中的任何一个或组合,包括,例如光纤通道(FC)、以太网FC(FCoE)、Internet小型计算机系统接口(iSCSI)、InfiniBand、传输控制协议/Internet协议(TCP/IP)、外围组件互连高速(PCIe)等。通过I/O通道110传送的I/O操作(IO)包括处理器系统102从数据存储系统120请求数据的读取IO和处理器系统102请求在数据存储系统120中存储数据的写入IO。
在所示实施例中,数据存储系统120包括多个接口节点122,数据存储系统120通过接口节点122接收并响应通过I/O通道110的IO。每个接口节点122耦合到多个廉价磁盘(RAID)控制器124冗余阵列中的每一个,以便于容错和负载平衡。在数据存储系统120中可以有一个、两个或多于两个接口节点122,并且接口节点可以在数据存储系统120内以及跨数据存储系统120彼此直接通信(例如,通过PCIe总线)。在该示例中,每个RAID控制器124又耦合(例如,通过PCIe总线)到多个包括NAND闪存存储介质的闪存卡126中的每一个。在其他实施例中,除了NAND闪存存储介质或代替NAND闪存存储介质,可以采用其他存储介质。
图1B描绘了图1A的数据存储系统120的接口节点122的示例性实施例的更详细框图。在所示实施例中,接口节点122包括一个或多个接口卡111,其用作通过I/O通道110到处理器系统102的接口并连接到主机侧交换结构112,该交换结构112可以例如由外围组件互连快速(PCIe)交换机或其他合适的交换机来实现。主机侧交换结构112在接口卡111和接口节点122内的一个或多个处理器之间传输数据,这些处理器在图1B中共同示为控制器113。形成控制器113的处理器可以用通用处理器和/或专用处理器实现,例如专用集成电路(ASIC)或现场可编程门阵列(FPGA)。在控制器113内实现多个处理器的情况下,一个或多个处理器可以专用于数据平面处理,并且一个或多个处理器可以专用于控制平面处理。控制器113耦合到可以实现为统一存储器或多个不同存储器的存储器118(例如,DRAM或磁阻随机存取存储器(MRAM))。在其他数据结构中,存储器118保持指纹索引高速缓存119、地址映射高速缓存121和引用计数器高速缓存117。注意,指纹索引、地址映射表和引用计数器可以全部或仅部分地安装在这些高速缓存。每种数据类型可以单独存储(如图1B所示)和/或并置在存储器118中的专用数据结构中。控制器113另外通过存储侧交换结构123耦合到RAID控制器124,存储侧交换结构123可以用PCI e交换机或其他交换技术实现。控制器113还耦合到数据存储系统120中的一个或多个其他接口节点122,以处理故障转移场景或执行其他数据同步功能或重复数据删除操作的委托/重定向。
图1C示出了图1A的数据存储系统120的闪存卡126的更详细的框图。闪存卡126包括用作闪存卡126和RAID控制器124之间的接口的网关130。网关130耦合到通用处理器(GPP)132,其可以被配置(例如,通过程序代码)以执行各种管理功能,例如垃圾收集、耗损均衡、用于将来写入的数据放置决定、由网关130接收的IO的预处理和/或由闪存卡126调度IO的服务。GPP 132耦合到GPP存储器134(例如,DRAM或MRAM),该GPP存储器134可以方便地缓冲GPP 132在其处理过程中创建、引用和/或修改的数据。
网关130还耦合到一个或多个闪存控制器140,每个闪存控制器140控制相应的NAND闪存系统150。闪存控制器140可以例如由具有相关的闪存控制器存储器142(例如,DRAM)的ASIC或FPGA实现。在闪存控制器140用FPGA实现的实施例中,GPP 132可以在数据存储系统120的启动期间编程和配置闪存控制器140。在启动之后,在一般操作中,闪存控制器140从网关130接收请求读取存储在NAND闪存系统150中的数据和/或将数据存储在NAND闪存系统150中的读取和写入IO。闪存控制器140例如通过访问NAND闪存系统150来读取或写入从或至NAND闪存系统150的所请求的数据或者访问与NAND闪存系统150相关联的一个或多个读取和/或写入高速缓存(图1C中未示出)来服务这些IO。
闪存控制器140实现提供逻辑到物理地址转换以使得能够访问NAND闪存系统150内的特定存储器位置的闪存转换层(FTL)。通常,闪存控制器140接收的IO指示要访问(读取或写入)的数据的的逻辑块地址(LBA),并且如果是写入IO,写入数据要写到存储系统120。IO还可以指定要访问的数据的存储量(或大小)。根据数据存储系统120支持的协议和特征,还可以传送其他信息。如本领域技术人员所知,NAND闪存,例如NAND闪存系统150中采用的NAND闪存,是受其结构限制的使得读取或写入IO可访问的最小数据粒子固定为单个闪存页面的大小,例如16千字节(kB)。由主机设备指示的LBA对应于逻辑地址空间内的逻辑页面,逻辑页面通常具有4千字节的大小。这样,可以在物理闪存页面中存储多于一个逻辑页面。FTL将该LBA转换为分配给在NAND闪存系统150中的对应物理位置的物理地址。如图所示,NAND闪存系统150可以存储包含用户数据的数据页面152,以及管理元数据结构,例如指纹索引154,引用计数器156和地址映射数据结构158。
现在参考图1B和1C,接口节点122的控制器113优选地提供系统管理功能,以及诸如快照、精简配置和重复数据删除之类的更高级服务。为了提供重复数据删除,控制器113实现指纹引擎114,其为要写入闪存卡126的数据块的生成指纹。指纹引擎114计算的指纹优选地是提供抗冲突性、不能被反转并且不能制造碰撞的密码散列。可由指纹引擎114用于生成指纹的合适功能的示例包括SHA-1和SHA-2(SHA-2包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224,和SHA-512/256中的任何一个)。通常,指纹引擎114产生的指纹的体积比存储器118的存储容量大许多倍。因此,控制器113将指纹引擎114产生的指纹存储在闪存卡126中的指纹索引154(参见图1C)中并且仅在存储器118中的指纹索引高速缓存119中高速缓存指纹的子集。例如,在一个实施例中,控制器113在指纹索引高速缓存119中高速缓存“热”(即,经常遇到的)指纹,并且仅在指纹索引154中保持较冷的指纹。指纹可以替代地或附加地基于一个或多个附加标准,例如指纹的类型、状态或源(客户端或卷),在指纹索引高速缓存119和指纹索引154之间游离。
控制器113另外包括地址映射引擎116,其将从诸如处理器系统102的主机接收的读取和写入IO中引用的输入块地址映射到数据存储系统120内部使用的输出块地址。例如,在一些实施例中,输入块地址引用逻辑存储卷的参考逻辑块,输出块地址是引用数据存储系统120内的存储阵列的块的阵列块地址。(在一些文献中,阵列块被称为“物理”块,尽管如上所述,实际上进一步的转换通常由较低级别的存储控制器(例如,闪存控制器140)执行,以便定位存储介质中的物理存储位置。)这些阵列块可以是例如4、8、或16kB的大小。在所描绘的实施例中,地址映射引擎116通过引用地址映射数据结构158(参见图1C)在输入和输出块地址之间进行映射。为了快速引用,地址映射引擎116可以将频繁引用的地址转换高速缓存在存储器118中的地址映射高速缓存121中。地址映射引擎116在闪存卡126中维护一组引用计数器156(参见图1C),包括对于输出地址空间中的每个块的相应的引用计数器156,以及仅缓存引用计数器高速缓存117中的引用计数器的子集。引用计数器高速缓存117可以包括或不包括引用计数器156中的条目。每个引用计数器156跟踪存储阵列中输出地址空间的相应块被引用了多少次。
控制器113还包括重复数据删除引擎125,其在接收写入操作或在后台重复数据删除期间执行对重复数据的搜索。当找到重复时,重复数据删除引擎125使用地址映射引擎116来更新地址映射数据结构158和引用计数器156,其包括地址映射高速缓存121和引用计数器高速缓存117中的潜在高速缓存的副本。当新的写入IO如果不是重复数据时,则重复数据删除引擎125将指纹引擎114生成的指纹直接插入指纹索引154和/或插入指纹索引高速缓存119。
控制器113还包括空间回收引擎115(也称为垃圾收集引擎)。空间回收引擎115回收逻辑上无效和/或不再被引用的输出地址空间(即,阵列块)的块(例如,存储的引用计数器156相关联的引用计数器和/或引用计数器高速缓存中有零值的那些块,以及从指纹索引154和指纹索引高速缓存119中移除相关的不需要的指纹,并且如果需要,从地址映射数据结构158中移除任何陈旧的映射信息。此外,空间回收引擎115可以进一步管理从指纹索引154到指纹索引高速缓存119的指纹促销(例如,“热”指纹),以及从指纹索引高速缓存119到指纹索引154的指纹降级(例如,“较冷”指纹)。
此时应注意,存储器118中的指纹索引高速缓存119、地址映射高速缓存121和引用计数器高速缓存117可被组织成单独的读和写高速缓存。因此,写高速缓存中的更新可能不会立即存储在NAND闪存系统150中,而是根据所使用的高速缓存替换策略而延迟地降级。
应当理解,在其他实施例中,由控制器113中的重复数据删除引擎125执行的重复数据删除可以替代地或附加地由在图1A所示的数据处理环境内的其他级别执行。例如,这些功能可以在存储层级的较低级别实现,例如在RAID控制器124或闪存卡126中,或者在存储层级的较高级别,例如在控制多个数据存储系统120的存储区域网络控制器(例如,处理器系统102之一)中。通常,指纹生成和重复数据删除功能最好可以在具有可能重复数据的可见性的存储层次结构中以尽可能高的级别在控制器上执行,从而实现存储容量的最大节省和重复数据删除的磨损。无论实现指纹生成和重复数据删除的存储层次级别如何,这些功能优选地在线执行而不是在后台处理中执行(尽管如下所述在一些实施例中采用后台重复数据删除)。一般而言,执行指纹生成和重复数据删除的逻辑在本文中称为“控制器”,并且被定义为包括配置的硬件逻辑(例如,通用处理器、ASIC、PGA或其他集成电路),该硬件逻辑在硬件中和/或通过固件和/或软件配置以执行本文所述的重复数据删除和指纹管理。
现在参考图2,描绘了根据一个实施例的重复数据删除的示例。在该示例中,数据存储系统(例如图1A-1C的数据存储系统120)接收一个或多个指示数据存储系统120存储包括文件202a和202b的用户数据200的写入IO。文件202a包括数据块A、B、C、D、E、C(即,数据块C在文件202a中重复),文件202b包括数据块A、F、B和G(即,数据块A和B在文件202a和202b之间重复)。响应于接收到指定包括文件202a-202b的数据块存储的写入IO,指纹引擎114生成每个数据块的相应指纹,并且重复数据删除引擎125确定所生成的指纹是否与指纹索引154(包括指纹索引缓存119)中的现有指纹匹配。如果不匹配,则重复数据删除引擎125为指纹索引154(和/或指纹索引高速缓存119)中的数据块安装新的指纹条目。另外,地址映射引擎116对输入块地址(例如,卷块地址)执行地址映射以获得输出块地址(例如,阵列块地址或逻辑块地址),并且控制器113传递存储数据和输出块地址到闪存卡126以启动由闪存卡126形成的存储阵列204中的数据块的存储。以这种方式,当控制器113第一次遇到时,块A-G被写入存储阵列204。但是,当控制器113遇到重复数据块,如指纹索引154中存在匹配指纹的指示时,控制器113命令闪存卡126在由地址映射引擎116确定的地址映射数据结构158(其也可以驻留在地址映射高速缓存121)中的相关输出块地址处存储指向数据块的现有副本的指针代替存储数据块的副本。因此,如图2所示,由闪存卡126形成的存储阵列204仅存储每个数据块A-G的单个副本,并且另外存储指向块A、B和C的指针以代替这些块的重复副本。
通常在图2中示出的重复数据删除可以导致存储容量的显着节省以及闪存卡126上的磨损的减少,闪存卡126上的磨损可能是由于将重复的用户数据块写入NAND闪存存储介质而引起的。但是,重复数据删除在元数据存储和处理开销方面具有相应的成本,如果处理不当,可能会削弱甚至超过重复数据删除所带来的好处。例如,实现重复数据删除的传统的基于NAND闪存的存储系统通常使不再被引用的重写数据块的存储指纹无效并从存储指纹中移除。在最直接的实现中,每个输入块地址映射条目具有指向<指纹、阵列块地址、引用计数器>元组的指针,该元组是指纹索引结构的一部分。然而,这种设计需要在每个用户IO频繁地进行元数据更新,并且仅在所有或大多数元数据驻留在DRAM(或具有类似快速随机访问特性的介质)的情况下才有效。由于DRAM大小与保持元数据的存储容量(例如,对于1PB的存储需要4TB的DRAM来存储元数据)成比例,存储器需求变得不切实际。在没有足够的DRAM来缓存大多数元数据的存储系统中,需要具有更好可伸缩性的不同设计,其中地址映射、指纹和引用计数器存储在单独的元数据结构中(例如,图1C)。这种分离允许减少元数据IO,并且能够基于类型和利用率更有效地缓存元数据。与直接设计相比,只有地址映射表必须是持久的。例如,可以通过遍历地址映射表来重建引用计数器,同时可以批量地插入和移除指纹,因为可以通过扫描存储的数据来重建任何指纹。通过在IO路径之外延迟维护引用计数器和指纹,可以减少维护元数据所需的额外IO。这种可扩展设计的另一个好处是,它允许基于访问的DRAM的类型、频率等对DRAM中的元数据进行有针对性和有效的缓存。例如,地址映射表适用于时间和特殊位置,同时指纹插入和查找不是适用于时间和特殊位置。这可以通过缓存具有最高优先级的地址映射表来利用,同时仅缓存频繁重复数据的一些指纹。然而,指纹元数据与地址转换元数据分离的设计的缺点是,在不保持将阵列块映射到指纹的反向查找能力的情况下,不能立即移除无效指纹。反向查找功能将生成与指纹索引相当数量的元数据,增加元数据IO和存储开销,并且无法实现可伸缩设计的降低DRAM和IO开销的目标。然而,响应于块变得逻辑无效,缺少反向查找能力导致空间回收的额外复杂性,因为在块可以被重用之前必须在后台清理相关的无效指纹(垃圾收集)。
根据本公开的优选实施例,通过阵列块状态和关联的指纹元数据的控制器(例如,控制器113)的智能管理,实现具有低重复数据删除开销和低延迟的独特数据的随机写入的在线重复数据删除的高I/O吞吐量。所公开的阵列块状态和指纹元数据的管理减少了频繁执行的重复数据删除相关操作的开销,同时将额外的处理开销添加到较不频繁执行的操作。作为起点,对数据存储系统工作负载的分析表明,即使在复制许多数据块的情况下,一些典型工作负载也包含大部分唯一数据块。因此,可以通过仅在将具有重复的数据块写入数据存储系统(即,写入具有许多重复项的工作负载)时,而不是在将仅具有少量重复项的唯一数据块写入时(即,重复数据删除反向写入工作负载)时,执行这样的处理可以减少可归因于重复数据删除的处理开销(例如,异地写入语义、附加元数据更新、重写数据块的垃圾收集)。例如,考虑包括100个逻辑块的数据集,其中10个是唯一的,并且其中第一个逻辑块具有91个逻辑副本。通过在线重复数据删除,这100个逻辑块将减少到10个唯一块,因此只存储10个物理块。在此示例中,即使通过重复数据删除实现的数据减少非常高(10:1),9/10的物理块(90%)也不需要产生任何与重复数据删除相关的开销。此外,工作负载分析揭示唯一块通常可以预期比重复块更频繁地更新(例如,重复块通常是冷数据或甚至是只读数据)。因此,继续前面的示例,在写入前100个逻辑块之后,工作负载可以仅由对唯一数据块的更新组成。在这种情况下,重复数据删除率始终保持不变,即使所有输入写入都不需要产生任何与重复数据删除相关的开销。另一方面,在检测到重复之前,表现出重复的工作负载通常不会看到覆盖(即,假设不再使用的地址被正确地修剪)。因此,有利的是,已经第一次写入的数据块被不同地处理,使得在发现重复时,执行重复数据删除相关操作的开销显着地减少。
鉴于前述观察,本公开优选地支持利用元数据来区分唯一和重复数据块的能力。在至少一个实施例中,所有输入数据块最初被认为是唯一块,对于该唯一块,可以避免至少一些与重复数据删除相关的开销。可以生成输入写入的指纹,然后在指纹元数据结构中延迟维护。由于指纹的惰性管理,可以验证或未验证唯一数据块的指纹,其中可能或可能不代表相关联的数据块的当前状态的签名的未验证指纹在本文中被定义为“幽灵指纹”。因此,幽灵指纹可以被认为是暂定的指纹条目。存在幽灵指纹表示实现重复数据删除的控制器先前已经接收到相关联的数据块,但是没有指示数据块是否未被修改或重复。对于任何给定块,指纹索引中可能存在多个幽灵指纹,但是最多可以存在一个实际表示存储数据块的幽灵指纹。维护幽灵指纹涉及比维护频繁更新的数据块的有效指纹更少的处理开销,因为陈旧的幽灵指纹将被懒惰地丢弃而不会产生任何元数据IO。在至少一些实施例中,指纹长度和/或指纹计算方法基于指纹类型而不同。作为一个示例,验证的指纹可以更长并且因此具有更低的误报率,而幽灵指纹可以更短并因此更节省空间。
现在参考图3,示出了根据一个实施例的图1C的地址映射数据结构158的更详细视图。在所描绘的实施例中,地址映射数据结构158包括多个地址元数据(MD)页面300,每个页面包括元数据页头302和多个地址转换条目304。在所示示例中,每个地址转换条目304将输入块地址(例如,逻辑卷块地址)与由地址映射引擎116输出的输出块地址(例如,阵列块地址)关联。此外,在优选实施例中,每个地址转换条目304包括另外的元数据字段在此称为阵列块状态(ABS),其在下面参考图5-9更详细地描述。如图3中进一步所示,当地址映射引擎116利用在地址映射数据结构158中具有匹配的输入块地址查询时,地址映射数据结构158返回相关联的输出块地址和ABS。地址映射数据结构158可以被组织成树结构、散列映射或便于查找操作的任何其他方便的数据结构。此外,可以根据地址范围来组织输入和输出块地址。在数据在存储在阵列块中之前被压缩的情况下,地址映射数据结构还可以包括压缩大小和/或优选地与地址条目(例如,循环冗余校验值)相关联的其他附加元数据。
现在参考图4,其中根据一个实施例示出了指纹索引154的更详细视图。在所示实施例中,指纹索引154包括多个指纹元数据(MD)页面400,每个页面包括元数据页面标题400和多个指纹条目402。在所示示例中,每个指纹条目402采用关联到由指纹引擎114利用块地址确定的指纹的元组的形式,该块地址可以是例如由地址映射引擎116作为输入接收的输入块地址(例如,逻辑块地址或客户端块地址)或,由地址映射引擎116作为输出接收到输出块地址(例如,阵列块地址)。指纹MD页面可以被组织成树结构、散列映射或便于查找操作的任何其他方便的数据结构。优选地与指纹条目相关联的其他附加元数据可以存储在指纹索引154中(例如,卷ID、年龄、数据块的大小等)。
此外,在优选实施例中,一些指纹条目402采用一种类型的地址,而其他的用另一种类型的地址(例如,幽灵指纹可以与卷逻辑块地址相关联,而有效指纹与阵列块地址相关联)。元组还包括指纹状态(FPS)的明确指示,其指示指纹条目202是否被验证或未被验证(即,幽灵指纹)。FPS还可以包括指示该指纹是否是为该块地址创建的第一指纹的位。(该信息可以替代地或另外地存储在ABS中。)如上所述,为了查找效率和减小指纹索引154的大小,在至少一些实施例中,指纹索引154优选地仅支持正向查找,使得对指定指纹的指纹索引154的访问返回相关联的块地址(假设访问导致指纹索引154中的命中)和FPS。根据需要或期望,指纹元数据页面400中的各个指纹元数据页面400可以被分页进出指纹索引高速缓存119。
在采用大量存储器的存储系统中或在其中优选其他性能权衡的存储系统中,指纹索引可以以其他方式实现而不影响重复数据删除过程。例如,在一个优选实施例中,指纹MD页面是散列表的一部分,该散列表允许指纹插入性能和指纹查找性能之间的不同折衷。在另一实施例中,指纹基于其类型存储在单独的索引结构中。例如,验证的指纹可以存储在首先搜索匹配的专用索引中,并且给出优先用于指纹索引高速缓存119中的高速缓存,而幽灵指纹存储在仅在第一索引不产生匹配时搜索的单独索引中。
现在参考图5,示出了根据一个或多个实施例的存储阵列的块的阵列块状态(ABS)和指纹状态(FPS)的管理的状态图。由该状态图表示的管理过程可以由数据存储系统的控制器执行,为了以下描述的目的,将假设该控制器是图1B的控制器113。在此给出的更常见的状态转换和在此给出的其他状态图由加重的线指示,并且较不常见的状态转换由轻量级的线指示。
在图5的实施例中,阵列块的ABS可以处于五种状态中的任何一种状态,包括未分配状态500、非共享和唯一指纹状态502、就地更新状态504、共享和重复数据删除状态506以及无效状态508。存储阵列的每个阵列块启示于未分配状态500,这表示阵列块的阵列块地址未与地址映射数据结构158中的卷块地址相关联并且表示阵列块在指纹索引154或指纹索引高速缓存119中没有相关联的指纹。因此可以以不在闪存卡126中使用存储物理存储空间的方式实现未分配的阵列块。响应于控制器113接收到写入IO,阵列块的ABS从未分配状态500转换到非共享和唯一指纹状态502或就地更新状态504。如附图标记510所示,在最常见的情况下,其中写入IO指定写数据的完整阵列块(例如,4kB、8kB、16kB或其倍数),控制器113分配一个或多个用于通过地址映射数据结构158存储写数据的阵列块,在地址映射数据结构158中为每个阵列块创建一个或多个地址映射条目,使存储的引用计数器156中的相关引用计数器和/或引用计数器缓存117递增到值1,并将地址转换条目的ABS设置为非共享和唯一指纹状态502。如附图标记512所示,在写入IO指定小于写入数据完整阵列块的较不常见的情况下(例如,小于4kB),控制器113执行类似的处理,但是将地址转换条目的ABS设置为就地更新状态502而不是非共享和唯一指纹状态502。在这种情况下,在一些实施例中,可以在读取-修改-写入序列中可以执行实际的写入操作。在任一种情况下,当最初分配阵列块时,控制器113将ABS设置为不执行重复数据删除的非重复数据删除状态,并将阵列块的FPS设置为未验证状态。在仅在索引高速缓存119中存储幽灵指纹的实施例中,FPS可以与索引高速缓存119相关联,因此仅存储在索引高速缓存119中。注意,在一些实施例中,子块写入512可以导致不创建指纹,因此不必设置FPS。在阵列块处于非共享和唯一指纹状态502的情况下,已知只有单个唯一指纹,即幽灵指纹,驻留在指纹索引154或指纹索引缓存119中;处于就地更新状态504的阵列块可以在指纹索引154或指纹索引高速缓存119中具有一个或多个相关的幽灵指纹,但是这些中的仅一个实际上表示阵列块的数据(即,是有效的)并且所有其他幽灵指纹,如果存在,则无效。显然,在子块写入512时不创建指纹的实施例中,甚至可能没有指纹在就地更新504状态。换句话说,实际上可能存在一个实际表示阵列块数据的指纹(即,幽灵指纹有效),并且,所有其他指纹如果存在都是无效的。
注意,对于对未分配空间的重复写入,可以分配或不分配新阵列块。在完全在线地执行重复检测的情况下(即,在向处理器系统102确认写入之前),不需要分配阵列块。当在重复数据删除引擎125检测到重复之前确认写入IO时,可能必须在实际重复数据删除之前使数据持久,因此需要分配阵列块。相同的方法对于具有重复数据的更新有效,以分配映射到共享和重复数据删除状态506中的现有阵列块的空间。
响应于阵列块的部分或全部更新,控制器113将阵列块的ABS从非共享和唯一指纹状态502转换到就地更新状态504,如附图标记514所示。如附图标记516所示,响应于阵列块的部分或全部更新,控制器113类似地保持阵列块处于就地更新状态504。注意,在一些实施例中,附图标记514处的部分块覆盖写入以及附图标记516处的部分更新写入可以不包括创建新的(幽灵)指纹。应当理解,虽然NAND闪存系统150在物理上不允许数据页152的就地更新,但是对阵列块允许从控制器113的逻辑视图阵列块的就地更新。因此,就地更新可以在非重复数据删除状态502和504中完成。响应于由空间回收引擎115执行的垃圾收集可选地移除所有未验证的(即,幽灵)指纹或所有来自指纹索引154或指纹索引高速缓存119的阵列块的无效的幽灵指纹(即,仅保留与存储在阵列块中的数据相对应的单个幽灵指纹,如果这样的幽灵指纹存在的话),如附图标记518所示,控制器113将阵列块的ABS从就地更新状态504转换到唯一指纹状态502。为此目的,ABS可以维护表示所看到的覆盖写入次数的计数器,并且计数器可以进一步存储在FPS中以便于检测为阵列块创建的最后一个指纹。在不对指纹索引高速缓存119中的指纹实现反向查找能力的优选实施例中,这种垃圾收集要求控制器113从闪存卡126读取阵列块的数据并生成指纹以在指纹索引高速缓存119中执行查找。
响应于接收到指定对在指纹索引154中找到匹配的幽灵指纹的完整数据块(附图标记520)写入的写入IO,控制器113将阵列块的ABS从非共享和唯一指纹状态502转换到共享和重复数据删除状态506(其中对阵列块执行在线重复数据删除)。请注意,转换不需要验证指纹,因为匹配指纹是此阵列块的唯一指纹。因此,对于由附图标记520指示的转换,重复数据删除开销被最小化。除了更新ABS之外,控制器113还使存储的用于阵列块的引用计数器156和/或引用计数器高速缓存117中的引用计数器递增,并将指纹索引154中的相关指纹的FPS从未验证(即幽灵指纹)更新到验证。取决于FPS的实现,控制器113可以进一步使FPS中的阵列块地址从输入块地址适配到输出块地址,反之亦然。控制器113还响应于接收到写入指定对在指纹索引154(附图标记526)中找到匹配的幽灵指纹的完整数据块的写入的写入IO,将阵列块的ABS从就地更新状态504转换到共享和重复数据删除状态506。在这种情况下,控制器113还必须验证匹配的幽灵指纹是否是有效的(并相应地更新其FPS),例如,通过从闪存卡126读取阵列块的数据然后直接将阵列块与数据写入数据比较,或通过指纹匹配间接比较它们。仅当该验证成功时,控制器113才将阵列块的ABS转换到共享和重复数据删除状态506。如果验证不成功,则现有阵列块保持在就地更新状态504,写入将被处理为完整块写入510(必须为其分配新的阵列块),并且不执行重复数据删除。尽管该验证操作在计算上是昂贵的,但是它很少执行,因此不会对整体系统性能产生显着的负面影响。另外,优选地从指纹索引高速缓存119和/或指纹索引154中移除无效幽灵指纹。其他实施例可以懒惰地处理幽灵指纹的移除,并且控制器113优选地响应于状态转换526,不使用空间回收引擎115来移除来自指纹索引高速缓存119的阵列块的未验证的指纹。因此,其ABS设置为共享和重复数据删除状态506的阵列块具有大于或等于1的引用计数、指纹索引154中的单个相关验证指纹、并且可能在指纹索引154和/或指纹索引高速缓存119中存在一个或多个相关的幽灵指纹。当阵列块处于共享和重复数据删除状态506时,控制器113引起阵列块的重复数据删除的完整处理和元数据存储开销,而不是被覆盖写入,因为假设具有至少一个重复数据的阵列块可能具有额外的重复数据。此外,控制器113对映射到阵列块的输入块的任何覆盖写入执行不适当的(out ofplace)写入。
如附图标记522所示,响应于接收指定重复块写入的写入IO或响应于一旦更新存储的引用计数器156和/或引用计数器高速缓存117中的引用计数器时,导致存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器中的引用计数的重写、修整命令和卷删除中的至少一个命令,控制器113将阵列块的ABS保持在共享和重复数据删除状态506。如果重写、修剪或卷删除导致引用计数器的零值,则控制器113将阵列块的ABS从共享和重复数据删除状态506转换为无效状态508(附图标记524)。控制器113可以响应于存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器的值达到一并且由空间回收引擎115执行的垃圾收集决定从指纹索引154中移除阵列块的所有幽灵指纹(附图标记528),将阵列块的ABS从共享和重复数据删除状态506转换到非共享和唯一指纹状态502。在这种情况下,控制器113另外将剩余指纹的FPS从验证更新为未验证。从共享和重复数据删除状态506到非共享和唯一指纹状态502的转换指示阵列块的进一步重复数据删除机会是不可能的。
如附图标记530和532所示,响应于块无效(例如覆盖或修剪命令或卷删除或删除使用中的阵列块的快照删除),控制器113将阵列块的ABS从就地更新状态504或非共享和唯一指纹状态502转换到无效状态508。当阵列块处于无效状态508时,块数据和所有相关指纹元数据被从使用中移除并且仅仅等待从地址映射数据结构158(和地址映射高速缓存121)和指纹索引154(以及指纹索引高速缓存119)中移除。一旦执行了这样的垃圾收集,控制器113就将相关的引用计数器设置为预定义的未使用值(例如,为-1),并将阵列块从无效状态508转换到未分配状态500(附图标记534)。
可以基于特定的架构选择,例如处理指纹的方式,另外探索图5中给出的一般状态图的不同实现。而且,并非所有图5中所示的转换都需要实现。仅需要状态转换的子集,使得状态图图形被连接(即,存在从任何状态到任何其他状态的直接或间接通过其他状态的路径)。此外,在一些实施例中,重复数据删除的定时可以取决于匹配的指纹的类型。作为一个示例,经验证的指纹可用于执行在线重复删除,而幽灵指纹用于执行背景重复数据删除。
例如,第一类实现仅在指纹索引高速缓存119中,而不在驻留在大容量存储器中的指纹索引154中(例如,在NAND闪存介质上)保持幽灵指纹。在该实现中,可能在存储器118中维护块地址和指纹之间的反向查找,以便于快速清除无效的幽灵指纹。然而,考虑到在实际系统中存储器118将具有远低于指纹卷的存储容量的事实,幽灵指纹将需要周期性地进行垃圾收集。此外,鉴于存储器118中的幽灵指纹数量有限,可能无法执行详尽的在线重复数据删除。在第二类实现中,幽灵指纹可以存储在存储器118和驻留在批量存储器(例如,在NAND闪存介质上)中的指纹索引154中。这种布置通常需要通过从NAND闪存介质读取数据来验证幽灵指纹,因为当重写或解除分配阵列块时更难以去除幽灵指纹。以上图5的描述适用于属于第一类实现的一个实现。下面参考图6描述另一个实现。下面参考图7A-7B和图8描述属于第二类实现的附加实现。注意,一些实施例可以根据系统中的可用资源在这些实现之间动态地切换(例如,当指纹索引高速缓存119超过某个限制时,反向映射可以最初保持但稍后丢弃)。
现在参考图6,描绘了根据一个实施例示出存储阵列的块阵列的快的块状态(ABS)和指纹状态(FPS)的管理的状态图,其中仅对存储器中的,而不存储在底层的大容量存储介质上的指纹进行高速缓存。由该状态图表示的管理过程可以由数据存储系统的控制器执行,为了以下描述的目的,将假设该控制器是图1B的控制器113。
在图6中,阵列块的ABS可以具有六种状态中的任何一种,包括未分配状态600、非共享和唯一指纹状态602、就地更新状态604、共享和重复数据删除状态606以及无效状态608。存储阵列的每个阵列块起始于未分配状态600,这表示阵列块的阵列块地址与地址映射数据结构158中的卷块地址不相关,并且阵列块在指纹索引154或指纹索引高速缓存119中没有存储任何关联的指纹。响应于控制器113接收写IO,阵列块的ABS从未分配状态600转换到非共享和唯一指纹状态602或就地更新状态604。如附图标记610所示,在写IO指定写数据的完整阵列块(例如,8kB、16kB或其多个)的最常见情况下,控制器113分配用于通过地址映射数据结构158存储写数据的阵列块,在址映射数据结构158中创建地址映射条目,将存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器增加到值1,并将用于地址转换条目的ABS设置为非共享和唯一指纹状态602。如附图标记612所示,在写入IO指定少于写入数据的完整阵列块(例如,4kB或更小)的较不常见的情况下,控制器113执行类似的处理,但是将用于地址转换条目的ABS设置为就地更新状态604而不是非共享和唯一指纹状态602。由附图标记612指示的操作可以创建或不创建幽灵指纹。在任一种情况下,当最初分配阵列块时,控制器113将ABS设置为不执行重复数据删除的非重复数据删除状态,并将指纹的FPS(仅在指纹索引缓存119中保存)设置为未验证状态。在阵列块处于非共享和唯一指纹状态602的情况下,已知只有单个唯一指纹,即幽灵指纹,驻留在指纹索引高速缓存119中;假设子块写入612总是生成指纹并且垃圾收集步骤618仅移除无效指纹,则处于就地更新状态604中的阵列块可以在指纹索引高速缓存119中具有零个或多个关联的幽灵指纹,但是在存在幽灵指纹的情况下,这些幽灵指纹中只有一个实际上代表数据块(即,是有效的),并且所有其他的(如果存在的话)都是无效的。
控制器113响应于阵列块的部分或全部更新,将阵列块的ABS从非共享和唯一指纹状态602转换到就地更新状态604,如附图标记614所示。如附图标记616所示,响应于阵列块的部分或全部更新,控制器113类似地保持阵列块处于就地更新状态604。(再次注意,虽然NAND闪存系统150在物理上不允许数据页152的就地更新,但是从控制器113的逻辑视图中,允许非重复数据删除状态中的阵列块的就地更新。)再次重申,附图标记614和616中的步骤可以创建或不创建幽灵指纹。响应由空间回收引擎115执行的垃圾收集,移除所有来自指纹索引高速缓存119的阵列块的无效的未验证的(即,幽灵)指纹,同时保持表示在阵列块中当前存储的数据的幽灵指纹,控制器113将阵列块的ABS从就地更新状态604转换到非共享和唯一指纹状态602,如附图标记618所示。如上所述,通过可选地为在指纹索引高速缓存119中的指纹实现反向查找能力,可以促进该垃圾收集。在一些实施例中,当没有找到表示阵列块中当前存储的数据的有效幽灵指纹时,新的幽灵指纹可以通过读取阵列块、生成指纹并将其插入指纹索引高速缓存119来创建。
控制器113响应于接收到在指纹索引154中找到(附图标记620)匹配幽灵指纹的指定完整数据块写入的写入IO,将阵列块的ABS从非共享和唯一指纹状态602转换到共享和重复数据删除状态606。除了更新ABS之外,控制器113还增加存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器,并且将指纹索引高速缓存119中的相关指纹的FPS从未验证的(即,幽灵指纹)更新为验证的。响应于接收到指定的在指纹索引高速缓存119中找到对应于存储的实际数据的匹配的幽灵指纹(附图标记626)的完整数据块写入的写入IO,控制器113还将阵列块的ABS从就地更新状态604转换到共享和重复状态606。在这种情况下,控制器113必须,例如,通过从闪存卡126读取阵列块的数据然后将阵列块数据与写入数据直接比较,或将其通过指纹匹配间接比较验证匹配的幽灵指纹是有效的指纹(并相应地更新其FPS)。仅当验证成功时,控制器113才将块的ABS转换到共享和重复数据删除状态606。如果验证不成功,则现有阵列块保持在就地更新状态604,写入将作为完整处理块写入610(必须为其分配新的阵列块)处理,并且不执行重复数据删除。另外,优选地从指纹索引高速缓存119中移除无效幽灵指纹。控制器113另外使用空间回收引擎115从指纹索引高速缓存119中移除与存储在阵列块的实际数据不匹配的所有未验证的指纹。尽管这些验证和移除操作在计算上很昂贵,它们很少执行,因此不会对整体系统性能产生显着的负面影响。在存在反向阵列块到指纹映射的情况下,可以针对转换626避免数据验证:控制器113可以利用该反向映射来识别有效的幽灵指纹并移除所有无效的幽灵指纹。在这种情况下,在更新写入触发转换614和616时,反向映射用于在添加新的幽灵指纹时立即移除旧的幽灵指纹。因此,就地更新状态604和非共享和唯一指纹602基本相同。然而,可以在执行转换626之前懒惰地执行该移除(需要遍历指纹索引高速缓存119)。因此,其ABS设置为共享和重复数据删除状态606的阵列块具有大于或等于1的引用计数,在指纹索引高速缓存119(和/或指纹索引154)中的单个相关验证指纹,并且在指纹索引高速缓存119没有关联的幽灵指纹。当阵列块处于共享和重复数据删除状态606时,控制器113引起阵列块的重复数据删除的完整处理和元数据存储开销,因为假定至少具有一个重复数据的阵列块。可能会创建额外的重复项,而不是被覆盖写。此外,控制器113对映射到阵列块的输入块的任何覆盖写执行不适当的写入。如附图标记622所示,响应于指定重复块的写入IO的接收或响应于保持在存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器中的至少一个的参考计数的更新写入,控制器113保持阵列块的ABS处于共享和重复数据删除状态606。如果更新写入导致相关引用计数器的零值,则控制器113将阵列块的ABS从共享和重复数据删除状态606转换到无效状态608(附图标记624)。响应相关联的引用计数器117的值达到一(附图标记628),控制器113可以可选地将阵列块的ABS从共享和重复数据删除状态606转换到非共享和唯一指纹状态602。在这种情况下,空间回收引擎115不执行垃圾收集以移除阵列块的幽灵指纹,因为阵列块没有这样的幽灵指纹,并且如果需要,控制器113将验证指纹的FPS从验证更新为未验证,并且将指纹从指纹索引154移动到指纹索引高速缓存119中,因为幽灵指纹只能驻留在指纹索引高速缓存119中。从共享和重复数据删除状态606到非共享和唯一指纹状态602的转换表明对阵列块进一步的重复数据删除机会不太可能。注意,找到要更新的正确指纹需要重新读取数据并重新计算指纹或维持从验证指纹到阵列块的反向映射,因此在内存消耗和/或处理开销方面是昂贵的。
如附图标记630和632所示,控制器113响应于块无效的接收(或者指定重复数据的覆盖写IO,修剪命令或删除使用中的数组块的卷删除命令),将阵列块的ABS从就地更新状态604或唯一指纹状态602转换到无效状态608。在该转变中,控制器113将相关引用计数器117的值减小到零。当阵列块处于无效状态608时,块数据和所有相关指纹元数据从使用中移除并且仅仅等待由空间回收引擎115从地址映射数据结构158和指纹索引154中移除。一旦执行了这样的垃圾收集,控制器113将相关联的引用计数器重置为预定义的未使用值(例如,到-1),并将阵列块从无效状态608转换到未分配状态600(附图标记634)。
由图5-6表示的第一类实现寻求避免指纹的验证,这在计算上和/或资源上是昂贵的并且因此可能降低持续的系统性能。响应从就地更新的转换状态504,604转换到共享和重复数据删除状态506,606,第一类实现将尽可能多的阵列块转换为就地更新状态504,604(其被设计为处理唯一数据的随机写入)或共享和重复数据删除状态506,606(其被设计为处理高度重复的工作负载,例如虚拟桌面计划(VDI)工作负载),同时寻求避免指纹索引154和数据页152中的指纹元数据页面400的计算消耗和NAND闪存访问。因此,第一类实现提供完全或接近完整的在线重复数据删除。在指纹索引高速缓存119中的幽灵指纹的容量耗尽的情况下,通过控制器113将阵列块的ABS转换为共享和重复数据删除状态506并将新指纹添加为验证指纹(其存储在NAND闪存介质上的指纹索引154中),可以在非共享和唯一指纹状态502,602下处理新指纹的生成。如果在指纹索引高速缓存119中的幽灵指纹的容量耗尽并且阵列块的ABS处于就地更新状态504,604时生成新指纹,则控制器113认为该访问是随机写更新并且通过丢弃新指纹或任何其他幽灵指纹来恢复到最佳努力重复数据删除。注意,在控制器113仅丢弃无效的幽灵指纹的情况下,重复数据删除仍然是彻底的。(控制器113可以在后台通过使空间回收引擎115周期性地清除无效幽灵指纹并且通过在后台将阵列块从非共享和唯一指纹状态502,602转换为共享和重复数据删除状态506,606来寻求减少最佳努力重复数据删除的逆转的发生率。)
现在参考图7A,其描绘了示出根据实施例的存储阵列的块的阵列块状态(ABS)和指纹状态(FPS)的管理的状态图,其中幽灵指纹在内存和大容量存储介质中维护。由该状态图表示的管理过程可以由数据存储系统的控制器执行,为了以下描述的目的,将假设该控制器是图1B的控制器113。在由图7A以及图7B和8表示的第二类实现中,所有这些实现都在存储器118中的指纹索引高速缓存119和NAND闪存存储介质上的指纹索引154中维护幽灵指纹,更多数量的幽灵指纹可以有利地,通过使用NAND闪存介质的更大存储容量来维护。但是,阵列块的ABS从就地更新状态到非共享和唯一指纹状态或共享和重复数据删除状态到非共享和唯一指纹状态的转换成本更高,并且最好避免,因为这些转换需要从NAND闪存存储介质访问和移除幽灵指纹。
在图7A中,阵列块的ABS可以具有五种状态中的任何一种,包括未分配状态700、非共享和唯一指纹状态702、就地更新状态704、共享和重复数据删除状态706、以及无效状态708。存储阵列的每个阵列块起始于未分配状态700,其表示阵列块的阵列块地址与地址映射数据结构158中的卷块地址不相关,并且阵列块没有任何没有在指纹索引154或指纹索引高速缓存119中存储任何相关指纹。控制器113响应于控制器113的接收写入IO,将阵列块的ABS从未分配状态700转换到非共享和唯一指纹状态702或就地更新状态704。如附图标记710所示,在写入IO指定写数据的完整阵列块(例如,4kB、8kB、16kB或其倍数)的最常见情况下,控制器113通过地址映射数据结构158分配用于存储写入数据的数组块,在地址映射数据结构158中创建地址映射条目,将存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器增加到值1,并将用于地址转换条目的ABS设置到非共享和唯一指纹状态702。如附图标记712所示,在写入IO指定少于完整的写入数据块(例如,小于4kB)的较不常见的情况下,控制器113执行类似的处理,但是将地址转换条目的ABS设置为就地更新状态704而不是非共享和唯一指纹状态702。在任一情况下,当最初分配阵列块时,控制器113将ABS设置为非重复数据删除状态,其中不对阵列块执行重复数据删除并将指纹的FPS设置为未验证状态。在阵列块处于非共享和唯一指纹状态702下的情况下,已知只有阵列块的单个唯一指纹,即幽灵指纹,驻留在指纹索引154或指纹索引阵列119中;假设写入子块712总是生成指纹,则处于就地更新状态704下的阵列块可以在指纹索引154或指纹索引高速缓存119中具有一个或多个相关的幽灵指纹,但实际上这些幽灵指纹中只有一个表示块阵列的数据(即有效),所有其他数据(如果存在)都无效。在其他实施例中,在步骤712和716中写入子块可以不生成指纹,因此处于就地更新状态704下的阵列块可以具有零个或多个相关联的幽灵指纹。显然,在这种情况下,这些指纹中的至多一个实际上表示阵列块的数据(即,是有效的),并且所有其他指纹(如果存在的话)是无效的。
控制器113响应于阵列块的部分或全部更新,如附图标记714所示,将阵列块的ABS从非共享和唯一指纹状态702转换到就地更新状态704。如附图标记716所示,响应于阵列块的部分或全部更新,控制器113类似地保持阵列块处于就地更新状态704。与图6的实施例不同,在图7A的实施例中,控制器113不支持阵列块的ABS从就地更新状态704到非共享和唯一指纹状态702的转换,以避免访问NAND存储介质的垃圾收集。
控制器113响应于指定在指纹索引154中找到匹配的幽灵指纹的完整数据块(附图标记720)写入的写入IO的接收,将阵列块的ABS从非共享和唯一指纹状态702转换到共享和重复数据删除状态706(其中对阵列块执行重复数据删除)。除了更新ABS之外,控制器113还递增存储的引用计数器156或引用计数器高速缓存117中的相关引用计数器,并且将在指纹索引154和/或指纹索引高速缓存119中的单个相关指纹的FPS从未验证(即,幽灵指纹)更新到验证。控制器113还响应于接收到指定在指纹索引154(或指纹索引高速缓存119)中找到存储的实际数据对应的匹配的幽灵指纹的完整数据块写入的写入IO(附图标记726)而将阵列块的ABS从就地更新状态704转换到共享和重复数据状态706。在这种情况下,控制器113必须例如,通过从闪存卡126读取阵列块的数据然后将阵列块数据与写入数据直接比较,或通过指纹匹配对他们间接比较,验证匹配的幽灵指纹是有效的指纹(并相应地更新其FPS)。仅当验证成功时,控制器113转换到共享和重复数据删除状态706。如果验证不成功,则现有阵列块保持在就地更新状态704,写入将被处理为完整块写入710(必须为其分配新的阵列块),并且不执行重复数据删除。控制器113响应于状态转换726,还使用空间回收引擎115从指纹索引154中去除阵列块的未验证指纹。因此,如图1所示,其ABS设置为共享和重复数据删除状态706的阵列块具有大于或等于的引用计数,在指纹索引154中具有单个相关联的验证指纹,并且在指纹索引154或指纹索引高速缓存119中将没有相关联的幽灵指纹。当阵列块处于共享和重复数据删除状态706时,控制器113引发阵列块的完全处理和重复数据删除的元数据存储开销,因为假设阵列块至少有一个重复数据,并且可能会创建额外的重复数据,而不是被覆盖写。此外,控制器113对映射到阵列块的输入块的任何覆盖写执行不适当的写入。
如附图标记722所示,控制器113响应于指定重复块写入的写入IO的接收或响应于保留相关联的引用计数器117的相关引用计数器至少为1的更新写入,而将处于共享和重复数据删除状态706中的阵列块的ABS保持。如果更新写入导致存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器的零值,则控制器113将阵列块的ABS从共享和重复数据删除状态706转换到无效状态708(附图标记724)。响应于相关联的引用计数器117的值递减为1并且阵列块在指纹索引154或指纹索引高速缓存119中仅具有一个相关指纹(即,验证指纹),控制器113可以将阵列块的ABS从共享和重复数据删除状态706转换到非共享和唯一指纹状态702(附图标记728)。在这种情况下,控制器113将剩余指纹的FPS从验证更新为未验证,这需要访问NAND闪存介质。从共享和重复数据删除状态706到非共享和唯一指纹状态702的转换指示阵列块的进一步重复数据删除机会是不可能的。
如附图标记730和732所示,控制器113响应于指定重复数据删除写入、修剪命令或用于删除使用的阵列块的卷删除命令的写入IO的接收,将阵列块的ABS从就地更新状态704或非共享和唯一指纹状态702转换为无效状态708。在该转变中,控制器113将相关引用计数器117的值减小到零。当阵列块处于无效状态708时,块数据和所有相关指纹元数据从使用中移除并且仅仅等待由空间回收引擎115从地址映射数据结构158和指纹索引154中移除。一旦执行了这样的垃圾收集,控制器113将关联的引用计数器设置为预定义的未使用值(例如,设置为-1),并将阵列块从无效状态708转换为未分配状态700(附图标记734)。
现在参考图7B,给出了根据一个实施例的示出存储阵列的块的阵列块状态(ABS)和指纹状态(FPS)的管理的状态图,其中幽灵指纹在内存和大容量存储介质中被懒惰地维护。如相同的附图标记所示,考虑到与对NAND闪存存储介质上的幽灵指纹执行垃圾收集相关的计算费用和磨损,图7B的实施例类似于图7A中所示的实施例,除了状态图不包括从共享和重复数据状态706到非共享和唯一指纹状态702的状态转换并且没有从就地状态704到共享和重复状态706的状态转换。结果,共享和重复数据删除状态706确实指示阵列块不存在幽灵指纹。此外,在就地更新状态704中,不生成新的指纹,因此处于该状态的块具有至多一个相关联的无效幽灵指纹。
现在参考图8,描绘了根据又一实施例的用于示出存储阵列的块的阵列块状态(ABS)和指纹状态(FPS)的管理的状态图,其中在内存和大容量存储介质中保持幽灵指纹。这种设计的特点是复杂度较低,但检测到的第一个重复数据写入的计算成本略高,并且即使对于使用小于重复数据删除块大小的写入来写入的数据,也能够执行重复数据删除。由该状态图表示的管理过程可以由数据存储系统的控制器执行,为了以下描述的目的,将假设该控制器是图1B的控制器113。
在图8中,阵列块的ABS可以具有五种状态中的任何一种,包括未分配状态800、具有有效指纹的就地更新状态802,无有效指纹的就地更新状态804,共享和重复数据删除状态806和无效状态808。存储阵列的每个阵列块起始于未分配状态800,这表示阵列块的阵列块地址与地址映射数据结构158或地址映射高速缓存121中的卷块地址不相关联,并且阵列块没有存储在指纹索引154或指纹索引高速缓存118中的任何相关指纹。响应于控制器113接收写入IO,控制器113将阵列块的ABS从未分配状态800转换为具有有效指纹的就地更新状态802或无有效指纹的就地更新状态804(在两种状态下都没有对阵列块执行重复数据删除)。如附图标记810所示,在写IO指定写数据的完整阵列块(例如,4kB、8kB、16kB或其倍数)的最常见情况下,控制器113通过地址映射数据结构158分配用于存储写数据的阵列块,在地址映射数据结构158中创建地址映射条目,将存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器增加到值1,设置地址转换条目的ABS为具有有效指纹的就地更新状态802,并计算存储在指纹索引154和/或指纹高速缓存118中的指纹。在阵列块处于具有有效指纹的就地更新状态802的情况下,可以知道一个或可能更多的幽灵指纹驻留在指纹索引154或指纹索引高速缓存118中。如附图标记812所示,在写IO指定比写入数据的完整的阵列块(例如,4kB或更小)更小的较不常见的情况下,控制器113通过地址映射数据结构158分配用于存储写数据的阵列块,在地址映射数据结构158中创建地址映射条目,增加存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器的值到1,并且将地址转换条目的ABS设置为没有有效指纹的就地更新状态804。对于处于没有有效指纹的就地更新状态804的阵列块,当执行转换812时,不计算幽灵指纹或不在指纹索引154或指纹索引高速缓存118中存储幽灵指纹。
如附图标记818所示,控制器113响应于阵列块的完全更新,将阵列块的ABS保持在具有有效指纹的就地更新状态802。如附图标记815所示,控制器113类似地,响应阵列块的部分更新,将阵列块保持在没有有效指纹的就地更新状态状态804。如附图标记817所示,响应于在没有有效指纹的就地更新状态状态804中的阵列块的完全更新,控制器113将阵列块的ABS转换为具有有效指纹的就地更新状态802。应当注意,该状态转换也可以由后台重复数据删除过程(如果需要)触发,后者将读取整个阵列块以生成将被插入指纹索引154或指纹索引高速缓存118中的指纹。
控制器113响应于阵列块的部分(子块)更新(附图标号827),将阵列块的ABS从具有有效指纹状态的就地更新802转换为没有有效指纹的就地更新状态804。在这种情况下,类似于转换812,没有计算或在指纹索引154或指纹索引高速缓存118中存储指纹。
响应于接收到指定对在指纹索引154或指纹索引高速缓存118中找到匹配的幽灵指纹的完整数据块写入的写入IO(附图标记820),控制器113将阵列块的ABS从具有有效指纹的就地更新状态802转换为共享和重复数据删除状态806(其中还执行重复数据删除)。在这种情况下,控制器113还必须验证匹配的幽灵指纹是否是有效的(并相应地更新其FPS)。该指纹验证意味着从NAND存储介质读取阵列块数据,并直接比较数据或其指纹以确定匹配。只有当该验证成功时,控制器113才能将块的ABS转换到共享和重复数据删除状态806。如果验证不成功,则现有阵列块保持在具有有效指纹的就地更新状态802,写入将被处理作为完整块写入810(必须为其分配新的阵列块),并且不执行重复数据删除。另外,优选地从指纹索引高速缓存118和/或指纹索引154中去除无效幽灵指纹。除了更新ABS之外,控制器113还增加存储的引用计数器156和/或引用计数器中高速缓存117的相关引用计数器,并将指纹索引154或指纹索引高速缓存118中的匹配幽灵指纹的FPS从未验证(即幽灵指纹)更新为已验证。注意,此时可能仍然存在指向该阵列块的无效幽灵指纹,因为转换820不涉及幽灵指纹的垃圾收集。其ABS设置为共享和重复数据删除状态806的阵列块具有大于或等于1的引用计数,在指纹索引154中具有单个关联的验证指纹,并且可以在指纹索引154或指纹索引高速缓存118中具有关联的幽灵指纹。当阵列块处于共享和重复数据删除状态806时,控制器113引起阵列块的重复数据删除的完整处理和元数据存储开销,因为假定具有至少一个重复的阵列块并且可能具有额外的重复创建,而不是被覆盖。此外,控制器113对映射到阵列块的输入块的任何覆盖写执行不适当的写入。应当注意,在该实施例中,控制器113不支持阵列块的ABS从没有有效指纹的就地更新状态804到共享和重复数据删除状态806的任何转换,因为阵列块没有关联的有效幽灵指纹。
如附图标记822所示,响应于接收到指定重复块写入的写入IO,控制器113保持阵列块的ABS处于共享和重复数据删除状态806。如果这些操作之一导致存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器的零值,则控制器113将阵列块的ABS从共享和重复数据删除状态806转换为无效状态808(附图标记824)。控制器113响应于更新写入阵列块而相关引用计数器117的值为1(附图标记828),将阵列块的ABS从共享和重复数据删除状态806转换为具有有效指纹的就地更新状态802。在这种情况下,控制器113从指纹索引154或指纹索引高速缓存118中移除经验证的指纹,并将新计算的幽灵指纹添加到指纹索引154和/或指纹索引高速缓存118,这可能需要访问NAND闪存介质。
如附图标记830和832所示,响应于接收阵列块无效,例如指定重复数据写入、修剪命令或删除使用的阵列块的卷删除命令的写入IO,控制器113将阵列块的ABS从无有效指纹状态的就地更新804或具有有效指纹的就地更新状态802转换为无效状态808。在该转换中,控制器113将存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器的值减小到零。当阵列块处于无效状态808时,块数据和所有相关指纹元数据被从使用中移除,并且仅仅等待由空间回收引擎115从地址映射数据结构158和指纹索引154中移除。一旦执行了这样的垃圾收集,控制器113将关联的引用计数器设置为预定义的未使用值(例如,设置为-1),并将阵列块从无效状态808转换到未分配状态800(附图标记834)。
现在参考图9,示出了根据另一个实施例的,描绘存储阵列的块的阵列块状态(ABS)和指纹状态(FPS)的管理状态图,该实施例区分由重复数据删除触发的阵列块共享和归因于存储系统支持的其他功能,例如卷快照、存储端复制命令(例如,XCOPY)或卷克隆操作,的阵列块共享。因此,图9显示了基于幽灵指纹(包括地址转换、FPS、ABS和引用计数器元数据的维护)的重复数据删除如何与其他存储功能集成,这些其他存储功能可生成其他阵列块共享源。由该状态图表示的管理过程可以由数据存储系统的控制器执行,为了以下描述的目的,将假设该控制器是图1B的控制器113。在此给出的更常见的状态转换和在此给出的其他状态图由重量级线指示,并且较不常见的状态转换由轻量级线指示。
在图9的实施例中,阵列块的ABS可以处于七种状态中的任何一种状态,包括未分配状态900、非共享和唯一指纹状态902、就地更新状态904、共享和重复状态906、共享和幽灵指纹状态909、共享和唯一指纹状态907,以及无效状态908。存储阵列的每个阵列块起始于未分配状态900,其表示阵列块的阵列块地址不与地址映射数据结构158中的卷块地址相关,并且阵列块没有在指纹索引154或指纹索引高速缓存119中存储任何相关指纹。因此,可以以在闪存卡126中不使用存储物理存储空间的方式实现未分配的阵列块。
响应于控制器113接收写入IO,将阵列块的ABS从未分配状态900转换到非共享和唯一指纹状态902或就地更新状态904。如附图标记910所示,在写入IO指定对完整阵列块写入数据(例如,4kB、8kB、16kB或其倍数)的最常见情况下,控制器113分配一个或多个阵列块用于通过地址映射数据结构158存储写数据,在地址映射数据结构158中为每个阵列块创建一个或多个地址映射条目,将存储的引用计数器156和/或引用计数器高速缓存中的相关引用计数器117增加为值1,并将地址转换条目的ABS设置为非共享和唯一指纹状态902。如附图标记912所示,在写入IO指定对小于完整数组块的写入数据(例如,小于4kB)的较不常见的情况下,控制器113执行类似的处理,但是将地址转换条目的ABS设置为就地更新状态902而不是非共享和唯一指纹状态902。在这种情况下,在一些实施例中,可以在读取-修改-写入序列中执行实际写入操作。在任一种情况下,当最初分配阵列块时,控制器113将阵列块的ABS设置为不执行重复数据删除的非重复数据删除状态,并将阵列块的FPS设置为未验证状态。注意,在一些实施例中,子块写入912可以导致不创建指纹,因此不必设置FPS。在阵列块处于非共享和唯一指纹状态902的情况下,已知只有单个唯一指纹,即幽灵指纹,驻留在指纹索引154或指纹索引高速缓存119中;处于就地更新状态904中的阵列块可以在指纹索引154或指纹索引高速缓存119中具有一个或多个相关的幽灵指纹,但是这些中的仅一个实际上表示阵列块的数据(即,有效)并且所有其他人,如果存在,则无效。显然,在子块写入912上不创建指纹的实施例中,甚至可能没有其ABS处于更新就地状态904状态的块的指纹。
注意,对于对未分配空间的重复写入,可以分配或不分配新的阵列块。在完全在线地执行重复检测的情况下(即,在向处理器系统102确认写入之前),不需要分配阵列块。当在重复数据删除引擎125检测到重复之前确认写入IO时,可能必须在实际重复数据删除之前使数据持久,因此需要分配数组块。对于具有重复数据到分配的映射到共享和重复数据删除状态906中的现有阵列块的空间的更新的情况也是如此。
如附图标记914所示,控制器113响应于阵列块的部分或全部更新,将阵列块的ABS从非共享和唯一指纹状态902转换到就地更新状态904。如附图标记916所示,响应阵列块的部分或全部更新,如转换918所示,控制器113类似地保持阵列块处于就地更新状态904。可以理解,当NAND闪存时存储器系统150在物理上不允许数据页152的就地更新,从控制器113的逻辑视图允许阵列块的就地更新。因此,就地更新可以在非重复数据删除状态902和904中完成。响应于由空间回收引擎115执行的垃圾收集,对于来自指纹索引154或指纹索引高速缓存119的阵列块,可选地移除所有未验证的(即,幽灵)指纹或所有无效的幽灵指纹(即,仅保留与存储在阵列块中的数据相对应的单个幽灵指纹如果这种幽灵指纹存在),控制器113将阵列块的ABS从就地更新状态904转换到非共享和唯一指纹状态902,如附图标记916所示。为此目的,ABS可以维护表示所看到的覆盖写次数的计数器,并且计数器可以进一步存储在FPS中以便于为阵列块创建的最后一个指纹的检测。
控制器113响应于接收到指定在指纹索引154中找到匹配的幽灵指纹的完整数据块的写入的写入IO,将阵列块的ABS从非共享和唯一指纹状态902(转换920)或从共享和唯一指纹状态909(转换952)转换到共享和重复数据删除状态906(其中对阵列块执行在线重复数据删除)。注意,转换不需要验证指纹,因为匹配指纹是此阵列块的唯一指纹。因此,对于在附图标记920处示出的转换,重复数据删除开销被最小化。除了更新ABS之外,控制器113还使该阵列块的存储的引用计数器156和/或引用计数器高速缓存117中的引用计数器递增以以及将指纹索引154中的相关指纹的FPS从未验证(即幽灵指纹)更新到已验证。取决于FPS的实现,控制器113可以进一步使FPS中的阵列块地址从输入块地址适配到输出块地址,反之亦然。
控制器113还响应于接收到指定在指纹索引154中找到匹配幽灵指纹的完整数据块的写入的写入IO(附图标记926),将阵列块的ABS从就地更新状态904(转换922)或从共享和幽灵指纹状态909(转换956)转换到共享和重复数据删除状态906。在这种情况下,控制器113还必须验证匹配的幽灵指纹是否是有效的(并相应地更新其FPS),例如,通过从闪存卡126读取阵列块的数据然后或者直接将阵列块数据与写入数据比较或通过指纹匹配间接比较它们。仅当该验证成功时,控制器113才转换到共享和重复数据删除状态906。如果验证不成功,则现有阵列块保持在就地更新状态904或在共享和幽灵指纹状态909,写入被处理为完整块写入910(必须为其分配新的阵列块),并且不执行重复数据删除。另外,优选地从指纹索引高速缓存119和/或指纹索引154中移除无效幽灵指纹。尽管该验证操作在计算上是昂贵的,但是它很少执行,因此不会对整体系统性能产生显着的负面影响。因此,其ABS设置为共享和重复数据删除状态906的阵列块具有大于或等于1的引用计数,在指纹索引154中具有单个相关验证指纹,以及可能在指纹索引154和/或指纹索引高速缓存119中具有一个或多个相关联的幽灵指纹。当阵列块处于共享和重复数据删除状态906时,控制器113引起阵列块的重复数据删除的完整处理和元数据存储开销,因为假定具有至少一个重复的阵列块,可能会有额外的重复,而不是被覆盖写。此外,控制器113对映射到阵列块的输入块的任何覆盖写执行不适当的写入。
如附图标记924所示,响应于接收到指定重复块写入的写入IO或响应于覆盖写,例如修剪命令或者在更新存储的引用计数器156和/或引用计数器高速缓存117中的引用计数器时,导致存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器中的参考计数为至少一个的卷删除,控制器113保持阵列块的ABS处于共享和重复数据删除状态906。如果覆盖写、修剪或卷删除导致引用计数器的零值,则控制器113将阵列块的ABS从共享和重复数据删除状态906转换为无效状态908(附图标记930)。响应于存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器的值为1并且由空间回收引擎115执行的垃圾收集决定从指纹索引154中去除阵列块的所有幽灵指纹(附图标记936),控制器113将阵列块的ABS从共享和重复数据删除状态906转换到非共享和唯一指纹状态902。在这种情况下,控制器113另外将剩余指纹的FPS从验证更新为未验证。从共享和重复数据删除状态906到非共享和唯一指纹状态902的转换936指示阵列块的进一步重复数据删除机会是不可能的。
如附图标记940所示,响应于导致块被多个地址引用(共享)的IO请求,控制器113将阵列块的ABS从非共享和唯一指纹状态902转换到共享和唯一指纹状态907,并且将引用计数器设置为值2。这种块共享可以来自卷快照命令、存储端复制命令(例如,XCOPY)或卷克隆操作。共享和唯一指纹状态907状态反映了由于作为用户命令的结果,多个地址被显式地映射到阵列块而不是由于存储相同内容的地址而隐式地映射,正在共享阵列块。在共享和唯一指纹状态907中,对映射到阵列块的地址的任何写IO必须通过分配和写入新的阵列块来执行。在共享和唯一指纹状态907中的块具有零个或多个幽灵指纹,因为在转换940之后FPS未被更新。如附图标记950所示,响应于接收触发块无效(例如覆盖写,修剪命令或卷删除)的写入IO,或响应于创建其他显式共享(例如快照,XCOPY或克隆)的IO命令,这些命令一旦更新存储的引用计数器156和/或引用计数器高速缓存117中的引用计数器,导致存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器中的参考计数至少为2,控制器113保持阵列块的ABS处于共享和唯一指纹状态907。如果块无效导致引用计数器值为1,则控制器113将阵列块的ABS从共享和唯一指纹状态907转换回非共享和唯一指纹状态902(附图标记944)。
如附图标记942所示,响应于导致块被多个地址引用(共享)的IO请求,控制器113将阵列块的ABS从就地更新状态904转换到共享和幽灵指纹状态909,并且将引用计数器设置为值2。这种块共享可以来自卷快照命令、存储端复制命令(例如,XCOPY)或卷克隆操作。共享和幽灵指纹状态909反映了由于多个地址由于用户命令而显式地映射到阵列块,而不是由于地址存储相同内容而隐式地映射,阵列块正在被共享。在共享和幽灵指纹状态909中,任何对映射到阵列块的地址的写入IO必须通过对新的阵列块分配和写入,不适当(outof place)地执行。因为在转换942之后FPS未被更新,处于共享和幽灵指纹状态909中的块具有零个或多个幽灵指纹。如附图标记950所示,响应于接收触发块无效(例如覆盖写,修剪命令或卷删除)的写入IO,或响应创建其他显式共享(例如快照,XCOPY或克隆)的IO命令,这些命令一旦更新存储的引用计数器156和/或引用计数器高速缓存117中的引用计数器,导致存储的引用计数器156和/或引用计数器高速缓存117中的相关引用计数器中的参考计数至少为2,控制器113保持阵列块的ABS为共享和幽灵指纹状态909。如果块无效导致引用计数器值为1,则控制器113将阵列块的ABS从共享和幽灵指纹状态909转换回到就地更新状态904(附图标记946)。
如附图标记932和934所示,控制器113响应于块无效,例如覆盖写,修剪命令,卷删除,删除使用的阵列块的快照删除,将阵列块的ABS从就地更新状态904或非共享和唯一指纹状态902转换到无效状态908。当阵列块处于无效状态908时,块数据和所有相关指纹元数据被从使用中移除并且仅仅等待空间回收阴晴115从地址映射数据结构158(和地址映射高速缓存121)和指纹索引154(以及指纹索引高速缓存119)中移除。一旦执行了这样的垃圾收集,控制器113就将相关的引用计数器设置为预定义的未使用值(例如,设置为-1),并将阵列块从无效状态908转换到未分配状态900(附图标记938)。
可以基于特定的架构选择,例如处理指纹的方式,另外探索图9中给出的一般状态图的不同实现。而且,并非所有图9中所示的转换都需要实现。仅需要状态转换的子集,使得状态图图形被连接(即,存在从任何状态直接或间接通过其他状态的到任何其他状态的路径)。
如已经描述的,在至少一个实施例中,数据存储系统的控制器生成写入数据存储系统的数据块的指纹。控制器在数据结构中维护多个数据块中的每一个的相应状态信息。可以独立地设置每个数据块的状态信息以指示多个状态中的任何状态,包括至少一个重复数据删除状态和至少一个非重复数据删除状态。在分配数据块时,控制器将数据块的状态信息初始化为非重复数据删除状态,此后,响应于检测到数据块的副本写入到数据存储系统,数据块的状态信息转换到重复数据删除状态。控制器基于数据结构中的状态信息并参考指纹,选择性地对写入数据存储系统的数据块执行重复数据删除。
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
尽管已经参考一个或多个优选实施例具体示出了本发明,但是本领域技术人员将理解,在不脱离本发明的精神和范围的情况下,可以在形式和细节上进行各种改变。例如,虽然已经对于包括指向某些功能的闪存控制器的数据存储系统描述了各方面,但是应该理解,本发明可以替代地实现为包括存储程序代码的存储设备,该程序代码可以由处理器处理以执行这些功能或者使得执行这些功能的程序产品。如本文所使用的,“存储设备”具体定义为仅包括法定制造的物品并且排除传输介质本身、暂时传播信号本身和能量本身的形式。
此外,尽管已经描述了包括使用NAND闪存的实施例,但是应当理解,本发明的实施例也可以与其他类型的非易失性随机存取存储器(NVRAM)一起使用,包括,例如,相变存储器(PCM)及其组合。
以上描述的附图和以下具体结构和功能的书面描述不是为了限制申请人发明的范围或所附权利要求的范围。相反,提供附图和书面描述是为了教导本领域技术人员制造和使用寻求专利保护的发明。本领域技术人员将理解,为了清楚和理解,并未描述或示出本发明的商业实施例的所有特征。本领域技术人员还将理解,结合本发明的各方面的实际商业实施例的开发将需要许多特定于实现的决策以实现开发者对、与业务相关的、与政府相关的和其他约束,这些约束可以根据具体实现、位置和时间而变化。虽然开发人员的努力在绝对意义上可能是复杂且耗时的,但是,这些努力对于受益于本公开的本领域技术人员来说是常规任务。必须理解的是,本文公开和教导的发明易于进行多种和各种修改和替代形式。最后,使用单数术语,例如但不限于“a”,并不旨在限制物品的数量。
Claims (27)
1.一种控制数据存储系统的方法,该方法包括:
控制器生成写入所述数据存储系统的数据块的指纹;
所述控制器在数据结构中维护所述数据存储系统中的多个数据块中的每一个数据块的相应状态信息,其中每个数据块的所述状态信息可以独立地设置以指示多个状态中的任何一个,并且其中所述多个状态包括至少一个重复数据删除状态,其中对相关联的数据块执行重复数据删除,以及至少一个非重复数据删除状态,其中不对相关联的数据块执行重复数据删除,其中所述维护包括:
在分配数据块时,将所述数据块的所述状态信息初始化为所述多个状态中的非重复数据删除状态;以及
此后,响应于检测到所述数据块的副本写入到所述数据存储系统,将所述数据块的所述状态信息转换为所述多个状态中的重复数据删除状态;以及
所述控制器基于所述数据结构中的所述状态信息并通过参考所述指纹,选择性地对写入所述数据存储系统的数据块执行重复数据删除。
2.如权利要求1所述的方法,其中所述方法还包括:
保持写入所述数据存储系统的数据块的指纹索引,其中所述指纹索引包括未验证的幽灵指纹和验证的指纹,其中所述验证的指纹表示所述相关联的数据块的当前数据,所述未验证的幽灵指纹表示某些相关联的数据块的当前数据并且不表示其他相关联的数据块的当前数据。
3.如权利要求2所述的方法,其中:
所述数据存储系统包括非易失性存储介质和高速缓存;以及该方法还包括仅将未验证的幽灵指纹存储在所述高速缓存中并将验证的指纹存储在所述非易失性存储介质中。
4.如权利要求2所述的方法,还包括:
在所述指纹索引中,将未验证的幽灵指纹与输入逻辑块地址相关联。
5.如权利要求2所述的方法,还包括:
当将状态信息从非重复数据删除状态转换到重复数据删除状态时,从所述指纹索引中移除未验证的幽灵指纹。
6.如权利要求2所述的方法,其中:
所述非重复数据删除状态是第一非重复数据删除状态,其中相关联的数据块在所述指纹索引中具有至多一个关联指纹;
所述多个状态还包括第二非重复数据删除状态,其中不对相关联的数据块执行重复数据删除,并且其中相关联的数据块可以在所述指纹索引中具有多个不同指纹;
该方法还包括:
响应于对在所述第一非重复数据删除状态下的数据块的更新写入,将数据块更新为所述多个状态中的不同状态;
响应于对在所述第二非重复数据删除状态下的数据块的更新写入,将数据块保持在所述第二非重复数据删除状态。
7.如权利要求1所述的方法,还包括:响应于创建所述数据块的副本的命令,将所述数据块的状态信息设置为非重复数据删除状态。
8.如权利要求7所述的方法,还包括在所述设置之后,抑制将所述数据块的状态信息转换到任何重复数据删除状态,直到所述数据块的解除分配。
9.如权利要求1所述的方法,还包括:
维护所述数据块的引用计数值;以及
基于所述引用计数值将所述数据块的状态信息从重复数据删除状态转换到非重复数据删除状态。
10.一种数据处理系统,包括:
数据存储系统的控制器,其中所述控制器被配置为执行:
生成写入所述数据存储系统的数据块的指纹;
在数据结构中维护所述数据存储系统中的多个数据块中的每一个数据块的相应状态信息,其中每个数据块的所述状态信息可以独立地设置以指示多个状态中的任何一个,并且其中所述多个状态信息包括至少一个重复数据删除状态,其中对相关联的数据块执行重复数据删除,以及至少一个非重复数据删除状态,其中不对相关联的数据块执行重复数据删除,其中所述维护包括:
在分配数据块时,将所述数据块的状态信息初始化为所述多个状态中的非重复数据删除状态;以及
此后,响应于检测到所述数据块的副本写入到所述数据存储系统,将数据块的状态信息转换为所述多个状态中的重复数据删除状态;以及
基于所述数据结构中的所述状态信息并通过参考所述指纹,有选择地对写入所述数据存储系统的数据块执行重复数据删除。
11.如权利要求10所述的数据处理系统,其中,所述控制器被配置为执行:
保持写入所述数据存储系统的数据块的指纹索引,其中指纹索引包括未验证的幽灵指纹和验证的指纹,其中所述验证的指纹表示所述相关联的数据块的当前数据,所述未验证的幽灵指纹表示某些相关联的数据块的当前数据,并不表示其他相关联的数据块的当前数据。
12.如权利要求11所述的数据处理系统,其中:
所述数据存储系统包括非易失性存储介质和高速缓存;以及
所述控制器被配置为仅将未验证的幽灵指纹存储在所述高速缓存中,并将验证的指纹存储在所述非易失性存储介质中。
13.如权利要求11所述的数据处理系统,其中,所述控制器被配置为执行:在所述指纹索引中,将未验证的幽灵指纹与输入逻辑块地址相关联。
14.如权利要求11所述的数据处理系统,其中,所述控制器被配置为执行:当将状态信息从非重复数据删除状态转换到重复数据删除状态时,从所述指纹索引中移除未验证的幽灵指纹。
15.如权利要求11所述的数据处理系统,其中:
所述非重复数据删除状态是第一非重复数据删除状态,其中相关联的数据块在所述指纹索引中具有至多一个关联指纹;
所述多个状态还包括第二非重复数据删除状态,其中不对相关联的数据块执行重复数据删除,并且其中相关联的数据块可以在所述指纹索引中具有多个不同指纹;
所述控制器还配置为执行:
响应于对在所述第一非重复数据删除状态下的数据块的更新写入,将数据块更新为所述多个状态中的不同状态;
响应于对在所述第二非重复数据删除状态下的数据块的更新写入,将数据块保持在所述第二非重复数据删除状态。
16.如权利要求10所述的数据处理系统,其中,所述控制器还被配置为响应于创建所述数据块的副本的命令,将所述数据块的状态信息设置为非重复数据删除状态。
17.如权利要求16所述的数据处理系统,其中,所述控制器被配置为所述设置之后,执行抑制将所述数据块的状态信息转换到任何重复数据删除状态,直到所述数据块的解除分配。
18.如权利要求10所述的数据处理系统,其中,所述控制器被配置为执行:
维护所述数据块的引用计数值;以及
基于所述引用计数值将所述数据块的状态信息从重复数据删除状态转换到非重复数据删除状态。
19.一种程序产品,包括:
存储设备;以及
存储在所述存储设备中的程序代码,其中所述程序代码在由所述数据存储系统的控制器执行时使所述控制器执行:
生成写入所述数据存储系统的数据块的指纹;
在数据结构中维护所述数据存储系统中的多个数据块中的每一个数据块的相应状态信息,其中每个数据块的所述状态信息可以独立地设置以指示多个状态中的任何一个,并且其中所述多个状态信息包括至少一个重复数据删除状态,其中对相关联的数据块执行重复数据删除,以及至少一个非重复数据删除状态,其中不对相关联的数据块执行重复数据删除,其中所述维护包括:
在分配数据块时,将所述数据块的状态信息初始化为所述多个状态中的非重复数据删除状态;以及
此后,响应于检测到所述数据块的副本写入到所述数据存储系统,将数据块的状态信息转换为所述多个状态中的重复数据删除状态;以及
基于所述数据结构中的所述状态信息并通过参考所述指纹,有选择地对写入所述数据存储系统的数据块执行重复数据删除。
20.如权利要求19所述的程序产品,其中,所述控制器被配置为执行:保持写入所述数据存储系统的数据块的指纹索引,其中指纹索引包括未验证的幽灵指纹和验证的指纹,其中所述验证的指纹表示所述相关联的数据块的当前数据,所述未验证的幽灵指纹表示某些相关联的数据块的当前数据,并不表示其他相关联的数据块的当前数据。
21.如权利要求20所述的程序产品,其中:
所述数据存储系统包括非易失性存储介质和高速缓存;以及
所述控制器被配置为仅将未验证的幽灵指纹存储在所述高速缓存中,并将验证的指纹存储在所述非易失性存储介质中。
22.如权利要求20所述的程序产品,其中,所述控制器被配置为执行:
在所述指纹索引中,将未验证的幽灵指纹与输入逻辑块地址相关联。
23.如权利要求20所述的程序产品,其中,所述控制器被配置为执行:
当将状态信息从非重复数据删除状态转换到重复数据删除状态时,从所述指纹索引中移除未验证的幽灵指纹。
24.如权利要求20所述的程序产品,其中:
所述非重复数据删除状态是第一非重复数据删除状态,其中相关联的数据块在所述指纹索引中具有至多一个关联指纹;
所述多个状态还包括第二非重复数据删除状态,其中不对相关联的数据块执行重复数据删除,并且其中相关联的数据块可以在所述指纹索引中具有多个不同指纹;
所述控制器还配置为执行:
响应于对在所述第一非重复数据删除状态下的数据块的更新写入,将数据块更新为所述多个状态中的不同状态;
响应于对在所述第二非重复数据删除状态下的数据块的更新写入,将数据块保持在所述第二非重复数据删除状态。
25.如权利要求19所述的程序产品,其中,所述控制器被配置为响应于创建所述数据块的副本的命令,将所述数据块的状态信息设置为非重复数据删除状态。
26.如权利要求25所述的程序产品,其中,所述控制器被配置为所述设置之后,执行抑制将所述数据块的状态信息转换到任何重复数据删除状态,直到所述数据块的解除分配。
27.如权利要求19所述的程序产品,其中,所述控制器被配置为执行:
维护所述数据块的引用计数值;以及
基于所述引用计数值将所述数据块的状态信息从重复数据删除状态转换到非重复数据删除状态。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/250,276 US10235396B2 (en) | 2016-08-29 | 2016-08-29 | Workload optimized data deduplication using ghost fingerprints |
US15/250,276 | 2016-08-29 | ||
PCT/IB2017/054421 WO2018042270A1 (en) | 2016-08-29 | 2017-07-21 | Workload optimized data deduplication using ghost fingerprints |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109416681A true CN109416681A (zh) | 2019-03-01 |
CN109416681B CN109416681B (zh) | 2022-03-18 |
Family
ID=61240510
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780041411.7A Active CN109416681B (zh) | 2016-08-29 | 2017-07-21 | 使用幽灵指纹进行工作负载优化的重复数据删除 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10235396B2 (zh) |
CN (1) | CN109416681B (zh) |
DE (1) | DE112017002941B4 (zh) |
GB (1) | GB2569060B (zh) |
WO (1) | WO2018042270A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110427347A (zh) * | 2019-07-08 | 2019-11-08 | 新华三技术有限公司成都分公司 | 重复数据删除的方法、装置、存储节点及存储介质 |
CN110618789A (zh) * | 2019-08-14 | 2019-12-27 | 华为技术有限公司 | 一种重复数据的删除方法及装置 |
CN113064556A (zh) * | 2021-04-29 | 2021-07-02 | 山东英信计算机技术有限公司 | 一种bios的数据存储方法、装置、设备及存储介质 |
CN113568561A (zh) * | 2020-04-29 | 2021-10-29 | 伊姆西Ip控股有限责任公司 | 用于信息处理的方法、电子设备和计算机存储介质 |
CN114296630A (zh) * | 2020-10-07 | 2022-04-08 | 慧与发展有限责任合伙企业 | 缓存存储器中重复数据删除指纹索引的更新 |
CN114942923A (zh) * | 2022-07-11 | 2022-08-26 | 深圳新闻网传媒股份有限公司 | 基于云平台大数据计算分析用统一管理系统 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017219364A1 (zh) * | 2016-06-24 | 2017-12-28 | 华为技术有限公司 | 处理数据的方法、存储装置、固态硬盘和存储系统 |
JP6524039B2 (ja) * | 2016-09-23 | 2019-06-05 | 東芝メモリ株式会社 | メモリシステム及び制御方法 |
US11144533B1 (en) * | 2016-09-30 | 2021-10-12 | EMC IP Holding Company LLC | Inline deduplication using log based storage |
US10831370B1 (en) * | 2016-12-30 | 2020-11-10 | EMC IP Holding Company LLC | Deduplicated and compressed non-volatile memory cache |
WO2018205137A1 (en) * | 2017-05-09 | 2018-11-15 | Accenture Global Solutions Limited | Data storage layer index for efficient information retrieval |
US10521400B1 (en) * | 2017-07-31 | 2019-12-31 | EMC IP Holding Company LLC | Data reduction reporting in storage systems |
US10558613B1 (en) | 2018-07-19 | 2020-02-11 | EMC IP Holding Company LLC | Storage system with decrement protection of reference counts |
US11194473B1 (en) * | 2019-01-23 | 2021-12-07 | Pure Storage, Inc. | Programming frequently read data to low latency portions of a solid-state storage array |
US10789003B1 (en) | 2019-03-28 | 2020-09-29 | Western Digital Technologies, Inc. | Selective deduplication based on data storage device controller status and media characteristics |
US11366609B2 (en) * | 2019-08-02 | 2022-06-21 | EMC IP Holding Company LLC | Technique for encoding deferred reference count increments and decrements |
US11106580B2 (en) | 2020-01-27 | 2021-08-31 | Hewlett Packard Enterprise Development Lp | Deduplication system threshold based on an amount of wear of a storage device |
US11093464B1 (en) * | 2020-04-24 | 2021-08-17 | Vmware, Inc. | Global deduplication on distributed storage using segment usage tables |
US11416462B2 (en) * | 2020-07-13 | 2022-08-16 | EMC IP Holding Company LLC | Techniques for efficient data deduplication |
US20220405254A1 (en) * | 2021-06-18 | 2022-12-22 | EMC IP Holding Company LLC | Data deduplication in a disaggregated storage system |
US11954331B2 (en) | 2021-10-07 | 2024-04-09 | International Business Machines Corporation | Storage system workload scheduling for deduplication |
US12007968B2 (en) * | 2022-05-26 | 2024-06-11 | International Business Machines Corporation | Full allocation volume to deduplication volume migration in a storage system |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010019596A2 (en) * | 2008-08-12 | 2010-02-18 | Netapp, Inc. | Scalable deduplication of stored data |
CN101939737A (zh) * | 2008-01-16 | 2011-01-05 | 赛帕顿有限公司 | 可扩展的重复数据删除机构 |
CN101971148A (zh) * | 2008-03-11 | 2011-02-09 | 国际商业机器公司 | 选择用于数据存储库的重复删除协议 |
US20110113115A1 (en) * | 2009-11-06 | 2011-05-12 | Jichuan Chang | Storage system with a memory blade that generates a computational result for a storage device |
CN102221982A (zh) * | 2011-06-13 | 2011-10-19 | 北京卓微天成科技咨询有限公司 | 块级虚拟化存储设备上实现重复数据删除的方法及系统 |
CN102915278A (zh) * | 2012-09-19 | 2013-02-06 | 浪潮(北京)电子信息产业有限公司 | 重复数据删除方法 |
CN102982180A (zh) * | 2012-12-18 | 2013-03-20 | 华为技术有限公司 | 数据存储方法及设备 |
CN103514250A (zh) * | 2013-06-20 | 2014-01-15 | 易乐天 | 一种全局重复数据删除的方法和系统及存储装置 |
US20140304242A1 (en) * | 2009-09-18 | 2014-10-09 | Hitachi, Ltd. | Storage system for eliminating duplicated data |
US20160078068A1 (en) * | 2014-09-16 | 2016-03-17 | Commvault Systems, Inc. | Fast deduplication data verification |
CN105630834A (zh) * | 2014-11-07 | 2016-06-01 | 中兴通讯股份有限公司 | 一种实现重复数据删除的方法及装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8412682B2 (en) | 2006-06-29 | 2013-04-02 | Netapp, Inc. | System and method for retrieving and using block fingerprints for data deduplication |
US9058298B2 (en) | 2009-07-16 | 2015-06-16 | International Business Machines Corporation | Integrated approach for deduplicating data in a distributed environment that involves a source and a target |
US10078646B2 (en) | 2015-01-29 | 2018-09-18 | HGST Netherlands B.V. | Hardware efficient fingerprinting |
US8392384B1 (en) | 2010-12-10 | 2013-03-05 | Symantec Corporation | Method and system of deduplication-based fingerprint index caching |
US8589640B2 (en) | 2011-10-14 | 2013-11-19 | Pure Storage, Inc. | Method for maintaining multiple fingerprint tables in a deduplicating storage system |
US8996881B2 (en) | 2012-04-23 | 2015-03-31 | International Business Machines Corporation | Preserving redundancy in data deduplication systems by encryption |
IN2012KO01022A (zh) | 2012-09-05 | 2015-06-05 | Indian Inst Technology Kharagpur | |
US9251160B1 (en) | 2013-06-27 | 2016-02-02 | Symantec Corporation | Data transfer between dissimilar deduplication systems |
US9367575B1 (en) | 2013-06-28 | 2016-06-14 | Veritas Technologies Llc | System and method for managing deduplication between applications using dissimilar fingerprint types |
-
2016
- 2016-08-29 US US15/250,276 patent/US10235396B2/en active Active
-
2017
- 2017-07-21 CN CN201780041411.7A patent/CN109416681B/zh active Active
- 2017-07-21 DE DE112017002941.4T patent/DE112017002941B4/de active Active
- 2017-07-21 GB GB1903697.9A patent/GB2569060B/en active Active
- 2017-07-21 WO PCT/IB2017/054421 patent/WO2018042270A1/en active Application Filing
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101939737A (zh) * | 2008-01-16 | 2011-01-05 | 赛帕顿有限公司 | 可扩展的重复数据删除机构 |
CN101971148A (zh) * | 2008-03-11 | 2011-02-09 | 国际商业机器公司 | 选择用于数据存储库的重复删除协议 |
WO2010019596A2 (en) * | 2008-08-12 | 2010-02-18 | Netapp, Inc. | Scalable deduplication of stored data |
US20100042790A1 (en) * | 2008-08-12 | 2010-02-18 | Netapp, Inc. | Scalable deduplication of stored data |
US20140304242A1 (en) * | 2009-09-18 | 2014-10-09 | Hitachi, Ltd. | Storage system for eliminating duplicated data |
US20110113115A1 (en) * | 2009-11-06 | 2011-05-12 | Jichuan Chang | Storage system with a memory blade that generates a computational result for a storage device |
CN102221982A (zh) * | 2011-06-13 | 2011-10-19 | 北京卓微天成科技咨询有限公司 | 块级虚拟化存储设备上实现重复数据删除的方法及系统 |
CN102915278A (zh) * | 2012-09-19 | 2013-02-06 | 浪潮(北京)电子信息产业有限公司 | 重复数据删除方法 |
CN102982180A (zh) * | 2012-12-18 | 2013-03-20 | 华为技术有限公司 | 数据存储方法及设备 |
CN103514250A (zh) * | 2013-06-20 | 2014-01-15 | 易乐天 | 一种全局重复数据删除的方法和系统及存储装置 |
US20160078068A1 (en) * | 2014-09-16 | 2016-03-17 | Commvault Systems, Inc. | Fast deduplication data verification |
CN105630834A (zh) * | 2014-11-07 | 2016-06-01 | 中兴通讯股份有限公司 | 一种实现重复数据删除的方法及装置 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110427347A (zh) * | 2019-07-08 | 2019-11-08 | 新华三技术有限公司成都分公司 | 重复数据删除的方法、装置、存储节点及存储介质 |
CN110618789A (zh) * | 2019-08-14 | 2019-12-27 | 华为技术有限公司 | 一种重复数据的删除方法及装置 |
CN113568561A (zh) * | 2020-04-29 | 2021-10-29 | 伊姆西Ip控股有限责任公司 | 用于信息处理的方法、电子设备和计算机存储介质 |
CN113568561B (zh) * | 2020-04-29 | 2024-05-17 | 伊姆西Ip控股有限责任公司 | 用于信息处理的方法、电子设备和计算机存储介质 |
CN114296630A (zh) * | 2020-10-07 | 2022-04-08 | 慧与发展有限责任合伙企业 | 缓存存储器中重复数据删除指纹索引的更新 |
US11860840B2 (en) | 2020-10-07 | 2024-01-02 | Hewlett Packard Enterprise Development Lp | Update of deduplication fingerprint index in a cache memory |
CN114296630B (zh) * | 2020-10-07 | 2024-07-02 | 慧与发展有限责任合伙企业 | 机器可读存储介质、数据存储系统和数据存储系统的方法 |
CN113064556A (zh) * | 2021-04-29 | 2021-07-02 | 山东英信计算机技术有限公司 | 一种bios的数据存储方法、装置、设备及存储介质 |
CN114942923A (zh) * | 2022-07-11 | 2022-08-26 | 深圳新闻网传媒股份有限公司 | 基于云平台大数据计算分析用统一管理系统 |
CN114942923B (zh) * | 2022-07-11 | 2022-10-21 | 深圳新闻网传媒股份有限公司 | 基于云平台大数据计算分析用统一管理系统 |
Also Published As
Publication number | Publication date |
---|---|
DE112017002941B4 (de) | 2023-12-07 |
GB2569060B (en) | 2019-11-13 |
CN109416681B (zh) | 2022-03-18 |
US10235396B2 (en) | 2019-03-19 |
GB201903697D0 (en) | 2019-05-01 |
WO2018042270A1 (en) | 2018-03-08 |
DE112017002941T5 (de) | 2019-03-21 |
GB2569060A (en) | 2019-06-05 |
US20180060367A1 (en) | 2018-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109416681A (zh) | 使用幽灵指纹进行工作负载优化的重复数据删除 | |
US11650976B2 (en) | Pattern matching using hash tables in storage system | |
US10810123B1 (en) | Flush strategy for using DRAM as cache media system and method | |
US10108547B2 (en) | High performance and memory efficient metadata caching | |
EP3036616B1 (en) | Management of extent based metadata with dense tree structures within a distributed storage architecture | |
US9201918B2 (en) | Dense tree volume metadata update logging and checkpointing | |
US9268653B2 (en) | Extent metadata update logging and checkpointing | |
US9311015B2 (en) | Storage system capable of managing a plurality of snapshot families and method of operating thereof | |
US8930307B2 (en) | Method for removing duplicate data from a storage array | |
CN107391391B (zh) | 在固态硬盘的ftl实现数据拷贝的方法、系统及固态硬盘 | |
EP2433227B1 (en) | Scalable indexing in a non-uniform access memory | |
CN104765575B (zh) | 信息存储处理方法 | |
KR102449585B1 (ko) | 버저닝 저장 장치 및 방법 | |
US11550479B1 (en) | Metadata management in storage systems | |
Park et al. | A lookahead read cache: improving read performance for deduplication backup storage | |
Wang et al. | A novel buffer management scheme based on particle swarm optimization for SSD | |
US11789917B2 (en) | Data deduplication in a storage system | |
US11960481B2 (en) | Managing lookup operations of a metadata structure for a storage system | |
Misra et al. | Multi-version Indexing in Flash-based Key-Value Stores | |
Zhao et al. | Efficient inline deduplication on VM images in desktop virtualization environment | |
Park et al. | Design of a High-Performance, High-Endurance Key-Value SSD for Large-Key Workloads | |
TW202439116A (zh) | 用於處理嵌入的系統和方法 | |
Fevgas | Data structuring techniques for non-volatile memories |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |