CN109725842A - 加速随机写入布局以用于混合存储系统内的桶分配的系统和方法 - Google Patents
加速随机写入布局以用于混合存储系统内的桶分配的系统和方法 Download PDFInfo
- Publication number
- CN109725842A CN109725842A CN201711039911.5A CN201711039911A CN109725842A CN 109725842 A CN109725842 A CN 109725842A CN 201711039911 A CN201711039911 A CN 201711039911A CN 109725842 A CN109725842 A CN 109725842A
- Authority
- CN
- China
- Prior art keywords
- bucket
- data
- tree
- storage
- computer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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/0253—Garbage collection, i.e. reclamation of unreferenced 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/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0873—Mapping of cache memory to specific storage devices or parts thereof
-
- 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
- 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
-
- 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
- G06F3/0656—Data buffering arrangements
-
- 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
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- 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/22—Employing cache memory using specific memory technology
- G06F2212/222—Non-volatile memory
-
- 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/26—Using a specific storage system architecture
- G06F2212/261—Storage comprising a plurality of storage devices
- G06F2212/262—Storage comprising a plurality of storage devices configured as RAID
-
- 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/28—Using a specific disk cache architecture
- G06F2212/283—Plural cache memories
- G06F2212/284—Plural cache memories being distributed
-
- 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/7205—Cleaning, compaction, garbage collection, erase control
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)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种用于通过计算设备接收I/O请求的方法、计算机程序产品和计算机系统。可以向该I/O请求分配桶。可以将该I/O请求的偏移和映射信息写入到日志中。可以将该I/O请求的偏移和映射信息写入到树结构中。可以执行针对树结构的垃圾收集以重新使用桶。
Description
背景技术
通常,随着正在存储的信息量的增加,有效地存储和管理这些信息可能是有益的。虽然有很多技术可以用于存储和管理信息,但是每个技术都可能有可靠性与效率之间的折衷。
发明内容
在一个示例实施方式中,一种由一个或多个计算设备执行的方法可以包括但不限于通过计算设备接收I/O请求。可以为该I/O请求分配桶。可以将该I/O请求的偏移和映射信息写入到日志中。可以将该I/O请求的偏移和映射信息写入到树结构中。可以执行垃圾收集以重新使用桶。
可以包括以下示例特征中的一个或多个。树结构可以包括B+树。B+树可以包括bkey。bkey可以存储固态设备中的数据与后端设备中的数据之间的映射信息。桶的分配可以是顺序分配。可以确定树结构中存在重叠。可以拆分树结构。
在另一示例实施方式中,一种计算系统可以包括一个或多个处理器和一个或多个存储器,其被配置为执行可以包括但不限于接收I/O请求的操作。可以为I/O请求分配桶。可以将I/O请求的偏移和映射信息写入到日志中。可以将I/O请求的偏移和映射信息写入到树结构中。可以执行针对树结构的垃圾收集以重新使用桶。
可以包括以下示例特征中的一个或多个。树结构可以包括B+树。B+树可以包括bkey。bkey可以存储固态设备中的数据与后端设备中的数据之间的映射信息。桶的分配可以是顺序分配。可以确定树结构中存在重叠。可以拆分树结构。
在另一示例实施方式中,一种计算机程序产品可以驻留在其上存储有多个指令的计算机可读存储介质上,多个指令当在一个或多个处理器上被执行时可以使得一个或多个处理器的至少一部分执行操作,该操作可以包括但不限于接收I/O请求。可以为该I/O请求分配桶。可以将该I/O请求的偏移和映射信息写入到日志中。可以将该I/O请求的偏移和映射信息写入到树结构中。可以执行针对树结构的垃圾收集以重新使用桶。
可以包括以下示例特征中的一个或多个。树结构可以包括B+树。B+树可以包括bkey。bkey可以存储固态设备中的数据与后端设备中的数据之间的映射信息。桶的分配可以是顺序分配。可以确定树结构中存在重叠。可以拆分树结构。
在附图和下面的描述中阐述了一个或多个示例实施方式的细节。其他可能的示例特征和/或可能的示例优点将从说明书、附图和权利要求书变得明显。一些实施方式可能不具有那些可能的示例特征和/或可能的示例优点,并且这样的可能的示例特征和/或可能的示例优点可能不一定是一些实施方式所必需的。
附图说明
图1是根据本公开的一个或多个示例实施方式的耦合到示例分布式计算网络的桶过程的示例示意图;
图2是根据本公开的一个或多个示例实施方式的图1的计算机的示例示意图;
图3是根据本公开的一个或多个示例实施方式的图1的存储目标的示例示意图;
图4是根据本公开的一个或多个示例实施方式的桶过程的示例流程图;
图5是根据本公开的一个或多个示例实施方式的示例高速缓存设备层结构的示例示意图;
图6是根据本公开的一个或多个示例实施方式的示例数据结构的示例示意图;
图7是根据本公开的一个或多个示例实施方式的示例B树结构的示例示意图;
图8是根据本公开的一个或多个示例实施方式的存储器中的示例B树结构的示例示意图;以及
图9是根据本公开的一个或多个示例实施方式的具有重叠的示例密钥结构的示例视图;以及
图10是根据本公开的一个或多个示例实施方式的示例重叠数据结构的示例视图。
各附图中相同的附图标记表示相同的元件。
具体实施方式
系统概述:
在一些实施方式中,本公开可以被实施为方法、系统或计算机程序产品。因此,在一些实施方式中,本公开可以采用完全硬件实现、完全软件实现(包括固件、驻留软件、微代码等)或组合软件和硬件方面的实现的形式,其在本文中通常都可以称为“电路”、“模块”或“系统”。此外,在一些实施方式中,本公开可以采用其中实施有计算机可用程序代码的计算机可用存储介质上的计算机程序产品的形式。
在一些实施方式中,可以使用任何合适的计算机可用或计算机可读介质。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可用或计算机可读存储介质(包括与计算设备或客户端电子设备相关联的存储设备)可以是例如但不限于电子、磁性、光学、电磁、红外、或半导体系统、装置、设备或前述的任何合适的组合。计算机可读介质的更具体的示例(非详尽列表)可以包括以下:具有一条或多条线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪速存储器)、光纤、便携式光盘只读存储器(CD-ROM)、光存储设备、数字通用盘(DVD)、静态随机存取存储器(SRAM)、记忆棒、软盘、诸如在其上记录有指令的凹槽中的打孔卡或凸起结构等机械编码设备、诸如支持因特网或内联网的介质、或磁存储设备。注意,计算机可用或计算机可读介质甚至可以是在其上程序以适当的方式被存储、扫描、编译、解释、或根据需要以其他方式被处理并且然后存储在计算机存储器中的适当的介质。在本公开的上下文中,计算机可用或计算机可读的存储介质可以是可以包含或存储用于由或结合指令执行系统、装置或设备来使用的程序的任何有形介质。
在一些实施方式中,计算机可读信号介质可以包括其中实施有计算机可读程序代码的传播的数据信号,例如在基带中或作为载波的一部分。在一些实施方式中,这样的传播信号可以采用各种形式中的任何形式,包括但不限于电磁、光学或其任何合适的组合。在一些实施方式中,计算机可读程序代码可以使用任何适当的介质来传输,包括但不限于互联网、有线、光纤电缆、RF等。在一些实施方式中,计算机可读信号介质可以是任何如下的计算机可读介质,其不是计算机可读存储介质但是可以传送、传播或传输程序用于由或结合指令执行系统、装置或设备来使用。
在一些实施方式中,用于执行本公开的操作的计算机程序代码可以是汇编器指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任何组合编写的源代码或目标代码,包括面向对象的编程语言,诸如Smalltalk、C++等。以及所有基于Java的商标和标志是Oracle和/或其附属公司的商标或注册商标。然而,用于执行本公开的操作的计算机程序代码也可以以传统的程序编程语言(诸如“C”编程语言、PASCAL或类似的编程语言)以及以脚本语言(诸如Javascript、PERL或Python)来编写。程序代码可以完全在用户的计算机上执行,部分地在用户的计算机上,作为独立的软件包来执行,部分地在用户的计算机上并且部分地在远程计算机上执行,或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过局域网(LAN)或广域网(WAN)连接到用户的计算机,或者可以进行到外部计算机的连接(例如,通过互联网使用因特网服务提供商)。在一些实施方式中,电子电路(包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或其他硬件加速器、微控制器单元(MCU)或可编程逻辑阵列(PLA))可以通过利用计算机可读程序指令的状态信息个性化电子电路来执行计算机可读程序指令/代码,以便执行本发明的各方面。
在一些实施方式中,附图中的流程图和框图示出了根据本公开的各种实施方式的装置(系统)、方法和计算机程序产品的可能实现的架构、功能和操作。流程图和/或框图中的每个框、以及流程图和/或框图中的框的组合可以表示代码的模块、分段或部分,其包括用于实现所规定的逻辑功能/动作的一个或多个可执行计算机程序指令。这些计算机程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得可以经由计算机或其他可编程数据处理装置的处理器执行的计算机程序指令创建实现在流程图和/或框图或其组合中规定的一个或多个功能/动作的能力。应当注意,在一些实施方式中,框中记载的功能可以不按照图中所示的顺序来发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者框有时可以以相反的顺序执行。
在一些实施方式中,这些计算机程序指令还可以存储在计算机可读存储器中,其可以引导计算机或其他可编程数据处理装置以特定方式工作,使得存储在计算机可读存储器中的指令产生包括实现在流程图和/或框图或其组合中规定的功能/动作的指令装置的制品。
在一些实施方式中,计算机程序指令还可以被加载到计算机或其他可编程数据处理装置上,以引起一系列操作步骤在计算机或其他可编程装置上被执行(不一定以特定顺序)以产生计算机实现的过程,使得在计算机或其他可编程装置上执行的指令提供用于实现在流程图和/或框图或其组合中规定的功能/动作(不一定以特定顺序)的步骤。
现在参考图1的示例实施方式,示出了可以驻留在计算机(例如,计算机12)上并且可以由计算机执行的桶过程10,计算机可以连接到网络(例如,网络14)(例如,互联网或局域网)。计算机12(和/或下面提到的一个或多个客户端电子设备)的示例可以包括但不限于存储系统(例如,网络附接存储(NAS)系统、存储区域网络(SAN))、个人计算机、膝上型计算机、移动计算设备、服务器计算机、一系列服务器计算机、大型计算机、或计算云。如本领域已知的,SAN可以包括一个或多个客户端电子设备,包括RAID设备和NAS系统。在一些实施方式中,上述中的每个可以一般地被描述为计算设备。在某些实施方式中,计算设备可以是物理或虚拟设备。在很多实施方式中,计算设备可以是能够执行操作的任何设备,诸如专用处理器、处理器的一部分、虚拟处理器、虚拟处理器的一部分、虚拟设备的一部分、或虚拟设备。在一些实施方式中,处理器可以是物理处理器或虚拟处理器。在一些实施方式中,虚拟处理器可以对应于一个或多个物理处理器的一个或多个部分。在一些实施方式中,指令/逻辑可以在一个或多个虚拟或物理的处理器上分布和执行,以执行指令/逻辑。计算机12可以执行操作系统,例如但不限于 RedMobile、Chrome OS、Blackberry OS、Fire OS或自定义操作系统。(Microsoft和Windows是Microsoft公司在美国、其他国家或两者的注册商标;Mac和OS X是Apple Inc.在美国、其他国家或两者的注册商标;Red Hat是Red Hat公司在美国、其他国家或两者的注册商标;Linux是Linus Torvalds在美国、其他国家或两者的注册商标)。
在一些实现中,如下面将更详细地讨论的,桶过程(诸如图1的桶过程10)可以通过计算设备接收I/O请求(例如,I/O 15)。可以为该I/O请求分配桶。可以将该I/O请求的偏移和映射信息写入到日志中。可以将该I/O请求的偏移和映射信息写入到树结构中。可以执行针对树结构的垃圾收集以重新使用桶。
在一些实施方式中,可以存储在耦合到计算机12的存储设备(诸如存储设备16)上的桶过程10的指令集和子例程可以由包括在计算机12内的一个或多个处理器和一个或多个存储器架构来执行。在一些实施方式中,存储设备16可以包括但不限于:硬盘驱动器;所有形式的闪存存储设备;磁带驱动器;光驱;RAID阵列(或其他阵列);随机存取存储器(RAM);只读存储器(ROM);或其组合。在一些实施方式中,存储设备16可以被组织为区段(extent)、区段池、RAID区段(例如,示例4D+1P R5,其中RAID区段可以包括例如可以从例如五个不同的存储设备所分配的五个存储设备区段)、映射RAID(例如,RAID区段的集合)、或其组合。
在一些实施方式中,例如,网络14可以连接到一个或多个次级网络(例如,网络18),其示例可以包括但不限于:局域网;广域网;或内联网。
在一些实施方式中,计算机12可以包括数据存储,诸如数据库(例如,关系数据库、面向对象的数据库、三元组表存储数据库等),并且可以位于任何合适的存储器位置内,诸如耦合到计算机12的存储设备16。在一些实施方式中,贯穿本公开描述的数据、元数据、信息等可以存储在数据存储中。在一些实施方式中,计算机12可以使用任何已知的数据库管理系统,诸如但不限于DB2,以便提供对诸如上述关系数据库等一个或多个数据库的多用户访问。在一些实施方式中,数据存储也可以是自定义数据库,诸如平面文件数据库或XML数据库。在一些实施方式中,也可以使用数据存储结构和/或组织的任何其他形式。在一些实施方式中,桶过程10可以是数据存储的部件、与上述数据存储接口的独立应用、和/或经由客户端应用22、24、26、28而被访问的小程序/应用。在一些实施方式中,上述数据存储可以全部或部分地分布在云计算拓扑中。以这种方式,计算机12和存储设备16可以指代也可以分布在整个网络中的多个设备。可以与本公开一起使用的示例云计算环境可以包括但不限于例如来自马萨诸塞州霍普金顿的Dell EMCTM的弹性云存储(ECSTM)。在一些实施方式中,在不脱离本公开的范围的情况下,可以使用其他云计算环境。
在一些实施方式中,计算机12可以执行存储管理应用(例如,存储管理应用21),其示例可以包括但不限于例如存储系统应用、云计算应用、数据同步应用、数据迁移应用、垃圾回收应用、或者允许在集群(或非集群)环境(或类似)中实现和/或管理数据的其他应用。在一些实施方式中,桶过程10和/或存储管理应用21可以经由客户端应用22、24、26、28中的一个或多个来访问。在一些实施方式中,桶过程10可以是独立应用,或者可以是可以与存储管理应用21、存储管理应用21的部件、和/或客户端应用22、24、26、28中的一个或多个交互、和/或在其内执行的小应用/应用/脚本/扩展。在一些实施方式中,存储管理应用21可以是独立的应用程序,或者可以是可以与桶过程10、桶过程10的部件、和/或客户端应用22、24、26、28中的一个或多个交互、和/或在其内执行的小应用/应用/脚本/扩展。在一些实施方式中,客户端应用22、24、26、28中的一个或多个可以是独立应用,或者可以是可以与桶过程10和/或存储管理应用21的部件交互、和/或在其内执行、和/或作为其的小应用/应用/脚本/扩展。客户端应用22、24、26、28的示例可以包括但不限于例如存储系统应用、云计算应用、数据同步应用、数据迁移应用、垃圾收集应用、或者允许在集群(或非群集)环境(或类似)中实现和/或管理数据的其他应用、标准和/或移动网络浏览器、电子邮件应用(例如,电子邮件客户端应用)、文本和/或图形用户界面、定制网络浏览器、插件、应用编程接口(API)、或定制应用。可以存储在耦合到客户端电子设备38、40、42、44的存储设备30、32、34、36上的客户端应用22、24、26、28的指令集和子例程可以由被并入到客户端电子设备38、40、42、44中的一个或多个处理器和一个或多个存储器架构来执行。
在一些实施方式中,存储设备30、32、34、36中的一个或多个可以包括但不限于:硬盘驱动器;闪存驱动器,磁带驱动器;光驱;RAID阵列、随机存取存储器(RAM);和只读存储器(ROM)。客户端电子设备38、40、42、44(和/或计算机12)的示例可以包括但不限于个人计算机(例如,客户端电子设备38)、膝上型计算机(例如,客户端电子设备40)、智能/数据启用的蜂窝电话(例如,客户端电子设备42)、笔记本计算机(例如,客户端电子设备44)、平板电脑、服务器、电视、智能电视、媒体(例如,视频、照片等)捕获设备、和专用网络设备。客户端电子设备38、40、42、44每个可以执行操作系统,其示例可以包括但不限于AndroidTM、 OSMobile、Chrome OS、Blackberry OS、Fire OS、或自定义操作系统。
在一些实施方式中,客户端应用22、24、26、28中的一个或多个可以被配置为实现桶过程10的一些或全部功能(反之亦然)。因此,在一些实施方式中,桶过程10可以是由客户端应用22、24、26、28中的一个或多个和/或桶过程10协作执行的纯服务器侧应用、纯客户端侧应用、或混合的服务器侧/客户端侧应用。
在一些实施方式中,客户端应用22、24、26、28中的一个或多个可以被配置为实现存储管理应用21的一些或全部功能(反之亦然)。因此,在一些实施方式中,存储管理应用21可以是由客户端应用22、24、26、28和/或存储管理应用21中的一个或多个协作执行的纯服务器侧应用、纯客户端侧应用、或混合的服务器侧/客户端侧应用。虽然客户端应用22、24、26、28中的一个或多个、桶过程10和存储管理应用21单独地或以任何组合可以实现上述功能中的一些或全部,但是经由客户端应用22、24、26、28中的一个或多个、桶过程10、存储管理应用21、或其组合来实现这样的功能的任何描述、以及用于执行这样的功能的客户端应用22、24、26、28中的一个或多个、桶过程10、存储管理应用21、或其组合之间的任何描述的交互应当仅作为示例,而不是限制本公开的范围。
在一些实施方式中,用户46、48、50、52中的一个或多个可以通过网络14或者通过次级网络18直接访问计算机12和桶过程10(例如,使用客户端电子设备38、40、42、44中的一个或多个)。此外,计算机12可以通过次级网络18连接到网络14,如幻象(phantom)链路线路54所示。桶过程10可以包括一个或多个用户界面,诸如浏览器和文本或图形用户界面,用户46、48、50、52可以通过其来访问桶过程10。
在一些实施方式中,各种客户端电子设备可以直接或间接地耦合到网络14(或网络18)。例如,客户端电子设备38被示出为经由硬连线网络连接直接耦合到网络14。此外,客户端电子设备44被示出为经由硬连线网络连接直接耦合到网络18。客户端电子设备40被示出经由无线通信信道56无线地耦合到网络14,无线通信信道56建立在客户端电子设备40与被示出为直接耦合到网络14的无线接入点(即,WAP)58之间。WAP 58可以是例如能够在客户端电子设备40与WAP 58之间建立无线通信信道56的IEEE 802.11a、802.11b、802.11g、802.11n、802.11ac、RFID、和/或BluetoothTM(包括低功耗BluetoothTM)设备。客户端电子设备42被示出为经由无线通信信道60无线地耦合到网络14,无线通信信道60建立在客户端电子设备42与被示出为例如直接耦合到网络14的蜂窝网络/网桥62之间。
在一些实施方式中,IEEE 802.11x规范中的一些或全部可以使用以太网协议和具有冲突避免的载波侦听多路访问(即,CSMA/CA)以用于路径共享。各种802.11x规范可以使用例如相移键控(即PSK)调制或互补码键控(即CCK)调制。BluetoothTM(包括低功耗BluetoothTM)是使得例如移动电话、计算机、智能电话和其他电子设备能够使用短距离无线连接而互连的电信行业规范。也可以使用其他形式的互连(例如,近场通信(NFC))。
在一些实施方式中,各种I/O请求(例如,I/O请求15)可以从例如客户端应用22、24、26、28发送到例如计算机12。I/O请求15的示例可以包括但不限于数据写请求(例如,将内容写入计算机12的请求)和数据读请求(例如,从计算机12读取内容的请求)。
数据存储系统:
还参考图2-3的示例实施方式(例如,其中计算机12可以被配置为数据存储系统,诸如但不限于来自Dell EMCTM的VNX存储系统),计算机12可以包括存储处理器100和多个存储目标(例如,存储目标102、104、106、108、110)。在一些实施方式中,存储目标102、104、106、108、110可以包括任何上述存储设备。在一些实施方式中,存储目标102、104、106、108、110可以被配置为提供各种级别的性能和/或高可用性。例如,存储目标102、104、106、108、110可以被配置为形成非完全重复的容错数据存储系统(诸如非完全重复的RAID数据存储系统),其示例可以包括但不限于:RAID 3阵列、RAID 4阵列、RAID 5阵列和/或RAID 6阵列。应当理解,在不脱离本公开的范围的情况下,可以使用各种其他类型的RAID阵列。
虽然在该特定示例中,计算机12被示出为包括五个存储目标(例如,存储目标102、104、106、108、110),但是这仅是示例目的,并不意图限制本公开。例如,存储目标的实际数目可以根据例如所需要的冗余/性能/容量等级而增加或减少。
此外,与计算机12一起被包括的存储目标(例如,存储目标102、104、106、108、110)可以被配置为形成多个离散存储阵列。例如,并且仅用于示例目的,假定计算机12包括例如十个离散的存储目标,(十个存储目标中的)前五个目标可以被配置成形成第一RAID阵列并且(十个存储目标中的)第二个五个目标可以被配置为形成第二RAID阵列。
在一些实施方式中,存储目标102、104、106、108、110中的一个或多个可以被配置为存储经编码的数据(例如,经由存储管理应用21),其中这样的编码数据可以实现在存储目标102、104、106、108、110中的一个或多个上的丢失/损坏的数据的再生。这样的编码数据的示例可以包括但不限于奇偶校验数据和Reed-Solomon数据。这样的编码数据可以跨所有存储目标102、104、106、108、110分布,或者可以存储在特定的存储目标中。
存储目标102、104、106、108、110的示例可以包括一个或多个数据阵列,其中存储目标102、104、106、108、110的组合(以及与存储管理应用21相关联的任何处理/控制系统)可以形成数据阵列112。
计算机12的实现方式可以根据例如所需要的冗余/性能/容量等级而变化。例如,计算机12可以被配置为SAN(即,存储区域网络),其中存储处理器100可以是例如专用计算系统并且存储目标102、104、106、108、110中的每个均可以是RAID设备。
在其中计算机12被配置为SAN的示例中,计算机12的各种部件(例如,存储处理器100和存储目标102、104、106、108、110)可以使用网络基础设施114来耦合,网络基础设施114的示例可以包括但不限于以太网(例如,层2或层3)网络、光纤通道网络、无限带宽技术网络、或任何其他电路交换/分组交换网络。
如上所述,可以生成各种I/O请求(例如,I/O请求15)。例如,这些I/O请求可以从例如客户端应用22、24、26、28发送到例如计算机12。另外地/替代地(例如,当存储处理器100被配置为应用服务器等时),这些I/O请求可以在存储处理器100内在内部生成(例如,经由存储管理应用21)。I/O请求15的示例可以包括但不限于数据写请求116(例如,将内容118写入计算机12的请求)和数据读请求120(例如,从计算机12读取内容118的请求)。
在一些实施方式中,在存储处理器100的操作期间,要写入计算机12的内容118可以由存储处理器100接收和/或处理(例如,经由存储管理应用21)。另外地/替代地(例如,当存储处理器100被配置为应用服务器等时),要写入计算机12的内容118可以由存储处理器100在内部生成(例如,经由存储管理应用21)。
如上所述,可以存储在被包括在计算机12内的存储设备16上的存储管理应用21的指令集和子例程可以由与计算机12一起被包括的一个或多个处理器和一个或多个存储器架构来执行。因此,除了在存储处理器100上执行之外,存储管理应用21(和/或桶过程10)的指令集和子例程中的一些或全部可以由与数据阵列112一起被包括的一个或多个处理器执行和一个或多个存储器架构来执行。
在一些实施方式中,存储处理器100可以包括前端高速缓存存储器系统122。前端高速缓存存储器系统122的示例可以包括但不限于易失性固态高速缓存存储器系统(例如,动态RAM高速缓存存储器系统)、非易失性固态高速缓存存储器系统(例如,基于闪存的高速缓存存储器系统)、和/或任何上述存储设备。
在一些实施方式中,存储处理器100最初可以将内容118存储在前端高速缓存存储器系统122内。取决于前端高速缓存存储器系统122被配置的方式,存储处理器100(例如,经由存储管理应用21)可以立即将内容118写入数据阵列112(例如,如果前端高速缓存存储器系统122被配置为直写高速缓存),或者可以随后将内容118写入数据阵列112(例如,如果前端高速缓存存储器系统122被配置为回写高速缓存)。
在一些实施方式中,存储目标102、104、106、108、110中的一个或多个可以包括后端高速缓存存储器系统。后端高速缓存存储器系统的示例可以包括但不限于易失性固态高速缓存存储器系统(例如,动态RAM高速缓存存储器系统)、非易失性固态高速缓存存储器系统(例如,基于闪存的高速缓存存储器系统)、和/或任何上述存储设备。
存储目标:
如上所述,存储目标102、104、106、108、110中的一个或多个可以是RAID设备。例如,还参考图3,示出了示例目标150,其中目标150可以是例如存储目标102、存储目标104、存储目标106、存储目标108、和/或存储目标110的RAID实现的一个示例实现。存储设备154、156、158、160、162的示例可以包括一个或多个电机硬盘驱动器、一个或多个固态/闪存设备、和/或任何上述存储设备。应当理解,虽然可能通篇使用术语“盘”或“驱动器”,但是这些可以指代任何类型的适当的存储设备并且可与其互换地使用,因为存储设备的上下文和功能允许。
在一些实施方式中,目标150可以包括存储处理器152和多个存储设备(例如,存储设备154、156、158、160、162)。存储设备154、156、158、160、162可以被配置为提供各种级别的性能和/或高可用性(例如,经由存储管理应用21)。例如,存储设备154、156、158、160、162(或任何上述存储设备)中的一个或多个可以被配置为RAID 0阵列,其中数据跨存储设备被条带化。通过跨多个存储设备对数据进行条带化,可以实现改进的性能。但是,RAID 0阵列可能无法提供高可用性级别。因此,存储设备154、156、158、160、162(或任何上述存储设备)中的一个或多个可以被配置为RAID 1阵列,其中数据在存储设备之间被镜像。通过在存储设备之间对数据进行镜像,可以实现高可用性级别,因为数据的多个副本可以存储在存储设备154、156、158、160、162内。
尽管上面讨论了存储设备154、156、158、160、162被配置为RAID 0或RAID 1阵列,但是这仅是示例目的,而非旨在限制本公开,因为其他配置是可能的。例如,存储设备154、156、158、160、162可以被配置为RAID 3、RAID 4、RAID 5或RAID 6阵列。
虽然在该特定示例中,目标150被示出为包括五个存储设备(例如,存储设备154、156、158、160、162),但是这仅是示例目的,而非旨在限制本公开。例如,可以取决于例如所需要的冗余/性能/容量等级来增加或减少存储设备的实际数目。
在一些实施方式中,存储设备154、156、158、160、162中的一个或多个可以被配置为存储(例如,经由存储管理应用21)经编码的数据,其中这样的编码数据可以实现在存储设备154、156、158、160、162中的一个或多个上的丢失/损坏的数据的再生。这样的编码数据的示例可以包括但不限于奇偶校验数据和Reed-Solomon数据。这样的编码数据可以跨所有存储设备154、156、158、160、162分布,或者可以存储在特定的存储设备中。
目标150被实现的方式可以取决于例如所需要的冗余/性能/容量等级而变化。例如,目标150可以是RAID设备,其中存储处理器152是RAID控制器卡并且存储设备154、156、158、160、162是单独的“可热插拔的”硬盘驱动器。目标150的另一示例可以是RAID系统,其示例可以包括但不限于NAS(即,网络附接存储)设备或SAN(即,存储区域网络)。
在一些实施方式中,存储目标150可以执行存储管理应用21的全部或部分。可以存储在耦合到存储处理器152的存储设备(例如,存储设备164)上的存储管理应用21的指令集和子例程可以由与存储处理器152一起被包括的一个或多个处理器和一个或多个存储器架构来执行。存储设备164可以包括但不限于任何上述存储设备。
如上所述,计算机12可以被配置为SAN,其中存储处理器100可以是专用计算系统并且存储目标102、104、106、108、110中的每个可以是RAID设备。因此,当存储处理器100处理数据请求116、120时,存储处理器100(例如,经由存储管理应用21)可以将适当的请求/内容(例如,写请求166、内容168和读请求170)提供给例如存储目标150(其代表存储目标102、104、106、108和/或110)。
在一些实施方式中,在存储处理器152的操作期间,要写入目标150的内容168可以由存储处理器152来处理(例如,经由存储管理应用21)。存储处理器152可以包括高速缓存存储器系统172。高速缓存存储器系统172的示例可以包括但不限于易失性固态高速缓存存储器系统(例如,动态RAM高速缓存存储器系统)和/或非易失性固态高速缓存存储器系统(例如,基于闪存的高速缓存存储器系统)。在存储处理器152的操作期间,要写入目标150的内容168可以由存储处理器152来接收(例如,经由存储管理应用21)并且最初存储在前端高速缓存存储器系统172中(例如,经由存储管理应用21)。
通常,存储系统的开发可能倾向于大容量、低成本和高性能。然而,由于其物理特性/限制,诸如非易失性随机存取存储器、盘、SSD等任何单个存储设备可能并不总是满足上述要求。混合(即,混杂)存储系统可以充分利用不同存储设备的特性,并且可以具有高效率,这可以增加存储容量并且保持低的系统成本,由此也提高了存储系统的性能。
在一些存储系统中,固态驱动器通常仅用作混合存储系统中的HDD的热数据高速缓存,其中SSD中的热数据可以用于加速读访问(类似于Linux页面缓存机制)。但是,数据组织和数据布局通常可能没有针对SSD而改变。因此,随机写入性能可能较差,并且可能引入太多的写入放大,这可能降低SSD寿命。此外,随着存储系统的使用的增加,随着时间的推移,系统性能可能会降低,因为可能不存在针对存储层中的SSD的任何优化。此外,I/O延迟可能是不可预测的,因为一些I/O延迟可能非常长,这有时可能对于用户而言不可接受。
如下面将要讨论的,桶过程可以实现新的混合存储系统架构,其可以使用基于桶的空间分配、可变长度数据块存储模式和区段映射方法,其可以将随机写入请求有效地转换为顺序写入请求,并且避免写入放大,并且可以提高混合存储系统的随机写入性能。写入请求可以被聚合成对盘的例如1M大小的写入请求,并且高效的垃圾回收技术可以减少写入放大,由此提高混合存储系统中的SSD的寿命。
如下面将要讨论的,桶过程10可以至少帮助例如对必须植根于计算机技术的现有存储技术的改进,以便克服在数据存储领域中具体存在的示例和非限制性问题。例如,桶过程10可以使用有效的过程来避免写入放大,并且可以提高混合存储系统的随机写入性能。
桶过程:
如以上所讨论的,并且还至少参考图4-9的示例实施方式,桶过程10可以通过计算设备接收400I/O请求。桶过程10可以为该I/O请求分配402桶。桶过程10可以将该I/O请求的偏移和映射信息写入404到日志中。桶过程10可以将该I/O请求的偏移和映射信息写入406到树结构中。桶过程10可以执行408针对树结构的垃圾收集以重新使用桶。
在一些实施方式中,桶过程10可以通过计算设备接收400I/O请求。例如,仅用于示例目的,假定用户(例如,用户46)想要发送针对数据的请求(例如,经由计算设备36)。在该示例中,I/O请求(例如,I/O 15)可以由计算设备36发送并且由桶过程10接收400。
在一些实施方式中,当存在来自应用层的写入请求时,可以将其(经由桶过程10)发送到多个CPU核以被处理,并且可以分配新的结构以跟踪该I/O请求,直到I/O被释放。在I/O过程中,其可以被调度为在任何CPU核上执行。如将更详细地讨论的,用于写入请求的桶过程10可以计算I/O指纹,其中如果在数据高速缓存中找到相同的指纹,则元数据计数可以被更新并且被直接返回,而如果没有找到相同的指纹,则桶过程10可以从当前使用的桶分配区段(例如,请求I/O大小),其中分配偏移可以接近最后一次分配。如果当前偏移加上分配长度超过桶边界,则桶过程10可以从所选择的空闲桶来分配空间。
桶过程10可以将I/O请求的偏移、映射和区段信息写入到日志中,并且可以等待日志写入完成。偏移和映射信息可以被插入到B树结构中,并且可以将其状态标识为脏。在B树中,桶过程10可以检查是否存在重叠区域,并且如果重叠存在,则桶过程10可以删除先前的映射,并且拆分先前存在的映射可以被重新插入到B树中,以确保SSD高速缓存中的数据的唯一性。桶过程10可以创建I/O请求,填写bio字段,将I/O请求写入到新分配的空间,并且将请求提交给SSD设备。当I/O请求完成时,桶过程10可以向堆栈中的上层通知I/O请求的完成。在一些实施方式中,I/O可以被调度为在任何CPU上执行,以允许多个I/O请求的并发执行,以实现多核并行处理I/O。
对于读取I/O,桶过程10可以首先查找高速缓存中的数据(经由指纹),并且如果存在命中,则可以直接返回所请求的数据,并且如果存在未命中,则桶过程10可以通过扇区和长度来搜索B树,以查找对应区段(如果对应区段存在于B树中)。通常,可以存在三种情况(例如,部分、完全、无)。如果SSD高速缓存中存在所有数据,则桶过程10可以根据映射构造I/O请求,从SSD高速缓存读取数据,并且一旦完成,可以将I/O返回给请求应用。
例如,对于部分命中的情况,桶过程10可以根据映射来拆分I/O请求,以创建I/O请求,其然后可以被提交给SSD。在未命中的情况下,桶过程10可以创建I/O请求并且将其提交到后端存储设备(例如,盘)。当两部分I/O完成时,可以将I/O发送给应用。同时,从盘(或其他存储设备)读取的数据可以被写入SSD,并且映射被插入到B树中。如果B树中的映射需要合并,则桶过程10可以这样做。
至少参考图5的示例实施方式,示出了示例高速缓存设备层结构500。在该示例中,高速缓存设备层结构500可以根据SSD特性来被设计。空间可以按任意桶大小来被分配。高速缓存数据可以通过桶过程10使用B树和日志、利用可以被保存在高速缓存中的任何大小区段(例如,512B-2M)来被管理,这可以降低随机写入的成本。桶可以按顺序被填充,并且可以在其被设置为无效状态时被重新使用。桶的使用可以支持直接写入和回写策略,并且当系统发生异常关闭时,数据可以仍然可靠,因为仅当数据被完全写回到后端时才能确认成功写入。桶过程10可以高速缓存绝大多数写入请求,并且然后通过索引将脏数据写回到后端存储设备。
在一些实施方式中,如上所述,桶过程10可以为I/O请求分配402桶。例如,可以根据桶大小将高速缓存设备划分成多个桶。在一些实施方式中,桶的大小可以被设置为与SSD擦除大小相同的大小(例如,128k~2M+,示例默认值被设置为512k)。每个桶可以具有优先级编号(例如,16位优先级),并且每当命中发生时,该优先级编号可以增加。所有桶的优先级编号可能会周期性地减少,而不常用的桶可以被回收。优先级编号可以用于帮助实现最近最少使用的(LRU)替换。桶可以具有8位生成,这可以用于使桶无效。
在一些实施方式中,桶的分配402可以是顺序分配。例如,桶中的空间分配可以是顺序分配,其中仅保存当前分配偏移,并且下一空间分配从当前偏移开始,使得随机I/O的应用层可以被转换成顺序写入。在一些实施方式中,桶过程10可以实现用于高速缓存数据的一个或多个优先级规则,例如1)在先I/O连续性,即使该I/O可能来自不同的产生者;以及2)考虑到多个I/O的相关性,来自相同过程的数据可以被高速缓存到相同的桶。
对于桶分配402,桶过程10可以确定在空闲列表中是否存在空闲桶,如果它存在则可以返回它。如果不存在可用的桶,则桶过程10可以进入等待状态直到存在可用的桶。桶过程10可以包括“唤醒分配线程”,其可以更新桶相关信息。如果桶被分配用于元数据,则桶过程10可以将桶设置为例如GC_MARK_METADATA,其可能不能够被任意回收。否则,桶可以被设置为可回收。
桶过程10还可以包括“分配线程”,其中如果分配free_inc列表不为空,则可以从free_inc列表获取桶,其中它可以被添加到空闲列表,使得分配函数被保证以具有可用的桶,并且可以唤醒等待桶的线程。如果空闲列表已满,则分配线程可以被阻塞。
在一些实施方式中,如果free_inc为空,则桶过程10可能需要使当前正在使用的桶无效。桶过程10可以通过例如遍历高速缓存盘中的每个桶来实现该操作。如果桶不可回收,则桶过程10可以使用比较函数(例如bucket_max_cmp)比较桶优先级来将桶添加到堆。桶过程10可以按照从小到大堆(例如,bucket_min_cmps)的优先级对每个桶进行排序,并且可以从堆中获取桶,调用例如sarw_invalidate_one_bucket,直到free_inc列表已满。如果free_inc列表未满,则桶过程10可以唤醒垃圾收集器线程(下面进一步讨论)并且更新存储在盘上的信息。
在一些实施方式中,桶过程10可以将I/O请求的偏移和映射信息写入406到树结构中。在一些实施方式中,树结构可以包括B+树,其中B+树可以包括bkey,并且其中bkey可以存储固态设备中的数据与后端设备中的数据之间的映射信息。例如,并且至少参考图6-7的示例实施方式,示出了SSD与HDD之间的映射的示例数据结构600以及示例B树结构700。在该示例中,桶过程10可以使用B+树(B+TREE)来管理桶,其中B树中的密钥结构可以是bkey,其可以保存高速缓存设备中的数据与后端设备中的数据之间的映射。
在图6中,KEY_SIZE可以表示高速缓存数据的大小,KEY_OFFSET可以是缓存在SSD中的HDD上的数据区域的结束地址,并且PTR_OFFSET可以包括缓存设备中的高速缓存数据起始地址。
在图7中,映射可以由B树管理,其中在该示例中,B树节点中可以存在例如四个BSET,并且bkey可以在BSET中被排序。每个B树(BTREE)节点可以由bkey来标识,bkey可以是其子节点中的最大bkey。非叶中的bkey可以用于寻找其子节点,计算散列(hash),并且然后在散列表中寻找b树(btree)节点。实际映射可以将bkey存储在叶节点中(例如,如图8中的示例所示,可以通过这些密钥可以在存储器中的B树结构800中被找到来找到高速缓存数据和HDD上的相应位置)。
在一些实施方式中,桶过程10可以将I/O请求的偏移和映射信息写入404到日志中。例如,该日志(例如,日记(journal))通常用于保持一致性,在一些实施方式中可以改为用于改善性能。每个写入操作可以使得桶过程10更新元数据(例如,bset)。为了帮助减少开销,日记(journal)可以包括按插入时间排序的插入的密钥,并且当非叶节点已经在拆分中被保留时可以仅在叶节点中记录更新。因此,在一些实施方式中,日志可以在数据被写入之后记录每个写入操作,并且在崩溃恢复时间,可以根据日志重新插入密钥。
可以将密钥插入到B树中的叶节点并且将密钥写入日记的示例函数(例如,sarw_data_insert_keys)可以包括以下示例步骤:
如果keylist中的密钥能够被填充到日记中的当前缓冲区中,则返回,否则可以存在两种情况,其中例如:1)当前日记未满,并且然后执行journal_try_write函数并且尝试写入日记的一部分,或者2)执行journal_reclaim函数并且尝试回收日记空间。桶过程10可以将密钥拷贝到日记高速缓存,并且如果(父)尝试保留在日记中,则例如journal_try_write,否则延迟例如30秒以调用日志冲刷线程。
对于日志写入过程,如果日记已满,则桶过程10可以调用journal_reclaim,然后找到最旧的B树节点并且将其写入到盘。桶过程10可以将其插入到日记中并且将其更新到盘中的日记区域。对于日志回收,用于日志/日记的空间可能是有限的。当日记接近满时,旧日记可能需要被丢弃。由于提供了用于存储日记的有限区域,当该区域已满时,最旧的桶可能需要被替换。丢弃的日记索引可以是discard_idx。用于选择要丢弃哪个桶的示例伪代码可以是例如:
last_seq=last_seq(&c->journal);
for_each_cache(ca,c,iter){
struct journal_device*ja=&ca->journal;
while(ja->last_idx!=ja->cur_idx&&
ja->seq[ja->last_idx]<last_seq)
ja->last_idx=(ja->last_idx+1)%
ca->sb.njournal_buckets;
}
在一些实施方式中,桶过程10可以执行408针对树结构的垃圾收集以重新使用桶。例如,垃圾收集目标可以是重新使用桶。在初始化阶段,函数可以判断关键点指向的桶的使用扇区是否小于特定阈值。如果是,则执行408垃圾回收,否则可以不回收桶。
垃圾收集通常可以通过无效桶被触发,例如使用可以由红黑树维护的moving_gc_keys keybuf来存储可以回收的密钥。桶过程10可以扫描整个B树,判断哪些bkey可以是用于垃圾收集的候选者,并且可以将可以是用于垃圾收集的候选者的密钥移动到moving_gc_keys bkey列表。桶过程10可以通过bkey从SSD读取数据,并且然后可以将数据写入HDD。在写入完成之后,桶过程10可以从moving_gc_keys列表移动密钥。
桶过程可以合并包含较少密钥的B树节点以释放桶。叶节点指向的桶的生成可以少于密钥生成,在这种情况下桶可以被回收。当inc_free列表未满时,桶过程10可以唤醒桶过程10的垃圾收集器线程。例如,桶过程10可以例如:设置标志以指示垃圾回收正在工作,并且遍历B树以分析哪些桶可以被回收。桶过程10可以将桶标志设置为元数据,并且计算可以回收的桶编号。桶过程10可以唤醒分配线程,并且完成实际的垃圾收集。
通常,如果bucket->gen>key->gen,则不需要进行垃圾收集。桶过程10可以计算key->gen-bucket->gen的最大值,并且更新垃圾收集信息。桶过程10可以遍历B树中的每个节点,并且如果节点(一至四)中的密钥占用较少的空间,则桶过程10可以合并B树节点以减少桶的使用。
桶过程10可以遍历高速缓存中的桶,并且如果其用于元数据或数据等于桶大小,则桶过程10可以填充moving_gc_keys列表。桶过程10可以从moving_gc_keys列表中获取元素,创建新的bio,填充bio,从SSD中的特定位置读取数据,并且将其写入SSD中的另一位置。
在一些实施方式中,关于回写机制,可以首先高速缓存所有写入,并且然后可以由桶过程10在后台冲刷脏数据。桶中的高速缓存数据可以对应于HDD上、或者甚至不同HDD中的不同位置。bkey可以是用于回写的单元,而不是桶。每个高速缓存可以被设置为具有writeback_keys,并且可以记录需要被回写的bkey。当脏数据(脏数据率)需要被冲刷时,桶过程10可以遍历整个B树,查找脏bkey并且将其插入到writeback_keys列表中(writeback_keys可以具有大小限制)。然后,桶过程10可以按盘偏移排序,将脏数据冲刷到HDD,从writeback_keys列表中移除相应的bkey,并且清除bkey脏标志。这可以减少磁头移动,并且可以提高冲刷数据的效率。
在一些实施方式中,每个cached_dev结构可以具有用于记录回写密钥的成员writeback_keys。仅用于示例目的,回写线程的示例伪代码可以在下面找到:
sarw_writeback_thread:
a.如果不脏或回写未在运行,则线程放弃CPU。
b.searching_full_index=refill_dirty(dc);
c.调用read_dirty,该函数遍历writeback_keys,bio结构被填充,然后从高速缓存设备读取数据。
io->bio.bi_bdev=PTR_CACHE(dc->disk.c,&w->key,0)->bdev;
io->bio.bi_rw=READ;
调用read_dirty_submit提交读取请求,在读取完成之后,调用write_dirty将数据写入HDD设备。
d.为了让回写不要太密集,调用delay=writeback_delay(DC,KEY_SIZE(& w->key))来计算两次写入之间的延迟时间,下一循环:调用schedule_timeout_uninterruptible延迟一段时间。
sarw_refill_keybuf可以遍历B树叶节点以填充keybuf,并且将脏密钥添加到keybuf。
在一些实施方式中,对于数据读取过程,桶过程10可以将bio直接提交到硬盘,并且如果不存在相应的高速缓存则可以返回。如果存在高速缓存设备,则根据bio,桶过程10可以创建结构搜索s。例如,桶过程10可以调用check_should_bypass,并且检查bio是否应当被旁路。如果bio是读取请求,则桶过程10可以调用cached_dev_read,并且如果bio是写入请求,则桶过程10可以调用cached_dev_write。
在一些实施方式中,对于旁路检查,如果bio是丢弃请求或者垃圾回收数大于CUTOFF_CACHE_ADD,则旁路为真。如果高速缓存被禁用,则旁路为真。如果bio扇区未按块大小对齐,则旁路为真。如果高速缓存设备拥塞,则旁路为真。如果I/O是顺序的并且I/O大小大于例如4M,则旁路为真。
在一些实施方式中,桶过程10可以首先在B树中搜索以检查高速缓存中是否存在数据。桶过程10可以遍历B树中的叶节点以查找bkey,并且当到达叶节点时,可以执行以下示例和非限制性过程:
如果搜索到的密钥小于当前密钥,则返回MAP_CONTINUE,让上层搜索下一密钥。如果密钥不在B树中,或者仅数据的一部分在B树中,则调用cache_miss函数。如果数据在高速缓存中(bkey是B+TREE,并且密钥中的数据范围全部在高速缓存中),则可以从高速缓存直接读取数据。然后,桶过程10可以设置桶优先级INITIAL_PRIO。
对于cache_miss:当读取非元数据并且预先读取未被禁用时,桶过程10可以计算可以被预先读取的扇区数。桶过程10可以计算需要在B树中添加或替换的密钥,并且将密钥提交给B树。桶过程10可以从HDD读取数据,将bio保存到iop.bio,使得数据可以被添加到高速缓存。
当高速缓存设备读取完成时,并且当s->iop.bio不为零时,这可以指示新数据已经被添加到B树,因此桶过程10可以首先将数据拷贝到cache_missbio,并且然后调用sarw_data_insert以将数据更新到高速缓存设备。
在一些实施方式中,桶过程10可以确定410在树结构中存在重叠。例如,并且至少参考图9的示例实施方式,示出了具有重叠的示例密钥结构900。在该示例中,可能需要考虑在高速缓存中的重叠。当存在重叠区域时,可能需要改变密钥结构,这可以使用以下示例和非限制性伪代码来实现:
sarw_data_insert_keys首先调用sarw_journal将密钥添加到日记,然后调用sarw_btree_insert,遍历keylist,针对每个密钥调用sarw_btree_map_leaf_nodes以将其插入到B树中。
关于数据写入过程,桶过程10可以检查是否存在与回写区域的重叠,并且如果存在重叠区域,则数据可以不被直接写入盘。如果bio是REQ_DISCARD请求,则旁路为真。桶过程10可以检查bio是否应该被回写,其中可以存在至少三种情况:(1)旁路:设置s->iop.bio=s->orig_bio;(2)如果回写打开,则sarw_writeback_add(dc);s->iop.bio=bio;数据不需要被立即写回硬盘,(3)数据被写回硬盘。
对于叶节点,如果B树节点不脏,则桶过程10可以延迟例如30秒以冲刷B树节点。如果B树节点为脏,并且bset的大小超过阈值,则桶过程10可以将该节点写入到盘。对于大多数情况,出于性能考虑,B树节点可以不被立即更新到高速缓存。日记可以保证更新的数据将不被丢失。
对于非叶节点,桶过程10可以清除脏标志并且调用do_btree_node_write,并且将节点更新到盘。在一些实施方式中,可以存在更新B树的三种情况。例如,(1)插入的密钥小于btree->key,直接调用btree_insert_key;(2)B树中存在与密钥的部分重叠,可以插入非重叠的部分;(3)如果其完全包含在btree密钥中,则不需要插入。
当存在新的写入I/O时,对应于HDD中的数据的I/O可以已经被部分地高速缓存在SSD上。重叠可能需要针对bkey被处理。B树节点可以被日志记录,并且盘上的B树节点可能重叠,因为它可能已经在不同的时间被写入。然而,存储器中的B树节点可能不重叠,因为插入的bkey可能与bkey重叠,则该问题需要被解决。此外,当从盘读取B树节点时,bsets中的bkey可能需要具有合并排序,因此桶过程10可以检查重叠并且解决该问题。例如,并且至少参考图10的示例实施方式,示出了示例重叠数据结构1000。从图10可以看出,可以修改原始bkey(例如,SSD和HDD上的偏移、以及数据大小可以被修改)。
在一些实施方式中,桶过程10可以拆分412树结构。例如,对于B树拆分,桶过程10可以调用btree_node_alloc_replacement来复制一个B树节点,并且空间可以从桶来被分配。桶过程10可以确定是否需要拆分,其中split=set_blocks(btree_bset_first(n1),block_bytes(n1->c))>(btree_blocks(b)*4)/5;
如果拆分为真,则在密钥插入中,桶过程10可以将密钥递归地插入到叶节点中。如果需要拆分,则桶过程10可以将其拆分412为两个节点,其中两个节点中的最大密钥可以被传送到上层函数,并且上层中的函数可以添加密钥(以便修改父节点指针)。如果该层也需要被拆分,则桶过程10可以实现与先前拆分过程相同的过程,其中拆分的节点可以被立即存储到SSD。
本文中使用的术语仅用于描述特定实现的目的,而不意在限制本公开。如本文中使用的,单数形式“一个(a)”、“一个(an)”和“该(the)”也旨在包括复数形式,除非上下文另有明确指示。如本文中使用的,语言“A、B和C中的至少一个”(等)应当被解释为覆盖仅A、仅B、仅C、或三者的任何组合,除非上下文另有明确指示。进一步理解,当在本说明书中使用时,术语“包括(comprises)”和/或“包括(comprising)”规定所述特征、整体、步骤(不一定以特定顺序)、操作、元素和/或部件的存在,但是不排除一个或多个其他特征、整体、步骤(不一定以特定顺序)、操作、元素、部件和/或其组合的存在或添加。
可以在权利要求中的相应的结构、材料、动作和等同物(例如,所有手段或步骤加上功能元件)旨在包括用于结合其他要求保护的元素来执行功能的任何结构、材料或动作,如具体所要求保护的。本公开的描述被呈现用于说明和描述的目的,而非旨在穷举或限于所公开的形式的公开内容。在不脱离本公开的范围和精神的情况下,对本领域普通技术人员来说,很多修改、变型、替换及其任何组合将是明显的。选择和描述实现,以便解释本公开的原理和实际应用,并且以便使得本领域普通技术人员能够了解具有适合于预期的特定用途的实现的各种修改和/或任何组合的各种实现的公开内容。
已经通过参考其实现详细描述了本申请的公开内容,将明显的是,在不脱离在所附权利要求中限定的本公开的范围的情况下,修改、变化和实现的任何组合(包括任何修改、变化、替换、及其组合)是可能的。
Claims (20)
1.一种计算机实现的方法,包括:
通过计算设备接收I/O请求;
为所述I/O请求分配桶;
将所述I/O请求的偏移和映射信息写入到日志中;
将所述I/O请求的所述偏移和映射信息写入到树结构中;以及
执行针对所述树结构的垃圾收集,以重新使用所述桶。
2.根据权利要求1所述的计算机实现的方法,其中所述树结构包括B+树。
3.根据权利要求2所述的计算机实现的方法,其中所述B+树包括bkey。
4.根据权利要求3所述的计算机实现的方法,其中所述bkey存储固态设备中的数据与后端设备中的数据之间的映射信息。
5.根据权利要求1所述的计算机实现的方法,其中所述桶的所述分配是顺序分配。
6.根据权利要求1所述的计算机实现的方法,还包括确定所述树结构中存在重叠。
7.根据权利要求1所述的计算机实现的方法,还包括拆分所述树结构。
8.一种驻留在计算机可读存储介质上的计算机程序产品,所述计算机可读存储介质上存储有多个指令,所述多个指令当在一个或多个处理器上被执行时使得所述一个或多个处理器的至少一部分执行操作,所述操作包括:
接收I/O请求;
为所述I/O请求分配桶;
将所述I/O请求的偏移和映射信息写入到日志中;
将所述I/O请求的所述偏移和映射信息写入到树结构中;以及
执行针对所述树结构的垃圾收集,以重新使用所述桶。
9.根据权利要求8所述的计算机程序产品,其中所述树结构包括B+树。
10.根据权利要求9所述的计算机程序产品,其中所述B+树包括bkey。
11.根据权利要求10所述的计算机程序产品,其中所述bkey存储固态设备中的数据与后端设备中的数据之间的映射信息。
12.根据权利要求8所述的计算机程序产品,其中所述桶的所述分配是顺序分配。
13.根据权利要求8所述的计算机程序产品,其中所述操作还包括确定所述树结构中存在重叠。
14.根据权利要求8所述的计算机程序产品,其中所述操作还包括拆分所述树结构。
15.一种计算系统,所述计算系统包括一个或多个处理器和一个或多个存储器,所述计算系统被配置为执行操作,所述操作包括:
接收I/O请求;
为所述I/O请求分配桶;
将所述I/O请求的偏移和映射信息写入到日志中;
将所述I/O请求的所述偏移和映射信息写入到树结构中;以及
执行针对所述树结构的垃圾收集,以重新使用所述桶。
16.根据权利要求15所述的计算系统,其中所述树结构包括B+树。
17.根据权利要求16所述的计算系统,其中所述B+树包括bkey。
18.根据权利要求17所述的计算系统,其中所述bkey存储固态设备中的数据与后端设备中的数据之间的映射信息。
19.根据权利要求15所述的计算系统,其中所述桶的所述分配是顺序分配。
20.根据权利要求15所述的计算系统,其中所述操作还包括拆分所述树结构。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711039911.5A CN109725842B (zh) | 2017-10-30 | 2017-10-30 | 加速随机写入布局以用于混合存储系统内的桶分配的系统和方法 |
US15/883,544 US10540114B2 (en) | 2017-10-30 | 2018-01-30 | System and method accelerated random write layout for bucket allocation with in hybrid storage systems |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711039911.5A CN109725842B (zh) | 2017-10-30 | 2017-10-30 | 加速随机写入布局以用于混合存储系统内的桶分配的系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109725842A true CN109725842A (zh) | 2019-05-07 |
CN109725842B CN109725842B (zh) | 2022-10-11 |
Family
ID=66243842
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711039911.5A Active CN109725842B (zh) | 2017-10-30 | 2017-10-30 | 加速随机写入布局以用于混合存储系统内的桶分配的系统和方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10540114B2 (zh) |
CN (1) | CN109725842B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112099732A (zh) * | 2019-06-17 | 2020-12-18 | 慧与发展有限责任合伙企业 | 非暂时性机器可读存储介质、计算系统和方法 |
CN113031873A (zh) * | 2021-03-26 | 2021-06-25 | 山东英信计算机技术有限公司 | 一种io请求处理方法、装置、设备及可读存储介质 |
CN114415963A (zh) * | 2021-12-03 | 2022-04-29 | 武汉深之度科技有限公司 | 一种硬盘数据清理方法、装置及计算设备 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110765036B (zh) | 2018-07-27 | 2023-11-10 | 伊姆西Ip控股有限责任公司 | 在控制设备处管理元数据的方法和设备 |
CN111124267B (zh) | 2018-10-31 | 2023-10-31 | 伊姆西Ip控股有限责任公司 | 数据写入的方法、设备和计算机程序产品 |
CN111125041A (zh) | 2018-10-31 | 2020-05-08 | 伊姆西Ip控股有限责任公司 | 数据读取方法、电子设备和计算机程序产品 |
US11042296B1 (en) | 2020-03-13 | 2021-06-22 | EMC IP Holding Company LLC | System and method of handling journal space in a storage cluster with multiple delta log instances |
CN116991336B (zh) * | 2023-09-26 | 2024-01-23 | 北京大道云行科技有限公司 | 分布式全闪对象存储系统的gc方法及电子设备、存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5813000A (en) * | 1994-02-15 | 1998-09-22 | Sun Micro Systems | B tree structure and method |
US20120102298A1 (en) * | 2010-10-20 | 2012-04-26 | Microsoft Corporation | Low RAM Space, High-Throughput Persistent Key-Value Store using Secondary Memory |
WO2016111702A1 (en) * | 2015-01-09 | 2016-07-14 | Hewlett Packard Enterprise Development Lp | Persistent memory garbage collection |
CN106126374A (zh) * | 2016-06-22 | 2016-11-16 | 腾讯科技(深圳)有限公司 | 数据写入方法、数据读取方法及装置 |
CN106201771A (zh) * | 2015-05-06 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 数据存储系统和数据读写方法 |
US20170097873A1 (en) * | 2015-10-01 | 2017-04-06 | Netapp, Inc. | Transaction log layout for efficient reclamation and recovery |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6138123A (en) * | 1996-07-25 | 2000-10-24 | Rathbun; Kyle R. | Method for creating and using parallel data structures |
US9251086B2 (en) * | 2012-01-24 | 2016-02-02 | SanDisk Technologies, Inc. | Apparatus, system, and method for managing a cache |
US9612955B2 (en) * | 2013-01-09 | 2017-04-04 | Wisconsin Alumni Research Foundation | High-performance indexing for data-intensive systems |
US10102144B2 (en) * | 2013-04-16 | 2018-10-16 | Sandisk Technologies Llc | Systems, methods and interfaces for data virtualization |
EP3033682A4 (en) * | 2013-08-14 | 2017-04-05 | Skyera, LLC | Address translation for a non-volatile memory storage device |
US10635316B2 (en) * | 2014-03-08 | 2020-04-28 | Diamanti, Inc. | Methods and systems for data storage using solid state drives |
US20170035160A1 (en) * | 2015-08-08 | 2017-02-09 | Kristy Joi Downing | Decorative Athletic Earpieces |
US11321299B2 (en) * | 2016-02-01 | 2022-05-03 | Verizon Patent And Licensing Inc. | Scalable conflict detection in transaction management |
US10678768B2 (en) * | 2017-06-30 | 2020-06-09 | Intel Corporation | Logical band-based key-value storage structure |
-
2017
- 2017-10-30 CN CN201711039911.5A patent/CN109725842B/zh active Active
-
2018
- 2018-01-30 US US15/883,544 patent/US10540114B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5813000A (en) * | 1994-02-15 | 1998-09-22 | Sun Micro Systems | B tree structure and method |
US20120102298A1 (en) * | 2010-10-20 | 2012-04-26 | Microsoft Corporation | Low RAM Space, High-Throughput Persistent Key-Value Store using Secondary Memory |
WO2016111702A1 (en) * | 2015-01-09 | 2016-07-14 | Hewlett Packard Enterprise Development Lp | Persistent memory garbage collection |
CN106201771A (zh) * | 2015-05-06 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 数据存储系统和数据读写方法 |
US20170097873A1 (en) * | 2015-10-01 | 2017-04-06 | Netapp, Inc. | Transaction log layout for efficient reclamation and recovery |
CN106126374A (zh) * | 2016-06-22 | 2016-11-16 | 腾讯科技(深圳)有限公司 | 数据写入方法、数据读取方法及装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112099732A (zh) * | 2019-06-17 | 2020-12-18 | 慧与发展有限责任合伙企业 | 非暂时性机器可读存储介质、计算系统和方法 |
CN113031873A (zh) * | 2021-03-26 | 2021-06-25 | 山东英信计算机技术有限公司 | 一种io请求处理方法、装置、设备及可读存储介质 |
CN113031873B (zh) * | 2021-03-26 | 2023-02-28 | 山东英信计算机技术有限公司 | 一种io请求处理方法、装置、设备及可读存储介质 |
CN114415963A (zh) * | 2021-12-03 | 2022-04-29 | 武汉深之度科技有限公司 | 一种硬盘数据清理方法、装置及计算设备 |
CN114415963B (zh) * | 2021-12-03 | 2023-09-19 | 武汉深之度科技有限公司 | 一种硬盘数据清理方法、装置及计算设备 |
Also Published As
Publication number | Publication date |
---|---|
US10540114B2 (en) | 2020-01-21 |
CN109725842B (zh) | 2022-10-11 |
US20190129650A1 (en) | 2019-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109725842A (zh) | 加速随机写入布局以用于混合存储系统内的桶分配的系统和方法 | |
US10996884B2 (en) | System and method for reference tracking garbage collector | |
US9513817B2 (en) | Free space collection in log structured storage systems | |
US10789223B2 (en) | Hybrid garbage collection in a distributed storage system | |
US10248356B2 (en) | Using scratch extents to facilitate copying operations in an append-only storage system | |
US10242050B2 (en) | Database caching in a database system | |
CN103098015B (zh) | 存储系统 | |
CN103064639B (zh) | 数据存储方法及装置 | |
CN102591946B (zh) | 使用索引划分和协调来进行数据去重复 | |
US20130055371A1 (en) | Storage control method and information processing apparatus | |
US10310904B2 (en) | Distributed technique for allocating long-lived jobs among worker processes | |
CN103473251A (zh) | 在使用处理器件的计算环境中提供使用选择性元组版本化的文件系统快照的方法和系统 | |
US9002844B2 (en) | Generating method, generating system, and recording medium | |
US11436344B1 (en) | Secure encryption in deduplication cluster | |
US10585627B2 (en) | Distributed metadata management in a distributed storage system | |
US20160139980A1 (en) | Erasure-coding extents in an append-only storage system | |
US20220358019A1 (en) | Initiating Recovery Actions When A Dataset Ceases To Be Synchronously Replicated Across A Set Of Storage Systems | |
US10210067B1 (en) | Space accounting in presence of data storage pre-mapper | |
US10289345B1 (en) | Contention and metadata write amplification reduction in log structured data storage mapping | |
CN110032543A (zh) | 一种存储文件系统的管理方法 | |
US10592138B1 (en) | Avoiding storage device overlap in raid extent sub group and keeping relationship balance on mapped raid system and method | |
US10540103B1 (en) | Storage device group split technique for extent pool with hybrid capacity storage devices system and method | |
CN107798063A (zh) | 快照处理方法和快照处理装置 | |
US20200142977A1 (en) | Distributed file system with thin arbiter node | |
US20210034573A1 (en) | System and method for parallel flushing with bucketized data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |