CN104025010B - 存储***中的可变长度编码 - Google Patents
存储***中的可变长度编码 Download PDFInfo
- Publication number
- CN104025010B CN104025010B CN201280053506.8A CN201280053506A CN104025010B CN 104025010 B CN104025010 B CN 104025010B CN 201280053506 A CN201280053506 A CN 201280053506A CN 104025010 B CN104025010 B CN 104025010B
- Authority
- CN
- China
- Prior art keywords
- level
- data
- mapping table
- tuple
- storage
- 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.)
- Active
Links
- 238000003860 storage Methods 0.000 title claims description 248
- 238000013507 mapping Methods 0.000 claims abstract description 232
- 238000000034 method Methods 0.000 claims abstract description 70
- 238000013500 data storage Methods 0.000 claims abstract description 50
- 238000012163 sequencing technique Methods 0.000 claims abstract description 12
- 230000014509 gene expression Effects 0.000 claims description 7
- 238000004422 calculation algorithm Methods 0.000 description 19
- 238000012795 verification Methods 0.000 description 19
- 239000004615 ingredient Substances 0.000 description 18
- 238000007906 compression Methods 0.000 description 17
- 230000006835 compression Effects 0.000 description 17
- 238000005516 engineering process Methods 0.000 description 17
- 238000013519 translation Methods 0.000 description 14
- 230000004044 response Effects 0.000 description 13
- 230000007246 mechanism Effects 0.000 description 12
- 230000008569 process Effects 0.000 description 11
- 230000006870 function Effects 0.000 description 10
- 238000011084 recovery Methods 0.000 description 9
- 230000008859 change Effects 0.000 description 6
- 230000008878 coupling Effects 0.000 description 6
- 238000010168 coupling process Methods 0.000 description 6
- 238000005859 coupling reaction Methods 0.000 description 6
- 239000012634 fragment Substances 0.000 description 6
- 238000000151 deposition Methods 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 230000001174 ascending effect Effects 0.000 description 3
- 238000010304 firing Methods 0.000 description 3
- 238000002372 labelling Methods 0.000 description 3
- 230000033001 locomotion Effects 0.000 description 3
- 239000003550 marker Substances 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000006378 damage Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 238000011065 in-situ storage Methods 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 101000911390 Homo sapiens Coagulation factor VIII Proteins 0.000 description 1
- 230000018199 S phase Effects 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000002788 crimping Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000013524 data verification Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000000375 direct analysis in real time Methods 0.000 description 1
- 238000012063 dual-affinity re-targeting Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 102000057593 human F8 Human genes 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000005304 joining Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 229940047431 recombinate Drugs 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000009987 spinning Methods 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1036—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
- G06F3/0641—De-duplication techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种用于在数据存储子***中保持映射表的***和方法。数据存储子***支持分别包括多个条目的多个映射表。每一个条目包括带有关键字的一个元组。数据存储控制器被配置成利用可变长度编码对映射表中的每一个元组进行编码。此外,所述映射表可以被组织成多个时间排序层级,其中每一个层级包括一个或多个映射表条目。此外,可以至少部分地基于以下各项来选择对应于给定元组的多种编码当中的特定一种编码:未编码的给定元组的尺寸,已编码的给定元组的尺寸,以及用以编码给定元组的时间。
Description
背景技术
技术领域
本发明涉及计算机网络,更具体来说涉及在存储***中保持映射结构。
相关技术
随着计算机存储器存储和数据带宽的增加,企业日常所管理的数据的数量和复杂度也会增加。例如数据中心之类的大规模分布式存储***通常会运行许多企业运营。数据中心也可以被称作服务器机房,其是用于存储、管理和散播与一家或多家企业有关的数据的物理的或虚拟的集中式储存库。分布式存储***可以耦合到通过一个或多个网络互连的客户端计算机。如果分布式存储***的任何部分的性能较差,则公司运营可能会受到损害。因此,分布式存储***保持对应于数据可用性和高性能功能的高标准。
分布式存储***包括物理卷,其可以是硬盘、固态设备、利用另一种存储技术的存储设备或者存储设备的某些部分。例如逻辑卷管理器或盘阵列管理器之类的软件应用提供在大容量存储阵列上分配空间的措施。此外,该软件允许***管理员创建包括逻辑卷在内的存储组单元。存储虚拟化提供了逻辑存储与物理存储的抽象(分离),以便在无需末端用户识别物理存储的情况下访问逻辑存储。
为了支持存储虚拟化,卷管理器施行输入/输出(I/O)重定向,这是通过把来自末端用户的利用逻辑地址的传入I/O请求翻译成利用与存储设备中的物理位置相关联的地址的新请求而实现的。由于一些存储设备可以包括附加的地址翻译机制,比如可以被用在固态存储设备中的地址翻译层,因此前面所提到的从逻辑地址到另一地址的翻译可能不代表仅有的或最终的地址翻译。重定向利用存储在一个或多个映射表中的元数据。此外,存储在一个或多个映射表中的信息可以被用于存储重复数据删除(deduplication)以及把特定快照层级的虚拟扇区映射到物理位置。卷管理器可以保持对应于虚拟化存储的映射信息的一致视图。但是所支持的地址空间可能会受到被用来保持映射表的存储容量的限制。
与所选择的存储盘相关联的技术和机制决定由卷管理器所使用的方法。举例来说,提供对应于外部存储设备的硬盘、硬盘分区或逻辑单元号(LUN)的粒度层级的映射的卷管理器被限制到对应于大数据组块的重定向、定位、去除重复数据等等。另一种类型的存储盘的一个实例是固态盘(SSD)。SSD可以模拟HDD接口,但是SSD利用固态存储器来存储永久性数据而不是如在HDD中所看到的电磁设备。举例来说,SSD可以包括闪存组。相应地,在利用针对HDD开发的映射表分配算法的情况下,在包括SSD以用于存储的***中可能无法实现由一个或多个映射表所支持的较大地址空间。
鉴于前述内容,希望有针对存储在多个固态存储设备当中的数据高效地施行存储虚拟化的***和方法。
发明内容
本发明设想了用于在数据存储***中高效地管理映射表的计算机***和方法的各个实施例。
在一个实施例中,耦合到网络的数据存储子***在所述网络上接收来自客户端计算机的读取和写入请求。所述数据存储子***包括设备组上的多个数据存储位置,其中所述设备组包括多个存储设备。所述数据存储子***还包括至少一个映射表。所述映射表包括多个条目,其中每一个条目包括带有关键字的一个元组。数据存储控制器被配置成利用可变长度编码对映射表中的每一个元组进行编码。此外,所述映射表可以被组织成多个时间排序层级,其中每一个层级包括一个或多个映射表条目。此外,可以至少部分地基于以下各项来选择对应于给定元组的多种编码当中的特定一种编码:未编码的给定元组的尺寸,已编码的给定元组的尺寸,以及用以编码给定元组的时间。此外本发明还设想到其中所述数据存储控制器被配置成对给定元组施行多种不同编码、对各种编码进行比较以及选择被视为最优的特定编码的实施例。
此外本发明还设想到其中映射表存储其关键字对应于***中的虚拟块的条目的映射表。在各个实施例中,对应于给定虚拟块范围的条目存储在所述给定虚拟块范围中的数据之上计算的一个散列数值,并且所述条目存储便于查找包括所述块范围的数据的位置的信息。
考虑到后面的描述和附图,前述和其他实施例将变得显而易见。
附图说明
图1是示出网络架构的一个实施例的一般化方块图。
图2是映射表的一个实施例的一般化方块图。
图3A是被用来访问映射表的初级索引的一个实施例的一般化方块图。
图3B是被用来访问映射表的初级索引的另一个实施例的一般化方块图。
图4是初级索引和映射表的另一个实施例的一般化方块图。
图5A是示出用于施行读取访问的方法的一个实施例的一般化流程图。
图5B是示出用于施行写入操作的方法的一个实施例的一般化流程图。
图5C是示出用于编码和存储元组的方法的一个实施例的一般化流程图。
图5D示出了元组编码的一个实施例。
图5E是示出用于选择和编码方案的方法的一个实施例的一般化流程图。
图6是具有共享映射表的多节点网络的一个实施例的一般化方块图。
图7是被用来访问映射表的次级索引的一个实施例的一般化方块图。
图8是访问映射表的三级索引的一个实施例的一般化方块图。
图9示出了利用覆盖表的方法的一个实施例。
图10是对应于映射表内的各个层级的平坦化操作的一个实施例的一般化方块图。
图11是对应于映射表内的各个层级的平坦化操作的另一个实施例的一般化方块图。
图12是示出用于平坦化映射表内的各个层级的方法的一个实施例的一般化流程图。
图13是示出用于高效地处理映射表内的批量阵列任务的方法的一个实施例的一般化流程图。
图14是示出存储设备内的数据布局架构的一个实施例的一般化方块图。
虽然本发明可以有各种修改和替换形式,但是在附图中通过举例的方式示出并且在这里详细描述了具体实施例。但是应当理解的是,附图及其详细描述不意图把本发明限制到所公开的具体形式,相反,本发明意图涵盖落在由所附权利要求书限定的本发明的精神和范围内的所有修改、等效方案和替换方案。
具体实施方式
在后面的描述中阐述了许多具体细节以提供对于本发明的透彻理解。但是本领域技术人员应当认识到,可以在没有这些具体细节的情况下实践本发明。在一些实例中,没有详细示出众所周知的电路、结构、信号、计算机程序指令和技术以避免模糊本发明。
参照图1,其中示出了网络架构100的一个实施例的一般化方块图。正如后面进一步描述的那样,网络架构100的一个实施例包括通过网络180彼此互连并且互连到数据存储阵列120a-120b的客户端计算机***110a-110b。网络180可以通过交换机140耦合到第二网络190。客户端计算机***110c通过网络190耦合到客户端计算机***110a-110b和数据存储阵列120a-120b。此外,网络190可以通过交换机150耦合到因特网160或其他外部网络。
应当提到的是,在替换实施例中,客户端计算机和服务器、交换机、网络、数据存储阵列和数据存储设备的数目和类型不限于图1中所示。在不同时间,一个或多个客户端可以离线操作。此外,在操作期间,随着用户连接、断开以及重新连接到网络架构100,各种客户端计算机连接类型可以改变。此外,虽然本说明书总体上讨论了网络附属存储,因此这里描述的***和方法也可以被应用于直接附属存储***,并且可以包括被配置成施行所描述的方法的一个或多个方面的主机操作***。可能设想到许多此类替换方案。简短提供了关于图1中所示的每一个组件的进一步描述。首先将描述由数据存储阵列120a-120b提供的一些特征的总览。
在网络架构100中,每一个数据存储阵列120a-120b可以被用于在不同的服务器和计算机之间共享数据,比如客户端计算机***110a-110b。此外,数据存储阵列120a-120b可以被用于盘镜像、备份和恢复、数据归档和已归档数据的取回以及从一个存储设备到另一个存储设备的数据迁移。在一个替换实施例中,一个或多个客户端计算机***110a-110c可以通过快速局域网(LAN)彼此关联以便形成集群。这样的客户端可以共享存储资源,比如驻留在其中一个数据存储阵列120a-120b内的集群共享卷。
每一个数据存储阵列120a-120b包括用于数据存储的存储子***170。存储子***170可以包括多个存储设备176a-176m。这些存储设备176a-176m可以为客户端计算机***110a-110c提供数据存储服务。每一个存储设备176a-176m使用特定技术和机制来施行数据存储。在每一个存储设备176a-176m内使用的技术和机制的类型可以至少部分地被用来确定用于控制和调度针对和来自每一个存储设备176a-176m的读取和写入操作的算法。举例来说,所述算法可以定位对应于所述操作的特定物理位置。此外,所述算法可以施行对应于所述操作的输入/输出(I/O)重定向,去除存储子***170中的重复数据,以及支持被用于地址重定向和重复数据删除的一个或多个映射表。
在前面的算法中使用的逻辑可以被包括在以下各项当中的一项或多项中:基本操作***(OS)132,存储子***控制器174内的卷管理器134,每一个存储设备176a-176m内的控制逻辑等等。此外,这里所描述的逻辑、算法和控制机制可以包括硬件和/或软件。
每一个存储设备176a-176m可以被配置成接收读取和写入请求并且包括多个数据存储位置,每一个数据存储位置可以作为阵列中的行和列而被寻址。在一个实施例中,存储设备176a-176m内的数据存储位置可以被设置成逻辑冗余存储容器或RAID阵列(廉价/独立盘冗余阵列)。
在一些实施例中,每一个存储设备176a-176m可以利用不同于传统硬盘驱动器(HDD)的用于数据存储的技术。举例来说,其中一个或多个存储设备176a-176m可以包括或者进一步耦合到由固态存储器构成的存储装置来存储永久性数据。在其他实施例中,其中一个或多个存储设备176a-176m可以包括或者进一步耦合到利用其他技术的存储装置,比如自旋矩传输技术、磁阻式随机存取存储器(MRAM)技术、叠瓦式盘、忆阻器、相变存储器或者其他存储技术。这些不同的存储技术可能导致存储设备之间的不同I/O特性。
在一个实施例中,所包括的固态存储器包括固态驱动器(SSD)技术。HDD技术与SDD技术之间的技术和机制上的差异可能导致存储设备176a-176m的输入/输出(I/O)特性的差异。固态盘(SSD)还可以被称作固态驱动器。在没有移动部件或机械延迟的情况下,SSD可以具有低于HDD的读取访问时间和等待时间。但是SSD的写入性能通常慢于读取性能,并且可能会受到SSD内的自由可编程块的可用性的显著影响。
通过创建用户存储与存储设备176a-176m内的物理位置之间的存储虚拟化层可以改进存储阵列效率。在一个实施例中,卷管理器的虚拟层被放置在操作***(OS)的设备-驱动器栈中,而不是被放置在存储设备内或网络中。许多存储阵列在粗粒度层级施行存储虚拟化,以便允许把虚拟到物理映射表条目存储在存储器中。但是这样的存储阵列无法集成例如数据压缩、重复数据删除以及修改时拷贝(copy-on-modify)操作。许多文件***支持细粒度虚拟到物理映射表,但是其不支持大存储阵列,比如设备组173a-173m。相反,卷管理器或盘阵列管理器被用来支持设备组173a-173m。
在一个实施例中,一个或多个映射表可以被存储在存储设备176a-176m中,而不是例如RAM172、存储器介质130或处理器122内的高速缓存之类的存储器。存储设备176a-176m可以是利用闪存的SSD。对应于SSD的较低读取访问和等待时间可以允许在服务于来自客户端计算机的存储装置访问请求的同时发生少数的从属读取操作。所述从属读取操作可以被用来在服务于存储装置访问请求期间访问一个或多个索引、一个或多个映射表以及用户数据。
在一个实例中,可以通过从属读取操作来施行I/O重定向。在另一个实例中,可以通过从属读取操作来施行在线重复数据删除。在另一个实例中,可以完全在映射表内施行例如大型拷贝、移动或归零操作之类的批量阵列任务,而不是访问保存用户数据的存储位置。这样的直接映射操纵可以大大减少存储设备176a-176m内的I/O通信量和数据移动。对应于服务于存储装置访问请求和施行来自SSD的从属读取操作的组合时间可能少于服务于来自旋转中的HDD的存储装置访问请求的时间。
此外,映射表内的信息可以被压缩。可以选择特定压缩算法以便允许识别出各个单独的组成部分,比如多条记录当中的某一条记录内的一个关键字。因此可以发生针对多条已压缩记录当中的给定关键字的搜索。在各个实施例中,可以在无需解压缩每一个元组的情况下施行针对给定关键字的搜索,这是通过把所述关键字的已压缩表示与存储在所述元组的相关字段中的已压缩信息进行比较而实现的。如果找到匹配,则可以仅对匹配的记录进行解压缩。对映射表的各条记录内的元组进行压缩还可以允许细粒度层级的映射。这一细粒度层级的映射可以允许直接映射操作以作为针对通常的批量阵列任务的替换方案。后面将讨论关于高效存储虚拟化的进一步细节。
同样,如图所示,网络架构100包括通过网络180和190彼此互连并且互连到数据存储阵列120a-120b的客户端计算机***110a-110c。网络180和190可以包括多种技术,其中包括无线连接、直接局域网(LAN)连接、例如因特网之类的广域网(WAN)连接、路由器、存储区域网络、以太网等等。网络180和190可以包括可以是无线的一个或多个LAN。网络180和190还可以包括远程直接存储器访问(RDMA)硬件和/或软件、传输控制协议/互联网协议(TCP/IP)硬件和/或软件、路由器、转发器、交换机、网格等等。例如光纤信道、以太网上的光纤信道(FCoE)、iSCSI等协议可以被用在网络180和190中。交换机140可以利用与网络180和190同时关联的协议。网络190可以与被用于因特网160的一个通信协议集合接口,比如传输控制协议(TCP)和互联网协议(IP),或者TCP/IP。交换机150可以是TCP/IP交换机。
客户端计算机***110a-110c代表许多静止或移动计算机,比如台式个人计算机(PC)、服务器、服务器群、工作站、膝上型计算机、手持式计算机、服务器、个人数字助理(PDA)、智能电话等等。通常来说,客户端计算机***110a-110c包括一个或多个处理器,所述处理器包括一个或多个处理器核心。每一个处理器核心包括用于执行根据一个预定义通用指令集的指令的电路。举例来说,可以选择x86指令集架构。或者可以选择或者任何其他通用指令集架构。所述处理器核心可以访问用于数据和计算机程序指令的高速缓冲存储器子***。所述高速缓存子***可以耦合到包括随机存取存储器(RAM)和存储设备的存储器架构。
客户端计算机***内的每一个处理器核心和存储器架构可以连接到网络接口。除了硬件组件之外,每一个客户端计算机***110a-110c还可以包括存储在所述存储器架构内的基本操作***(OS)。基本OS可以代表多种操作***当中的任一种,比如 DART等等。因此,基本OS可以适于为末端用户提供各种服务,并且提供适于支持执行各种程序的软件框架。此外,每一个客户端计算机***110a-110c可以包括被用来支持虚拟机(VM)的管理程序(hypervisor)。正如本领域技术人员所知,虚拟化可以被使用在台式计算机和服务器中以便把例如OS之类的软件与***的硬件完全地或部分地解耦。虚拟化可以为末端用户提供多个OS运行在同一台机器上的假象,其中每一个OS具有其自身的资源以及对于建立在每一个数据存储阵列120a-120b内的上的逻辑存储实体(例如LUN)的访问。
每一个数据存储阵列120a-120b可以被用于在例如客户端计算机***110a-110c之类的不同服务器之间共享数据。每一个数据存储阵列120a-120b包括用于数据存储的存储子***170。存储子***170可以包括多个存储设备176a-176m。每一个这些存储设备176a-176m可以是SSD。控制器174可以包括用于应对所接收到的读取/写入请求的逻辑。随机存取存储器(RAM)172可以被用来对例如所接收到的写入请求之类的操作进行分批。在各个实施例中,当对写入操作(或其他操作)进行分批时,可以使用非易失性存储装置(例如NVRAM)。
存储在存储器介质130中的基本OS132、卷管理器134(或者盘阵列管理器134)、任何OS驱动程序(未示出)以及其他软件可以提供访问文件的功能以及对于这些功能的管理。基本OS132可以是例如NetApp Data 或其他存储操作***。基本OS132和OS驱动程序可以包括存储在存储器介质130上并且可由处理器122执行的程序指令,以便在存储子***170中施行对应于所接收到的请求的一项或多项存储器访问操作。图1中所示的***通常可以包括一个或多个文件服务器和/或块服务器。
每一个数据存储阵列120a-120b可以使用网络接口124来连接到网络180。类似于客户端计算机***110a-110c,在一个实施例中,网络接口124的功能可以被包括在网络适配器卡中。网络接口124的功能可以利用硬件和软件全部二者来实施。随机存取存储器(RAM)和只读存储器(ROM)都可以被包括在网络接口124的网络卡实现方式中。可以使用一个或多个专用集成电路(ASIC)来提供网络接口124的功能。
除了前述内容之外,数据存储阵列120a-120b内的每一个存储控制器174可以支持例如快照、复制和高可用性之类的存储阵列功能。此外,每一个存储控制器174可以支持包括多个卷的虚拟机环境,每一个卷包括多个快照。在一个实例中,存储控制器174可以支持数以十万计的卷,其中每一个卷包括数以千计的快照。在一个实施例中,一个卷可以被映射在固定尺寸的扇区中,比如存储设备176a-176m内的4千字节(KB)页面。在另一个实施例中,例如对于写入请求,一个卷可以被映射在可变尺寸的扇区中。可以使用卷ID、快照ID和扇区号来标识给定卷。
一个地址翻译表可以包括多个条目,其中每一个条目保存对应于相应的数据组成部分的虚拟到物理映射。该映射表可以被用于把来自每一个客户端计算机***110a-110c的逻辑读取/写入请求映射到存储设备176a-176m中的物理位置。可以在对应于所接收到的读取/写入请求的查找操作期间从映射表读取“物理”指针数值。该物理指针数值随后可以被用来定位存储设备176a-176m内的物理位置。应当提到的是,物理指针数值可以被用来访问存储设备176a-176m当中的给定存储设备内的另一个映射表。因此,在物理指针数值与目标存储位置之间可以存在一个或多个间接层级。
在另一个实施例中,映射表可以包括被用来删除重复数据(删除重复的与表有关的信息)的信息。存储在重复数据删除表中的信息可以包括对于给定数据组成部分所计算的一个或多个散列数值与指向保存所述给定数据组成部分的其中一个存储设备176a-176m中的某一物理位置的物理指针之间的映射。此外,所述给定数据组成部分的长度和对应于相应条目的状态信息也可以被存储在重复数据删除表中。
现在参照图2,其中示出了映射表的一个实施例的一般化方块图。如前所述,可以将一个或多个映射表用于I/O重定向或翻译、用户数据的重复拷贝的重复数据删除、卷快照映射等等。映射表可以被存储在存储设备176a-176m中。图2中示出的图示代表映射表的组织和存储的一个实施例的逻辑表示。所示出的每一个层级可以包括对应于一个不同时间段的映射表条目。举例来说,层级“1”可以包括比存储在层级“2”中的信息更早的信息。类似地,层级“2”可以包括比存储在层级“3”中的信息更早的信息。存储在图2中所示的记录、页面和层级中的信息可以按照随机存取方式被存储在存储设备176a-176m内。此外,给定的映射表条目的某些部分或全部的拷贝可以被存储在RAM172中,存储在控制器174内的缓冲器中,存储在存储器介质130中,以及存储在处理器122内或者与之耦合的一个或多个高速缓存中。在各个实施例中,在每一个层级中可以包括对应于作为该层级的一部分的映射的相应索引(正如后面在图4中所描绘的那样)。这样的索引可以包括映射表条目的标识以及其在所述层级内的存储位置(例如页面的标识)。在其他实施例中,与映射表条目相关联的索引可以是在逻辑上并非所述层级本身的一部分的一个或多个不同实体。
一般来说,每一个映射表包括由各行和各列构成的一个集合。单一记录可以作为一行被存储在映射表中。记录也可以被称作条目。在一个实施例中,一条记录存储至少一个包括关键字的元组。各个元组还可以(或者可以不)包括数据字段,所述数据字段包括例如被用来识别或定位存储在存储子***170中的数据组成部分的指针之类的数据。应当提到的是,在各个实施例中,所述存储子***可以包括具有内部映射机制的存储设备(例如SSD)。在这样的实施例中,元组中的指针本身可以不是实际的物理地址。相反,所述指针可以是由存储设备映射到设备内的物理位置的逻辑地址。随着时间,逻辑地址与物理地址之间的这一内部映射可以改变。在其他实施例中,映射表中的记录可以仅包含关键字字段而没有附加的相关联的数据字段。与对应于给定记录的数据组成部分相关联的属性可以被存储在表中的各列或字段中。例如有效指标、数据龄期、数据尺寸之类的状态信息可以被存储在字段中,比如图2中所示的字段0到字段N。在各个实施例中,每一列存储对应于一种给定类型的信息。在一些实施例中,可以对于所选字段利用压缩技术,从而在某些情况下可能得到其已压缩表示的长度为零个比特的字段。应当提到的是,虽然后面的讨论通常把映射表描述为映射地址(例如虚拟到物理地址),但是在其他实施例中,在应用所述表、方法和机制时,所述关键字可以是文件标识符或对象标识符。举例来说,在这样的实施例中,所述***可以被用作文件服务器或对象服务器。在各个实施例中,这里所描述的方法和机制可以被用来服务于块、对象和文件,并且在其间动态地移动空间。可能设想到许多这样的实施例。
关键字是映射表中的可能把一个数据行与另一行区分的实体。每一行也可以被称作一个条目或记录。一个关键字可以是单一列,或者可以由被用来标识一条记录的一组列构成。在一些实施例中,一个关键字可以对应于一定数值范围而不是单一数值。举例来说,对应于一定范围的关键字可以被表示为一定范围的起始和结束,或者被表示为起始和长度,或者用其他方式表示。此外,对应于关键字的范围可能与其他关键字重叠,其中包括范围或者单独的数值。在一个实例中,地址翻译映射表可以利用包括卷标识符(ID)、例如逻辑地址或虚拟地址之类的地址、快照ID、扇区号等等的关键字。所接收到的给定读取/写入存储装置访问请求可以标识出特定卷、扇区和长度。一个扇区可以是存储在一个卷中的一个逻辑数据块。扇区在不同的卷上可以具有不同的尺寸。地址翻译映射表可以用扇区尺寸单元来映射卷。
卷标识符(ID)可以被用来访问传达卷ID和相应的当前快照ID的卷表。该信息连同所接收到的扇区号可以被用来访问地址翻译映射表。因此,在这样的实施例中,用于访问地址翻译映射表的关键字数值是卷ID、快照ID和所接收到的卷号的组合。在一个实施例中,地址翻译映射表内的各条记录通过卷ID排序,随后是扇区号,随后是快照ID。这一排序可以把不同快照中的数据组成部分的不同版本分组在一起。因此,在对应于存储装置访问读取请求的查找期间,可以利用针对存储设备176a-176m的更少读取操作找到相应的数据组成部分。
地址翻译映射表可以传达物理指针数值,其表明数据存储子***170内的存储对应于所接收到的数据存储装置访问请求的数据组成部分的位置。可以把关键字数值与存储在映射表中的一个或多个关键字数值进行比较。在所示出的实例中,为了易于说明示出了更为简单的关键字数值,比如“0”、“2”、“12”等等。物理指针数值可以被存储在相应的记录中的一个或多个字段中。
物理指针数值可以包括片段标识符(ID)和标识出存储位置的物理地址。一个片段可以是每一个存储设备176a-176m中的基本分配单元。一个片段可以具有独立设备冗余阵列(RAID)层级和数据类型。在分配期间,一个片段可以具有一个或多个所选存储设备176a-176m以用于相应的存储。在一个实施例中,一个片段可以被分配存储设备176a-176m当中的一个或多个所选存储设备当中的每一个存储设备上的相等数量的存储空间。数据存储装置访问请求可以对应于多个扇区,从而可能导致多项并行查找。写入请求可以被放置在NVRAM缓冲器(比如RAM172)中,并且写入完成确认可以被发送到客户端计算机110a-119c当中的相应的客户端计算机。在后来的某一时间,一项异步处理可以把所缓冲的写入请求冲刷到存储设备176a-176m。
在另一个实例中,图2中所示的映射表可以是重复数据删除表。重复数据删除表可以利用包括从与存储装置访问请求相关联的数据组成部分确定的散列数值。重复数据删除操作的初始步骤可以与其他操作同时施行,比如读取/写入请求、垃圾收集操作、trim(立即擦除)操作等等。对于给定的写入请求,从其中一个客户端计算机***110a-110c发送的数据可以是一个数据流,比如字节流。正如本领域技术人员所熟知的那样,一个数据流可以被划分成一个固定长度或可变长度组块的序列。组块化算法可以把数据流划分成可被称作“组块”的各个离散的数据组成部分。一个组块可以是一个子文件内容可寻址数据单元。在各个实施例中,可以使用一个表或其他结构来决定将对给定文件类型或数据类型使用的具体组块化算法。可以通过参照其文件名扩展、单独的标识信息、数据本身的内容等等来确定文件的类型。所得到的组块随后可以被存储在其中一个数据存储阵列120a-120b中以允许共享所述组块。这样的组块可以按照多种方式被单独存储或者分组在一起。
在各个实施例中,所述组块可以通过允许从其组块重建更大的数据组成部分的数据结构来表示(例如可以基于所存储的数据的一个或多个更小组块来重建特定文件)。相应的数据结构可以记录其相应的组块,其中包括所计算的相关联的散列数值、指向其在其中一个数据存储阵列120a-120b中的位置的指针(物理和/或逻辑)以及其长度。对于每一个数据组成部分,可以使用重复数据删除应用来计算相应的散列数值。举例来说,可以使用例如消息摘要算法5(MD5)、安全散列算法(SHA)等算法来计算相应的散列数值。为了知道对应于所接收到的写入请求的给定数据组成部分是否已经被存储在其中一个数据存储阵列120a-120b中,可以把对于给定数据组成部分所计算的散列数值的各个比特(或者所述散列数值的一个比特子集)与存储在其中一个或多个数据存储阵列120a-120b中的数据组成部分的散列数值中的各个比特进行比较。
映射表可以包括如图2中所示的一个或多个层级。映射表可以包括16到64个层级,但是可能设想到在映射表中所支持的另一数目的层级。在图2中为了易于说明示出了三个层级,其分别被标记为层级“1”、层级“2”和层级“N”。映射表内的每一个层级可以包括一个或多个分区。在一个实施例中,每一个分区是一个4千字节(KB)页面。举例来说,层级“N”被显示为包括页面210a-210g,层级“2”包括页面210h-210j,并且层级“1”包括页面210k-210n。可能设想到对于映射表内的每一个层级还可以选择其他分区尺寸。此外,一个或多个层级可能具有单一分区,即该层级本身。
在一个实施例中,通过时间将映射表内的多个层级排序。举例来说,在图2中,层级“1”可能早于层级“2”。类似地,层级“2”可能早于层级“N”。在一个实施例中,当检测到对应于在映射表中***一个或多个新条目的条件时,可以创建新的层级。在各个实施例中,在创建新的层级时,为该新层级给出的编号/标示大于为在时间上先于该新层级的各个层级给出的编号。举例来说,如果最近创建的层级被指派了数值8,则可以为新创建的层级指派数值9。按照这种方式,可以建立或确定各个层级之间的时间关系。可以认识到,各个数字数值不需要是严格地顺序的。此外,替换实施例可以反转编号方案,从而使得更新的层级具有更小的数字标示。此外,其他实施例可以利用非数字标示在各个层级之间进行区分。可能设想到许多这样的实施例。每一个接下来的更早层级具有从前一个更晚层级的标记整数数值递减1的标记。可以使用一个未示出的单独的表在逻辑上描述映射表。举例来说,所述单独的表的每一个条目可以包括给定的层级ID以及存储在所述给定的层级ID内的页面ID的列表。
通过创建用于***新记录的新的最高层级,通过附加新记录而更新映射表。在一个实施例中,创建单一层级以作为新的最高层级,并且每一个新记录被***到该单一层级中。在另一个实施例中,在***到映射表中之前,可以在新记录中搜索重复关键字。可以创建单一层级以作为新的最高层级。当找到存储重复关键字的给定记录时,可以把在该给定记录之前缓冲的每一条记录***到该单一层级中。可以缓冲新的记录以保留存储器排序,比如各条请求的按次序完成。随后可以创建另一个单一层级,并且除非找到存储重复关键字的另一条记录,否则可以把其余的新记录***到该另一个单一层级中。如果找到这样的记录,则重复所述步骤。映射表内的存储与其中一条新记录相同的关键字数值的已有记录不被编辑或者通过***新记录而原位覆写。
虽然所述层级的尺寸被显示为随着更低层级大于更新层级而增大,但是更高层级可以在大于或小于相邻层级之间交替。将要***到映射表中的更新记录的数目可以随时间改变,并且产生波动的层级尺寸。由于更低层级的平台化,更低层级可能大于更新层级。在检测到特定条件时,可以把两个或多更低层级平坦化成单一层级。后面将提供进一步的细节。
在对于存储在映射表中的记录没有原位编辑的情况下,被放置在更高层级中的更新记录可以覆盖位于更低层级中的存储相同关键字的记录。举例来说,当通过给定关键字数值访问映射表时,可以找到存储有保存与给定关键字数值匹配的关键字数值的记录的一个或多个层级。在这种情况下,所述一个或多个层级当中的最高层级可以被选择来提供存储在其相应记录中的信息以作为所述访问的结果。后面将提供进一步的细节。此外,后面将提供与对应于将一条或多条新记录***到映射表中的所检测到的条件以及信息存储有关的进一步细节。
在一个实施例中,可以通过关键字对给定页面内的各个条目进行排序。举例来说,可以按照根据包括在条目中的关键字的升序对各个条目进行排序。此外,在各个实施例中,可以根据任何所希望的排序顺序对一个层级内的各个页面进行排序。在各个实施例中,还可以对一个层级内的各个页面进行排序(例如根据关键字数值等等)。在图2的实例中,层级N的页面210a包括根据关键字数值以升序排序的各条记录。在各个实施例中,可以使用一个或多个列来存储关键字数值。在图2的实例中,在每一个元组中示出了两个列或字段以用于存储关键字数值。利用这样的关键字数值,随后可以按照所期望的顺序对各条记录进行排序。可以根据对应于记录的任何关键字数值或者对应于记录的任何关键字数值组合来施行排序。在所示出的实例中,第一条记录存储包括存储在两列中的0和8的关键字数值,并且最后一条记录存储包括12和33的关键字数值。在所示出的该例中,页面210a中的处于第一条和最后一条记录之间的每一条经过排序的记录在第一列中存储处于0到12之间的关键字数值,并且各条记录被设置成按照从0到12的升序(至少部分地)基于第一列来存储关键字数值。类似地,页面210b包括经过排序的记录,其中第一条记录存储关键字数值12和39,最后一条记录存储关键字数值31和19。在所示出的该例中,页面210b中的处于第一条和最后一条记录之间的每一条经过排序的记录在第一列中存储处于12到31之间的关键字数值,并且各条记录被设置成按照从12到31的升序存储关键字数值。
除了前述内容之外,还根据所期望的顺序对层级N内的各个页面进行排序。在各个实施例中,对一个层级内的各个页面进行排序的方式可以反映出对一个页面内的各个条目进行排序的顺序。举例来说,可以根据关键字数值的升序对一个层级内的各个页面进行排序。由于页面210b中的第一个关键字数值大于页面210a中的最后一个关键字数值,因此页面210b在排序顺序中跟随在页面210a之后。于是页面210g将包括其关键字数值大于包括在页面210a-210f中的那些关键字数值的条目(未示出)。按照这种方式,根据共同的方案对一个层级内的所有条目进行排序。各个条目被简单地细分成页面或其他尺寸单位。可以认识到,可以按照期望使用其他排序方案。
现在参照图3A,其中示出了被用来访问映射表的初级索引的一个实施例的一般化方块图。关键字生成器304可以接收一项或多项所请求的数据输入302。在一个实施例中,映射表是地址翻译目录表。所接收到的给定读取/写入请求可以标识出特定卷、扇区和长度。关键字生成器304可以产生查询关键字数值306,其包括卷标识符(ID)、逻辑或虚拟地址、快照ID以及扇区号。其他组合也是可能的,并且也可以利用其他的或附加的数值。可以把查询关键字数值306的不同部分与存储在映射表内的可能是或者可能不是邻接的各列中的数值进行比较。在所示出的实例中,为了易于说明使用了关键字数值“22”。
如前所述,与关键字生成器304相关联的组块化算法和/或分段算法可以接收对应于存储装置访问请求的数据302。这些算法可以产生一个或多个数据组成部分,并且对于每一个数据组成部分选择用以计算相应的散列数值或查询关键字数值306的散列函数。所得到的散列数值可以被用来对重复数据删除表进行索引。
如图3A中所示的初级索引310可以提供对应于存储在存储设备176a-176m中的数据的位置标识信息。举例来说,再次参照图2,相应的初级索引310(或其一部分)可以被逻辑地包括在每一个层级“1”、层级“2”和层级“N”中。同样地,每一个层级和每一个相应的初级索引可以按照随机存取方式被物理地存储在存储设备176a-176m中。
在一个实施例中,初级索引310可以被划分成各个分区,比如分区312a-312b。在一个实施例中,所述分区的尺寸范围可以是从4千字节(KB)页面到256KB,但是也可能设想到其他尺寸。初级索引310的每一个条目可以存储一个关键字数值。此外,每一个条目可以存储相应的唯一虚拟页面标识符(ID)和对应于关键字数值的层级ID。每一个条目可以存储例如有效性信息之类的相应的状态信息。当利用一个查询关键字数值访问初级索引310时,可以在索引310内的各个条目当中搜索与所述关键字数值匹配或者以其他方式与之对应的一个或多个条目。随后可以使用来自匹配条目的信息来定位及取回标识出作为所接收到的读取或写入请求的目标的存储位置的映射。换句话说,索引310标识出映射的位置。在一个实施例中,所述索引中的命中提供标识出存储设备176a-176m内的一个页面的相应的页面ID,其中所述页面存储所述关键字数值和相应的物理指针数值。可以利用所述关键字数值来搜索由相应的页面ID所标识的页面,以便找到物理指针数值。
在图3A的实例中,所接收到的请求对应于关键字“22”。该关键字随后被用来访问索引310。对于索引310的搜索导致命中分区312b内的一个条目。本例中的匹配条目包括例如页面28和层级3之类的信息。基于这一结果,在被标识为映射表的层级3内的页面28的页面中找到对应于所述请求的所期望的映射。利用这一信息,随后可以对映射表进行访问以便取回所期望的映射。如果针对初级索引310的访问需要访问存储装置,则将需要至少两次存储装置访问以便获得所期望的映射。因此,在后面所描述的各个实施例中,初级索引的各个部分被高速缓存或者被存储在相对快速存取的存储器中,以便消除针对存储设备的一次访问。在各个实施例中,对应于映射表的整个初级索引被高速缓存。在一些实施例中,如果初级索引已变得过大从而无法整体高速缓存或者大于所期望的情况,则可以在高速缓存中使用次级、三级或其他索引部分以减小其尺寸。后面将讨论次级类型索引。除了前述内容之外,在各个实施例中,对应于最近的命中的映射页面也被高速缓存至少一段时间。按照这种方式,可以更加快速地服务于表现出具有时间局部性的访问的处理(也就是说最近访问的位置的映射将被高速缓存并且很容易获得)。
现在参照图3B,其中示出了被用来访问映射表的被高速缓存的初级索引的一个实施例的一般化方块图。对应于图3A的那些电路和逻辑部分由完全相同的附图标记表示。被高速缓存的初级索引314可以包括存储在对应于映射表中的多个层级的每一个初级索引310中的信息的拷贝。初级索引314可以被存储在以下各项当中的一项或多项中:RAM172,控制器174内的缓冲器,存储器介质130,以及处理器122内的高速缓存。在一个实施例中,初级索引314可以通过关键字数值被排序,但是其他排序也是可能的。初级索引314还可以被划分成各个分区,比如分区316a-316b。在一个实施例中,分区316a-316b的尺寸可以与初级索引310内的分区312a-312b的尺寸相同。
类似于初级索引310,初级索引314的每一个条目可以存储以下各项当中的一项或多项:关键字数值,相应的唯一虚拟页面标识符(ID),对应于关键字数值的层级ID,以及例如有效信息之类的状态信息。当利用查询关键字数值306来访问初级索引314时,其可以传达标识出存储设备176a-176m内的一个页面的相应的页面ID,其中所述页面同时存储所述关键字数值和相应的指针数值。可以利用所述关键字数值来搜索由相应的页面ID所标识的页面,以便找到指针数值。如图所示,初级索引314可以具有存储相同关键字数值的多条记录。因此,对于给定的关键字数值从所述搜索可能得到多项命中。在一个实施例中,可以选择具有最高层级ID数值(或者被用来标识最晚层级或最近条目的任何指标)的命中。可以通过未在这里示出的合并逻辑来从多项命中当中选择一项命中。后面将提供关于合并逻辑的进一步描述。
现在参照图4,其中示出了映射表和被用来访问映射表的初级索引的另一个实施例的一般化方块图。对应于图3A中的那些电路和逻辑部分由完全相同的附图标记表示。映射表340可以具有类似于图2中所示的映射表的结构。但是没有示出对应于每一个层级的相应的初级索引310的存储。其中一个或多个初级索引部分310a-310i的一份拷贝可以被包括在索引拷贝330(例如被高速缓存的拷贝)中。拷贝330通常可以对应于图3B中所描绘的被高速缓存的索引。索引拷贝330中的信息可以被存储在RAM172、控制器174内的缓冲器、存储器介质130以及处理器122内的高速缓存中。在所示出的实施例中,初级索引310a-310i中的信息可以与映射页面一起被存储在存储设备176a-176m中。此外还示出了次级索引320,其可以被用来访问初级索引,比如图中所示的初级索引310i。类似地,映射表340的访问和更新可以按照前面所描述的那样发生。
映射表340包括多个层级,比如层级“1”到层级“N”。在所示出的实例中,每一个层级包括多个页面。层级“N”被显示为包括页面“0”到“D”,层级N-1包括页面“E”到“G”,后面以此类推。同样地,映射表340内的各个层级可以通过时间被排序。层级“N”可以晚于层级“N-1”,后面以此类推。可以至少通过关键字数值来访问映射表340。在所示出的实例中,通过关键字数值“27”和页面ID“32”来访问映射表340。举例来说,在一个实施例中,层级ID“8”可以被用来标识将要搜索的映射表340的特定层级(或“子表”)。在标识出所期望的子表之后,随后可以使用页面ID来标识出该子表内的所期望的页面。最后,可以使用关键字来标识所期望的页面内的所期望的条目。
正如前面所讨论的那样,对于被高速缓存的索引330的访问可能会导致多项命中。在一个实施例中,所述多项命中的结果被提供到合并逻辑350,所述合并逻辑350识别出哪一项命中被用来访问映射表340。合并逻辑350可以代表包括在存储控制器内的硬件和/或软件。在一个实施例中,合并逻辑350被配置成识别出对应于最近(最新)的映射的命中。这样的识别可以是基于识别出对应于一个条目的相应层级等等。在所示出的实例中,接收到对应于层级8、页面32、关键字27的查询。响应于所述查询,访问层级8的页面32。如果在页面32内找到关键字27(命中),则返回相应的结果(例如所示出的实例中的指针xF3209B24)。如果在页面32内没有找到关键字27,则返回未中指示。可以从映射表340输出该物理指针数值以便服务于与关键字数值“27”对应的存储装置访问请求。
在一个实施例中,映射表340支持在线映射。举例来说,可以在没有实际的物理扇区把用户数据存储在存储设备176a-176m内的情况下表示被检测为具有足够小的目标的映射。一个实例可以是用户数据内的重复模式。取代把作为用户数据的重复模式(例如一系列零)的多份拷贝实际存储在存储设备176a-176m内,相应的映射可以具有在状态信息中标记出的指示,比如在映射表中的字段0到字段N当中的一个字段内标记出的指示,其表明对于读取请求将返回哪一个数据数值。但是在存储设备176a-176m内的目标位置处没有该用户数据的实际存储。此外,可以在初级索引310的状态信息内存储一个指示,并且可以使用任何附加的索引(这里未示出)。
除了前述内容之外,在各个实施例中,所述存储***可以同时支持多个版本的数据组织、数据方案等等。举例来说,随着***硬件和软件的演进,可以合并或者通过其他方式提供新的特征。更新的数据、索引和(例如)映射可以利用这些新特征。在图4的实例中,新的层级N可以对应于所述***的一个版本,而更早的层级N-1可以对应于先前的版本。为了适应这些不同的版本,可以与每一个层级相关联地存储元数据,其表明该层级使用了哪一个版本、哪些特征、压缩方案等等。该元数据可以被存储为所述索引、页面本身或者全部二者的一部分。在进行访问时,该元数据于是表明应当如何正确地应对数据。此外,可以动态地应用新的方案和特征而不需要停顿***。按照这种方式,***的升级更加灵活,并且没有必要重构较早的数据以反映新的方案和方法。
现在参照图5A,其中示出了用于为读取访问服务的方法的一个实施例。在如前所述的网络架构100和映射表340中具体实现的组件可以总体上根据方法500操作。出于讨论的目的,按照先后顺序示出了该实施例中的各个步骤。但是在另一个实施例中,一些步骤可以按照不同于所示出的顺序发生,一些步骤可以被同时施行,一些步骤可以与其他步骤组合,并且可以缺少一些步骤。
可以从其中一个客户端110a-110c向其中一个数据存储阵列120a-120b传达读取和存储(写入)请求。在所示出的实例中,接收到读取请求500,并且在方块502中生成相应的查询关键字数值。在一些实施例中,所述请求本身可以包括被用来访问索引的关键字,并且不需要“生成”关键字502。如前所述,所述查询关键字数值可以是虚拟地址索引,其包括卷ID、与所接收到的请求相关联的逻辑地址或虚拟地址、快照ID、扇区号等等。在被用于重复数据删除的实施例中,可以利用散列函数或其他函数生成查询关键字数值。对于被用来访问映射表的查询关键字数值可能设想到其他数值。
在方块504中,所述查询关键字数值可以被用来访问一个或多个被高速缓存的索引,以便识别出可能存储对应于所述关键字数值的映射的映射表的一个或多个部分。此外还可以搜索已被高速缓存的最近被使用的映射。如果在被高速缓存的映射上检测到命中(方块505),则可以使用所述被高速缓存的映射来施行所请求的访问(方块512)。如果在被高速缓存的映射上没有命中,则可以做出关于在被高速缓存的索引上是否有命中的确定(方块506)。如果是的话,则使用对应于所述命中的结果来识别及访问映射表(方块508)。举例来说,利用初级索引310,存储所述查询关键字数值的条目还可以存储标识出映射表内的单一特定页面的唯一虚拟页面ID。该单一特定页面可以同时存储查询关键字数值和相关联的物理指针数值。在方块508中,可以访问所识别出的映射表部分并且利用查询关键字数值施行搜索。随后可以返回映射表结果(方块510),并且将其用来施行对应于原始读取请求的目标位置的存储装置访问(方块512)。
在一些实施例中,响应于读取请求的索引查询可能会导致未中。这样的未中可能是由于仅有所述索引的一部分被高速缓存,或者是由于错误状况(例如针对不存在的位置的读取访问、地址破坏等等)。在这种情况下,可以施行针对所存储的索引的访问。如果针对所存储的索引的访问导致命中(方块520),则可以返回结果(方块522),其被用来访问映射表(方块508)。另一方面,如果针对所存储的索引的访问导致未中,则可以检测到错误状况。可以通过多种所期望的方式当中的任一种来应对错误状况。在一个实施例中,可以生成异常(方块524),并且随后按照所期望的方式来应对。在一个实施例中,在方块510中返回映射表的一部分。在各个实施例中,该部分是一个页面,其可以是4KB页面等等。正如前面所讨论的那样,可以对一个页面内的各条记录进行排序,以便促进对于包括在其中的内容的更快搜索。
在一个实施例中,映射表利用传统的数据库***方法来进行每一个页面中的信息存储。举例来说,映射表内的每一条记录(或者行或条目)被一个紧接一个地存储。这种方法可以被使用在面向行或者行存储数据库中,并且可以附加地用于关联数据库。这些类型的数据库利用基于数值的存储结构。基于数值的存储(VBS)架构仅把唯一的数据数值存储一次,并且自动生成的索引***保持对应于所有数值的情境。在各个实施例中,可以按照行来存储数据,并且可以对于一行内的各列(字段)使用压缩。在一些实施例中,所使用的技术可以包括存储基础数值并且具有对应于偏移量的较小字段尺寸,以及/或者具有一个基础数值集合,其中一行中的一列由基础选择器和与该基础的偏移量构成。在全部两种情况下,压缩信息都可以被存储在分区内(例如存储在分区起始处)。
在一些实施例中,所述映射表对于每一个页面中的信息存储利用面向列的数据库***(列存储)方法。列存储单独存储每一个数据库表列。此外,可以邻接地、压缩并且密集包装的属于同一列的各个属性值。相应地,可以相对快速地施行对于例如一个页面内的一个表列子集的读取。列数据可以属于均匀类型,并且可以允许使用可能在面向行的数据中不可用的存储尺寸优化。例如Lempel-Ziv-Welch(LZ)和游程长度编码(RLE)之类的一些压缩方案利用所检测到的邻近数据的相似性来进行压缩。此外,正如前面更加全面地描述的那样,其他压缩方案可以将一个数值编码为与基础数值的差异,从而与表示完整数值原本所需要的情况相比需要更少比特来表示所述差异。可以选择允许识别并索引页面内的各条单独记录的压缩算法。通过压缩映射表内的各条记录可以实现细粒度映射。在各个实施例中,对于特定数据部分所使用的压缩类型可以与所述数据相关联地被存储。举例来说,压缩类型可以被存储在索引中,以作为与已压缩数据相同的页面的一部分(例如在某种类型的报头中),或者以其他方式被存储。按照这种方式,可以在存储***内一同使用多种压缩技术和算法。此外,在各个实施例中,可以在存储数据时动态地确定用于存储页面数据的压缩类型。在一个实施例中,可以至少部分地基于正被压缩的数据的性质和类型以及/或者对应于压缩技术的预期资源需求和***中的当前可用资源来选择多种压缩技术当中的一种。在一些实施例中将会施行多种压缩技术,并且随后将选择表现出最佳压缩的一种以用于压缩数据。可能设想到许多此类方法。
如果在映射表的任何层级中找到查询关键字数值306的匹配(方块508),则在方块510中,可以向合并逻辑350传达关于命中的一项或多项指示。举例来说,如图4中所示,可以从层级“1”到“J”传达一项或多项命中指示。合并逻辑350可以选择传达命中指示的层级“1”到“J”当中的最高层级,其也可以是最晚层级。作为访问结果,所选层级可以提供存储在相应的记录中的信息。
在方块512中,可以读取所选页面的匹配记录内的一个或多个相应的字段,以便处理相应的请求。在一个实施例中,当所述页面内的数据按照已压缩格式被存储时,对所述页面进行解压缩并且读出相应的物理指针数值。在另一个实施例中,只有所述匹配记录被解压缩,并且读出相应的物理指针数值。在一个实施例中,可以将一个完整的物理指针数值分解在映射表与相应的目标物理位置之间。因此可以访问多个存储用户数据的物理位置,以便完成数据存储访问请求。
现在参照图5B,其中示出了对应于所接收到的写入请求的方法的一个实施例。响应于所接收到的写入请求(方块530),可以创建对应于所述请求的新的映射表条目(方块532)。在一个实施例中,可以将新的虚拟到物理地址映射添加(方块534)到映射表中,其把所述写入请求的虚拟地址与存储相应的数据组成部分的物理位置配对。在各个实施例中,可以将所述新的映射与其他新的映射一起高速缓存,并且将其添加到新的最高层级的映射表条目中。随后可以施行针对永久性存储装置的写入操作(方块536)。在各个实施例中,可以直到后来的某一时间点才把所述新的映射表条目写入到永久性存储装置中的映射表(方块538),这种做法被认为更加高效。正如前面所讨论的那样,在利用固态存储设备的存储***中,针对存储装置的写入比来自存储装置的读取慢很多。相应地,按照最小化对于总体***性能的影响的方式来调度针对存储装置的写入。在一些实施例中,可以把新记录到映射表中的***与其他更大的数据更新相组合。通过按照这种方式组合更新可以提供更加高效的写入操作。应当提到的是,在5B的方法中,与这里所描述的每一种方法一样,为了易于讨论将各项操作描述为按照特定顺序发生。但是所述操作实际上可以按照不同顺序发生,并且在某些情况下其中的各项操作可以同时发生。所有这样的实施例都被设想到。
除了前述内容之外,在一些实施例中可以使用重复数据删除机制。图5B描绘出总体上可以对应于重复数据删除***和方法的操作550。在所示出的实例中,可以生成对应于所接收到的写入请求的散列(方块540),其被用来访问重复数据删除表(方块542)。如果在重复数据删除表中命中(方块544)(即在***内已经存在所述数据的拷贝),则可以向重复数据删除表添加一个新条目(方块548)以反映新的写入。在这种情况下,不需要把所述数据本身写入到存储装置,并且可以丢弃所接收到的写入数据。替换地,如果在重复数据删除表中未命中,则创建对应于新数据的新条目并且将其存储在重复数据删除表中(方块546)。此外,施行针对存储装置的数据写入(方块536)。此外,可以在所述索引中创建一个新条目以反映所述新数据(方块538)。在一些实施例中,如果在在线重复数据删除操作期间发生未命中,则此时不在重复数据删除表中施行***。相反,在在线重复数据删除操作期间,可以仅对于整个重复数据删除表的一部分(例如重复数据删除表的被高速缓存的一部分)发生具有散列数值的查询。如果发生未命中,则可以创建一个新条目并且将其存储在所述高速缓存中。随后在后处理重复数据删除操作(比如在垃圾收集期间发生的操作)期间,可以对于整个重复数据删除表发生具有散列数值的查询。未命中可以表明所述散列数值是独有的散列数值。因此,可以把例如散列到物理指针映射之类的新条目***到重复数据删除表中。替换地,如果在后处理重复数据删除期间检测到命中(即检测到复制品),则可以施行重复数据删除以消除其中一份或多份所检测到的拷贝。
如前所述,可以使用各种压缩方案来编码与映射表有关的数据,以便减少所需的存储装置的数量。现在参照图5C,其中示出了用于压缩一个元组集合的方法的一个实施例。这种方法可以被用来向映射表或其他表写入条目。首先可以选择对应于将要存储的已编码元组集合的目标尺寸(方块560)以及默认编码算法(方块561)。随后基于所选择的尺寸和算法来选择用于编码并且存储在所述表中的元组(方块562)。在这样的实施例中,利用当前选择的编码方法来计算每一个元组的已编码尺寸。如果正被添加的元组将导致所述集合中的当前累积元组超出目标尺寸(条件方块564),则***可以尝试找出对应于至此所累积的所有元组的更好的编码算法,以便减少对于已编码元组所需的总空间(方块565)。如果没有找到更小的编码(方块565),则忽略最近的元组,并且利用当前的编码方法写入其余的元组(方块567)。如果找到更小的编码(方块565),则确定新的更小编码是否落在目标尺寸内(方块566)。如果新的编码没有落在目标尺寸内,则可以忽略最近提供的元组,并且利用当前的编码方法编码及写入其余的元组(方块567)。如果所考虑的当前元组没有使得所述集合中的当前累积元组超出目标尺寸(条件方块564),则可以进行添加另一个元组的尝试(方块562)。类似地,如果在条件方块466中找到满足所述要求的新的编码,则可以进行添加另一个元组的尝试(方块562)。
图5D示出了用于编码元组的方法的一个实施例。在该例中描绘出原始的未编码元组584,并且描绘出编码在已编码页面568中的已编码元组580。通常来说,所示出的实例利用一个或两个数值来表示表中的每一个字段。第一个数值是被用来选择基础数值的基础数值选择器,第二个数值是与所选基础数值的偏移量。在一个实施例中,基础选择器包括b个比特,并且所述偏移量包括k个比特,其中b和k是整数。可以对于每一个字段分开选择数值b和k,并且b和k的其中之一或全部二者可以是零。对于每一个已编码字段可以存储b和k的数值连同多达2b个基础,其中每一个可以具有表示所述基础数值所需的比特数目。如果b是零,则只存储一个基础。按照这种方式编码的每一个字段于是需要至多编码b+k个比特。编码器可以考虑对应于b和k的不同数值,以便最小化对应于该字段的总的已编码尺寸,其中b的更大数值通常需要k的更小数值。
图5D示出了已编码元组584的一个样本和所得到的已编码页面568。所述页面包括报头570,其中的前两个数值包含每一个元组中的字段的数目(572)以及页面中的元组的数目(574)。报头570于是具有对应于每一个字段的一个表或数值集合。该表首先列出了对应于给定字段的基础的数目,随后是被用来编码与所述基础的偏移量的比特数目k。随后所述页面存储利用报头中的信息编码的每一个元组。举例来说,报头570中的第一个数值(572)表明对于每一个元组有3个字段。第二个数值(574)表明在页面568中有84个元组。后面的三个表576A-576C随后提供对应于所述三个字段当中的每一个的基础数值和编码信息。表576A表明第一字段具有1个基础,其中4个比特被用来编码偏移量。对应于第一字段的唯一基础是12(即b是零)。第二个表576B表明对于第二字段有3个基础,并且将使用3个比特来编码偏移量。对应于第二字段576B的三个基础是5、113和203。最后,第三个表576C表明第三字段具有2个基础,并且0个比特被用来编码偏移量。
查看已编码元组580,可以确定各个数值。在所示出的实例中,已编码元组580中的给定行/列中的数值对应于原始元组的相同行/列中的数值。可以认识到,该图中的各个数值的排序和位置仅仅是示例性的。各个数值和相应的已编码数值的实际排序可以与所描绘的情况有很大的不同。第一元组582中的第一字段被编码为3,这是因为数值15(未编码数值)可以被表示为与基础12的偏移量3(即15-12=3)。在该例中应当注意到,仅有一个基础,并且b是零。因此没有比特被用来编码对应于该字段的基础选择器数值。偏移量数值3利用4个比特被编码,从而与可能需要8、32或64个比特的典型编码相比显著减少。第一元组582A中的第二个数值被编码为1,3。1表明在表576B中选择了基础1(即选择基础113),并且3表明与基础113的偏移量3。所述数值1被编码在2个比特中(22是大于或等于所述基础数目的2的最小乘幂),并且所述数值3被编码在3个比特中,从而总共是5个比特。这同样远小于所述字段的朴素编码。最后,最后一个字段被编码为表明应当使用哪一个基础的索引。在本例中,没有比特被用来表示偏移量。第一元组在这里具有0,这是因为所存储的数值是4927,其是所述表中的对应于报头570中的字段576C的条目(基础)0。因此,对应于每一个元组的总的已编码空间是(0+4)+(2+3)+(1+0)=10个比特,从而与所需的未编码空间相比大大减少。
在各个实施例中,如果字段的最大尺寸被增大,正如为了容许更大的虚拟地址或LUN标识符所可能采取的做法,则不需要对页面进行重新编码。在最坏情况下,可能需要略微修改报头以便容许更大的基础数值,但是这方面只需要最小的努力。此外还有可能通过简单地修改所述基础而将许多数值修改固定数量,正如在把一定块范围拷贝到新位置时所可能采取的做法,而不需要解压缩以及随后重新编码每一个受到影响的元组。
应当提到的是,存在几种不同的方法以用来找到最优的或者在其他方面符合期望的对应于特定字段的b和k的数值。图5E示出了用于从多种可能性当中评估和选择一种编码方案的方法的一个实施例。在所示出的方法中,将被记录在页面的字段中的每一个独有数值被记录在一个列表中(方块585)。为了找到更加高效的编码,所述方法开始于这样的表示:其中b是零(一个基础)并且k足够大(最小的必要比特数目),以把所述列表中的最大数值编码为与该列表中的最小数值的差异或偏移量(方块586)。编码器随后尝试k的相继更小的数值,从而得到b的更大数值(更多基础)。随着评估b和k的每一种组合,保留产生被视为更好(例如更小)的编码的那些组合,以便与将来的可能编码进行比较。所述算法随后可以选择导致更小总体尺寸的编码,其中既包括报头中的表也包括对于元组中的已编码字段所需的总空间。举例来说,开始于作为基础的最小数值(方块587),找到所述列表中的至少比当前基础大2k的最小数值(方块588)。如果这样的数值存在(条件方块589),则选择该数值作为下一个基础(方块594)。如果这样的数值不存在(条件方块589),则利用当前选择的基础和k的数值确定对应于报头和各个已编码字段的总的已编码尺寸。如果这种编码符合期望(例如是目前为止最小的)(条件方块591),则保留这种编码(方块592)。不管是否保留所述编码,都可以把k的数值递减1(方块593),并且如果k大于或等于零(条件方块595),则可以通过回到方块587而重复所述处理。如果通过递减k而导致k低于零,则所述处理结束,并且选择至此所找到的最佳编码(方块596)。
现在参照图6,其中示出了具有共享映射表的多节点网络的一个实施例的一般化方块图。在所示出的实例中,三个节点360a-360c被用来形成一个映射节点的集群。在一个实施例中,每一个节点360a-360c可以对一个或多个逻辑单元号(LUN)负责。在所描绘的实施例中示出了一定数目的映射表层级1-N。层级1可以对应于最早层级,而层级N则可以对应于最新层级。对于由特定节点管理的各个LUN的映射表条目,该特定节点自身可能具有存储在该节点自身上的更新的条目。举例来说,节点360a被显示为存储映射子表362a和364a。这些子表362a和364b可以对应于节点360a通常为之负责的LUN。类似地,节点360b包括子表362b和364b,其可以对应于由该节点所管理的LUN,节点360c则包括子表362c和364c,其可以对应于由该节点所管理的LUN。在这样的实施例中,这些“更新”层级映射表条目仅由其相应的管理节点保持,并且通常不会在其他节点上找到。
与前面讨论的相对更新的层级不同,更早层级(即层级N-2向下到层级1)代表可以由所有节点360a-360c共享的映射表条目,其含义在于任何所述节点都可以存储这些条目的拷贝。在所示出的实例中,这些更早层级370、372和374被统一标识为共享表380。此外,正如前面所讨论的那样,在各个实施例中,除了后面所讨论的合并或类似操作之外,这些更早层级是静态的。通常来说,静态层是不会受到修改的一层(也就是说其是“固定的”)。鉴于这样的层级在此含义下是固定的,因此可以对这些更低层级的任何拷贝进行访问,而无需担心另一份所述拷贝是否已被或者正被修改。因此,任何所述节点都可以安全地存储共享表380的一份拷贝,并且在确信针对这些表的请求可以被正确地服务的情况下服务于所述请求。通过在多个节点360上存储共享表380的拷贝可以允许在施行查找或者以其他方式服务于请求时使用各种负载平衡方案。
除了前述内容之外,在各个实施例中,可以按照反映节点360自身的方式来组织可以被共享的层级380。举例来说,节点360a可以负责LUN1和2,节点360b可以负责LUN3和4,并且节点360c可以负责LUN5和6。在各个实施例中,所述映射表条目可以包括其自身标识出相应的LUN的元组。在这样的实施例中,可以根据关键字数值、存储空间的绝对宽度或数量或者通过其他方式对共享映射表380进行分类。如果层级380中的映射表条目的分类至少部分地是基于LUN,则条目370a可以对应于LUN1和2,条目370b可以对应于LUN3和4,并且条目370c可以对应于LUN5和6。这样的组织可以通过有效地减少所需搜索的数据量而加速由给定节点对于以特定LUN为目标的请求所进行的查找,其中允许协调器直接选择对作为请求目标的特定LUN负责的节点。前述和其他组织和分类方案都可能被设想到。此外,如果希望把针对某一LUN的责任从一个节点移动到另一个节点,则可以把对应于该节点的原始节点映射冲刷到共享层级(并且例如合并)。针对该LUN的责任随后被转移到新的节点,其随后开始服务于该LUN。
现在参照图7,其中示出了被用来访问映射表的次级索引的一个实施例的一般化方块图。如前所述,请求者数据输入302可以被关键字生成器304接收到,关键字生成器304产生查询关键字数值306。关键字数值306被用来访问映射表。在一些实施例中,图3中所示的初级索引对于存储在RAM172或存储器介质130中可能过大(或者大于所期望的情况)。举例来说,更早的索引层级可能会由于后面在图10和11中描述的合并和平坦化操作而变得非常大。因此,可以对于初级索引的至少一部分高速缓存次级索引320而不是初级索引310的相应部分。次级索引320可以提供存储在存储设备176a-176m中的数据的更粗粒度层级的位置标识。因此,次级索引320可以小于初级索引310的与之对应的部分。相应地,次级索引320可以被存储在RAM172或存储器介质130中。
在一个实施例中,次级索引320被划分成各个分区,比如分区322a-322b。此外,可以根据层级对次级索引进行组织,其中更加近来的层级首先出现。在一个实施例中,更早层级具有更低编号,并且更晚层级具有更高编号(例如层级ID可以随着每一个新层级而递增)。次级索引320的每一个条目可以标识一个关键字数值范围。举例来说,在该例中示出的第一个条目可以表示层级22中的从0到12的关键字数值范围。这些关键字数值可以对应于与初级索引310的给定页面内的第一条记录和最后一条记录相关联的关键字数值。换句话说,次级索引中的条目可以简单地存储关键字0的标识和关键字12的标识,以表明相应的页面包含处在该范围内的条目。再次参照图3A,分区312a可以是一个页面,并且其第一条记录和最后一条记录的关键字数值分别是0和12。因此,如图7中所示,次级索引320内的一个条目存储范围0到12。由于重映射被保持在映射表内的各个层级中,因此一个关键字数值范围可以对应于多个页面和相关联的层级。如图7中所示,次级索引320内的各个字段可以存储这一信息。每一个条目可以存储一个或多个相应的唯一虚拟页面标识符(ID)以及对应于所述关键字数值范围的相关联的层级ID。每一个条目还可以存储例如有效性信息之类的相应的状态信息。所保持的页面ID相关联的层级ID的列表可以表明给定的查询关键字数值可能被存储的位置,但是并不证实所述关键字数值存在于该页面和层级中。次级索引320小于初级索引310,但是也具有存储在存储设备176a-176m中的数据的粗粒度层级的位置标识。次级索引320可以小到足以存储在RAM172或存储器介质130中。
当利用查询关键字数值306访问次级索引320时,其可以传达一个或多个相应的页面ID和相关联的层级ID。这些结果随后被用来访问及取回所存储的初级索引的各个部分。随后可以利用所述查询关键字数值来搜索所述一个或多个所识别出的页面,以便找到一个物理指针数值。在一个实施例中,所述层级ID可以被用来确定同样存储查询关键字数值306的所识别出的一个或多个层级当中的最晚层级。随后可以取回相应的页面内的一条记录,并且可以读取一个独立指针数值以用于处理存储装置访问请求。在所示出的实例中,查询关键字数值27处在关键字范围16到31内。利用所述查询关键字数值向映射表传达存储在相应的条目中的页面ID和层级ID。
现在参照图8,其中示出了被用来访问映射表的三级索引的一个实施例的一般化方块图。对应于图4的那些电路和逻辑部分具有完全相同的附图标记。如前所述,图3中的初级索引310对于存储在RAM172或存储器介质130中可能过大。此外,随着映射表340增长,次级索引320对于存储在这些存储器中也可能变得过大。因此,可以在次级索引320之前访问三级索引330,这可能仍然比访问初级索引310更快。
三级索引330可以提供关于存储在存储设备176a-176m中的数据的比次级索引320更粗粒度层级的位置标识。因此,三级索引330可以小于次级索引320的与之对应的部分。应当提到的是,初级索引310、次级索引320、三级索引330等等当中的每一项可以被存储在已压缩格式中。所选择的已压缩格式可以是被用来在映射表340内存储信息的相同的已压缩格式。
在一个实施例中,三级索引330可以包括多个分区,比如分区332a、332b等等。可以利用查询关键字数值306来访问三级索引330。在所示出的实例中,发现查询关键字数值306“27”处在从0到78的关键字数值范围之间。三级索引330中的第一个条目对应于该关键字数值范围。三级索引330中的一列可以表明将要访问次级索引320内的哪一个分区。在所示出的实例中,0到78的关键字数值范围对应于次级索引320内的分区0。
还应当注意到,可以访问一个过滤器(未示出),以便确定某一查询关键字数值是否不处在任一个索引310-330内。该过滤器可以是确定某一元素是否是某一集合的成员的概率性数据结构。可能会发生错误肯定,但是可能不会发生错误否定。这样的过滤器的一个实例是Bloom过滤器。如果对于这样的过滤器的访问确定特定数值不处在完整索引142中,则不把查询发送到存储装置。如果对于所述过滤器的访问确定所述查询关键字数值处在相应的索引中,则可能不知道相应的物理指针数值是否被存储在存储设备176a-176m中。
除了前述内容之外,在各个实施例中,可以使用一个或多个覆盖表来修改或取消响应于查询由映射表提供的元组。这样的覆盖表可以被用来应用过滤条件以供响应于针对映射表的访问而使用,或者用于在创建新层级的平坦化操作期间使用。在一些实施例中,所述覆盖表可以按照类似于前面描述的映射表的方式被组织成各个时间排序层级。在其他实施例中,可以对其进行不同的组织。对应于覆盖表的关键字不需要匹配对应于底层映射表的关键字。举例来说,覆盖表可以包含声明特定一列已被删除或者因为其他原因而不可访问的单一条目(例如不存在用以查询该元组的自然访问路径),并且针对与涉及该列标识符的元组相对应的查询的响应相反是无效的。在另一个实施例中,覆盖表中的一个条目可以表明某一存储位置已被释放,并且涉及该存储位置的任何元组都是无效的,从而使得所述查找的结果而不是由映射表使用的关键字无效化。在一些实施例中,覆盖表可以响应于针对底层映射表的查询来修改各个字段。在一些实施例中,可以使用一个关键字范围(关键字数值的范围)来高效地标识出将为之应用相同操作(取消或修改)的多个数值。按照这种方式,可以通过在覆盖表中创建“取消”条目而从映射表中(有效地)“删除”元素,并且无需修改映射表。在这种情况下,覆盖表可以包括不具有相关联的非关键字数据字段的关键字。
现在参照图9,其中示出了用于在包括映射和覆盖表的***中处理读取请求的方法的一个实施例。响应于接收到读取请求(方块900),生成对应于所述请求的映射表关键字(方块908)和第一覆盖表关键字(方块902)。在该例中,针对覆盖和映射表的访问被显示为同时发生。但是在其他实施例中,针对各表的访问可以按照任何所期望的顺序被非同时地施行(例如顺序地或者以其他方式在时间上分开真实性)。利用为映射表生成的关键字,可以从映射表取回相应的元组(方块910)。如果第一覆盖表包含对应于覆盖表关键字的“取消”条目(条件方块906),则在映射表中找到的任何元组被视为无效,并且可以向请求者返回表明这一点的指示。另一方面,如果覆盖表包含对应于覆盖表关键字的“修改”条目(条件方块912),则第一覆盖表条目中的数值可以被用来修改从映射表取回的元组中的一个或多个字段(方块922)。一旦这一处理完成,则给予来自映射表的元组(不管其是否被修改)生成第二覆盖表关键字(方块914),并且在第二覆盖表中进行第二项查找(方块916),其中第二覆盖表可以是或者可以不是与第一覆盖表相同的表。如果在第二覆盖表总找到“取消”条目(条件方块920),则来自映射表的元组被视为无效(方块918)。如果在第二覆盖表中找到“修改”条目(条件方块924),则可以修改来自映射表的元组的一个或多个字段(方块926)。这样的修改可以包括丢弃元组、归一化元组等等。经过修改的元组随后可以被返回给请求者。如果第二覆盖表不包含修改条目(条件方块924),则所述元组在未经修改的情况下被返回给请求者。在一些实施例中,可以高速缓存(多个)覆盖表的至少一些部分,以便提供对其内容的更加快速的访问。在各个实施例中,在第一覆盖表中检测到的取消条目可以用来短路任何相应的查找(例如方块914、916等等)。在其他实施例中,可以并行地施行各项访问并且“竞赛”。可能设想到许多这样的实施例。
现在参照图10,其中示出了对应于映射表内的各个层级的平坦化操作的一个实施例的一般化方块图。在各个实施例中,可以响应于检测到一项或多项条件而施行平坦化操作。举例来说,随着映射表340由于新记录的***而随着时间增长并且累积层级,对于一个查询关键字数值搜索更多层级的成本可能会不合期望地变高。为了约束将要搜索的层级数目,可以把多个层级平坦化成单一新层级。举例来说,在时间顺序上逻辑地邻近或邻接的两个或多层级可以被选择用于平坦化操作。如果两条或多条记录对应于相同的关键字数值,则可以保留最晚的记录,而其他记录则不被包括在新的“平坦化”层级中。在这样的实施例中,对于给定关键字数值的搜索,所述新***坦化的层级将返回原本将由针对相应的多个层级的搜索所提供的相同结果。由于新的平坦化层级中的搜索结果与其所替代的两个或多层级相比不会发生改变,因此不需要把所述平坦化操作与针对映射表的更新操作同步。换句话说,可以关于针对一个表的更新在该表上异步施行平坦化操作。
如前所述,更早层级是固定的含义在与,其映射不会被修改(也就是说从A到B的映射保持不变)。因此,不会(例如由于用户写入)而对正被平坦化的层级做出修改,并且不需要各个层级的同步锁定。此外,在基于节点的集群环境中,每一个节点可以存储索引的更早层级的一份拷贝(例如正如关于图6所讨论的那样),从而可以在一个节点上进行平坦化操作而无需锁定其他节点中的相应层级。因此,当在任何节点上以异步方式发生平坦化时,处理可以在所有节点中继续。在后来的某一时间点,其他节点可以对各个层级进行平坦化,或者使用一个已经被平坦化的层级。在一个实施例中,可以出于错误恢复、镜像或其他目的而保留被用来形成一个平坦化层级的所述两个或多层级。除了前述内容之外,在各个实施例中,已被取消的记录不会被重新***到所述新层级中。前面描述的平坦化例如可以响应于检测到映射表中的层级数目已达到给定阈值而被施行。或者可以响应于检测到一个或多个层级的尺寸已超出某一阈值而施行所述平坦化。可以考虑的另一项条件是***上的负载。除了单独考虑这些条件之外,关于是否对各个层级进行平坦化的决定还可以考虑这些条件的组合。关于是否要进行平坦化的决定还可以考虑对应于所述条件的当前数值以及对应于所述条件的未来预测数值。有可能设想到可以为之施行平坦化的其他条件。
在所示出的实例中,各条记录被简单地显示为关键字和指针对。为了易于说明,各个页面被显示为包括四条记录。层级“F”及其下一个邻接逻辑邻居层级“F-1”可以被考虑进行平坦化操作。层级“F”可以晚于层级“F-1”。虽然在这里示出了对两个层级的平坦化,但是有可能设想到可以选择三个或多层级以进行平坦化。在所示出的实例中,层级“F-1”可以具有存储在层级“F”中找到的相同关键字数值的记录。使用双向箭头来标识出跨越两个邻接层级存储相同关键字数值的记录。
新层级“新F”包括对应于在层级“F”和层级“F-1”中找到的重复关键字数值的一个关键字。此外,新层级“新F”包括对应于存储所述重复关键字数值的各条记录当中的最晚(或者在本例中是更晚)记录的指针数值。举例来说,层级“F”和层级“F-1”当中的每一个包括一条存储关键字数值4的记录。所述更晚记录处在层级“F”中,并且该记录还存储指针数值512。相应地,层级“F-1”包括一条存储关键字数值4还有指针数值512的记录,而不是在更早层级“F-1”中找到的指针数值656。此外,新层级“新F”包括具有在层级“F”与层级“F-1”之间找到的唯一关键字数值的记录。举例来说,层级“F-1”包括具有在层级“F”中找到的关键字和指针对6和246以及在层级“F-1”中找到的关键字和指针对2和398的记录。如图所示,各个层级内的每一个页面通过关键字数值被分类。
如前所述,在各个实施例中,可以使用覆盖表来修改或取消对应于底层映射表中的关键字数值的元组。这样的(多个)覆盖表可以按照类似于映射表的方式被管理。举例来说,覆盖表可以被平坦化,并且邻近条目可以被合并在一起以节省空间。或者可以按照不同于被用来管理映射表的方式来管理覆盖表。在一些实施例中,覆盖表可以包含涉及一定覆盖表关键字范围的单一条目。通过这种方式,可以限制覆盖表的尺寸。举例来说,如果映射表包含k个有效条目,则覆盖表(在平坦化之后)需要包含将各个范围标记为无效的不多于k+1的条目,所述范围对应于映射表中的有效条目之间的间隙。相应地,覆盖表可以被用来按照相对高效的方式标识出可以从映射表中丢弃的元组。除了前述内容之外,虽然前面的讨论描述了使用覆盖表来取消会修改针对来自(多个)映射表的请求的响应,但是覆盖表还可以被用来在映射表的平坦化操作设备取消或修改数值。相应地,当在映射表的平坦化操作期间创建一个新层级时,可以取消原本可能被***到所述新层级中的某一关键字数值。或者可以在***到新层级之前修改某一数值。这样的修改可以导致(在所述新层级中)用多条记录替代对应于映射表中的给定关键字数值范围的单一记录,其中所述多条记录当中的每一条对应于原始记录的一个子范围。此外,可以用对应于一个更小范围的一条新记录来替代某一条记录,或者可以用其范围覆盖各条原始记录的所有范围的单一记录来替代多条记录。所有这样的实施例都被设想到。
现在参照图11,其中示出了对应于映射表内的各个层级的平坦化操作的一个实施例的一般化方块图。如前所述,可以对各个层级进行时间排序。在所示出的实例中,包括一条或多条索引和相应的映射的层级“F”在逻辑上处于更早层级“F-1”上方。此外,层级“F”在逻辑上处于更晚层级“F+1”下方。类似地,层级“F-2”在逻辑上处于更晚层级“F-1”上方,并且层级“F+2”在逻辑上处于更早层级“F+1”下方。在一个实施例中,对于平坦化操作可以考虑层级“F”和“F-1”。双向箭头被用来图示出存在跨越这两个邻接层级存储相同关键字数值的记录。
如前所述,新层级“新F”包括对应于在层级“F”和层级“F-1”中找到的重复关键字数值的关键字数值。此外,新层级“新F”包括对应于存储所述重复关键字数值的各条记录当中的最晚(或者在本例中是更晚)记录的指针数值。在完成平坦化操作之后,层级“F”和层级“F-1”可能尚未被从映射表中移除。同样地,在基于节点的集群中,每一个节点可以验证其已经准备好利用新的单一层级,比如层级“新F”,并且不再使用其所替代的所述两个或多层级(比如层级“F”和层级“F-1”)。可以在新层级成为所述替代之前施行这一验证。在一个实施例中,可以把所述两个或多被替代的层级(比如层级“F”和层级“F-1”)保持在存储装置中以用于错误恢复、镜像或其他目的。为了保持各个层级及其映射的时间排序,新的平坦化层级F在逻辑上被置于各个更晚层级(例如层级F+1)下方,并且被置于其所替代的原始层级(例如层级F和层级F-1)上方。
现在参照图12,其中示出了用于对映射表内的各个层级进行平坦化的方法1000的一个实施例。具体实现在如前所述的网络架构100和映射表340中的各个组件可以总体上根据方法1000来操作。出于讨论的目的,按照先后顺序示出了本实施例中的各个步骤。但是在另一实施例中,一些步骤可以按照不同于所示出的顺序发生,一些步骤可以被同时施行,一些步骤可以与其他步骤组合,并且可以缺少一些步骤。
在方块1002中,为映射表和相应的索引分配存储空间。在方块1004中,确定对应于平坦化映射表内的两个或多层级的一项或多项条件。举例来说,搜索映射表内的当前层级数目的成本可能大于施行平坦化操作的成本。此外,成本可以是基于以下各项的至少其中之一:所述结构中的将被平坦化的当前(或预测)层级数目,一个或多个层级中的条目的数目,将被取消或修改的映射条目的数目,以及***上的负载。成本还可以包括:用于施行相应操作的时间,一条或多条总线的占用,在相应的操作期间使用的存储空间,一个层级集合中的重复条目的数目已达到某一阈值等等。此外,每一个层级内的记录数目的计数可以被用来估计对于两个邻接层级施行的平坦化操作何时可以产生其条目数目等于下一个先前层级内的条目数目的两倍的新的单一层级。有可能设想到单独地或者按照任意组合采取的这些条件以及其他条件。
在方块1006中,在存储数据并且找到新的映射时访问并更新索引和映射表。随着新的记录被***到映射表中,映射表内的层级数目增加。如果检测到对应于平坦化映射表内的两个或多层级的条件(条件方块1008),则在方块1010中,标识出用于平坦化的一个或多个层级组。一个层级组可以包括两个或多层级。在一个实施例中,所述两个或多层级是邻接层级。虽然最低层级或最早层级可能是用于平坦化的最佳候选,但是也可以选择更晚的组。
在方块1012中,对于每一组产生包括相应的组内的各条最新记录的新的单一层级。在前面的实例中,新的单一层级“新F”包括层级“F”和层级“F+1”当中的最晚记录。在方块1014中,在基于节点的集群中,可以从所述集群内的每一个节点请求确认,以表明对应的节点已准备好利用通过平坦化操作而产生的各个新层级。当每一个节点确认其可以利用所述新层级时,在方块1016中,利用所述新层级来替代所标识出的各组内的当前层级。在其他实施例中,不需要跨越节点的同步。在这样的实施例中,一些节点可以在其他节点之前开始使用新层级。此外,即使在新***坦化的层级可用之后,一些节点仍然可以继续使用原始层级。举例来说,特定节点可能具有高速缓存的原始层级数据并且优选地使用该数据,而不是使用新***坦化的层级的未被高速缓存的数据。有可能设想到许多这样的实施例。
现在参照图13,其中示出了用于高效地处理映射表内的批量阵列任务的方法1100的一个实施例。与所描述的其他方法类似,在如前所述的网络架构100和映射表340中具体实现的各个组件可以总体上根据方法1100操作。此外,按照先后顺序示出了本实施例中的各个步骤。但是在另一实施例中,一些步骤可以按照不同于所示出的顺序发生,一些步骤可以被同时施行,一些步骤可以与其他步骤组合,并且可以缺少一些步骤。
通过按照已压缩格式把信息存储在映射表内可以实现细粒度映射,从而可以允许直接操纵映射表内的映射信息以作为针对常见的批量阵列任务的一种替换方案。直接映射操纵可以减少I/O网络和总线通信量。如前所述,闪存具有较低“寻道时间”,从而允许在少于来自旋转盘的单一操作的时间内发生一定数目的从属读取操作。这些从属读取可以被用来施行在线细粒度映射,以便集成例如压缩和重复数据删除之类的空间节省特征。此外,这些从属读取操作可以允许存储控制器174完全在映射表内施行批量阵列任务,而不是访问(读取和写入)存储在存储设备176a-176m内的用户数据。
在方块1102中接收到大型或批量阵列任务。举例来说,除了正由数十个或者数百个虚拟机执行和更新的企业应用数据之外,批量拷贝或移动请求还可以对应于所述虚拟机的备份。对于所接收到的与所有这一数据的移动、分支、克隆或拷贝相关联的请求,相关联的数据量可能大到16千兆字节(GB)或更大。如果访问用户数据以处理该请求,则可能要把大量处理时间花费在所述请求上,并且***性能会降低。此外,与物理环境相比,虚拟化环境的总输入/输出(I/O)资源通常更少。
在方块1104中,存储控制器174可以存储对应于所接收到的把一定新关键字范围与一定旧关键字范围相关的请求的指示,其中全部两个关键字范围都对应于所接收到的请求。举例来说,如果所接收到的请求是拷贝16GB的数据,则可以存储对应于所述16GB数据的起始关键字数值和结束关键字数值。同样地,每一个所述起始和结束关键字数值可以包括卷ID、所接收到的请求内的逻辑或虚拟地址、快照ID、扇区号等等。在一个实施例中,可以把该信息与存储在索引中的信息分开存储,所述索引比如有初级索引310、次级索引320、三级索引330等等。但是在对于后来的请求的处理期间,在访问所述索引时可以访问该信息。
在方块1106中,数据存储控制器174可以在没有对于用户数据的先前访问的情况下向客户端计算机***110a-110c的相应客户端传达表明完成所接收到的请求的响应。因此,存储控制器174可以在只有很低或者没有停机时间并且在处理器112上没有负载的情况下处理所接收到的请求。
在方块1108中,存储控制器174可以设定一项条件、指示或标志或者缓冲更新操作,以用于更新映射表中的一条或多条记录,其对应于用新关键字替代映射表中的旧关键字。对于移动请求和拷贝请求全部二者,可以把对应于新关键字的一条或多条新记录***到映射表中。如前所述,可以把所述关键字***到所创建的新的最高层级中。对于移动请求,可以在相应的新记录已被***到映射表中之后,从映射表中移除一条或多条旧记录。映射表中的记录立即或者在后来的某一时间被实际更新。
对于归零或擦除请求,可以存储表明某一关键字数值范围现在对应于一系列二进制零的指示。此外,正如前面所讨论的那样,可以使用覆盖表来标识出并非(或者不再)有效的关键字数值。用户数据可以不被覆写。对于擦除请求,可以在分配“所释放的”存储位置时的后来的某一时间利用对应于后续的存储(写入)请求的新数据来覆写用户数据。对于外部指导的碎片整理请求,可以选择邻接的地址以用于扇区重组,从而可以有益于在客户端计算机***110a-110c的客户端上执行的应用。
如果存储控制器174接收到对应于其中一个新关键字的数据存储装置访问请求(条件方块1110),并且该新关键字已经被***到映射表中(条件方块1112),则在方块1114中,可以利用该新关键字来访问索引和映射表。举例来说,可以利用该新关键字来访问初级索引310、次级索引320或三级索引330。当通过索引识别出映射表的一个或多个页面时,随后可以访问所识别出的这些页面。在方块1116中,可以利用在映射表中找到的与所述新关键字相关联的物理指针数值来服务于所述存储装置访问请求。
如果存储控制器174接收到对应于其中一个新关键字的数据存储装置访问请求(条件方块1110),并且该新关键字尚未被***到映射表中(条件方块1112),则在方块1118中,可以利用相应的旧关键字来访问索引和映射表。可以访问保存所述旧关键字范围和新关键字范围的存储装置以确定相应的旧关键字数值。当通过索引识别出映射表的一个或多个页面时,随后可以访问所识别出的这些页面。在方块1120中,可以利用在映射表中找到的与所述旧关键字相关联的物理指针数值来服务于所述存储装置访问请求。
现在参照图14,其中示出了存储设备内的数据布局架构的一个实施例的一般化方块图。在一个实施例中,存储设备176a-176m内的数据存储位置可以被设置成独立设备冗余阵列(RAID)阵列。如图所示,可以根据数据布局架构将不同类型的数据存储在存储设备176a-176k中。在一个实施例中,每一个存储设备176a-176k是一个SSD。SSD内的一个分配单元可以包括SSD内的一个或多个擦除块。
用户数据1230可以被存储在包括在其中一个或多个存储设备176a-176k内的一个或多个页面内。在RAID条带与其中一个存储设备176a-176k的每一个交叉点内,所存储的信息可以被格式化为一系列逻辑页面。每一个逻辑页面又可以包括对应于该页面中的数据的报头和校验和。当发出读取时,所述读取可以是对应于一个或多个逻辑页面,并且可以利用所述校验和来查验每一个页面中的数据。由于每一个逻辑页面可以包括页面报头并且所述页面报头包含对应于该页面的校验和(其可以被称作“介质”校验和),因此对应于数据的实际页面尺寸可以小于一个逻辑页面。在一些实施例中,对于存储设备间恢复数据1250(比如RAID奇偶校验信息)的页面,页面报头可以更小,从而使得奇偶校验页面保护数据页面中的页面校验和。在其他实施例中,可以计算存储设备间恢复数据1250的奇偶校验页面中的校验和,从而使得数据页面校验和的校验和与覆盖相应的数据页面的奇偶校验页面的校验和相同。在这样的实施例中,对应于奇偶校验页面的报头不需要小于对应于数据页面的报头。
设备间ECC数据1250可以是从保存用户数据的其他存储设备上的一个或多个页面生成的奇偶校验信息。举例来说,设备间ECC数据1250可以是用在RAID数据布局架构中的奇偶校验信息。虽然所存储的信息在存储设备176a-176k中被显示为邻接逻辑页面,但是在本领域内所公知的是,可以按照随机顺序来设置各个逻辑页面,其中每一个存储设备176a-176k是SSD。
设备内ECC数据1240可以包括由设备内冗余方案使用的信息。设备内冗余方案利用给定存储设备内的ECC信息,比如奇偶校验信息。该设备内冗余方案及其ECC信息对应于给定设备,并且可以被保持在给定设备内,但是与可以由该设备自身内部生成并保持的ECC不同。通常来说,设备内部生成并保持的ECC对于该设备被包括在其中的***不可见。
设备内ECC数据1240还可以被称作设备内错误恢复数据1240。设备内错误恢复数据1240可以被用来保护给定存储设备免于潜在的扇区错误(LSE)。LSE是直到访问给定扇区才检测到的错误。因此,先前存储在给定扇区中的任何数据都可能丢失。当在存储设备故障之后的RAID重建期间遇到时,单一LSE可能导致数据丢失。术语“扇区”通常指代HDD上的基本存储单元,比如盘上的给定轨道内的一个片段。在这里,术语“扇区”还可以指代SSD上的基本分配单元。当存储设备内的给定扇区或其他存储单元不可访问时,会发生潜在扇区错误(LSE)。读取或写入操作可能对于所述给定扇区无法完成。此外,可能会发生不可校正的纠错码(ECC)错误。
包括在给定存储设备内的设备内错误恢复数据1240可以被用来提高给定存储设备内的数据存储可靠性。设备内错误恢复数据1240是作为可以被包括在另一个存储设备内的其他ECC信息的补充,所述其他ECC信息比如有利用在RAID数据布局架构中的奇偶校验信息。
在每一个存储设备内,设备内错误恢复数据1240可以被存储在一个或多个页面中。正如本领域技术人员所公知的那样,设备内错误恢复数据1240可以通过在用户数据1230内的所选信息比特上施行一项函数来获得。可以使用基于XOR(异或)的运算来导出奇偶校验信息以便存储在设备内错误恢复数据1240中。设备内冗余方案的其他实例包括单奇偶校验(SPC)、最大距离可分(MDS)擦除码、交织奇偶校验码(IPC)、混合SPC和MDS码(MDS+SPC)以及列对角线奇偶校验(CDP)。所述各种方案取决于计算数据1240的方式在所给出的可靠性和开销方面有所不同。
除了前面描述的错误恢复信息之外,所述***还可以被配置成计算对应于设备上的一个区段的校验和数值。举例来说,在向设备写入信息时可以计算一个校验和。该校验和由***存储。在从设备读回信息时,***可以再次计算校验和,并且将其与原始存储的数值进行比较。如果两个校验和不同,则所述信息未被正确读取,并且***可以使用其他方案来恢复所述数据。校验和函数的实例包括循环冗余校验(CRC)、MD5和SHA-1。
SSD内的一个擦除块可以包括几个页面。一个页面可以包括4KB的数据存储空间。一个擦除块可以包括64个页面或者256KB。在其他实施例中,一个擦除块可以大到1兆字节(MB),并且包括256个页面。可以按照同时提供足够大尺寸的单元和相对较低单元数目的方式来选择分配单元尺寸,以便减少跟踪分配单元的开销。在一个实施例中,一个或多个状态表可以保持一个分配单元的状态(已分配、自由、已擦除、错误)、耗损水平以及在该分配单元内已发生的错误数目的计数(可校正和/或不可校正)。在一个实施例中,一个分配单元与SSD的总存储容量相比相对较小。可能设想到对应于页面、擦除块和其他单元设置的数据存储空间的其他数量。
元数据1260可以包括页面报头信息、RAID条带标识信息、对应于一个或多个RAID条带的日志数据等等。在各个实施例中,每一个条带的开头处的单一元数据页面可以从其他条带报头重建。或者该页面可以处在奇偶校验分片中的不同偏移量处,从而可以通过设备间奇偶校验来保护数据。在一个实施例中,元数据1260可以存储表明该数据不应被复制的特定标志数值或者与之相关联。
除了设备间奇偶校验保护和设备内奇偶校验保护之外,存储设备176a-176k中的每一个页面可以包括附加的保护,比如存储在给定页面内的校验和。所述校验和(8字节、4字节或其他尺寸)可以被放置在页面内部的报头之后和相应数据之前,其可以被压缩。对于另一层级的保护,可以把数据位置信息包括在校验和数值中。每一个所述页面中的数据可以包括该信息。该信息可以包括虚拟地址和物理地址全部二者。扇区数目、数据组块和偏移量数目、轨道数目、平面数目等等也可以被包括在该信息中。这一映射信息还可以被用来在地址翻译映射表的内容丢失的情况下重建所述表。
在一个实施例中,存储设备176a-176k中的每一个页面存储特定类型的数目,比如数据类型1230-1260。或者各个页面可以存储多于一个字节的数据。页面报头可以存储标识对应于相应页面的数据类型的信息。在一个实施例中,设备内冗余方案把一个设备划分成用于存储用户数据的各个位置组。举例来说,一个分部可以是设备内的对应于RAID布局内的一个条带的一组位置。在所示出的实例中,为了易于说明仅示出了两个条带1270a和1270b。
在一个实施例中,存储控制器174内的RAID引擎可以确定对于存储设备176a-176k使用的保护层级。举例来说,RAID引擎可以确定对于存储设备176a-176k利用RAID双奇偶校验。设备间冗余数据1250可以表示从相应的用户数据生成的RAID双奇偶校验数值。在一个实施例中,存储设备176j和176k可以存储所述双奇偶校验信息。应当理解的是,有可能设想到其他层级的RAID奇偶校验保护。此外,在其他实施例中,对于双奇偶校验信息的存储可以在各个存储设备之间轮转,而不是被存储在对应于每一个RAID条带的存储设备176j和176k内。为了易于说明和描述,对于双奇偶校验信息的存储被显示为存储在存储设备176j和176k中。虽然每一个存储设备176a-176k包括多个页面,但是为了易于说明仅标记出页面1212和页面1220。
应当提到的是,前面描述的实施例可以包括软件。在这样的实施例中,可以在计算机可读介质上传送或存储实施各种方法和/或机制的程序指令。可以获得被配置成存储程序指令的多种类型的介质,其中包括硬盘、软盘、CD-ROM、DVD、闪存、可编程ROM(PROM)、随机存取存储器(RAM)以及各种其他形式的易失性或非易失性存储装置。
在各个实施例中,这里所描述的各种方法和机制的一个或多个部分可以构成云计算环境的一部分。在这样的实施例中,可以根据一种或多种模型通过因特网作为服务来提供资源。这样的模型可以包括作为服务的基础设施(IaaS)、作为服务的平台(Paas)以及作为服务的软件(SaaS)。在IaaS中,作为服务给出计算机基础设施。在这种情况下,计算装备通常由服务提供商所有及操作。在PaaS模型中,由开发者使用来开发软件解决方案的软件工具和底层装备可以由服务提供商作为服务来提供和寄放。SaaS通常包括由服务提供商作为服务按需授予软件执照。服务提供商可以寄放软件,或者可以对于给定时间段为顾客布置软件。有可能设想到前述模型的许多组合。
虽然前面以可观的细节描述了各个实施例,但是一旦完全理解前面的公开内容,本领域技术人员将认识到许多变型和修改。所附权利要求书应当被解释成涵盖所有这样的变型和修改。
Claims (22)
1.一种计算机***,其包括:
数据存储介质;
耦合到数据存储介质的数据存储控制器;以及
包括多个条目的映射表,每一个映射表条目包括元组,所述元组包括对应于所述计算机***中的虚拟块的关键字;
其中,数据存储控制器被配置成利用可变长度编码对映射表中的每一个元组进行编码;
其中,所述条目中对于给定虚拟块范围的条目存储能够被用来在无需进一步访问数据存储介质的情况下重建对应于虚拟块范围的数据的数据模式。
2.如权利要求1所述的计算机***,其中,所述映射表被组织成多个时间排序层级,每一个层级包括一个或多个映射表条目。
3.如权利要求1所述的计算机***,其中,至少部分地基于未编码的给定元组的尺寸、已编码的给定元组的尺寸以及用以编码给定元组的时间来选择针对给定元组的多种编码当中的特定编码。
4.如权利要求1所述的计算机***,其中,所述数据存储控制器被配置成对给定元组施行多种编码,并且选择所述多种编码当中的一种以作为最终编码。
5.如权利要求1所述的计算机***,其中,所述数据存储控制器被配置成在不首先解码给定的映射表条目的情况下检查该条目,以便查看其是否满足查询。
6.如权利要求1所述的计算机***,其中,所述映射表存储其关键字对应于***中的虚拟块的条目。
7.如权利要求6所述的计算机***,其中,对于给定虚拟块范围的条目存储促进查找包括块的范围的数据的位置的信息。
8.如权利要求6所述的计算机***,其中,对于给定虚拟块范围的条目存储对应于给定虚拟块范围的数据上计算的散列数值。
9.如权利要求1所述的计算机***,其中,在对应于所述虚拟块范围的目标位置处没有用户数据的实际存储。
10.如权利要求1所述的计算机***,其中,所述映射表包括作为页面被存储在数据存储介质中的数据,并且所述数据存储控制器被配置成对于至少其中一些页面使用不同的数据编码。
11.如权利要求10所述的计算机***,其中,一元组的已编码表示的尺寸与该元组的未编码表示的尺寸之间的比例能够对于每一个页面而有所不同。
12.如权利要求1所述的计算机***,其中,被用来表示未编码的元组的最大比特数目能够在无需重新编码该元组的情况下被更改。
13.如权利要求1所述的计算机***,其中,所述映射表的尺寸与为之存在有效映射的空间的数量成比例。
14.如权利要求1所述的计算机***,其中,所述可变长度编码包括基础和偏移量。
15.一种用在存储***中的方法,所述方法包括:
存储被组织成多个层级的映射表,所述多个层级当中的每一个层级包括一个或多个映射表条目,其中所述多个条目当中的每一个包括元组,所述元组包括对应于所述存储***中的虚拟块的关键字;以及
利用可变长度编码对映射表中的每一个元组进行编码;
其中,所述条目中对于给定虚拟块范围的条目存储能够被用来在无需进一步访问相关联的数据存储介质的情况下重建对应于虚拟块范围的数据的数据模式。
16.如权利要求15中所述的方法,其中,所述映射表被组织成多个时间排序层级,每一个层级包括一个或多个映射表条目。
17.如权利要求15中所述的方法,其中,在对应于所述虚拟块范围的目标位置处没有用户数据的实际存储。
18.如权利要求15中所述的方法,其还包括:对给定元组施行多种编码,并且选择所述多种编码当中的一种以作为最终编码。
19.如权利要求15中所述的方法,其还包括:对于至少其中一些页面使用不同的数据编码。
20.如权利要求15中所述的方法,其中,被用来表示未编码的元组的最大比特数目能够在无需重新编码该元组的情况下被更改。
21.如权利要求15中所述的方法,其中,所述映射表的尺寸与为之存在有效映射的空间的数量成比例。
22.一种存储***,包括:
用于存储被组织成多个层级的映射表的部件,所述多个层级当中的每一个层级包括一个或多个映射表条目,其中所述多个条目当中的每一个包括元组,所述元组包括对应于存储***中的虚拟块的关键字;以及
用于利用可变长度编码对映射表中的每一个元组进行编码的部件;
其中,所述条目中对于给定虚拟块范围的条目存储能够被用来在无需进一步访问所述存储***的情况下重建对应于虚拟块范围的数据的数据模式。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/250,579 | 2011-09-30 | ||
US13/250,579 US8793467B2 (en) | 2011-09-30 | 2011-09-30 | Variable length encoding in a storage system |
PCT/US2012/057541 WO2013049339A1 (en) | 2011-09-30 | 2012-09-27 | Variable length encoding in a storage system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104025010A CN104025010A (zh) | 2014-09-03 |
CN104025010B true CN104025010B (zh) | 2016-11-16 |
Family
ID=47089143
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280053506.8A Active CN104025010B (zh) | 2011-09-30 | 2012-09-27 | 存储***中的可变长度编码 |
Country Status (6)
Country | Link |
---|---|
US (2) | US8793467B2 (zh) |
EP (1) | EP2761420B1 (zh) |
JP (1) | JP6124902B2 (zh) |
CN (1) | CN104025010B (zh) |
AU (1) | AU2012315976A1 (zh) |
WO (1) | WO2013049339A1 (zh) |
Cited By (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9684460B1 (en) | 2010-09-15 | 2017-06-20 | Pure Storage, Inc. | Proactively correcting behavior that may affect I/O performance in a non-volatile semiconductor storage device |
US9710165B1 (en) | 2015-02-18 | 2017-07-18 | Pure Storage, Inc. | Identifying volume candidates for space reclamation |
US9727485B1 (en) | 2014-11-24 | 2017-08-08 | Pure Storage, Inc. | Metadata rewrite and flatten optimization |
US9779268B1 (en) | 2014-06-03 | 2017-10-03 | Pure Storage, Inc. | Utilizing a non-repeating identifier to encrypt data |
US9792045B1 (en) | 2012-03-15 | 2017-10-17 | Pure Storage, Inc. | Distributing data blocks across a plurality of storage devices |
US9804973B1 (en) | 2014-01-09 | 2017-10-31 | Pure Storage, Inc. | Using frequency domain to prioritize storage of metadata in a cache |
US9811551B1 (en) | 2011-10-14 | 2017-11-07 | Pure Storage, Inc. | Utilizing multiple fingerprint tables in a deduplicating storage system |
US9817608B1 (en) | 2014-06-25 | 2017-11-14 | Pure Storage, Inc. | Replication and intermediate read-write state for mediums |
US9864761B1 (en) | 2014-08-08 | 2018-01-09 | Pure Storage, Inc. | Read optimization operations in a storage system |
US9864769B2 (en) | 2014-12-12 | 2018-01-09 | Pure Storage, Inc. | Storing data utilizing repeating pattern detection |
US9880779B1 (en) | 2013-01-10 | 2018-01-30 | Pure Storage, Inc. | Processing copy offload requests in a storage system |
US10114574B1 (en) | 2014-10-07 | 2018-10-30 | Pure Storage, Inc. | Optimizing storage allocation in a storage system |
US10126982B1 (en) | 2010-09-15 | 2018-11-13 | Pure Storage, Inc. | Adjusting a number of storage devices in a storage system that may be utilized to simultaneously service high latency operations |
US10156998B1 (en) | 2010-09-15 | 2018-12-18 | Pure Storage, Inc. | Reducing a number of storage devices in a storage system that are exhibiting variable I/O response times |
US10164841B2 (en) | 2014-10-02 | 2018-12-25 | Pure Storage, Inc. | Cloud assist for storage systems |
US10180879B1 (en) | 2010-09-28 | 2019-01-15 | Pure Storage, Inc. | Inter-device and intra-device protection data |
US10185505B1 (en) | 2016-10-28 | 2019-01-22 | Pure Storage, Inc. | Reading a portion of data to replicate a volume based on sequence numbers |
US10191662B2 (en) | 2016-10-04 | 2019-01-29 | Pure Storage, Inc. | Dynamic allocation of segments in a flash storage system |
US10235065B1 (en) | 2014-12-11 | 2019-03-19 | Pure Storage, Inc. | Datasheet replication in a cloud computing environment |
US10248516B1 (en) | 2014-12-11 | 2019-04-02 | Pure Storage, Inc. | Processing read and write requests during reconstruction in a storage system |
US10263770B2 (en) | 2013-11-06 | 2019-04-16 | Pure Storage, Inc. | Data protection in a storage system using external secrets |
US10284367B1 (en) | 2012-09-26 | 2019-05-07 | Pure Storage, Inc. | Encrypting data in a storage system using a plurality of encryption keys |
US10296354B1 (en) | 2015-01-21 | 2019-05-21 | Pure Storage, Inc. | Optimized boot operations within a flash storage array |
US10296469B1 (en) | 2014-07-24 | 2019-05-21 | Pure Storage, Inc. | Access control in a flash storage system |
US10310740B2 (en) | 2015-06-23 | 2019-06-04 | Pure Storage, Inc. | Aligning memory access operations to a geometry of a storage device |
US11275681B1 (en) | 2017-11-17 | 2022-03-15 | Pure Storage, Inc. | Segmented write requests |
US11775189B2 (en) | 2019-04-03 | 2023-10-03 | Pure Storage, Inc. | Segment level heterogeneity |
US11782614B1 (en) | 2017-12-21 | 2023-10-10 | Pure Storage, Inc. | Encrypting data to optimize data reduction |
US11797386B2 (en) | 2010-09-28 | 2023-10-24 | Pure Storage, Inc. | Flexible RAID layouts in a storage system |
US11803567B1 (en) | 2014-12-19 | 2023-10-31 | Pure Storage, Inc. | Restoration of a dataset from a cloud |
US11847336B1 (en) | 2014-03-20 | 2023-12-19 | Pure Storage, Inc. | Efficient replication using metadata |
US11869586B2 (en) | 2018-07-11 | 2024-01-09 | Pure Storage, Inc. | Increased data protection by recovering data from partially-failed solid-state devices |
US11899986B2 (en) | 2013-11-06 | 2024-02-13 | Pure Storage, Inc. | Expanding an address space supported by a storage system |
US12045487B2 (en) | 2022-08-01 | 2024-07-23 | Pure Storage, Inc. | Preserving data deduplication in a multi-tenant storage system |
Families Citing this family (162)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11275509B1 (en) | 2010-09-15 | 2022-03-15 | Pure Storage, Inc. | Intelligently sizing high latency I/O requests in a storage environment |
US11614893B2 (en) | 2010-09-15 | 2023-03-28 | Pure Storage, Inc. | Optimizing storage device access based on latency |
US12008266B2 (en) | 2010-09-15 | 2024-06-11 | Pure Storage, Inc. | Efficient read by reconstruction |
US8589625B2 (en) | 2010-09-15 | 2013-11-19 | Pure Storage, Inc. | Scheduling of reconstructive I/O read operations in a storage environment |
US8527544B1 (en) * | 2011-08-11 | 2013-09-03 | Pure Storage Inc. | Garbage collection in a storage system |
US8793467B2 (en) | 2011-09-30 | 2014-07-29 | Pure Storage, Inc. | Variable length encoding in a storage system |
US11636031B2 (en) | 2011-08-11 | 2023-04-25 | Pure Storage, Inc. | Optimized inline deduplication |
US9747293B2 (en) * | 2012-02-28 | 2017-08-29 | Deep Information Sciences, Inc. | Method and system for storage and retrieval of information |
WO2013147785A1 (en) * | 2012-03-29 | 2013-10-03 | Hitachi Data Systems Corporation | Highly available search index with storage node addition and removal |
US9390055B2 (en) | 2012-07-17 | 2016-07-12 | Coho Data, Inc. | Systems, methods and devices for integrating end-host and network resources in distributed memory |
CN103577278B (zh) * | 2012-07-30 | 2016-12-21 | 国际商业机器公司 | 用于数据备份的方法和*** |
US8922243B2 (en) | 2012-12-23 | 2014-12-30 | Advanced Micro Devices, Inc. | Die-stacked memory device with reconfigurable logic |
US9697147B2 (en) | 2012-08-06 | 2017-07-04 | Advanced Micro Devices, Inc. | Stacked memory device with metadata management |
US9665572B2 (en) * | 2012-09-12 | 2017-05-30 | Oracle International Corporation | Optimal data representation and auxiliary structures for in-memory database query processing |
US10623386B1 (en) | 2012-09-26 | 2020-04-14 | Pure Storage, Inc. | Secret sharing data protection in a storage system |
US11032259B1 (en) | 2012-09-26 | 2021-06-08 | Pure Storage, Inc. | Data protection in a storage system |
US9378179B2 (en) | 2012-11-21 | 2016-06-28 | International Business Machines Corporation | RDMA-optimized high-performance distributed cache |
US9569400B2 (en) | 2012-11-21 | 2017-02-14 | International Business Machines Corporation | RDMA-optimized high-performance distributed cache |
US9332083B2 (en) | 2012-11-21 | 2016-05-03 | International Business Machines Corporation | High performance, distributed, shared, data grid for distributed Java virtual machine runtime artifacts |
US9170948B2 (en) | 2012-12-23 | 2015-10-27 | Advanced Micro Devices, Inc. | Cache coherency using die-stacked memory device with logic die |
US9201777B2 (en) | 2012-12-23 | 2015-12-01 | Advanced Micro Devices, Inc. | Quality of service support using stacked memory device with logic die |
US9065722B2 (en) | 2012-12-23 | 2015-06-23 | Advanced Micro Devices, Inc. | Die-stacked device with partitioned multi-hop network |
US9135185B2 (en) | 2012-12-23 | 2015-09-15 | Advanced Micro Devices, Inc. | Die-stacked memory device providing data translation |
US9372726B2 (en) | 2013-01-09 | 2016-06-21 | The Research Foundation For The State University Of New York | Gang migration of virtual machines using cluster-wide deduplication |
US11768623B2 (en) | 2013-01-10 | 2023-09-26 | Pure Storage, Inc. | Optimizing generalized transfers between storage systems |
US10908835B1 (en) | 2013-01-10 | 2021-02-02 | Pure Storage, Inc. | Reversing deletion of a virtual machine |
US11733908B2 (en) | 2013-01-10 | 2023-08-22 | Pure Storage, Inc. | Delaying deletion of a dataset |
US20140223100A1 (en) * | 2013-02-07 | 2014-08-07 | Alex J. Chen | Range based collection cache |
US9442993B2 (en) | 2013-02-11 | 2016-09-13 | Dell Products L.P. | Metadata manager for analytics system |
US9191432B2 (en) | 2013-02-11 | 2015-11-17 | Dell Products L.P. | SAAS network-based backup system |
US10474652B2 (en) * | 2013-03-14 | 2019-11-12 | Inpixon | Optimizing wide data-type storage and analysis of data in a column store database |
GB201307513D0 (en) * | 2013-04-25 | 2013-06-12 | Semafone Ltd | Secure voice transactions |
US20140324875A1 (en) * | 2013-04-29 | 2014-10-30 | Keyw Corporation | Index for fast batch updates of large data tables |
JP6127206B2 (ja) * | 2013-05-07 | 2017-05-10 | 華為技術有限公司Huawei Technologies Co.,Ltd. | 分散記憶システムにおけるセカンダリインデックスを確立するための方法、装置及びシステム |
US9286948B2 (en) * | 2013-07-15 | 2016-03-15 | Advanced Micro Devices, Inc. | Query operations for stacked-die memory device |
GB2516641B (en) * | 2013-07-26 | 2015-12-16 | Canon Kk | Method and server device for exchanging information items with a plurality of client entities |
US9405479B1 (en) * | 2013-08-26 | 2016-08-02 | Western Digital Technologies, Inc. | Faster file compression using sliding compression window and backward compound pointers |
CN105579980A (zh) * | 2013-09-27 | 2016-05-11 | 仁荷大学校产学协力团 | 基于ssd的raid***中的校验数据的去重 |
US11128448B1 (en) | 2013-11-06 | 2021-09-21 | Pure Storage, Inc. | Quorum-aware secret sharing |
US9608664B2 (en) | 2013-12-30 | 2017-03-28 | International Business Machines Corporation | Compression of integer data using a common divisor |
WO2015116158A2 (en) * | 2014-01-31 | 2015-08-06 | Hewlett-Packard Development Company, L.P. | Encoding data in a memory array |
US9628107B2 (en) | 2014-04-07 | 2017-04-18 | International Business Machines Corporation | Compression of floating-point data by identifying a previous loss of precision |
US9823842B2 (en) | 2014-05-12 | 2017-11-21 | The Research Foundation For The State University Of New York | Gang migration of virtual machines using cluster-wide deduplication |
US9218244B1 (en) | 2014-06-04 | 2015-12-22 | Pure Storage, Inc. | Rebuilding data across storage nodes |
US11399063B2 (en) | 2014-06-04 | 2022-07-26 | Pure Storage, Inc. | Network authentication for a storage system |
US10496556B1 (en) | 2014-06-25 | 2019-12-03 | Pure Storage, Inc. | Dynamic data protection within a flash storage system |
US9495255B2 (en) | 2014-08-07 | 2016-11-15 | Pure Storage, Inc. | Error recovery in a storage cluster |
US9558069B2 (en) | 2014-08-07 | 2017-01-31 | Pure Storage, Inc. | Failure mapping in a storage array |
US10430079B2 (en) | 2014-09-08 | 2019-10-01 | Pure Storage, Inc. | Adjusting storage capacity in a computing system |
US9350384B2 (en) | 2014-09-30 | 2016-05-24 | International Business Machines Corporation | Hierarchical data compression and computation |
US10430282B2 (en) | 2014-10-07 | 2019-10-01 | Pure Storage, Inc. | Optimizing replication by distinguishing user and system write activity |
US9773007B1 (en) | 2014-12-01 | 2017-09-26 | Pure Storage, Inc. | Performance improvements in a storage system |
US9959299B2 (en) | 2014-12-02 | 2018-05-01 | International Business Machines Corporation | Compression-aware partial sort of streaming columnar data |
US10083131B2 (en) * | 2014-12-11 | 2018-09-25 | Ampere Computing Llc | Generating and/or employing a descriptor associated with a memory translation table |
US9792454B2 (en) * | 2015-01-16 | 2017-10-17 | Protegrity Corporation | Record level data security |
US11947968B2 (en) | 2015-01-21 | 2024-04-02 | Pure Storage, Inc. | Efficient use of zone in a storage device |
US10909078B2 (en) | 2015-02-25 | 2021-02-02 | International Business Machines Corporation | Query predicate evaluation and computation for hierarchically compressed data |
US10082985B2 (en) | 2015-03-27 | 2018-09-25 | Pure Storage, Inc. | Data striping across storage nodes that are assigned to multiple logical arrays |
US10178169B2 (en) | 2015-04-09 | 2019-01-08 | Pure Storage, Inc. | Point to point based backend communication layer for storage processing |
US9792310B2 (en) * | 2015-04-29 | 2017-10-17 | Sap Se | Run index compression |
CN106293493A (zh) * | 2015-05-18 | 2017-01-04 | 广明光电股份有限公司 | 固态硬盘模块动态储存转换层的方法 |
US10140149B1 (en) | 2015-05-19 | 2018-11-27 | Pure Storage, Inc. | Transactional commits with hardware assists in remote memory |
US9940337B2 (en) * | 2015-05-31 | 2018-04-10 | Vmware, Inc. | Predictive probabilistic deduplication of storage |
US9547441B1 (en) | 2015-06-23 | 2017-01-17 | Pure Storage, Inc. | Exposing a geometry of a storage device |
US10380633B2 (en) * | 2015-07-02 | 2019-08-13 | The Nielsen Company (Us), Llc | Methods and apparatus to generate corrected online audience measurement data |
US9697079B2 (en) | 2015-07-13 | 2017-07-04 | International Business Machines Corporation | Protecting data integrity in de-duplicated storage environments in combination with software defined native raid |
US11341136B2 (en) | 2015-09-04 | 2022-05-24 | Pure Storage, Inc. | Dynamically resizable structures for approximate membership queries |
KR20170028825A (ko) | 2015-09-04 | 2017-03-14 | 퓨어 스토리지, 아이앤씨. | 압축된 인덱스들을 사용한 해시 테이블들에서의 메모리 효율적인 스토리지 및 탐색 |
US11269884B2 (en) | 2015-09-04 | 2022-03-08 | Pure Storage, Inc. | Dynamically resizable structures for approximate membership queries |
TWI569279B (zh) * | 2015-10-15 | 2017-02-01 | 財團法人工業技術研究院 | 記憶體保護裝置與方法 |
US9843453B2 (en) | 2015-10-23 | 2017-12-12 | Pure Storage, Inc. | Authorizing I/O commands with I/O tokens |
US9846538B2 (en) | 2015-12-07 | 2017-12-19 | International Business Machines Corporation | Data integrity and acceleration in compressed storage environments in combination with software defined native RAID |
CN105550345B (zh) * | 2015-12-25 | 2019-03-26 | 百度在线网络技术(北京)有限公司 | 文件操作方法和装置 |
US9946462B1 (en) * | 2016-02-15 | 2018-04-17 | Seagate Technology Llc | Address mapping table compression |
US10452297B1 (en) | 2016-05-02 | 2019-10-22 | Pure Storage, Inc. | Generating and optimizing summary index levels in a deduplication storage system |
US10133503B1 (en) | 2016-05-02 | 2018-11-20 | Pure Storage, Inc. | Selecting a deduplication process based on a difference between performance metrics |
US10203903B2 (en) | 2016-07-26 | 2019-02-12 | Pure Storage, Inc. | Geometry based, space aware shelf/writegroup evacuation |
US10545861B2 (en) | 2016-10-04 | 2020-01-28 | Pure Storage, Inc. | Distributed integrated high-speed solid-state non-volatile random-access memory |
US10756816B1 (en) | 2016-10-04 | 2020-08-25 | Pure Storage, Inc. | Optimized fibre channel and non-volatile memory express access |
US10162523B2 (en) | 2016-10-04 | 2018-12-25 | Pure Storage, Inc. | Migrating data between volumes using virtual copy operation |
US10481798B2 (en) | 2016-10-28 | 2019-11-19 | Pure Storage, Inc. | Efficient flash management for multiple controllers |
US10359942B2 (en) | 2016-10-31 | 2019-07-23 | Pure Storage, Inc. | Deduplication aware scalable content placement |
CN106656198B (zh) * | 2016-11-23 | 2020-08-04 | 苏州浪潮智能科技有限公司 | 一种基于lz77的编码方法 |
US10452290B2 (en) | 2016-12-19 | 2019-10-22 | Pure Storage, Inc. | Block consolidation in a direct-mapped flash storage system |
US11550481B2 (en) | 2016-12-19 | 2023-01-10 | Pure Storage, Inc. | Efficiently writing data in a zoned drive storage system |
US11093146B2 (en) | 2017-01-12 | 2021-08-17 | Pure Storage, Inc. | Automatic load rebalancing of a write group |
US10528488B1 (en) | 2017-03-30 | 2020-01-07 | Pure Storage, Inc. | Efficient name coding |
US11403019B2 (en) | 2017-04-21 | 2022-08-02 | Pure Storage, Inc. | Deduplication-aware per-tenant encryption |
US10944671B2 (en) | 2017-04-27 | 2021-03-09 | Pure Storage, Inc. | Efficient data forwarding in a networked device |
US10402266B1 (en) | 2017-07-31 | 2019-09-03 | Pure Storage, Inc. | Redundant array of independent disks in a direct-mapped flash storage system |
US10831935B2 (en) | 2017-08-31 | 2020-11-10 | Pure Storage, Inc. | Encryption management with host-side data reduction |
US10776202B1 (en) | 2017-09-22 | 2020-09-15 | Pure Storage, Inc. | Drive, blade, or data shard decommission via RAID geometry shrinkage |
US10789211B1 (en) | 2017-10-04 | 2020-09-29 | Pure Storage, Inc. | Feature-based deduplication |
US10884919B2 (en) | 2017-10-31 | 2021-01-05 | Pure Storage, Inc. | Memory management in a storage system |
US11144638B1 (en) | 2018-01-18 | 2021-10-12 | Pure Storage, Inc. | Method for storage system detection and alerting on potential malicious action |
US11010233B1 (en) | 2018-01-18 | 2021-05-18 | Pure Storage, Inc | Hardware-based system monitoring |
US10970395B1 (en) | 2018-01-18 | 2021-04-06 | Pure Storage, Inc | Security threat monitoring for a storage system |
US10467527B1 (en) | 2018-01-31 | 2019-11-05 | Pure Storage, Inc. | Method and apparatus for artificial intelligence acceleration |
KR102535828B1 (ko) * | 2018-02-06 | 2023-05-23 | 삼성전자주식회사 | 메모리 컨트롤러 및 상기 메모리 컨트롤러의 동작 방법 |
US11036596B1 (en) | 2018-02-18 | 2021-06-15 | Pure Storage, Inc. | System for delaying acknowledgements on open NAND locations until durability has been confirmed |
US11494109B1 (en) | 2018-02-22 | 2022-11-08 | Pure Storage, Inc. | Erase block trimming for heterogenous flash memory storage devices |
US10430100B2 (en) * | 2018-02-28 | 2019-10-01 | International Business Machines Corporation | Transactional operations in multi-master distributed data management systems |
CN108647157B (zh) * | 2018-03-14 | 2021-10-01 | 深圳忆联信息***有限公司 | 一种基于相变存储器的映射管理方法及固态硬盘 |
US11934322B1 (en) | 2018-04-05 | 2024-03-19 | Pure Storage, Inc. | Multiple encryption keys on storage drives |
US11995336B2 (en) | 2018-04-25 | 2024-05-28 | Pure Storage, Inc. | Bucket views |
US10678433B1 (en) | 2018-04-27 | 2020-06-09 | Pure Storage, Inc. | Resource-preserving system upgrade |
US11385792B2 (en) | 2018-04-27 | 2022-07-12 | Pure Storage, Inc. | High availability controller pair transitioning |
CN110413545B (zh) * | 2018-04-28 | 2023-06-20 | 伊姆西Ip控股有限责任公司 | 存储管理方法、电子设备和计算机程序产品 |
US10678436B1 (en) | 2018-05-29 | 2020-06-09 | Pure Storage, Inc. | Using a PID controller to opportunistically compress more data during garbage collection |
US11436023B2 (en) | 2018-05-31 | 2022-09-06 | Pure Storage, Inc. | Mechanism for updating host file system and flash translation layer based on underlying NAND technology |
US10776046B1 (en) | 2018-06-08 | 2020-09-15 | Pure Storage, Inc. | Optimized non-uniform memory access |
US11281577B1 (en) | 2018-06-19 | 2022-03-22 | Pure Storage, Inc. | Garbage collection tuning for low drive wear |
CN115509961A (zh) * | 2018-06-25 | 2022-12-23 | 慧荣科技股份有限公司 | 实体存储对照表产生装置及方法 |
TWI661302B (zh) * | 2018-06-25 | 2019-06-01 | 慧榮科技股份有限公司 | 實體儲存對照表產生裝置及方法以及電腦程式產品 |
TWI705329B (zh) * | 2018-06-25 | 2020-09-21 | 慧榮科技股份有限公司 | 實體儲存對照表產生裝置及方法以及電腦程式產品 |
US10642689B2 (en) * | 2018-07-09 | 2020-05-05 | Cisco Technology, Inc. | System and method for inline erasure coding for a distributed log structured storage system |
US11133076B2 (en) | 2018-09-06 | 2021-09-28 | Pure Storage, Inc. | Efficient relocation of data between storage devices of a storage system |
US11194759B2 (en) | 2018-09-06 | 2021-12-07 | Pure Storage, Inc. | Optimizing local data relocation operations of a storage device of a storage system |
KR102564774B1 (ko) * | 2018-09-18 | 2023-08-09 | 에스케이하이닉스 주식회사 | 메모리 시스템 혹은 데이터 처리 시스템의 동작을 진단하는 장치 혹은 진단을 통해 신뢰성을 확보하는 방법 |
JP6995723B2 (ja) | 2018-09-19 | 2022-01-17 | キオクシア株式会社 | メモリシステム、ストレージシステム、および制御方法 |
US10846216B2 (en) | 2018-10-25 | 2020-11-24 | Pure Storage, Inc. | Scalable garbage collection |
US11113409B2 (en) | 2018-10-26 | 2021-09-07 | Pure Storage, Inc. | Efficient rekey in a transparent decrypting storage array |
US11199990B2 (en) * | 2018-11-02 | 2021-12-14 | EMC IP Holding Company LLC | Data reduction reporting in storage systems |
CN109783446A (zh) * | 2019-01-04 | 2019-05-21 | 北京百度网讯科技有限公司 | 用于存储数据的方法和装置 |
CN109829489A (zh) * | 2019-01-18 | 2019-05-31 | 刘凯欣 | 一种基于多层特征的文物碎片重组方法及装置 |
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 |
US11588633B1 (en) | 2019-03-15 | 2023-02-21 | Pure Storage, Inc. | Decommissioning keys in a decryption storage system |
US11334254B2 (en) | 2019-03-29 | 2022-05-17 | Pure Storage, Inc. | Reliability based flash page sizing |
US11397674B1 (en) | 2019-04-03 | 2022-07-26 | Pure Storage, Inc. | Optimizing garbage collection across heterogeneous flash devices |
US10990480B1 (en) | 2019-04-05 | 2021-04-27 | Pure Storage, Inc. | Performance of RAID rebuild operations by a storage group controller of a storage system |
US11099986B2 (en) | 2019-04-12 | 2021-08-24 | Pure Storage, Inc. | Efficient transfer of memory contents |
US11487665B2 (en) | 2019-06-05 | 2022-11-01 | Pure Storage, Inc. | Tiered caching of data in a storage system |
US11100092B2 (en) | 2019-06-17 | 2021-08-24 | Bank Of America Corporation | Database tool |
US11269861B2 (en) | 2019-06-17 | 2022-03-08 | Bank Of America Corporation | Database tool |
US11281394B2 (en) | 2019-06-24 | 2022-03-22 | Pure Storage, Inc. | Replication across partitioning schemes in a distributed storage system |
US10936415B2 (en) * | 2019-06-28 | 2021-03-02 | Western Digital Technologies, Inc. | Error correction scheme in flash memory |
US10929046B2 (en) | 2019-07-09 | 2021-02-23 | Pure Storage, Inc. | Identifying and relocating hot data to a cache determined with read velocity based on a threshold stored at a storage device |
US11422751B2 (en) | 2019-07-18 | 2022-08-23 | Pure Storage, Inc. | Creating a virtual storage system |
US11086713B1 (en) | 2019-07-23 | 2021-08-10 | Pure Storage, Inc. | Optimized end-to-end integrity storage system |
US11963321B2 (en) | 2019-09-11 | 2024-04-16 | Pure Storage, Inc. | Low profile latching mechanism |
US11403043B2 (en) | 2019-10-15 | 2022-08-02 | Pure Storage, Inc. | Efficient data compression by grouping similar data within a data segment |
CN112751693B (zh) * | 2019-10-31 | 2022-09-06 | 北京金山云网络技术有限公司 | 分布式存储***的数据处理方法、装置及电子设备 |
US11687418B2 (en) | 2019-11-22 | 2023-06-27 | Pure Storage, Inc. | Automatic generation of recovery plans specific to individual storage elements |
US11341236B2 (en) | 2019-11-22 | 2022-05-24 | Pure Storage, Inc. | Traffic-based detection of a security threat to a storage system |
US11720692B2 (en) | 2019-11-22 | 2023-08-08 | Pure Storage, Inc. | Hardware token based management of recovery datasets for a storage system |
US11645162B2 (en) | 2019-11-22 | 2023-05-09 | Pure Storage, Inc. | Recovery point determination for data restoration in a storage system |
US11651075B2 (en) | 2019-11-22 | 2023-05-16 | Pure Storage, Inc. | Extensible attack monitoring by a storage system |
US11500788B2 (en) | 2019-11-22 | 2022-11-15 | Pure Storage, Inc. | Logical address based authorization of operations with respect to a storage system |
US11755751B2 (en) | 2019-11-22 | 2023-09-12 | Pure Storage, Inc. | Modify access restrictions in response to a possible attack against data stored by a storage system |
US11657155B2 (en) | 2019-11-22 | 2023-05-23 | Pure Storage, Inc | Snapshot delta metric based determination of a possible ransomware attack against data maintained by a storage system |
US11941116B2 (en) | 2019-11-22 | 2024-03-26 | Pure Storage, Inc. | Ransomware-based data protection parameter modification |
US11675898B2 (en) | 2019-11-22 | 2023-06-13 | Pure Storage, Inc. | Recovery dataset management for security threat monitoring |
US11615185B2 (en) | 2019-11-22 | 2023-03-28 | Pure Storage, Inc. | Multi-layer security threat detection for a storage system |
US11720714B2 (en) | 2019-11-22 | 2023-08-08 | Pure Storage, Inc. | Inter-I/O relationship based detection of a security threat to a storage system |
US11520907B1 (en) | 2019-11-22 | 2022-12-06 | Pure Storage, Inc. | Storage system snapshot retention based on encrypted data |
US11625481B2 (en) | 2019-11-22 | 2023-04-11 | Pure Storage, Inc. | Selective throttling of operations potentially related to a security threat to a storage system |
CN111506517B (zh) * | 2020-03-05 | 2022-05-17 | 杭州电子科技大学 | 一种基于访问局部性的闪存页级地址映射方法及其*** |
CN113419975B (zh) * | 2021-06-11 | 2023-03-17 | 联芸科技(杭州)股份有限公司 | 存储器的控制***及地址映射方法和地址映射装置 |
CN113608701A (zh) * | 2021-08-18 | 2021-11-05 | 合肥大唐存储科技有限公司 | 一种存储***中数据管理方法和固态硬盘 |
US11740820B1 (en) * | 2022-05-11 | 2023-08-29 | Netapp, Inc. | Block allocation methods and systems in a networked storage environment |
CN115185858B (zh) * | 2022-09-09 | 2023-01-24 | 北京特纳飞电子技术有限公司 | 地址映射表的处理方法、装置和存储设备 |
CN116701271B (zh) * | 2023-06-13 | 2023-11-17 | 上海奎芯集成电路设计有限公司 | Ucie适配层的兼容多种批长度的数据传输模块和方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5301297A (en) | 1991-07-03 | 1994-04-05 | Ibm Corp. (International Business Machines Corp.) | Method and means for managing RAID 5 DASD arrays having RAID DASD arrays as logical devices thereof |
US7424467B2 (en) | 2004-01-26 | 2008-09-09 | International Business Machines Corporation | Architecture for an indexer with fixed width sort and variable width sort |
US7424482B2 (en) | 2004-04-26 | 2008-09-09 | Storwize Inc. | Method and system for compression of data for block mode access storage |
US7920628B2 (en) | 2005-07-29 | 2011-04-05 | Broadcom Corporation | Noise filter for video compression |
JP4662548B2 (ja) * | 2005-09-27 | 2011-03-30 | 株式会社日立製作所 | スナップショット管理装置及び方法並びにストレージシステム |
US8180744B2 (en) | 2008-03-05 | 2012-05-15 | Hewlett-Packard Development Company, L.P. | Managing storage of data in a data structure |
US9678879B2 (en) | 2008-05-29 | 2017-06-13 | Red Hat, Inc. | Set partitioning for encoding file system allocation metadata |
US8626723B2 (en) * | 2008-10-14 | 2014-01-07 | Vmware, Inc. | Storage-network de-duplication |
US7921086B1 (en) * | 2008-12-23 | 2011-04-05 | Symantec Corporation | Deterministic space management in deduplication applications |
JP4869368B2 (ja) * | 2009-03-12 | 2012-02-08 | 株式会社東芝 | ストレージ装置及び仮想化装置 |
US8793467B2 (en) | 2011-09-30 | 2014-07-29 | Pure Storage, Inc. | Variable length encoding in a storage system |
-
2011
- 2011-09-30 US US13/250,579 patent/US8793467B2/en active Active
-
2012
- 2012-09-27 WO PCT/US2012/057541 patent/WO2013049339A1/en active Application Filing
- 2012-09-27 CN CN201280053506.8A patent/CN104025010B/zh active Active
- 2012-09-27 AU AU2012315976A patent/AU2012315976A1/en not_active Abandoned
- 2012-09-27 EP EP12779216.6A patent/EP2761420B1/en active Active
- 2012-09-27 JP JP2014533314A patent/JP6124902B2/ja active Active
-
2014
- 2014-06-23 US US14/312,093 patent/US8954710B2/en active Active
Cited By (50)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10228865B1 (en) | 2010-09-15 | 2019-03-12 | Pure Storage, Inc. | Maintaining a target number of storage devices for variable I/O response times in a storage system |
US10156998B1 (en) | 2010-09-15 | 2018-12-18 | Pure Storage, Inc. | Reducing a number of storage devices in a storage system that are exhibiting variable I/O response times |
US10126982B1 (en) | 2010-09-15 | 2018-11-13 | Pure Storage, Inc. | Adjusting a number of storage devices in a storage system that may be utilized to simultaneously service high latency operations |
US9684460B1 (en) | 2010-09-15 | 2017-06-20 | Pure Storage, Inc. | Proactively correcting behavior that may affect I/O performance in a non-volatile semiconductor storage device |
US10180879B1 (en) | 2010-09-28 | 2019-01-15 | Pure Storage, Inc. | Inter-device and intra-device protection data |
US11797386B2 (en) | 2010-09-28 | 2023-10-24 | Pure Storage, Inc. | Flexible RAID layouts in a storage system |
US9811551B1 (en) | 2011-10-14 | 2017-11-07 | Pure Storage, Inc. | Utilizing multiple fingerprint tables in a deduplicating storage system |
US10061798B2 (en) | 2011-10-14 | 2018-08-28 | Pure Storage, Inc. | Method for maintaining multiple fingerprint tables in a deduplicating storage system |
US9792045B1 (en) | 2012-03-15 | 2017-10-17 | Pure Storage, Inc. | Distributing data blocks across a plurality of storage devices |
US10089010B1 (en) | 2012-03-15 | 2018-10-02 | Pure Storage, Inc. | Identifying fractal regions across multiple storage devices |
US10284367B1 (en) | 2012-09-26 | 2019-05-07 | Pure Storage, Inc. | Encrypting data in a storage system using a plurality of encryption keys |
US9880779B1 (en) | 2013-01-10 | 2018-01-30 | Pure Storage, Inc. | Processing copy offload requests in a storage system |
US9891858B1 (en) | 2013-01-10 | 2018-02-13 | Pure Storage, Inc. | Deduplication of regions with a storage system |
US11853584B1 (en) | 2013-01-10 | 2023-12-26 | Pure Storage, Inc. | Generating volume snapshots |
US10013317B1 (en) | 2013-01-10 | 2018-07-03 | Pure Storage, Inc. | Restoring a volume in a storage system |
US10263770B2 (en) | 2013-11-06 | 2019-04-16 | Pure Storage, Inc. | Data protection in a storage system using external secrets |
US11899986B2 (en) | 2013-11-06 | 2024-02-13 | Pure Storage, Inc. | Expanding an address space supported by a storage system |
US10191857B1 (en) | 2014-01-09 | 2019-01-29 | Pure Storage, Inc. | Machine learning for metadata cache management |
US9804973B1 (en) | 2014-01-09 | 2017-10-31 | Pure Storage, Inc. | Using frequency domain to prioritize storage of metadata in a cache |
US11847336B1 (en) | 2014-03-20 | 2023-12-19 | Pure Storage, Inc. | Efficient replication using metadata |
US10037440B1 (en) | 2014-06-03 | 2018-07-31 | Pure Storage, Inc. | Generating a unique encryption key |
US9779268B1 (en) | 2014-06-03 | 2017-10-03 | Pure Storage, Inc. | Utilizing a non-repeating identifier to encrypt data |
US11841984B1 (en) | 2014-06-03 | 2023-12-12 | Pure Storage, Inc. | Encrypting data with a unique key |
US9817608B1 (en) | 2014-06-25 | 2017-11-14 | Pure Storage, Inc. | Replication and intermediate read-write state for mediums |
US10296469B1 (en) | 2014-07-24 | 2019-05-21 | Pure Storage, Inc. | Access control in a flash storage system |
US9864761B1 (en) | 2014-08-08 | 2018-01-09 | Pure Storage, Inc. | Read optimization operations in a storage system |
US11811619B2 (en) | 2014-10-02 | 2023-11-07 | Pure Storage, Inc. | Emulating a local interface to a remotely managed storage system |
US10164841B2 (en) | 2014-10-02 | 2018-12-25 | Pure Storage, Inc. | Cloud assist for storage systems |
US10114574B1 (en) | 2014-10-07 | 2018-10-30 | Pure Storage, Inc. | Optimizing storage allocation in a storage system |
US10254964B1 (en) | 2014-11-24 | 2019-04-09 | Pure Storage, Inc. | Managing mapping information in a storage system |
US9727485B1 (en) | 2014-11-24 | 2017-08-08 | Pure Storage, Inc. | Metadata rewrite and flatten optimization |
US9977600B1 (en) | 2014-11-24 | 2018-05-22 | Pure Storage, Inc. | Optimizing flattening in a multi-level data structure |
US10235065B1 (en) | 2014-12-11 | 2019-03-19 | Pure Storage, Inc. | Datasheet replication in a cloud computing environment |
US10248516B1 (en) | 2014-12-11 | 2019-04-02 | Pure Storage, Inc. | Processing read and write requests during reconstruction in a storage system |
US11775392B2 (en) | 2014-12-11 | 2023-10-03 | Pure Storage, Inc. | Indirect replication of a dataset |
US9864769B2 (en) | 2014-12-12 | 2018-01-09 | Pure Storage, Inc. | Storing data utilizing repeating pattern detection |
US11803567B1 (en) | 2014-12-19 | 2023-10-31 | Pure Storage, Inc. | Restoration of a dataset from a cloud |
US10296354B1 (en) | 2015-01-21 | 2019-05-21 | Pure Storage, Inc. | Optimized boot operations within a flash storage array |
US11886707B2 (en) | 2015-02-18 | 2024-01-30 | Pure Storage, Inc. | Dataset space reclamation |
US9710165B1 (en) | 2015-02-18 | 2017-07-18 | Pure Storage, Inc. | Identifying volume candidates for space reclamation |
US10310740B2 (en) | 2015-06-23 | 2019-06-04 | Pure Storage, Inc. | Aligning memory access operations to a geometry of a storage device |
US10191662B2 (en) | 2016-10-04 | 2019-01-29 | Pure Storage, Inc. | Dynamic allocation of segments in a flash storage system |
US10185505B1 (en) | 2016-10-28 | 2019-01-22 | Pure Storage, Inc. | Reading a portion of data to replicate a volume based on sequence numbers |
US11275681B1 (en) | 2017-11-17 | 2022-03-15 | Pure Storage, Inc. | Segmented write requests |
US11782614B1 (en) | 2017-12-21 | 2023-10-10 | Pure Storage, Inc. | Encrypting data to optimize data reduction |
US11869586B2 (en) | 2018-07-11 | 2024-01-09 | Pure Storage, Inc. | Increased data protection by recovering data from partially-failed solid-state devices |
US11775189B2 (en) | 2019-04-03 | 2023-10-03 | Pure Storage, Inc. | Segment level heterogeneity |
US12050689B2 (en) | 2021-08-23 | 2024-07-30 | Pure Storage, Inc. | Host anomaly-based generation of snapshots |
US12050683B2 (en) | 2021-10-20 | 2024-07-30 | Pure Storage, Inc. | Selective control of a data synchronization setting of a storage system based on a possible ransomware attack against the storage system |
US12045487B2 (en) | 2022-08-01 | 2024-07-23 | Pure Storage, Inc. | Preserving data deduplication in a multi-tenant storage system |
Also Published As
Publication number | Publication date |
---|---|
AU2012315976A1 (en) | 2014-05-08 |
EP2761420A1 (en) | 2014-08-06 |
US20130086353A1 (en) | 2013-04-04 |
US20140304489A1 (en) | 2014-10-09 |
US8954710B2 (en) | 2015-02-10 |
WO2013049339A1 (en) | 2013-04-04 |
CN104025010A (zh) | 2014-09-03 |
US8793467B2 (en) | 2014-07-29 |
EP2761420B1 (en) | 2018-08-22 |
JP6124902B2 (ja) | 2017-05-10 |
JP2014532227A (ja) | 2014-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104025010B (zh) | 存储***中的可变长度编码 | |
USRE49011E1 (en) | Mapping in a storage system | |
CN103827806B (zh) | 闪存阵列中的逻辑扇区映射 | |
US20150067286A1 (en) | Garbage collection in a storage system | |
US20200117362A1 (en) | Erasure coding content driven distribution of data blocks | |
JP6807395B2 (ja) | プロセッサ・グリッド内の分散データ重複排除 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1198065 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1198065 Country of ref document: HK |