CN105612491A - 分布式存储架构中基于具有密集树结构的元数据的盘区的管理 - Google Patents
分布式存储架构中基于具有密集树结构的元数据的盘区的管理 Download PDFInfo
- Publication number
- CN105612491A CN105612491A CN201480056037.4A CN201480056037A CN105612491A CN 105612491 A CN105612491 A CN 105612491A CN 201480056037 A CN201480056037 A CN 201480056037A CN 105612491 A CN105612491 A CN 105612491A
- Authority
- CN
- China
- Prior art keywords
- entry
- metadata
- data
- volume
- 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.)
- Pending
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- 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/211—Schema design and management
-
- 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/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- 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/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- 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
-
- 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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
-
- 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/0662—Virtualisation aspects
- G06F3/0665—Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
-
- 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/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- 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/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- 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
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)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
在一个实施例中,被耦接至一个或多个存储设备的节点执行了具有卷层的存储(I/O)栈。所述卷层对卷元数据进行管理,所述卷元数据具体实现为从逻辑单元(LUN)的偏移量到与长度在一个或多个存储设备上的存储位置相关联的盘区键值的映射。所述卷元数据被保持为密集树元数据结构,所述密集树元数据结构表示了时间上连续的点。所述密集树元数据结构具有多个级,其中,所述密集树元数据结构的顶级表示较新的卷元数据变化,并且所述密集树元数据结构中相继降低的级表示较旧的数据。所述节点通过在所述密集树元数据结构中自顶级向下级搜索来访问卷元数据变化的最新版本。
Description
技术领域
本公开涉及存储***,并且更具体地涉及存储***中元数据的组织,该存储***被配置成提供群集的分布式存储架构。
背景技术
多个存储***可以被相互连接而形成群集,并且被配置成提供与储存在耦接至***的存储设备上的存储容器的组织相关的存储服务。存储***群集可以被进一步配置成根据信息递送的客户端/服务器模型来运行,以因此允许一个或多个客户端(主机)访问存储容器。存储设备可以具体实现为固态硬盘(Solid-StateDrives(SSDs)),诸如存储设备,存储容器可以具体实现为文件或逻辑单元(LogicalUnits(LUNs))。每个存储容器可以具体实现为一组数据结构,诸如为存储容器储存数据的数据块以及对存储容器的数据进行描述的元数据块。例如,元数据可以描述(例如识别)数据在整个群集中的位置。
由主机所访问的存储容器的数据可以被储存在群集中的任一个存储***上;此外,数据的位置可以在整个群集中改变。因此,存储***可以对描述存储容器数据在整个群集中的位置的元数据进行保持。然而,每次存储容器数据的位置改变时更新元数据通常比较繁琐。避免这种繁琐更新的一种方法是将元数据保持在能够被有效访问的数据结构中以解决数据位置问题。因此,希望提供一种能够有效地确定存储容器数据在存储***群集中的位置的元数据组织。此外,希望提供一种“友好的”元数据组织,即利用了被配置成储存元数据的存储设备的性能。
附图说明
通过参照以下描述并结合附图,本文实施例的上述优势和进一步优势将能够被更好地理解,附图中相似的参考标记指示了相同或功能性相似的元件,其中,
图1是多个节点相互连接成群集的框图;
图2是一个节点的框图;
图3是节点的存储输入/输出(I/O)栈的框图;
图4示出了存储I/O栈的写路径;
图5示出了存储I/O栈的读路径;
图6为各种卷元数据条目的框图;
图7为密集树元数据结构的框图;
图8为密集树元数据结构的顶级框图;
图9示出了密集树元数据结构的级间映射;
图10示出了根据写请求将卷元数据条目***密集树元数据结构中的工作流;
图11是根据写请求将卷元数据条目***密集树元数据结构中的简化过程示例;
图12示出了根据读请求在密集树元数据结构中搜索一个或多个卷元数据条目的工作流;
图13示出了根据读请求在密集树元数据结构中搜索一个或多个卷元数据条目的简化过程示例。
具体实施方式
本文所描述的实施例针对于由在群集的一个或多个节点上执行的存储输入/输出(I/O)栈所管理的元数据组织。由卷层所管理的元数据(即卷元数据)被示例性地具体化为从可由主机访问的地址(即逻辑块地址(LogicalBlockAddresses(LBAs)))到由存储I/O栈的盘区(extent)存储层所保持的持久盘区键值的映射。每个盘区键值是与盘区的存储位置相关联的唯一的群集宽度标识符,该标识符是长度可变的数据块,该数据块可以由指向LUN的LBA范围的一个或多个写请求集合而成。在一个实施例中,卷层将卷元数据组织成映射数据结构,即密集树(densetree)元数据结构,其表示了时间中连续的点以允许对元数据的有效访问。
示例性地,密集树元数据结构被组织成多级密集树,其中,顶级表示最新的卷元数据变化,并且相继降低的级表示更早的变化。可以从密集树的顶级开始并向下沿着相继降低的级来搜索变化的最新版本。密集树的每一级可以包括用于储存卷元数据的固定尺寸的记录或条目,即卷元数据条目。卷元数据条目提供了从主机可访问的LBAs到盘区键值的映射。示例性地,密集树的顶级在存储器中被保持为能够由偏移量进行索引的平衡树。密集树的每级在一个或多个存储设备上进一步地被保持为卷元数据条目的压缩数组。每个卷元数据条目可以是体现了多个类型中之一的描述符,包括数据条目、索引条目以及孔条目(holeentry)。数据条目被配置成映射(偏移量、长度)至盘区的盘区键值,而索引条目被配置成映射(偏移量、长度)至密集树的下一个更低级处的元数据页面的页面键值。示例性地,索引条目用作密集树的级间链接。孔条目表示在(偏移量、长度)处的冲孔操作(holepunchingoperation)。
描述
存储群集
图1是多个节点200相互连接而成的群集100的框图,并且该多个节点200被配置成提供与存储设备上的信息组织相关的存储服务。节点200可以通过群集互连结构110来相互连接,并且节点200包括功能部件,该功能部件彼此配合以提供可以被布置在存储区域网(StorageAreaNetwork(SAN))中的群集100的分布式存储架构。如这里所描述的,每个节点200的部件包括硬件和软件功能,其能够使节点通过计算机网络130连接至一个或多个主机120,以及通过存储互连140连接至存储设备的一个或多个存储阵列150,以由此根据该分布式存储架构来提供存储服务。
每个主机120可以具体地实现为通用计算机,该通用计算机被配置成根据信息递送的客户端/服务器模型来与任一个节点200相互作用。即客户端(主机)可以请求节点的服务,并且节点可以通过在网络130上交换数据包来返回主机所请求服务的结果。当访问诸如文件或目录的存储容器形式的节点信息时,主机可以发布包括基于文件的访问协议的数据包,诸如基于传输控制协议/互联网协议(TransmissionControlProtocol/InternetProtocol(TCP/IP))的网络文件协议(NetworkFileSystem(NFS))。然而,在一个实施例中,当访问诸如逻辑单元(LUNs)的存储容器形式的信息时,主机120示例性地发布了包括基于块的访问协议的数据包,诸如基于TCP(iSCSI(InternetSmallComputerSystemInterface))的封装小型计算机***接口(SmallComputerSystemsInterface(SCSI))协议,以及基于FC(FCP)的封装SCSI。值得注意的是,节点200中的任一个可以对指向群集100上存储容器的请求提供服务。
图2是一个节点200的框图,其示例性地具体实现为具有一个或多个中央处理单元(CentralProcessingUnits(CPUs))210的存储***,该一个或多个中央处理单元210通过存储器总线215被耦接至存储器220。CPU210还通过***互连270被耦接至网络适配器230、一个或多个存储控制器240、群集互连接口250以及非易失性随机存储器(Non-VolatileRandomAccessMemory(NVRAM280))。网络适配器230可以包括一个或多个端口,该一个或多个端口适于通过计算机网络130将节点200耦接至一个或多个主机120,该计算机网络130可以包括通过公用网络(互联网)或局域网来实现的点到点链接、广域网、虚拟专用网络。网络适配器230因此包括将节点连接至网络130所需的机械的、电的和信号电路,该电路示例性地具体实现为以太网或光纤通道(FibreChannel(FC))网络。
存储器220可包括能够由CPU210寻址的存储器位置,以用来存储与本文所述的实施例相关的软件程序和数据结构。CPU210可以依次包括处理元件和/或逻辑电路,逻辑电路被配置成执行软件程序,诸如存储输入/输出(I/O)栈300,并且操控数据结构。示例性地,存储I/O栈300可以被实现为一组用户模式的进程,该用户模式的进程可以被分解成多个线程。操作***内核224的部分典型地驻留在存储器220中(芯内),并且由处理元件(即CPU210)执行,尤其通过调用操作来组织节点以支持由节点(并且特别地为存储I/O栈300)实现的存储服务。适合的操作***内核224可以包括通用操作***(诸如系列或Microsoft系列的操作***)或具有可配置功能的操作***(诸如微内核和嵌入式内核)。然而,在这里所描述的实施例中,操作***内核示例性地为操作***。对于本领域的技术人员显而易见的是,其他处理装置和存储装置(包括不同的计算机可读介质)可被用于储存和执行与本文实施例相关的程序指令。
每个存储控制器240与存储I/O栈300在节点200上配合执行对主机120所请求信息的访问。该信息优选地被储存在存储设备上,诸如固态硬盘(SSDs)260,该存储设备示例性地具体实现为存储阵列150的闪存设备。在一个实施例中,闪存设备可以基于NAND闪存部件,例如单层单元(Single-Layer-Cell(SLC))闪存、多层单元(Multi-Layer-Cell(MLC))闪存或三层单元(Triple-Layer-Cell(TLC))闪存,虽然本领域的技术人员将理解其他面向块的设备、非易失性设备、固态电子设备(例如,基于存储类存储器部件的驱动器)可以有利地与本文所描述的实施例共同使用。因此,存储设备可以是或可以不是面向块的(即以块访问)。存储控制器240包括一个或多个端口,该一个或多个端口使得I/O接口电路通过存储互连140耦接至SSDs260。可替代地,可以使用其他点到点I/O互连装置,诸如传统的串行ATA(SATA)拓扑或PCI拓扑。***互连270还可以将节点200耦接至本地服务存储设备248(诸如SSD),并且被配置成本地储存与群集相关的配置信息,例如,群集数据库(Database(DB))244,该配置信息可以被复制到群集100中的其他节点200。
群集互连接口250可以包括一个或多个端口,该一个或多个端口适于将节点200耦接至群集100的其他一个或多个节点。在一个实施例中,以太网可以被用作群集协议和互连结构介质,虽然本领域的技术人员将理解本文所描述的实施例中可以使用其他类型的协议和互连,诸如无线宽带。NVRAM280可以包括备用电池或其他内建的最后状态保持能力(例如,非易失性半导体存储器,诸如存储类存储器),其能够根据节点故障和群集环境来保持数据。示例性地,NVRAM280的部分可以被配置为一个或多个非易失性日志(Non-VolatileLogs(NVLogs285)),该一个或多个非易失性日志被配置成暂时地记录(“日志记录”)接受自主机120的I/O请求,诸如写请求。
存储I/O栈
图3为存储I/O栈300的框图,该存储I/O栈300可被有利地与本文所描述的一个或多个实施例共同使用。存储I/O栈300包括多个软件模块或层,该软件模块或层与节点200的其他功能部件相互协作以提供群集100的分布式存储架构。在一个实施例中,分布式存储架构显示了抽象的单个存储容器,即整个群集100的节点200中所有存储阵列150被组织成一个大型存储池。换言之,该架构在整个群集中对存储(即阵列150的SSDs260)进行整合,以使能LUNs的存储。之后,可以通过将节点200添加至群集100来相继地调整存储能力和性能。
示例性地,存储I/O栈300包括管理层310、协议层320、持久层330、卷层340、盘区存储层350、独立磁盘冗余阵列(RedundantArrayofIndependentDisks(RAID))层360、存储层365和与消息传送内核370互连的NVRAM(储存NVlogs)“层”。消息传送内核370可以提供基于消息的(或基于事件的)调度模型(例如,异步调度),该调度模型将消息用作层间工作交换(即传递)的基本单元。由消息传送内核所提供的适合的消息传递机制用于在存储I/O栈300的层间传递信息,该消息传递机制可以包括(例如用于节点内通信):ⅰ)在线程池上执行的消息,ⅱ)在存储I/O栈中运行的单线程上执行的消息,ⅲ)使用进程通信(InterProcessCommunication(IPC))机制的消息以及,例如用于节点内通信:依照功能传输实现来使用远程过程调用(RemoteProcedureCall(RPC))机制的消息。可替代地,可以通过使用基于线程的或基于栈的执行模型来实现I/O栈。在一个或多个实施例中,消息内核370将来自于操作***内核224的进程资源进行分配以执行消息。每个存储I/O栈可以被实现为执行一个或多个线程(例如,在内核或用户空间中)的一个或多个实例(即进程),该一个或多个实例对层间传递的消息进行处理以致该消息为层的块操作或非块操作提供同时性。
在一个实施例中,通过根据预定协议(诸如iSCSI和FCP)来交换被配置成I/O请求的离散帧或数据包,协议层320可以在网络130上与主机120通信。I/O请求(例如,读或写请求)可以指向LUN并且包括I/O参数,诸如,尤其是LUN标识符(Identifier(ID))、LUN的逻辑块地址(LogicalBlockAddress(LBA))、长度(即数据量)以及写请求情况下的写数据。协议层320接收I/O请求并且将该I/O请求转发至持久层330,持久层330将该请求记录到持久性回写式高速缓存380,该持久性回写式高速缓存380示例性地具体实现为其内容可以被随机替换的日志,例如,在并非仅为串行方式的某种随机访问替换策略下,并且通过协议层320向主机120返回确认。在一个实施例中,仅修改LUN的I/O请求(例如写请求)被记录。值得注意的是,I/O请求可以被记录在接收I/O请求的节点处,或在替代性的实施例中,根据功能传输实现,I/O请求可以被记录在另一个节点处。
示例性地,专用日志可以由存储I/O栈300的各个层保持。例如,专用日志335可以由持久层330保持,以将I/O请求的I/O参数记录为等价内部(即存储I/O栈)参数,例如,卷ID、偏移量或长度。在写请求的情况下,持久层330还可以与NVRAM280协作以执行被配置成储存与写请求相关联的写数据的回写式高速缓存380。在一个实施例中,回写式高速缓存可以被构造为日志。值得注意的是,写请求的写数据可以被物理地储存在高速缓存380中,以致日志335包含与写数据相关联的参考数据。本领域的技术人员将要理解,数据结构的其他变形可以被用于将写数据储存或保持在NVRAM中,包括没有日志的数据结构。在一个实施例中,回写式高速缓存的副本还可以被保持在存储器220中,以便于将存储器访问指向存储控制器。在其他实施例中,可以在主机120处或在接收节点处,根据对储存在高速缓存和群集处的数据间的一致性进行保持的协议来实现高速缓存。
在一个实施例中,管理层310可以将LUN分配给多个卷,每个卷可以被划分成多个区域(例如,被分配成互不相连的的块地址范围),每个区域具有被储存为阵列150上的多个条带的一个或多个分段。节点200中的多个卷因此可以为单个LUN服务,即LUN内的每个卷服务于不同的LBA范围(即偏移量范围)或LUN内的一组范围。因此,协议层320可以实现卷映射技术,以识别I/O请求所指向的卷(即服务于I/O请求参数所指示的偏移量范围的卷)。示例性地,群集数据库244可以被配置成对多个卷中的每一个的一个或多个关联项(例如,键值值对)进行保持,例如,LUNID和一个卷之间的关联项,以及该卷和管理该卷的节点的节点ID之间的关联项。管理层310还可以与数据库244协作以创建(或删除)与LUN相关联的一个或多个卷(例如,在数据库244中创建卷ID/LUN键值值对)。通过使用LUNID和LBA(或LBA范围),卷映射技术可以提供卷ID(例如,使用群集数据库中合适的关联项),该卷ID对服务于指向请求的卷的卷和节点进行识别,以及将LBA(或LBA范围)转移到卷内的某个偏移和长度中。具体地,卷ID被用于对管理与LBA或LBA范围相关联的卷元数据的卷层实例进行确定。如上所述,协议层320可以将I/O请求(即卷ID、偏移量和长度)传递至持久层330,持久层330可以基于卷层ID使用功能传输(节点间)实现来将I/O请求转发至在群集中节点上执行的合适的卷层实例。
在一个实施例中,卷层340可以例如通过保持主机可见容器的状态(诸如LUN的范围)和实现数据管理功能(诸如为与管理层310协作的LUNs创建快照和克隆)来管理卷元数据。卷元数据示例性地具体实现为从LUN地址(即LBAs)到持久盘区键值的芯内映射(in-coremapping),持久盘区键值是与群集宽度存储容器的盘区键值空间内用于盘区的SSD存储位置相关联的唯一的群集宽度IDs。即,盘区键值可以被用于检索位于与该盘区键值相关联的SSD存储位置处的盘区的数据。可替代地,群集中可以存在多个存储容器,其中,每个存储容器具有其自身的盘区键值空间,例如,管理层310在存储容器之间提供盘区的分布所在的空间。盘区是可变长度的数据快,该数据块提供了SSDs上的存储单元,并且不需要在任何特定的边界上对齐,即该数据块可以是字节对齐的。因此,盘区可以是来自多个写请求的写数据的聚合,以保持这种对齐。示例性地,卷层340可以将转发请求(例如,表征请求的信息或参数)以及卷元数据的变化记录在由卷层340所保持的专用日志345中。之后,可以根据将芯内元数据储存在阵列150上的检查点(例如,同步)操作,来将卷层日志345的内容写入存储阵列150。即检查点操作(检查点)确保了当在芯内处理元数据时,元数据的一致状态被提交给存储阵列150(即被储存在存储阵列150上);日志条目的引退确保了与元数据检查点同步的卷层日志345中所累积的条目被提交给存储阵列150,例如通过引退那些在检查点之前所累积的日志条目。在一个或多个实施例中,检查点和日志条目的引退可以是数据驱动的、周期性的或数据驱动与周期性的。
在一个实施例中,盘区存储层350负责(例如,响应于转发的写请求)在SSDs260上(即在存储阵列150上)的存储之前储存盘区并且负责将盘区键值提供给卷层340。盘区存储层350还负责(例如,响应于转发的读请求)通过使用盘区键值来检索数据(例如,现有的盘区)。盘区存储层350可以负责在存储之前对盘区执行去重复和压缩。盘区存储层350可以对从盘区键值到SSD存储位置(例如,在阵列150的SSD260上的偏移量)的芯内映射(例如,具体实现为散列表)进行保持。盘区存储层350还可以对累积所请求的“放入”和“删除”操作(即从其他层向盘区存储层发布的盘区写请求和删除请求)的条目的专用日志355进行保持,其中,这些操作改变了芯内映射(即散列表条目)。之后,可以根据“模糊”检查点390(即具有被记录在一个或多个日志文件中的增量变化的检查点),来将芯内映射和盘区存储层日志355的内容写入存储阵列150,其中,所选的芯内映射(小于映射总数)以不同的间隔(例如,由芯内映射的变化量、日志355的尺寸阈值的变化量所驱动的,或周期性地)被提交给阵列150。值得注意的是,一旦所有的芯内映射已经被提交以包括被记录在日志355的累积条目中的变化,日志355中的累积条目就可以被引退。
在一个实施例中,RAID层360可以将存储阵列150中的SSDs206组织成一个或多个RAID组(例如,SSDs集),该一个或多个RAID组通过在每个RAID组的给定数量的SSDs260上写入具有冗余信息(即,相对于条带数据而言合适的奇偶校验信息)的数据“条带”,来增强阵列上盘区存储的可靠性和完整性。RAID层360还可以例如根据多个连续范围的写操作来储存多个条带(例如,具有足够深度的条带),以致减少因这些操作而可能在SSDs中发生的数据重新分配(即内部闪存块管理)。
在一个实施例中,存储层365实现了存储I/O驱动器,该存储I/O驱动器可以和与操作***内核224协作的硬件(例如,存储控制器和群集接口)直接地通信,诸如Linux虚拟功能I/O(LinuxVirtualFunctionI/O(VFIO))驱动器。
写路径
图4示出了用于处理I/O请求(例如,SCSI写请求410)的存储I/O栈300的I/O(例如,写)路径400。写请求410可以由主机120发布并且指向储存在群集100的存储阵列150上的LUN。示例性地,协议层320通过解码420(例如,解析和提取)写请求的字段(例如LUNID、LBA和长度(在413处示出)以及写数据414来接收与处理写请求。协议层320可以将来自解码420的结果422用于卷映射技术430(上文所述),该卷映射技术将写请求的LUNID和LBA范围(即等效的偏移量和长度)转移至负责管理LBA范围的卷元数据的群集100中合适的卷层实例(即卷ID(卷445))。在一个可替代的实施例中,持久层330可以实现上述的卷映射技术430。协议层之后将结果432(例如,卷ID、长度(以及写数据))传递至持久层330,持久层330将请求记录在持久层日志335中并且通过协议层320向主机120返回确认。持久层330可以将来自于一个或多个写请求的写数据414聚合并组织到新的盘区470中,并且在该新的盘区上执行散列计算(即散列函数)以根据盘区散列技术474生成散列值472。
持久层330之后可以将具有聚合写数据(包括例如卷ID、偏移量和长度)的写请求作为消息的参数434传递至合适的卷层实例。在一个实施例中,传递参数434的消息(由持久层接收)可以通过功能传输机制(例如,用于节点间通信的RPC)被重新指向另一个节点。可替代地,传递参数434的消息可以通过IPC机制(例如,用于节点间通信的消息线程)被重新指向另一个节点。
在一个或多个实施例中,提供了桶映射技术476,该桶映射技术476将散列值472转移至负责储存新盘区470的合适的盘区存储层的实例(例如,盘区存储实例478)。值得注意的是,可以在存储I/O栈的位于盘区存储层之上的任何层中执行桶映射技术。在一个实施例中,例如,可以在持久层330、卷层340、或管理群集宽度信息的层(诸如群集层(未示出))中实施桶映射技术。因此,持久层330、卷层340或群集层可以包含计算机可执行指令,该计算机可执行指令由CPU210执行以实现对这里所描述的桶映射技术476的实施操作。之后,持久层330可以将散列值472和新的盘区470传递至合适的卷层实例,并且通过盘区储存放入操作(extentstoreputoperation)将散列值472和新的盘区470置于合适的盘区存储实例上。盘区散列技术474可以包括大致均匀的散列函数,以确保任何随机的待写入盘区落入任何盘区存储实例478中的机会可以大致相等,即基于可用的资源,散列桶被分布在群集100的多个盘区储存实例上。因此,桶映射技术476提供了群集节点200上的写操作(以及对称地读操作)的负载平衡,同时也平衡了群集的SSDs206中的闪存损耗。
响应于放入操作,盘区存储实例可以对散列值472进行处理以执行盘区元数据选择技术480,该盘区元数据选择技术480:ⅰ)从盘区存储实例478内的一组散列表(示例性地为芯内的散列表)中选择合适的散列表482(例如,散列表482a),以及ⅱ)从散列值472中提取散列表索引484以索引所选择的散列表,并且查找具有盘区键值618的表条目,该盘区键值618标识了盘区在SSD260上的存储位置490。因此,盘区存储层350包含计算机可执行指令,该计算机可执行指令被CPU210执行以实施本申请所描述的盘区元数据选择技术。如果找到了具有匹配盘区键值的表条目,则盘区键值618所映射的SSD位置490被用于从SSD检索现有的盘区(未示出)。之后,将该现有的盘区与新的盘区470进行比较以确定它们的数据是否相同。如果数据是相同的,则新的盘区470已经被储存在SSD260上,并且存在去重复机会(被记为去重复452)以使得无需写入数据的另一个副本。因此,表条目中用于现有盘区的引用计数(未示出)增大,并且现有盘区的盘区键值618被传递至合适的卷层实例用于储存在密集树元数据结构(例如,密集树700a)的条目(被记为卷元数据条目600)中,使得盘区键值618与卷445的偏移量范围440(例如,偏移量范围440a)相关联。
然而,如果现有盘区的数据与新盘区470的数据不相同,则会发生冲突,并且确定性算法被调用以按照需要连续地生成映射至同一个桶的多个新候选盘区键值(未示出),以提供去重复452或产生还没有被储存在盘区存储实例中的盘区键值。值得注意的是,可以根据盘区元数据选择技术480,通过新候选盘区键值来选出另一个散列表(例如,散列表482n)。在不存在去重复机会的情况下(即盘区还没有被储存),根据压缩技术454对新盘区470进行压缩,并且将新盘区470传递至RAID层360,RAID层360对新的盘区470进行处理以将该新盘区470储存在RAID组466的一个或多个条带464中的SSD260上。盘区存储实例可以与RAID层360协作以识别存储分段460(及存储阵列150的部分)和分段460中的SSD260上用于储存新的盘区470的位置。示例性地,识别出的存储分段是具有较大的连续空闲空间的分段,该空闲空间例如在SSD260b上具有位置490,以储存盘区470。
在一个实施例中,然后,RAID层360跨RAID组466写入条带464,示例性地为一个或多个全写条带462。RAID层360可以写入一系列足够深度的条464,以减少在基于闪存的SSDs260(即闪存块管理)中可能发生的数据重新分配。然后,盘区存储实例(ⅰ)将新盘区470的SSD位置490加载至所选择的散列表482n中(即,根据新的候选盘区键值进行选择的散列表),(ⅱ)将新盘区键值(被记为盘区键值618)传递至合适的卷层实例以将该新盘区键值储存在由该卷层实例所管理的密集树700的条目(也被记为卷元数据条目600)中,以及(ⅲ)将所选散列表的盘区元数据的变化记录在盘区存储层日志355中。示例性地,卷层实例选择了密集树700a,该密集树700a跨越了卷445的、包围写请求的偏移量范围的偏移量范围440a。如上所述,卷445(例如,卷的偏移量空间)被划分为多个区域(例如,被分配成不相交的偏移量范围);在一个实施例中,每个区域由一个密集树700表示。然后,卷层实例将卷元数据条目600***密集树700a中,并且将与卷元数据条目相对应的变化记录到卷层日志345中。因此,I/O(写)请求被充分地储存在群集的SSD260上。
读路径
图5示出了用于处理I/O请求(例如,SCSI读请求510)的存储I/O栈300的I/O(读)路径500。读请求510可以由主机120发布,并且在群集100中节点200的协议层320处被接收。示例性地,协议层320通过解码420(例如,解析和提取)该请求的字段(例如,LUNID、LBA和长度(在513处示出))来处理读请求,并且将结果522(例如,LUNID、偏移量和长度)用于卷映射技术430。即,协议层320可以执行卷映射技术430(上文所述),以将读请求中的LUNID和LBA范围(即等效的偏移量和长度)转移至负责管理LBA(即偏移)范围的卷元数据的群集100中合适的卷层实例(即卷ID(卷445))。协议层之后将结果532传递至持久层330,持久层330可以对写入式高速缓存进行搜索,以确定读请求中的某些或全部是否可以从其高速缓存数据中得到服务。如果整个请求不能够从高速缓存数据中得到服务,则持久层330之后可以根据功能传输机制(例如,用于节点间通信的RPC)或IPC机制(例如,用于节点间通信的消息线程)将请求的剩余部分(包括例如,卷ID、偏移量和长度)作为参数534传递至合适的卷层实例。
卷层实例可以对读请求进行处理,以访问与包围所请求的偏移量范围(由参数534指定)的卷445的区域(例如,偏移量范围440a)相关联的密集树元数据结构(例如,密集树700a)。卷层实例可以进一步对读请求进行处理,以搜索(查找)密集树700a的一个或多个卷元数据条目600,以便得到与所请求偏移量范围中的一个或多个盘区470相关联的一个或多个盘区键值618。如在本申请中进一步描述的,每个密集树可以具体实现为多级搜索结构,该多级搜索机构在每级具有可能重叠的偏移量范围条目。该条目(即卷元数据条目600)提供了从主机可访问的LUN地址(即LBAs)到持久盘区键值的映射。针对同一偏移量,密集树的各个级可以具有多个卷元数据条目600,在这种情况中,更高的级具有更新的条目,并且更高的级被用于服务读请求。密集树的顶级示例性地被驻留在芯内,并且页面高速缓存448可以被用于访问树的较低级。如果所请求的范围或范围中的部分没有在顶级中出现,则与在下一个更低的树级处的索引条目相关联的源数据页面被访问。之后,在下一个级处的元数据页面(即在页面高速缓存448中)被搜索(例如,二分查找),以寻找任何重叠条目。之后,对该进程进行迭代直到找到某级的一个或多个卷元数据条目600,以确保整个所请求的读范围中的一个或多个盘区键值618被找到。如果所请求读范围的全部或部分中不存在元数据条目,则一个或多个缺失部分被填零。
一旦找到了盘区键值618,则卷层340对每个盘区键值618进行处理以例如执行桶映射技术476,该桶映射技术将盘区键值转移至负责储存所请求盘区470的合适的盘区存储实例478。需要注意的是,在一个实施例中,每个盘区键值618和与盘区470相关联的散列值472(即在盘区的写请求中所计算的散列值)基本相同,以致桶映射技术476和盘区元数据选择技术480可以被用于写路径操作和读路径操作。还需注意的是,可以可以根据散列值472推导出盘区键值618。然后,卷层340可以将盘区键值618(即,来自先前的针对盘区的写入操作的散列值472)传递至合适的盘区存储实例478(通过盘区存储获取操作),该盘区存储实例478执行盘区键值至SSD的映射以确定盘区在SSD260上的位置。
响应于获取操作(getoperation),盘区存储实例可以对盘区键值618(即散列值472)进行处理以实现盘区元数据选择技术480,该盘区元数据选择技术480(ⅰ)从盘区存储实例478内的一组散列表中选择了合适的散列表(例如,散列表482a),以及(ⅱ)从盘区键值618(即散列值472)中提取散列表索引484以索引所选择的散列表,并且查找具有匹配盘区键值618的表条目,该盘区键值618标识了盘区470在SSD260上的存储位置490。即被映射至盘区键值618的SSD位置490可以被用于从SSD260(例如,SSD260b)中检索现有的盘区(被记为盘区470)。盘区存储实例之后与RAID层360协作,以访问SSD260b上的盘区并且检索与读请求相关联的数据内容。示例性地,RAID层360可以根据盘区读操作468读取盘区,并且将盘区470传递至盘区存储实例。盘区存储实例之后可以根据解压技术456对盘区470进行解压,虽然本领域的技术人员将要理解,解压可以在存储I/O栈300的任何层处实现。盘区470可以被储存在存储器220中的缓存(未示出)中,并且对该缓存的引用可以通过存储I/O栈的层被传回。持久层之后可以将盘区加载至读高速缓存580(或其他暂存性机制)中,并且可以针对读请求510的LBA范围,从读高速缓存580中提取合适的读数据512。其后,协议层320可以创建包括读数据512的SCSI读响应514,并且将该读响应返回至主机120。
密集树卷元数据
如上所述,主机可访问的LUN可以被分配到多个卷中,每个卷可以被划分成一个或多个区域,其中,每个区域与在节点200上执行的卷层实例340所占有的一个分离的偏移量范围(即LBA范围)相关联。例如,假设最大卷尺寸为64太字节(TB)并且一个区域尺寸为16吉字节(GB),则一个卷可以具有多达4096个区域(即16GB×4096=64TB)。在一个实施例中,区域1可以与例如0-16GB的偏移量范围相关联,区域2可以与例如16GB-32GB的偏移量范围相关联,等等。区域的占有权表示卷层实例管理该区域的元数据(即卷元数据),以致以该区域内的偏移量范围为目标的I/O请求指向占有该区域的卷层实例。因此,每个卷层实例管理一个或多个区域的卷元数据,并且处理向一个或多个区域所发的I/O请求。在群集100的分布式存储架构中进行元数据扩展的基础包括将一个卷划分成多个区域,并且将区域占有权在群集的多个卷层实例中进行分配。
分布式存储架构中的卷元数据以及数据存储示例性地是基于盘区的。由卷层实例所管理的区域的卷元数据示例性地具体实现为存储器中(芯内)和SSD上(闪存上)的卷元数据,该卷元数据被配置成提供从该区域中主机可访问的LUN地址(即LBAs)到持久盘区键值的映射。换言之,卷元数据将LUN的LBA(即偏移)范围映射至各个LBA范围中的LUN数据(通过盘区键值)。在一个实施例中,卷层将卷元数据(具体实现为卷元数据条目600)组织成数据结构,即密集树元数据结构(密集树700,),该数据结构将区域中的偏移量范围映射至一个或多个盘区键值。即被储存为长度(可通过盘区键值访问)的LUN数据(用户数据)与表示为卷元数据(也被储存为长度)的LUN偏移(即LBA)范围相关联。因此,卷层340包括计算机可执行指令,该计算机可执行指令由CPU210执行以实现对这里所描述的密集树元数据结构的卷元数据条目进行组织和管理的操作。
图6是密集树元数据结构的各种卷元数据条目600的框图。密集树700的每个卷元数据条目600可以是体现了多个类型中之一的描述符,包括数据条目(D)610、索引条目(I)620和孔条目(H)630。数据条目(D)610被配置成映射(偏移量、长度)至某个长度(用户数据)的盘区键值,并且数据条目(D)610包括下述内容:类型612、偏移量614、长度616和盘区键值618。索引条目(I)620被配置成映射(偏移量、长度)至密集树的下一个更低级处的元数据页面(被储存为长度(即包含一个或多个卷元数据条目的页面))的页面键值(例如,盘区键值);相应地,索引条目620包括下述内容:类型622、偏移量624、长度626和页面键值628。示例性地,索引条目620表现为从较高级指向较低级的指针,即索引条目620本质上被用作密集树的不同级之间的链接。孔条目(H)630表示因在(偏移量、长度)处的冲孔操作而造成的缺失数据,并且孔条目(H)630包括下述内容:类型632、偏移量634和长度636。
在一个实施例中,卷元数据条目类型具有固定的尺寸(例如,12字节,包括1字节的类型字段、4字节的偏移量、1字节的长度以及6字节的键值),以有助于对密集树元数据结构的搜索以及在源数据页面上的存储。因此,某些类型可以具有不被使用的部分,例如孔条目630比数据条目610包括更少的信息,并且因此可能具有一个或多个不被使用的字节。在一个可替代的实施例中,条目尺寸可以被改变以避免不被使用的字节。有利地,卷元数据条目的尺寸可以根据芯内空间效率(以及在源数据页面上对齐性)来设置,这增进了读操作和写操作的扩充性。例如,各种卷元数据条目类型的长度字段(616、626、636)可以表示单元扇区的尺寸,诸如512字节或520字节,以致1字节的长度可以表示255×512字节=128K字节。
图7是密集树元数据结构的框图,该密集树元数据结构可以有利地与本文所述的一个或多个实施例共同使用。密集树元数据结构700被配置成提供了从LUN(或卷)内的逻辑偏移量到由一个或多个盘区存储实例所管理的盘区键值的映射。示例性地,密集树元数据结构被组织成多级密集树700,其中,顶级800表示最新的卷元数据变化,并且相继降低的级表示更早的变化。具体地,密集树700的更高级被首先更新,当该级填满时,相邻的较低级被更新。可以从密集树的顶级开始并向下沿着相继降低的级来搜索变化的最新版本。密集树700的每级包括用于储存卷元数据的固定尺寸的记录或条目,即卷元数据条目600。卷元数据处理710示例性地将密集树的顶级800在存储器中(芯内)保持为能够由偏移量进行索引的平衡树。卷元数据处理710还将固定尺寸(例如,4KB)的芯内缓存保持为被***平衡树中的卷元数据条目600(即顶级800)的暂存性区域(即芯内的临时缓冲器715)。密集树的每级在闪存上进一步地被保持为卷元数据条目的压缩数组,其中,被储存为盘区的条目示例性地被组织成固定尺寸(例如,4KB)的元数据页面720。值得注意的是,在触发的基础上(例如,临时缓冲器已填满),临时缓冲器715被释放至SSD。每个元数据页面720具有唯一的标识符(ID),该标识符保证了没有两个元数据页面可以具有相同的内容。示例性地,盘区存储层350可能无法对元数据进行去重复。
在一个实施例中,多级密集树700包括三(3)个级,虽然本领域的技术人员将理解,可以根据密集树配置参数来添入密集树的附加级N。示例性地,树的顶级800在芯内被保持为0级,并且较低级在闪存上被保持为1级和2级。此外,被储存在临时缓冲器715中的卷元数据条目600的副本也可以在闪存上被保持为例如0级链表(linkedlist)。密集树的叶子级(例如,2级)包含数据条目610,而非叶子级(例如,0级或1级)可以包含数据条目610和索引条目620。在树的N级处的每个索引条目(I)620被配置成指向(引用)树的N+1级处的元数据页面720。密集树600的每级还包括标头(header)(例如,0级标头730、1级标头740、2级标头750),该标头包含了每级的信息(诸如与盘区相关联的引用计数)。每个上级标头包含了与下级标头相对应的标头键值(标头的盘区键值,例如0级标头730的标头键值732)。密集树700根部的区域键值762(例如,0级标头730(和顶级800))示例性地被储存在闪存上,并且被保持在卷根盘区(例如,卷超级块760)中。值得注意的是,卷超级块760包含密集树元数据结构根部的卷中所有区域的区域键值。
图8是密集树元数据结构的顶级800的框图。如上所述,密集树700的顶级(1级)在芯内被保持为平衡树,该平衡树示例性地具体实现为B+树数据结构。然而,对本领域的技术人员显而易见的是,其他数据结构(诸如AVL树、红-黑树、以及堆(部分排序的树))可以有利地与本文所描述的实施例共同使用。B+树(顶级800)包括根节点810、一个或多个内部节点820以及多个叶子节点(叶子)830。被储存在该树上的卷元数据优选地以为了服务读请求而搜索起来有效并且在升序的偏移量中遍历(移动)起来有效的方式被组织,以完成向该树较低级的合并。B+树具有能够满足这些要求的特定属性,包括将所有数据(及卷元数据条目600)储存在叶子830中,以及将叶子储存为顺序可访问的,例如一个或多个链表。这两个属性使得顺序读取写数据(即盘区)的请求以及密集树合并的读操作变得有效。此外,由于B+树比二分查找树具有高得多的扇出,因此所示出的B+树导致了更加有效的查找操作。作为优化,B+树的叶子830可以被储存在页面高速缓存448中,以使得数据访问相比其他树更有效。此外,对B+树中的重叠偏移条目的分辨优化了盘区的读请求。因此,保持在芯内的B+树比例(即卷元数据)越大,要求从SSD加载(读取)的元数据就越少,以致减少了读扩充。
图9示出了密集树元数据结构的级间映射900。密集树700的每级包括一个或多个元数据页面720,该元数据页面中的每一个包含说过卷元数据条目600。如上所述,每个卷元数据条目600具有固定的尺寸(例如,12字节),以致预订数量的条目可以被打包到每个元数据页面720中。数据条目(D)610是将(偏移量、长度)映射至可以使用盘区键值618来检索的数据(用户)的地址的映射。该(偏移量、长度)示例性地是指LUN的偏移量范围。索引条目(I)620是将(偏移量、长度)映射至下一个更低级处的元数据页面720的页面键值628的映射。示例性地,索引条目(I)620中的偏移量与下一个更低级处的元数据页面720中第一条目的偏移量相同。索引条目620中的长度626示例性地为下一个更低级处的元数据页面720中所有条目的累计长度(包括条目之间的间隙)。
例如,1级的元数据页面包括索引条目“I(2K,10K)”,该索引条目指定了起始偏移量2K和末尾偏移量12K(即12K=2K+10K);索引条目(I)示例性地指向覆盖了特定范围的2级的元数据页面720。被打包在2级的元数据页面720中的数据条目(D)的集合覆盖了从最小偏移量(例如,2K)到最大偏移量(例如,12K)的映射。因此,密集树700的每级可以被视为其下级的覆盖层。举例说明,1级的数据条目“D(0,4K)”覆盖了1级下方的2级页面中的元数据(即范围是2K到4K)。
在一个或多个实施例中,由卷层340管理卷元数据的操作包括根据写请求将卷元数据条目(例如,数据条目610)***密集树700中。如上所述,每个密集树700可以具体实现为多级的搜索结构,该多级搜索结构在每级具有可能重叠的偏移量范围条目。图10示出了根据写请求将卷元数据条目***密集树元数据结构中的工作流1000。在一个实施例中,密集树700的卷元数据更新(变化)首先发生在树的顶级,以致变化的完整顶级描述被保持在存储器220中。可操作地,卷元数据处理710应用区域键值762以访问合适区域(例如,根据从写请求410得出的参数432所确定的偏移量范围440)中的密集树700(级顶级800)。在完成写请求的基础上,卷元数据处理710创建了卷元数据条目(例如,新数据条目610),以记录偏移量/长度到盘区键值(即偏移量范围到用户数据)的映射。示例性地,新数据条目610包括与写请求410的数据(即盘区470)相关联的盘区键值618(级来自于盘区存储层350)、偏移量614和长度616(即来自于写参数432)、以及类型612(级数据条目D)。卷元数据处理710之后通过将数据条目(D)***(添加至)0级临时缓冲器715和密集树700的顶级800以及卷层日志345中,来更新卷元数据,从而表明写请求被储存在群集的SSD260上。
图11示出了根据写请求将卷元数据条目***密集树元数据结构中的示例性简化过程1100。该过程在步骤1105处开始,并且继续至步骤1110,其中,在写请求完成时,卷元数据处理创建了卷元数据条目(例如,新数据条目),以记录偏移量/长度到盘区键值的映射。在步骤1115处,卷元数据处理将卷元数据条目***(添加至)密集树的0级中,即***到0级临时缓冲器中。示例性地,该条目也被添加至密集树的顶级以作为叶子节点,并且被添加至卷层日志中。在步骤1120处,对0级临时缓冲器是否已满进行了确定。如果0级临时缓冲器未满,则过程返回步骤1110;否则,如果缓冲器已满,则在步骤1125处储存在0级临时缓冲器中的卷元数据条目被附加至SSD上密集树的0级(即释放并储存在SSD上)。在步骤1130处,0级临时缓冲器被清空,以为新的卷元数据条目腾出空间。之后,过程在步骤1135处结束。
在一个实施例中,临时缓冲器715的尺寸被设置成用于确定附加操作(即过程1100的步骤1125)的频率。例如,在8192/12≈682的操作之后,具有12字节卷元数据条目的8KB临时缓冲器被附加。应当注意的是,前述合并操作与上文刚描述的图11中的附加过程不同。合并操作示例性地通过使用合并排序操作而发生在密集树中的较高级和密集树中的较低级之间(例如,芯内的0级到SSD上的1级,以及SSD上的1级到SSD上的2级)。在另一方面,附加操作通过使用附加操作而表面性地发生在芯内的0级(及临时缓冲器)到SSD上的0级之间。
由卷层340所管理的卷元数据的操作还包括在密集树700中查找(搜索)卷元数据条目,诸如读请求的数据条目610。图12示出了根据读请求在密集树元数据结构中搜索一个或多个卷元数据条目的工作流1200。对于读请求,首先在0级(即顶级800和/或临时缓冲器715的0级)中搜索重叠条目(诸如数据条目D和索引条目I),并且与在一个或多个下一级(即1级和/或2级)处的索引条目I相关联的一个或多个元数据页面720可以被读取(即被加载至芯内)。之后,在每个元数据页面720上执行二分查找,以寻找任何重叠条目。
例如,假设读请求指向数据范围0-12K(即读取0,12K(偏移量、长度))中的一部分。卷层340(例如,卷元数据处理710)对读请求进行处理,以发起在0级(例如,顶级800)处的搜索,其中,找到了覆盖请求数据的一部分(0-2K)的数据条目D。因此,涉及请求数据中0-2K部分(范围)的数据条目D从0级中被读取,以获得与储存了SSD260上数据的0-2K部分的盘区470相关联的盘区键值618。顶级800的索引条目“I(0,12K)”指示了该范围的附加请求数据位于树的一个或多个更低级处。因此,与“I(0K-12K)”相对应的1级元数据页面720被搜索(例如,二分查找),并且找到了覆盖请求数据的部分(0-4K)的数据条目D。因此,涉及请求数据中0-4K部分的数据条目D从1级中被读取,以获得与储存了SSD260上数据的2K-4K部分的盘区470相关联的盘区键值618。注意到,从0级所引用的盘区470中所读取的数据的0-2K部分相比于1级所引用的数据中的相应部分更新(即上级中较新的数据覆盖了下级中较旧的数据);因此,在来自于1级所引用的盘区的数据中,仅2K-4K部分(范围)被使用,以形成对读请求的响应。
1级页面中的另一个索引条目“I(2K,10K)”(即偏移量、长度)指示了该范围的另一些附加请求数据位于下一级(2级)处。之后,与“I(2K,10K)”相对应(相映射)的2级元数据页面720被搜索,以搜寻覆盖了请求数据的剩余部分(2K,4K),(6K,4K)以及(10K,2K)的三个数据条目D。示例性地,涉及数据中2K-6K部分(范围)的数据条目D(2K-4K)从2级中被读取,以获得与储存了SSD260上数据的4K-6K部分的盘区470相关联的盘区键值618。同样地,从1级所引用的盘区470中所读取的数据的2K-4K部分(范围)相比于2级所引用的数据中的相应部分更新;因此,在来自于2级所引用的盘区的数据中,仅4K-6K部分(范围)被读取。最后,涉及数据中6K-10K和10K-12K部分(范围)的数据条目D(6K-4K)和D(10K,2K)被读取,以获得与储存了SSD260上数据的那些部分的盘区470相关联的盘区键值618,从而完成读请求。值得注意的是,卷层350还可以使用页面高速缓存448来访问被储存在SSD上的密集树的较低级。
在一个实施例中,密集树700的不同级可以具有偏移量相同的卷元数据条目600,其中,更高的级具有更新的条目,并且更高的级被用于服务读请求。换言之,密集树700的更高级(例如,0级)包含最新的元数据映射,并且因此被首先搜索以满足读请求。举例说明,如果读请求指向0-2K(范围),则在来自于顶级800(或0级缓冲器715)的D(0,2K)处,可以完整地找到数据。较旧的条目位于密集树的较低级(例如,2级),这是因为树是自上而下地生长。此外,如果可以在0级和1级处解决读访问,则无需访问2级。即如果读请求指向0-4K,则可以在0级处找到第一个2K并且在1级处找到第二个2K(2K-4K),并且无需搜索2级便可以完全地满足请求。因此,密集树数据结构的组织(即其中,顶级800表示最新的卷元数据变化,并且相继降低的级1-2表示更早的变化)减少了对存储阵列150(SSD260)的搜索操作,由此减少了对写和读的扩充。
举例说明,如果密集树跨越了具有4KB平均盘区尺寸的16GB偏移量范围,则密集树的叶子中需要约4百万个条目(16GB/4KB=4,194,304)(例如,被储存在SSD上的2级)。此外,如果密集树的相邻级之间的递增系数为8,则1级具有约500K个条目(4,192,304/8=524,288)并且0级具有64K(准确值为524288/8)个条目。因此,当0级被填入芯内时,524,288个条目可以被写入(即被覆写在)SSD的1级中。如果假设每个条目占据12个字节(即元数据条目600的尺寸),则写入放大将为:500K个条目(1级)×12字节(每个条目的字节数)/64K(填充0级的条目数,即每个用户请求的条目数)=96字节每4KB写入盘区。此外,1级和2级之间会产生相同的写入放大:4M条目(2级)×12字节每条目/500K(1级的条目数)=96字节。因此,每4KB写入盘区中总共有96+96=192字节的元数据被写入,或约为4.7%的元数据开销,即卷偏移量/范围元数据的写入放大约为1.023。
图13是根据读请求在密集树元数据结构中搜索一个或多个卷元数据条目的简化过程1300。该过程在步骤1305处开始,并且继续至步骤1310,其中,在读请求期间,卷元数据处理对合适区域的密集树进行访问,以搜索(查找)对与读请求的范围相关的一个或多个盘区键值进行定位所需的卷元数据。如上所述,基于读请求中特定的偏移量来确定搜索哪个区域(偏移量范围)。在步骤1315处,卷元数据处理在密集树的0级(例如顶级和/或临时缓冲器)中搜索读请求所请求偏移量范围的重叠卷元数据条目(例如,数据条目和索引条目)。在步骤1320处,对是否在0级中找到了所请求的偏移量范围进行确定。如果找到了所请求的偏移量范围,则在步骤1340处,得到了用于整个请求范围的一个或多个盘区键值,并且过程在步骤1345处结束。如果在0级中没有找到所请求的偏移量范围,则在与1级处与一个或多个索引条目相关联的一个或多个元数据页面中搜索(例如,二分查找或基于密集树数据结构的搜索)一个或多个重叠条目(步骤1325)。值得注意的是,读请求可以跨越多个盘区,除非密集树中的元数据条目(即,与一个盘区相关联)与所请求的偏移量范围精确地匹配。此外,SSD上较低级的元数据页面可以被缓存在页面高速缓存中并且根据需要进行加载。在步骤1330处,对是否在1级中找到了所请求的偏移量范围进行确定。如果找到了所请求的偏移量范围,则在步骤1340处,得到了整个请求范围的一个或多个盘区键值,并且过程在步骤1345处结束。如果在1级中没有找到所请求的偏移量范围,则与2级处的一个或多个索引条目相关联的一个或多个元数据页面被搜索(例如,二分查找),以查找一个或多个重叠条目(步骤1335)。在步骤1340处,得到了整个所请求的偏移量范围的一个或多个盘区键值,并且在步骤1345处过程结束。
当已经示出并描述了针对于由群集的一个或多个节点上执行的存储I/O栈的卷层所管理的元数据组织的说明性实施例时,将要理解的是,可以在本文实施例的精神和范围内进行各种其他的调整和修改。举例说明,本文已经示出与描述的实施例关于卷元数据的操作,包括根据写请求将卷元数据条目(诸如数据条目)***密集树中,并且根据读请求在密集树中查找数据条目。然而,这些实施例在其广义上而言并非是限制性的,并且实际上可以根据冲孔请求而允许删除卷元数据条目(诸如数据条目)。
在一个实施例中,在密集树700中所发生的删除可能是由于冲孔(取消映射)操作和/或覆写操作。冲孔操作示例性地由孔条目(H)630表示,而覆写操作被表示为常规数据条目(D)610,该常规数据条目610具有与之前的数据条目重叠的偏移量(即密集树较高级中较新的条目覆盖了较旧的较低级条目)。在密集树700的不同级上重叠的卷元数据条目600可以在合并期间(即在合并操作期间)被解决。来自于不同级的新卷元数据条目和旧卷元数据条目可以通过偏移量被排序。在合并期间,较低级的数据条目610(其偏移量范围由较新的孔条目630或较新的数据条目610覆盖(通过覆写操作))可以被识别并删除。可以同步地(例如,在卷层覆写或冲孔操作期间)或以延迟的方式(例如,在卷元数据合并操作期间)执行盘区470的盘区存储删除。在延迟删除(自由操作)的情况中,待删除的盘区的盘区键值618可以在数据条目610被删除时进行识别。为了同步删除(释放),较低级的数据条目(其偏移量范围通过覆写操作由较新的孔条目或较新的数据条目进行覆盖)可以作为冲孔操作或覆写操作的部分来被搜索,即被覆盖的内容或被冲孔的长度可以在那时被删除。延迟删除(释放)通常更加有效(在合并期间执行),并且因此可以被用作缺省的操作模式。可以使用单独的专用删除日志(未示出)来记录向合适的盘区存储层实例所提出的针对覆写的盘区或删除的(即冲孔的)盘区的删除请求。
有利地,本文所描述的密集树元数据结构被优化成高性能,并且该密集树元数据结构紧凑以致能够使最新的卷元数据驻留在存储器中。即对密集树进行组织,以致卷元数据的部分驻留在存储器中,以确保对盘区键值的有效处理(例如,相对于散列表查找操作),以及重定向至合适的盘区存储实例以确定数据是否存在。此外,由于无论I/O请求如何(例如,随机写请求)均对密集树元数据紧密地封装,因此密集树元数据结构支持对存储***进行大型连续的写操作,并且因此相对于随机写操作是闪存上友好的。
前文的描述已经指出了具体的实施例。然而,显而易见的是,可以根据这些实施例的优势中的某些或全部,对所描述的实施例进行其他的变形与修改。举例说明,明确地考虑到本文所描述的部件和/或元件可以被实现为软件、硬件、固件或前述内容的组合,软件被编码在有形的(非暂时性的)计算机可读介质(例如,磁盘和/或CDs)上,该有形的计算机可读介质具有在计算机上执行的程序指令。因此,本说明书的目的仅在于举例说明,而并非要对本文实施例的范围做出限制。因此,附加的权利要求书的目的在于将涵盖落入本文实施例的范围和真实精神内的变形与修改。
Claims (22)
1.一种方法,其包括:
接收指向逻辑单元LUN的写请求,所述写请求具有数据、逻辑块地址和表示所述LUN的第一地址范围的长度,所述写请求在存储***处被处理;
将所述数据储存在附接于所述存储***的固态硬盘的存储阵列中;
将第一键值与所述数据相关联;
将所述第一键值储存在元数据结构的数据条目中,所述数据条目表示所述LUN的所述第一地址范围,所述元数据结构表示所述LUN的第二地址范围,该第二地址范围大于所述第一地址范围;以及
将所述元数据结构的部分储存在所述存储阵列上。
2.根据权利要求1所述的方法,该方法进一步包括:
将所述元数据结构保持为包括第一级和第二级的密集树,所述第一级驻留在所述存储***的存储器中,所述第二级被储存在所述存储阵列上。
3.根据权利要求2所述的方法,其中,所述第一级中的索引条目具有到所述第二级的条目的引用。
4.根据权利要求3所述的方法,其中,所述第二级的所述条目被储存在元数据页面上,并且其中,所述第一级的所述索引条目的引用包括与所述页面相关联的第二键值。
5.根据权利要求2到4中任一项所述的方法,其中,每一级上的元数据结构的所有条目具有相同的尺寸。
6.根据权利要求2到5中任一项所述的方法,其中,所述第二级的部分被缓存在所述存储***的所述存储器中。
7.根据权利要求2到6中任一项所述的方法,其中,所述元数据结构的孔条目表示缺失数据,并且其中,所述孔条目包括偏移量和长度。
8.根据权利要求7所述的方法,其中,所述长度指示多个单元,并且其中,每个单元具有固定的尺寸。
9.根据权利要求2到8中任一项所述的方法,该方法进一步包括:
将所述第一级的所述索引条目和数据条目储存在驻留于所述存储器中的临时缓冲器中;以及
当所述元数据结构的驻留在所述存储器中的所述第一级已满时,将所述密集树的所述第一级和所述密集树的所述第二级进行合并。
10.根据权利要求2到9中任一项所述的方法,其中,所述密集树的所述第一级的条目的第一数量小于所述密集树的所述第二级的条目的第二数量。
11.一种方法,其包括:
接收指向逻辑单元LUN的读请求,所述读请求在存储***处被处理;
检索元数据结构的、表示所述LUN的第一地址范围的第一条目,所述第一条目包含第一键值;
使用所述第一键值以从附接于所述存储***的固态硬盘的存储阵列中检索第一数据;
检索所述元数据结构的、表示所述LUN的第二地址范围的第二条目,所述第二条目包含第二键值,其中,所述第二地址范围与所述第一地址范围的部分重叠;
使用所述第二键值以从所述存储阵列中检索第二数据;以及
响应于所述读请求,返回所述第二数据的剩余部分和所述第一数据,所述第二数据的所述剩余部分是所述第二地址范围的、未与所述第一地址范围的所述部分重叠的剩余部分。
12.一种计算机程序,其包括机器可读格式的程序指令,其中,所述程序指令在被存储***执行时使得该存储***执行任一项前述权利要求所述的方法。
13.一种计算机程序产品,其包括非暂时性机器可读存储介质,该非暂时性机器可读存储介质中储存有权利要求12所述的计算机程序。
14.一种***,其包括:
存储***,该存储***具有通过总线被连接至处理器的存储器;
存储阵列,该存储阵列被耦接至所述存储***并且具有一个或多个固态硬盘;
存储I/O栈,该存储I/O栈在所述存储***的所述处理器上执行,在被执行时,所述存储I/O栈可操作用于:
接收指向逻辑单元LUN的写请求,所述写请求具有数据、逻辑块地址和表示所述LUN的第一地址范围的长度;
将所述数据储存在所述存储阵列中;
将第一键值与所述数据相关联;
将所述第一键值储存在元数据结构的数据条目中,所述数据条目表示所述LUN的所述第一地址范围,所述元数据结构表示所述LUN的第二地址范围,该第二地址范围大于所述第一地址范围;以及
将所述元数据结构的部分储存在所述存储阵列上。
15.根据权利要求14所述的***,其中,所述元数据结构被保持为包括第一级和第二级的密集树,所述第一级驻留在所述存储***的所述存储器中,所述第二级被储存在所述存储阵列上。
16.根据权利要求15所述的***,其中,所述第一级中的索引条目包括偏移量、长度以及到所述第二级的条目的引用。
17.根据权利要求16所述的***,其中,所述索引条目的所述偏移量和长度与所述第二级的所述条目中所包括的相应的偏移量和长度重叠。
18.根据权利要求16或17所述的***,其中,所述第二级的条目在该第二级所包括的条目的列表中通过偏移量进行排序。
19.根据权利要求15到18中任一项所述的***,其中,第二级的部分被缓存在所述存储***的所述存储器中。
20.根据权利要求15到19中任一项所述的***,其中,所述第二级的所述条目被储存在元数据页面上,并且其中,所述第一级的所述索引条目的引用包括与所述页面相关联的第二键值,并且其中,所述元数据页面自标识出自身在所述元数据结构中的位置。
21.根据权利要求15到20中任一项所述的***,其中,所述元数据结构的孔条目表示缺失数据,并且其中,所述孔条目包括偏移量和长度。
22.根据权利要求21所述的***,其中,所述长度指示多个单元,并且其中,每个单元具有大于511字节的尺寸。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/027,994 | 2013-09-16 | ||
US14/027,994 US9268502B2 (en) | 2013-09-16 | 2013-09-16 | Dense tree volume metadata organization |
PCT/US2014/055138 WO2015038741A1 (en) | 2013-09-16 | 2014-09-11 | Management of extent based metadata with dense tree structures within a distributed storage architecture |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105612491A true CN105612491A (zh) | 2016-05-25 |
Family
ID=51663450
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480056037.4A Pending CN105612491A (zh) | 2013-09-16 | 2014-09-11 | 分布式存储架构中基于具有密集树结构的元数据的盘区的管理 |
Country Status (4)
Country | Link |
---|---|
US (3) | US9268502B2 (zh) |
EP (1) | EP3036616B1 (zh) |
CN (1) | CN105612491A (zh) |
WO (1) | WO2015038741A1 (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107977167A (zh) * | 2017-12-01 | 2018-05-01 | 西安交通大学 | 一种基于纠删码的分布式存储***的退化读优化方法 |
CN108011949A (zh) * | 2017-11-30 | 2018-05-08 | 百度在线网络技术(北京)有限公司 | 用于获取数据的方法和装置 |
CN108090529A (zh) * | 2016-11-22 | 2018-05-29 | 上海宝信软件股份有限公司 | 基于射频识别技术的现场终端作业过程数据的存储方法 |
WO2018119843A1 (en) * | 2016-12-29 | 2018-07-05 | Intel Corporation | Network interface controller with non-volatile random access memory write packet log |
CN109521963A (zh) * | 2018-11-14 | 2019-03-26 | 郑州云海信息技术有限公司 | 一种元数据落盘方法及装置 |
CN110568994A (zh) * | 2019-08-16 | 2019-12-13 | 北京字节跳动网络技术有限公司 | 逻辑块设备访问方法、装置及电子设备 |
CN110618834A (zh) * | 2019-09-05 | 2019-12-27 | 苏州浪潮智能科技有限公司 | I/o栈请求响应方法、***和i/o栈请求响应控制方法及*** |
CN111158606A (zh) * | 2019-12-31 | 2020-05-15 | 广州鼎甲计算机科技有限公司 | 存储方法、装置、计算机设备和存储介质 |
CN111587425A (zh) * | 2017-11-13 | 2020-08-25 | 维卡艾欧有限公司 | 分布式存储***中的文件操作 |
CN112055850A (zh) * | 2017-12-13 | 2020-12-08 | 美光科技公司 | 可变宽度超级块寻址 |
CN114063895A (zh) * | 2020-07-31 | 2022-02-18 | 株式会社日立制作所 | 存储***和存储***中的数据复制方法 |
CN117950599A (zh) * | 2024-03-27 | 2024-04-30 | 国家超级计算天津中心 | 基于分布式***的i/o栈构建方法、装置、设备及介质 |
Families Citing this family (44)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8819208B2 (en) | 2010-03-05 | 2014-08-26 | Solidfire, Inc. | Data deletion in a distributed data storage system |
US9838269B2 (en) | 2011-12-27 | 2017-12-05 | Netapp, Inc. | Proportional quality of service based on client usage and system metrics |
US9054992B2 (en) | 2011-12-27 | 2015-06-09 | Solidfire, Inc. | Quality of service policy sets |
US9268502B2 (en) * | 2013-09-16 | 2016-02-23 | Netapp, Inc. | Dense tree volume metadata organization |
US9405783B2 (en) * | 2013-10-02 | 2016-08-02 | Netapp, Inc. | Extent hashing technique for distributed storage architecture |
US9201918B2 (en) | 2013-11-19 | 2015-12-01 | Netapp, Inc. | Dense tree volume metadata update logging and checkpointing |
JP6016215B2 (ja) * | 2013-12-20 | 2016-10-26 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | トライ木構造を有するレコード群を高い効率でマージソートする方法、装置及びコンピュータプログラム |
US9430480B1 (en) * | 2013-12-31 | 2016-08-30 | Emc Corporation | Active-active metro-cluster scale-out for unified data path architecture |
US20150244795A1 (en) | 2014-02-21 | 2015-08-27 | Solidfire, Inc. | Data syncing in a distributed system |
US9798728B2 (en) | 2014-07-24 | 2017-10-24 | Netapp, Inc. | System performing data deduplication using a dense tree data structure |
US9671960B2 (en) | 2014-09-12 | 2017-06-06 | Netapp, Inc. | Rate matching technique for balancing segment cleaning and I/O workload |
US10133511B2 (en) | 2014-09-12 | 2018-11-20 | Netapp, Inc | Optimized segment cleaning technique |
US9836229B2 (en) | 2014-11-18 | 2017-12-05 | Netapp, Inc. | N-way merge technique for updating volume metadata in a storage I/O stack |
US9645932B1 (en) * | 2014-12-19 | 2017-05-09 | EMC IP Holding Company LLC | Persistent metadata cache |
US10594565B2 (en) | 2014-12-19 | 2020-03-17 | Hewlett Packard Enterprise Development Lp | Multicast advertisement message for a network switch in a storage area network |
US9720601B2 (en) | 2015-02-11 | 2017-08-01 | Netapp, Inc. | Load balancing technique for a storage array |
US9762460B2 (en) | 2015-03-24 | 2017-09-12 | Netapp, Inc. | Providing continuous context for operational information of a storage system |
US9710317B2 (en) | 2015-03-30 | 2017-07-18 | Netapp, Inc. | Methods to identify, handle and recover from suspect SSDS in a clustered flash array |
US9996426B1 (en) * | 2015-06-30 | 2018-06-12 | EMC IP Holding Company LLC | Sparse segment trees for high metadata churn workloads |
US10055420B1 (en) | 2015-06-30 | 2018-08-21 | EMC IP Holding Company LLC | Method to optimize random IOS of a storage device for multiple versions of backups using incremental metadata |
US9740566B2 (en) | 2015-07-31 | 2017-08-22 | Netapp, Inc. | Snapshot creation workflow |
US9830103B2 (en) * | 2016-01-05 | 2017-11-28 | Netapp, Inc. | Technique for recovery of trapped storage space in an extent store |
US10108547B2 (en) * | 2016-01-06 | 2018-10-23 | Netapp, Inc. | High performance and memory efficient metadata caching |
US10303669B1 (en) | 2016-03-30 | 2019-05-28 | Amazon Technologies, Inc. | Simulating hierarchical structures in key value stores |
US10460120B1 (en) * | 2016-03-30 | 2019-10-29 | Amazon Technologies, Inc. | Policy mediated hierarchical structures in key value stores |
US10802740B2 (en) | 2016-04-21 | 2020-10-13 | Netapp, Inc. | Systems, methods, and computer readable media providing arbitrary sizing of data extents |
US10929022B2 (en) | 2016-04-25 | 2021-02-23 | Netapp. Inc. | Space savings reporting for storage system supporting snapshot and clones |
WO2017196315A1 (en) | 2016-05-11 | 2017-11-16 | Hitachi, Ltd. | Data storage system and process for reducing read and write amplifications |
US10521411B2 (en) | 2016-08-10 | 2019-12-31 | Moonshadow Mobile, Inc. | Systems, methods, and data structures for high-speed searching or filtering of large datasets |
US9811806B1 (en) * | 2016-09-15 | 2017-11-07 | International Business Machines Corporation | Determining license use for composed container services in cloud platforms |
US10642763B2 (en) | 2016-09-20 | 2020-05-05 | Netapp, Inc. | Quality of service policy sets |
CN106484332A (zh) * | 2016-10-12 | 2017-03-08 | 郑州云海信息技术有限公司 | 一种数据存储方法及装置 |
CN106775481B (zh) * | 2016-12-23 | 2019-11-05 | 华为技术有限公司 | 数据读取方法及设备 |
US10705763B2 (en) | 2017-02-10 | 2020-07-07 | International Business Machines Corporation | Scale and performance for persistent containers using SCSI second level addressing to map storage volume to host of container environment, wherein said storage volume is scanned at said SCSI second level addressing without rescanning at OS level virtualization |
US11068299B1 (en) | 2017-08-04 | 2021-07-20 | EMC IP Holding Company LLC | Managing file system metadata using persistent cache |
US10481818B2 (en) | 2018-02-28 | 2019-11-19 | Micron Technology, Inc. | Meta data processing during startup of storage devices |
CN112236759A (zh) | 2018-09-14 | 2021-01-15 | 谷歌有限责任公司 | 日志结构合并森林中的交错合并 |
US10860243B2 (en) * | 2018-11-30 | 2020-12-08 | Micron Technology, Inc. | Per cursor logical unit number sequencing |
CN111857556B (zh) * | 2019-04-30 | 2024-05-24 | 伊姆西Ip控股有限责任公司 | 管理存储对象的元数据的方法、装置和计算机程序产品 |
US11567865B2 (en) * | 2019-12-31 | 2023-01-31 | Samsung Electronics Co., Ltd. | Methods and apparatus for persistent data structures |
US11379153B2 (en) * | 2020-07-23 | 2022-07-05 | Micron Technology, Inc. | Storage traffic pattern detection in memory devices |
CN112416253B (zh) * | 2020-11-25 | 2022-09-30 | 新华三云计算技术有限公司 | 一种基于分布式存储的存储区域动态调整方法及装置 |
US11983438B2 (en) * | 2021-02-09 | 2024-05-14 | Nutanix, Inc. | Technique for improving operations log indexing |
US20230051897A1 (en) * | 2021-08-11 | 2023-02-16 | Arris Enterprises Llc | Smart balance tree lookup |
Family Cites Families (52)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5937425A (en) | 1997-10-16 | 1999-08-10 | M-Systems Flash Disk Pioneers Ltd. | Flash file system optimized for page-mode flash technologies |
US6862692B2 (en) | 2001-01-29 | 2005-03-01 | Adaptec, Inc. | Dynamic redistribution of parity groups |
US7249150B1 (en) | 2001-07-03 | 2007-07-24 | Network Appliance, Inc. | System and method for parallelized replay of an NVRAM log in a storage appliance |
US20030120869A1 (en) | 2001-12-26 | 2003-06-26 | Lee Edward K. | Write-back disk cache management |
US6748504B2 (en) | 2002-02-15 | 2004-06-08 | International Business Machines Corporation | Deferred copy-on-write of a snapshot |
US7464125B1 (en) | 2002-04-15 | 2008-12-09 | Ibrix Inc. | Checking the validity of blocks and backup duplicates of blocks during block reads |
US7107385B2 (en) | 2002-08-09 | 2006-09-12 | Network Appliance, Inc. | Storage virtualization by layering virtual disk objects on a file system |
US7668885B2 (en) * | 2002-09-25 | 2010-02-23 | MindAgent, LLC | System for timely delivery of personalized aggregations of, including currently-generated, knowledge |
US7562101B1 (en) | 2004-05-28 | 2009-07-14 | Network Appliance, Inc. | Block allocation testing |
US20060075281A1 (en) | 2004-09-27 | 2006-04-06 | Kimmel Jeffrey S | Use of application-level context information to detect corrupted data in a storage system |
US7447868B2 (en) * | 2005-06-15 | 2008-11-04 | International Business Machines Corporation | Using vector processors to accelerate cache lookups |
JP4766240B2 (ja) | 2005-11-08 | 2011-09-07 | 日本電気株式会社 | ファイル管理方法、装置、およびプログラム |
US7546321B2 (en) | 2005-12-19 | 2009-06-09 | Yahoo! Inc. | System and method for recovery from failure of a storage server in a distributed column chunk data store |
EP2021904A2 (en) | 2006-05-24 | 2009-02-11 | Compellent Technologies | System and method for raid management, reallocation, and restriping |
US7562203B2 (en) | 2006-09-27 | 2009-07-14 | Network Appliance, Inc. | Storage defragmentation based on modified physical address and unmodified logical address |
US8719844B2 (en) * | 2006-11-27 | 2014-05-06 | Morgan Stanley | Merging realtime data flows |
US7620669B1 (en) | 2006-12-15 | 2009-11-17 | Netapp, Inc. | System and method for enhancing log performance |
US8489811B1 (en) | 2006-12-29 | 2013-07-16 | Netapp, Inc. | System and method for addressing data containers using data set identifiers |
US8082390B1 (en) | 2007-06-20 | 2011-12-20 | Emc Corporation | Techniques for representing and storing RAID group consistency information |
US8024525B2 (en) * | 2007-07-25 | 2011-09-20 | Digi-Data Corporation | Storage control unit with memory cache protection via recorded log |
US7856437B2 (en) * | 2007-07-31 | 2010-12-21 | Hewlett-Packard Development Company, L.P. | Storing nodes representing respective chunks of files in a data store |
US7996636B1 (en) | 2007-11-06 | 2011-08-09 | Netapp, Inc. | Uniquely identifying block context signatures in a storage volume hierarchy |
JP2011515727A (ja) | 2008-02-12 | 2011-05-19 | ネットアップ,インコーポレイテッド | ハイブリッド媒体ストレージシステムアーキテクチャ |
US7873619B1 (en) * | 2008-03-31 | 2011-01-18 | Emc Corporation | Managing metadata |
US8086799B2 (en) | 2008-08-12 | 2011-12-27 | Netapp, Inc. | Scalable deduplication of stored data |
US7987214B2 (en) * | 2008-08-29 | 2011-07-26 | Tatu Ylonen Oy | Determining the address range of a subtree of a linearized tree |
US8321834B2 (en) * | 2008-09-25 | 2012-11-27 | International Business Machines Corporation | Framework for automatically merging customizations to structured code that has been refactored |
US20100088296A1 (en) | 2008-10-03 | 2010-04-08 | Netapp, Inc. | System and method for organizing data to facilitate data deduplication |
US9015209B2 (en) * | 2008-12-16 | 2015-04-21 | Sandisk Il Ltd. | Download management of discardable files |
US8495417B2 (en) | 2009-01-09 | 2013-07-23 | Netapp, Inc. | System and method for redundancy-protected aggregates |
US8205065B2 (en) | 2009-03-30 | 2012-06-19 | Exar Corporation | System and method for data deduplication |
US8560879B1 (en) | 2009-04-22 | 2013-10-15 | Netapp Inc. | Data recovery for failed memory device of memory device array |
EP2476055B1 (en) * | 2009-09-08 | 2020-01-22 | SanDisk Technologies LLC | Apparatus, system, and method for caching data on a solid-state storage device |
US8712972B2 (en) * | 2009-09-22 | 2014-04-29 | Sybase, Inc. | Query optimization with awareness of limited resource usage |
US8285956B2 (en) | 2009-10-22 | 2012-10-09 | Symantec Corporation | Efficient logging for asynchronously replicating volume groups |
US8321648B2 (en) | 2009-10-26 | 2012-11-27 | Netapp, Inc | Use of similarity hash to route data for improved deduplication in a storage server cluster |
US8918897B2 (en) | 2009-11-24 | 2014-12-23 | Cleversafe, Inc. | Dispersed storage network data slice integrity verification |
US8417987B1 (en) | 2009-12-01 | 2013-04-09 | Netapp, Inc. | Mechanism for correcting errors beyond the fault tolerant level of a raid array in a storage system |
US8725940B2 (en) | 2010-02-27 | 2014-05-13 | Cleversafe, Inc. | Distributedly storing raid data in a raid memory and a dispersed storage network memory |
US8341457B2 (en) | 2010-03-11 | 2012-12-25 | Lsi Corporation | System and method for optimizing redundancy restoration in distributed data layout environments |
US8463825B1 (en) | 2010-04-27 | 2013-06-11 | Tintri Inc. | Hybrid file system for virtual machine storage |
US20120011176A1 (en) | 2010-07-07 | 2012-01-12 | Nexenta Systems, Inc. | Location independent scalable file and block storage |
US8595595B1 (en) | 2010-12-27 | 2013-11-26 | Netapp, Inc. | Identifying lost write errors in a raid array |
CN102651009B (zh) * | 2011-02-28 | 2014-09-24 | 国际商业机器公司 | 一种存储***中检索数据的方法和设备 |
US9563555B2 (en) | 2011-03-18 | 2017-02-07 | Sandisk Technologies Llc | Systems and methods for storage allocation |
US8539008B2 (en) | 2011-04-29 | 2013-09-17 | Netapp, Inc. | Extent-based storage architecture |
US8839008B2 (en) | 2011-09-23 | 2014-09-16 | Broadcom Corporation | System and method for detecting configuration of a power sourcing equipment device connected to a powered device by simultaneously measuring voltage at two terminals of a resistor disposed within the powered device |
CN102364474B (zh) * | 2011-11-17 | 2014-08-20 | 中国科学院计算技术研究所 | 用于机群文件***的元数据存储***和管理方法 |
US9584326B2 (en) | 2011-11-28 | 2017-02-28 | International Business Machines Corporation | Creating a new file for a dispersed storage network |
US20130238832A1 (en) | 2012-03-07 | 2013-09-12 | Netapp, Inc. | Deduplicating hybrid storage aggregate |
US8688652B2 (en) | 2012-04-05 | 2014-04-01 | International Business Machines Corporation | Increased in-line deduplication efficiency |
US9268502B2 (en) * | 2013-09-16 | 2016-02-23 | Netapp, Inc. | Dense tree volume metadata organization |
-
2013
- 2013-09-16 US US14/027,994 patent/US9268502B2/en active Active
-
2014
- 2014-01-23 US US14/162,228 patent/US8892818B1/en active Active
- 2014-09-11 WO PCT/US2014/055138 patent/WO2015038741A1/en active Application Filing
- 2014-09-11 EP EP14781721.7A patent/EP3036616B1/en active Active
- 2014-09-11 CN CN201480056037.4A patent/CN105612491A/zh active Pending
-
2015
- 2015-12-22 US US14/978,290 patent/US9563654B2/en active Active
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108090529A (zh) * | 2016-11-22 | 2018-05-29 | 上海宝信软件股份有限公司 | 基于射频识别技术的现场终端作业过程数据的存储方法 |
CN108090529B (zh) * | 2016-11-22 | 2021-08-06 | 上海宝信软件股份有限公司 | 基于射频识别技术的现场终端作业过程数据的存储方法 |
WO2018119843A1 (en) * | 2016-12-29 | 2018-07-05 | Intel Corporation | Network interface controller with non-volatile random access memory write packet log |
US11474736B2 (en) | 2016-12-29 | 2022-10-18 | Intel Corporation | Network interface controller with non-volatile random access memory write packet log |
CN111587425B (zh) * | 2017-11-13 | 2023-10-20 | 维卡艾欧有限公司 | 分布式存储***中的文件操作 |
CN111587425A (zh) * | 2017-11-13 | 2020-08-25 | 维卡艾欧有限公司 | 分布式存储***中的文件操作 |
CN108011949A (zh) * | 2017-11-30 | 2018-05-08 | 百度在线网络技术(北京)有限公司 | 用于获取数据的方法和装置 |
CN108011949B (zh) * | 2017-11-30 | 2021-03-09 | 百度在线网络技术(北京)有限公司 | 用于获取数据的方法和装置 |
CN107977167B (zh) * | 2017-12-01 | 2020-08-18 | 西安交通大学 | 一种基于纠删码的分布式存储***的退化读优化方法 |
CN107977167A (zh) * | 2017-12-01 | 2018-05-01 | 西安交通大学 | 一种基于纠删码的分布式存储***的退化读优化方法 |
CN112055850B (zh) * | 2017-12-13 | 2024-04-23 | 美光科技公司 | Nand装置及相关方法和机器可读媒体 |
CN112055850A (zh) * | 2017-12-13 | 2020-12-08 | 美光科技公司 | 可变宽度超级块寻址 |
CN109521963B (zh) * | 2018-11-14 | 2021-08-10 | 郑州云海信息技术有限公司 | 一种元数据落盘方法及装置 |
CN109521963A (zh) * | 2018-11-14 | 2019-03-26 | 郑州云海信息技术有限公司 | 一种元数据落盘方法及装置 |
CN110568994A (zh) * | 2019-08-16 | 2019-12-13 | 北京字节跳动网络技术有限公司 | 逻辑块设备访问方法、装置及电子设备 |
CN110568994B (zh) * | 2019-08-16 | 2023-11-14 | 北京火山引擎科技有限公司 | 逻辑块设备访问方法、装置及电子设备 |
CN110618834A (zh) * | 2019-09-05 | 2019-12-27 | 苏州浪潮智能科技有限公司 | I/o栈请求响应方法、***和i/o栈请求响应控制方法及*** |
CN111158606B (zh) * | 2019-12-31 | 2020-11-03 | 广州鼎甲计算机科技有限公司 | 存储方法、装置、计算机设备和存储介质 |
CN111158606A (zh) * | 2019-12-31 | 2020-05-15 | 广州鼎甲计算机科技有限公司 | 存储方法、装置、计算机设备和存储介质 |
CN114063895B (zh) * | 2020-07-31 | 2023-07-28 | 株式会社日立制作所 | 存储***和存储***中的数据复制方法 |
CN114063895A (zh) * | 2020-07-31 | 2022-02-18 | 株式会社日立制作所 | 存储***和存储***中的数据复制方法 |
CN117950599A (zh) * | 2024-03-27 | 2024-04-30 | 国家超级计算天津中心 | 基于分布式***的i/o栈构建方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
EP3036616B1 (en) | 2020-05-27 |
US20150081966A1 (en) | 2015-03-19 |
US9563654B2 (en) | 2017-02-07 |
US9268502B2 (en) | 2016-02-23 |
WO2015038741A1 (en) | 2015-03-19 |
US20160110392A1 (en) | 2016-04-21 |
EP3036616A1 (en) | 2016-06-29 |
US8892818B1 (en) | 2014-11-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105612491A (zh) | 分布式存储架构中基于具有密集树结构的元数据的盘区的管理 | |
US9405473B2 (en) | Dense tree volume metadata update logging and checkpointing | |
US9959279B2 (en) | Multi-tier caching | |
US9779018B2 (en) | Technique for quantifying logical space trapped in an extent store | |
US9836355B2 (en) | Reconstruction of dense tree volume metadata state across crash recovery | |
US9740566B2 (en) | Snapshot creation workflow | |
US9471248B2 (en) | Snapshots and clones of volumes in a storage system | |
US9268653B2 (en) | Extent metadata update logging and checkpointing | |
US8832363B1 (en) | Clustered RAID data organization | |
US10108547B2 (en) | High performance and memory efficient metadata caching | |
US20170315878A1 (en) | Method for low overhead, space tracking, high performance snapshots and clones by transfer of extent ownership | |
US20170032013A1 (en) | Technique for preserving efficiency for replication between clusters of a network | |
US20160070644A1 (en) | Offset range operation striping to improve concurrency of execution and reduce contention among resources | |
CN101162469A (zh) | 基于快照的细粒度文件与目录版本管理方法 | |
US20170212919A1 (en) | Bottom-up dense tree repair technique | |
US10387384B1 (en) | Method and system for semantic metadata compression in a two-tier storage system using copy-on-write | |
CN118394762A (zh) | 分布式存储***的存储管理方法、设备、程序产品及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
CB02 | Change of applicant information |
Address after: American California Applicant after: NETAPP incorporated company Address before: American California Applicant before: Network Appliance Inc. |
|
COR | Change of bibliographic data | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160525 |
|
WD01 | Invention patent application deemed withdrawn after publication |