WO2013025864A1 - Mapping in a storage system - Google Patents

Mapping in a storage system Download PDF

Info

Publication number
WO2013025864A1
WO2013025864A1 PCT/US2012/051059 US2012051059W WO2013025864A1 WO 2013025864 A1 WO2013025864 A1 WO 2013025864A1 US 2012051059 W US2012051059 W US 2012051059W WO 2013025864 A1 WO2013025864 A1 WO 2013025864A1
Authority
WO
WIPO (PCT)
Prior art keywords
levels
level
records
mapping table
recited
Prior art date
Application number
PCT/US2012/051059
Other languages
French (fr)
Inventor
John Colgrove
John Hayes
Ethan Miller
Cary SANDVIG
Original Assignee
Pure Storage, Inc.
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Pure Storage, Inc. filed Critical Pure Storage, Inc.
Priority to JP2014526196A priority Critical patent/JP6240071B2/en
Priority to CN201280048353.8A priority patent/CN103874980B/en
Priority to AU2012296510A priority patent/AU2012296510B2/en
Priority to EP12754134.0A priority patent/EP2745197A1/en
Priority to EP19168967.8A priority patent/EP3588260B1/en
Publication of WO2013025864A1 publication Critical patent/WO2013025864A1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0665Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors

Definitions

  • This invention relates to computer networks and, more particularly, to maintaining a mapping structure in a storage system.
  • a datacenter which also may be referred to as a server room, is a centralized repository, either physical or virtual, for the storage, management, and dissemination of data pertaining to one or more businesses.
  • a distributed storage system may be coupled to client computers interconnected by one or more networks. If any portion of the distributed storage system has poor performance, company operations may be impaired. A distributed storage system therefore maintains high standards for data availability and high-performance functionality.
  • the distributed storage system comprises physical volumes, which may be hard disks, solid-state devices, storage devices using another storage technology, or partitions of a storage device.
  • Software applications such as a logical volume manager or a disk array manager, provide a means of allocating space on mass-storage arrays.
  • this software allows a system administrator to create units of storage groups including logical volumes.
  • Storage virtualization provides an abstraction (separation) of logical storage from physical storage in order to access logical storage without end-users identifying physical storage.
  • a volume manager performs input/output (I/O) redirection by translating incoming I/O requests using logical addresses from end-users into new requests using addresses associated with physical locations in the storage devices.
  • I/O input/output
  • some storage devices may include additional address translation mechanisms, such as address translation layers which may be used in solid state storage devices, the translation from a logical address to another address mentioned above may not represent the only or final address translation.
  • Redirection utilizes metadata stored in one or more mapping tables.
  • information stored in one or more mapping tables may be used for storage deduplication and mapping virtual sectors at a specific snapshot level to physical locations.
  • the volume manager may maintain a consistent view of mapping information for the virtualized storage.
  • a supported address space may be limited by a storage capacity used to maintain a mapping table.
  • a volume manager that provides mappings for a granularity level of a hard disk, a hard disk partition, or a logical unit number (LUN) of an external storage device is limited to redirecting, locating, removing duplicate data, and so forth, for large chunks of data.
  • LUN logical unit number
  • One example of another type of storage disk is a Solid-State Disk (SSD).
  • SSD Solid-State Disk
  • An SSD may emulate a HDD interface, but an SSD utilizes solid-state memory to store persistent data rather than electromechanical devices as found in a HDD.
  • an SSD may comprise banks of Flash memory. Accordingly, a large supported address space by one or more mapping tables may not be achieved in systems comprising SSDs for storage while utilizing mapping table allocation algorithms developed for HDDs.
  • a data storage subsystem coupled to a network receives read and write requests on the network from a client computer.
  • the data storage subsystem comprises a plurality of data storage locations on a device group including a plurality of storage devices.
  • the data storage subsystem further comprises at least one mapping table comprising a plurality of levels sorted by time.
  • each level stores one or more tuples, each of the tuples including one or more values that may be used as lookup keys.
  • each of the tuples may include data values that are associated with the key values.
  • the mapping table is a virtual-to-physical address translation table.
  • the mapping table is a deduplication table.
  • the data storage subsystem further comprises a data storage controller configured to create a new highest level (youngest level) to be added to the plurality of levels in response to detecting a condition for inserting one or more new tuples into the mapping table. Additionally, in response to detecting a flattening condition, a data storage controller is configured to identify a group of two or more adjacent levels of the plurality of levels for flattening which are logically adjacent in time. A new level is created and one or more records stored within the group are stored in the new level, in response to detecting each of the one or more records stores a unique key among keys stored within the group.
  • the new level is maintained with the flattened levels. Also contemplated are embodiments wherein the new level replaces the flattened levels.
  • the data storage controller is further configured to insert one or more second records stored within the group into the new level, in response to detecting each of the one or more second records corresponds to two or more records storing a same non-unique key within the group, and is in a younger level of the two or more adjacent levels.
  • mapping table entries may be updated with new mapping table entries. Additionally, flattening operations on the mapping table need not be synchronized with such updates to the mapping table.
  • FIG. 1 is a generalized block diagram illustrating one embodiment of network architecture.
  • FIG. 2 is a generalized block diagram of one embodiment of a mapping table.
  • FIG. 3A is a generalized block diagram of one embodiment of a primary index used to access a mapping table.
  • FIG. 3B is a generalized block diagram of another embodiment of a primary index used to access a mapping table.
  • FIG. 4 is a generalized block diagram of another embodiment of a primary index and mapping table.
  • FIG. 5A is a generalized flow diagram illustrating one embodiment of a method for performing a read access.
  • FIG. 5B is a generalized flow diagram illustrating one embodiment of a method for performing a write operation.
  • FIG. 6 is a generalized block diagram of one embodiment of a multi-node network with shared mapping tables.
  • FIG. 7 is a generalized block diagram of one embodiment of a secondary index used to access a mapping table.
  • FIG. 8 is a generalized block diagram of one embodiment of a tertiary index accessing a mapping table.
  • FIG. 9 illustrates one embodiment of a method that utilizes overlay tables.
  • FIG. 10 is a generalized block diagram of one embodiment of a flattening operation for levels within a mapping table.
  • FIG. 11 is a generalized block diagram of another embodiment of a flattening operation for levels within a mapping table.
  • FIG. 12 is a generalized flow diagram illustrating one embodiment of a method for flattening levels within a mapping table.
  • FIG. 13 is a generalized flow diagram illustrating one embodiment of a method for efficiently processing bulk array tasks within a mapping table.
  • FIG. 14 is a generalized block diagram illustrating an embodiment of a data layout architecture within a storage device.
  • network architecture 100 includes client computer systems 110a- 110b interconnected to one another through a network 180 and to data storage arrays 120a-120b.
  • Network 180 may be coupled to a second network 190 through a switch 140.
  • Client computer system 110c is coupled to client computer systems 1 10a- 1 10b and data storage arrays 120a- 120b via network 190.
  • network 190 may be coupled to the Internet 160 or otherwise outside network through switch 1 0.
  • the number and type of client computers and servers, switches, networks, data storage arrays, and data storage devices is not limited to those shown in FIG. 1.
  • one or more clients may operate offline.
  • individual client computer connection types may change as users connect, disconnect, and reconnect to network architecture 100.
  • present description generally discusses network attached storage, the systems and methods described herein may also be applied to directly attached storage systems and may include a host operating system configured to perform one or more aspects of the described methods. Numerous such alternatives are possible and are contemplated. A further description of each of the components shown in FIG. 1 is provided shortly. First, an overview of some of the features provided by the data storage arrays 120a- 120b is described.
  • each of the data storage arrays 120a- 120b may be used for the sharing of data among different servers and computers, such as client computer systems l lOa-l lOc.
  • the data storage arrays 120a-120b may be used for disk mirroring, backup and restore, archival and retrieval of archived data, and data migration from one storage device to another.
  • one or more client computer systems 110a- 110c may be linked to one another through fast local area networks (LANs) in order to form a cluster.
  • LANs local area networks
  • Such clients may share a storage resource, such as a cluster shared volume residing within one of data storage arrays 120a- 120b.
  • Each of the data storage arrays 120a- 120b includes a storage subsystem 170 for data storage.
  • Storage subsystem 170 may comprise a plurality of storage devices 176a- 176m. These storage devices 176a- 176m may provide data storage services to client computer systems 110a- 110c.
  • Each of the storage devices 176a- 176m uses a particular technology and mechanism for performing data storage.
  • the type of technology and mechanism used within each of the storage devices 176a-176m may at least in part be used to determine the algorithms used for controlling and scheduling read and write operations to and from each of the storage devices 176a- 176m.
  • the algorithms may locate particular physical locations corresponding to the operations.
  • the algorithms may perform input/output (I/O) redirection for the operations, removal of duplicate data in the storage subsystem 170, and support one or more mapping tables used for address redirection and deduplication.
  • I/O input/output
  • the logic used in the above algorithms may be included in one or more of a base operating system (OS) 132, a volume manager 134, within a storage subsystem controller 174, control logic within each of the storage devices 176a- 176m, or otherwise. Additionally, the logic, algorithms, and control mechanisms described herein may comprise hardware and/or software.
  • OS base operating system
  • volume manager 134 within a storage subsystem controller 174
  • control logic within each of the storage devices 176a- 176m, or otherwise.
  • the logic, algorithms, and control mechanisms described herein may comprise hardware and/or software.
  • Each of the storage devices 176a- 176m may be configured to receive read and write requests and comprise a plurality of data storage locations, each data storage location being addressable as rows and columns in an array.
  • the data storage locations within the storage devices 176a- 176m may be arranged into logical, redundant storage containers or RAID arrays (redundant arrays of inexpensive/independent disks).
  • each of the storage devices 176a- 176m may utilize technology for data storage that is different from a conventional hard disk drive (HDD).
  • HDD hard disk drive
  • one or more of the storage devices 176a- 176m may include or be further coupled to storage consisting of solid-state memory to store persistent data.
  • one or more of the storage devices 176a-176m may include or be further coupled to storage using other technologies such as spin torque transfer technique, magnetoresistive random access memory (MRAM) technique, shingled disks, memristors, phase change memory, or other storage technologies.
  • MRAM magnetoresistive random access memory
  • the included solid-state memory comprises solid-state drive (SSD) technology.
  • SSD solid-state drive
  • I/O input/output
  • a Solid-State Disk (SSD) may also be referred to as a Solid-State Drive.
  • SSD Solid-State Drive
  • the write performance of SSDs is generally slower than the read performance and may be significantly impacted by the availability of free, programmable blocks within the SSD.
  • Storage array efficiency may be improved by creating a storage virtualization layer between user storage and physical locations within storage devices 176a- 176m.
  • a virtual layer of a volume manager is placed in a device-driver stack of an operating system (OS), rather than within storage devices or in a network.
  • OS operating system
  • Many storage arrays perform storage virtualization at a coarse-grained level to allow storing of virtual-to-physical mapping tables entirely in memory.
  • storage arrays are unable to integrate features such as data compression, deduplication and copy-on-modify operations.
  • Many file systems support fine-grained virtual-to-physical mapping tables, but they do not support large storage arrays, such as device groups 173 a- 173m. Rather, a volume manager or a disk array manager is used to support device groups 173a- 173m.
  • one or more mapping tables may be stored in the storage devices 176a- 176m, rather than memory, such as RAM 172, memory medium 130 or a cache within processor 122.
  • the storage devices 176a- 176 may be SSDs utilizing Flash memory.
  • the low read access and latency times for SSDs may allow a small number of dependent read operations to occur while servicing a storage access request from a client computer.
  • the dependent read operations may be used to access one or more indexes, one or more mapping tables, and user data during the servicing of the storage access request.
  • I/O redirection may be performed by the dependent read operations.
  • inline deduplication may be performed by the dependent read operations.
  • bulk array tasks such as a large copy, move, or zeroing operation, may be performed entirely within a mapping table rather than accessing storage locations holding user data. Such a direct map manipulation may greatly reduce I/O traffic and data movement within the storage devices 176a- 176m. The combined time for both servicing the storage access request and performing the dependent read operations from SSDs may be less than servicing a storage access request from a spinning HDD.
  • mapping table may be compressed.
  • a particular compression algorithm may be chosen to allow identification of individual components, such as a key within a record among multiple records. Therefore, a search for a given key among multiple compressed records may occur. If a match is found, only the matching record may be decompressed. Compressing the tuples within records of a mapping table may further enable fine-grained level mapping. This fine-grained level mapping may allow direct map manipulation as an alternative to common bulk array tasks. Further details concerning efficient storage virtualization will be discussed below.
  • network architecture 100 includes client computer systems 110a- 110c interconnected through networks 180 and 190 to one another and to data storage arrays 120a-120b.
  • Networks 180 and 190 may include a variety of techniques including wireless connection, direct local area network (LAN) connections, wide area network (WAN) connections such as the Internet, a router, storage area network, Ethernet, and others.
  • Networks 180 and 190 may comprise one or more LANs that may also be wireless.
  • Networks 180 and 190 may further include remote direct memory access (RDMA) hardware and/or software, transmission control protocol/internet protocol (TCP/IP) hardware and/or software, router, repeaters, switches, grids, and/or others.
  • RDMA remote direct memory access
  • TCP/IP transmission control protocol/internet protocol
  • Switch 140 may utilize a protocol associated with both networks 180 and 190.
  • the network 190 may interface with a set of communications protocols used for the Internet 160 such as the Transmission Control Protocol (TCP) and the Internet Protocol (IP), or TCP/IP.
  • TCP Transmission Control Protocol
  • IP Internet Protocol
  • Switch 150 may be a TCP/IP switch.
  • Client computer systems 110a- 1 10c are representative of any number of stationary or mobile computers such as desktop personal computers (PCs), servers, server farms, workstations, laptops, handheld computers, servers, personal digital assistants (PDAs), smart phones, and so forth.
  • client computer systems 110a- 1 10c include one or more processors comprising one or more processor cores.
  • Each processor core includes circuitry for executing instructions according to a predefined general-purpose instruction set. For example, the x86 instruction set architecture may be selected. Alternatively, the Alpha®, PowerPC®, SPARC®, or any other general-purpose instruction set architecture may be selected.
  • the processor cores may access cache memory subsystems for data and computer program instructions.
  • the cache subsystems may be coupled to a memory hierarchy comprising random access memory (RAM) and a storage device.
  • RAM random access memory
  • Each processor core and memory hierarchy within a client computer system may be connected to a network interface.
  • each of the client computer systems 110a- 110c may include a base operating system (OS) stored within the memory hierarchy.
  • the base OS may be representative of any of a variety of operating systems, such as, for example, MS-DOS®, MS-WINDOWS®, OS/2®, UNIX®, Linux®, Solaris®, AIX®, DART, or otherwise.
  • the base OS may be operable to provide various services to the end-user and provide a software framework operable to support the execution of various programs.
  • each of the client computer systems 110a- 110c may include a hypervisor used to support virtual machines (VMs).
  • VMs virtual machines
  • virtualization may be used in desktops and servers to fully or partially decouple software, such as an OS, from a system's hardware. Virtualization may provide an end-user with an illusion of multiple OSes running on a same machine each having its own resources and access to logical storage entities (e.g., LUNs) built upon the storage devices 176a-176m within each of the data storage arrays 120a- 120b.
  • logical storage entities e.g., LUNs
  • Each of the data storage arrays 120a- 120b may be used for the sharing of data among different servers, such as the client computer systems 110a- 110c.
  • Each of the data storage arrays 120a- 120b includes a storage subsystem 170 for data storage.
  • Storage subsystem 170 may comprise a plurality of storage devices 176a- 176m. Each of these storage devices 176a- 176m may be an SSD.
  • a controller 174 may comprise logic for handling received read/write requests.
  • a random-access memory (RAM) 172 may be used to batch operations, such as received write requests. In various embodiments, when batching write operations (or other operations) non- volatile storage (e.g., NVRAM) may be used.
  • RAM random-access memory
  • the base OS 132, the volume manager 134 (or disk array manager 134), any OS drivers (not shown) and other software stored in memory medium 130 may provide functionality providing access to files and the management of these functionalities.
  • the base OS 132 may be a storage operating system such as NetApp Data ONTAP® or otherwise.
  • the base OS 132 and the OS drivers may comprise program instructions stored on the memory medium 130 and executable by processor 122 to perform one or more memory access operations in storage subsystem 170 that correspond to received requests.
  • the system shown in FIG. 1 may generally include one or more file servers and/or block servers.
  • Each of the data storage arrays 120a- 120b may use a network interface 124 to connect to network 180. Similar to client computer systems l lOa-HOc, in one embodiment, the functionality of network interface 124 may be included on a network adapter card. The functionality of network interface 124 may be implemented using both hardware and software. Both a random-access memory (RAM) and a read-only memory (ROM) may be included on a network card implementation of network interface 124. One or more application specific integrated circuits (ASICs) may be used to provide the functionality of network interface 124.
  • RAM random-access memory
  • ROM read-only memory
  • ASICs application specific integrated circuits
  • each of the storage controllers 174 within the data storage arrays 120a- 120b may support storage array functions such as snapshots, replication and high availability.
  • each of the storage controllers 174 may support a virtual machine environment that comprises a plurality of volumes with each volume including a plurality of snapshots.
  • a storage controller 174 may support hundreds of thousands of volumes, wherein each volume includes thousands of snapshots.
  • a volume may be mapped in fixed-size sectors, such as a 4-kilobyte (KB) page within storage devices 176a- 176m.
  • a volume may be mapped in variable-size sectors such as for write requests.
  • a volume ID, a snapshot ID, and a sector number may be used to identify a given volume.
  • An address translation table may comprise a plurality of entries, wherein each entry holds a virtual-to-physical mapping for a corresponding data component.
  • This mapping table may be used to map logical read/write requests from each of the client computer systems 110a- 110c to physical locations in storage devices 176a- 176m.
  • a "physical" pointer value may be read from the mapping table during a lookup operation corresponding to a received read/write request. This physical pointer value may then be used to locate a physical location within the storage devices 176a- 176m. It is noted the physical pointer value may be used to access another mapping table within a given storage device of the storage devices 176a- 176m. Consequently, one or more levels of indirection may exist between the physical pointer value and a target storage location.
  • the mapping table may comprise information used to deduplicate data (deduplication table related information).
  • the information stored in the deduplication table may include mappings between one or more calculated hash values for a given data component and a physical pointer to a physical location in one of the storage devices 176a- 176m holding the given data component.
  • a length of the given data component and status information for a corresponding entry may be stored in the deduplication table.
  • mapping tables may be used for I/O redirection or translation, deduplication of duplicate copies of user data, volume snapshot mappings, and so forth.
  • Mapping tables may be stored in the storage devices 176a- 176m.
  • the diagram shown in FIG. 2 represents a logical representation of one embodiment of the organization and storage of the mapping table.
  • Each level shown may include mapping table entries corresponding to a different period of time. For example, level "1" may include information older than information stored in level "2". Similarly, level "2" may include information older than information stored in level "3". The information stored in the records, pages and levels shown in FIG.
  • mapping table entries 2 may be stored in a random-access manner within the storage devices 176a- 176m. Additionally, copies of portions or all of a given mapping table entries may be stored in RAM 172, in buffers within controller 174, in memory medium 130, and in one or more caches within or coupled to processor 122. In various embodiments, a corresponding index may be included in each level for mappings which are part of the level (as depicted later in FIG. 4). Such an index may include an identification of mapping table entries and where they are stored (e.g., an identification of the page) within the level. In other embodiments, the index associated with mapping table entries may be a distinct entity, or entities, which are not logically part of the levels themselves.
  • each mapping table comprises a set of rows and columns.
  • a single record may be stored in a mapping table as a row.
  • a record may also be referred to as an entry.
  • a record stores at least one tuple including a key. Tuples may (or may not) also include data fields including data such as a pointer used to identify or locate data components stored in storage subsystem 170.
  • the storage subsystem may include storage devices (e.g., SSDs) which have internal mapping mechanisms.
  • the pointer in the tuple may not be an actual physical address per se. Rather, the pointer may be a logical address which the storage device maps to a physical location within the device.
  • records in the mapping table may only contain key fields with no additional associated data fields. Attributes associated with a data component corresponding to a given record may be stored in columns, or fields, in the table. Status information, such as a valid indicator, a data age, a data size, and so forth, may be stored in fields, such as FieldO to FieldN shown in FIG. 2. In various embodiments, each column stores information corresponding to a given type. In some embodiments, compression techniques may be utilized for selected fields which in some cases may result in fields whose compressed representation is zero bits in length.
  • a key is an entity in a mapping table that may distinguish one row of data from another row. Each row may also be referred to as an entry or a record.
  • a key may be a single column, or it may consist of a group of columns used to identify a record.
  • a key may correspond to a range of values rather than to a single value.
  • a key corresponding to a range may be represented as a start and end of a range, or as a start and length, or in other ways. The ranges corresponding to keys may overlap with other keys, either ranges or individual values.
  • an address translation mapping table may utilize a key comprising a volume identifier (ID), a logical or virtual address, a snapshot ID, a sector number, and so forth.
  • ID volume identifier
  • a given received read/write storage access request may identify a particular volume, sector and length.
  • a sector may be a logical block of data stored in a volume. Sectors may have different sizes on different volumes.
  • the address translation mapping table may map a volume in sector- size units.
  • a volume identifier may be used to access a volume table that conveys a volume ID and a corresponding current snapshot ID. This information along with the received sector number may be used to access the address translation mapping table. Therefore, in such an embodiment, the key value for accessing the address translation mapping table is the combination of the volume ID, snapshot ID, and the received sector number.
  • the records within the address translation mapping table are sorted by volume ID, followed by the sector number and then by the snapshot ID. This ordering may group together different versions of data components in different snapshots. Therefore, during a lookup for a storage access read request, a corresponding data component may be found with fewer read operations to the storage devices 176a- 176m.
  • the address translation mapping table may convey a physical pointer value that indicates a location within the data storage subsystem 170 storing a data component corresponding to the received data storage access request.
  • the key value may be compared to one or more key values stored in the mapping table. In the illustrated example, simpler key values, such as "0", “2", "12” and so forth, are shown for ease of illustration.
  • the physical pointer value may be stored in one or more of the fields in a corresponding record.
  • the physical pointer value may include a segment identifier (ID) and a physical address identifying the location of storage.
  • a segment may be a basic unit of allocation in each of the storage devices 176a- 176m.
  • a segment may have a redundant array of independent device (RAID) level and a data type.
  • RAID redundant array of independent device
  • a segment may have one or more of the storage devices 176a- 176m selected for corresponding storage.
  • a segment may be allocated an equal amount of storage space on each of the one or more selected storage devices of the storage devices 176a- 176m.
  • the data storage access request may correspond to multiple sectors, which may result in multiple parallel lookups.
  • a write request may be placed in an NVRAM buffer, such as RAM 172, and a write completion acknowledgment may be sent to a corresponding client computer of the client computers 110a- 110c.
  • an asynchronous process may flush the buffered write requests to the storage devices 176a- 176m.
  • the mapping table shown in FIG. 2 may be a deduplication table.
  • a deduplication table may utilize a key comprising a hash value determined from a data component associated with a storage access request.
  • the initial steps of a deduplication operation may be performed concurrently with other operations, such as a read/write request, a garbage collection operation, a trim operation, and so forth.
  • the data sent from one of the client computer systems 110a- 110c may be a data stream, such as a byte stream.
  • a data stream may be divided into a sequence of fixed-length or variable-length chunks.
  • a chunking algorithm may perform the dividing of the data stream into discrete data components which may be referred to as "chunks".
  • a chunk may be a sub-file content-addressable unit of data.
  • a table or other structure may be used to determine a particular chunking algorithm to use for a given file type or type of data.
  • a file's type may be determined by referring to its file name extension, separate identifying information, the content of the data itself, or otherwise.
  • the resulting chunks may then be stored in one of the data storage arrays 120a- 120b to allow for sharing of the chunks. Such chunks may be stored separately or grouped together in various ways.
  • the chunks may be represented by a data structure that allows reconstruction of a larger data component from its chunks (e.g. a particular file may be reconstructed based on one or more smaller chunks of stored data).
  • a corresponding data structure may record its corresponding chunks including an associated calculated hash value, a pointer (physical and/or logical) to its location in one of the data storage arrays 120a- 120b, and its length.
  • a deduplication application may be used to calculate a corresponding hash value.
  • a hash function such as Message-Digest algorithm 5 (MD5), Secure Hash Algorithm (SHA), or otherwise, may be used to calculate a corresponding hash value.
  • MD5 Message-Digest algorithm 5
  • SHA Secure Hash Algorithm
  • bits of the calculated hash value (or a subset of bits of the hash value) for the given data component may be compared to bits in the hash values of data components stored in one or more of the data storage arrays 120a- 120b.
  • a mapping table may comprise one or more levels as shown in FIG. 2.
  • a mapping table may comprise 16 to 64 levels, although another number of levels supported within a mapping table is possible and contemplated.
  • three levels labeled Level “1", Level “2” and Level “N” are shown for ease of illustration.
  • Each level within a mapping table may include one or more partitions.
  • each partition is a 4 kilo-byte (KB) page.
  • Level “N” is shown to comprise pages 210a-210g
  • Level "2" comprises pages 210h- 210j
  • Level "1" comprises pages 210k-210n.
  • It is possible and contemplated other partition sizes may also be chosen for each of the levels within a mapping table.
  • it is possible one or more levels have a single partition, which is the level itself.
  • multiple levels within a mapping table are sorted by time. For example, in FIG. 2, Level “1" may be older than Level “2". Similarly, Level “2" may be older than Level “N”.
  • a new level when a condition for inserting one or more new records in the mapping table is detected, a new level may be created.
  • the number/designation given to the new level is greater than numbers given to levels that preceded the new level in time. For example, if the most recent level created is assigned the value 8, then a newly created level may be assigned the value 9. In this manner a temporal relationship between the levels may be established or determined. As may be appreciated, numerical values need not be strictly sequential.
  • each next older level has a label decremented by one from a label integer value of a previous younger level.
  • a separate table not shown may be used to logically describe the mapping table. For example, each entry of the separate table may include a given level ID and a list of the page IDs stored within the given level ID.
  • the mapping table is updated by appending the new records.
  • a single level is created as a new highest level and each of the new records is inserted into the single level.
  • the new records may be searched for duplicate keys prior to insertion into the mapping table.
  • a single level may be created as a new highest level. When a given record storing a duplicate key is found, each of the records buffered ahead of the given record may be inserted into the single level.
  • the new records may be buffered in a manner to preserve memory ordering, such as in-order completion of requests.
  • the sizes of the levels are illustrated as increasing with lower levels being larger than newer levels, the higher levels may alternate between being larger or smaller than neighboring levels.
  • the number of newer records to insert into the mapping table may vary over time and create the fluctuating level sizes.
  • the lower levels may be larger than newer levels due to flattening of the lower levels. Two or more lower levels may be flattened into a single level when particular conditions are detected. Further details are provided later.
  • newer records placed in higher levels may override records storing a same key value located in the lower levels.
  • one or more levels may be found to store a record holding a key value matching the given key value.
  • the highest level of the one or more levels may be chosen to provide the information stored in its corresponding record as a result of the access. Further details are provided later. In addition, further details about the detected conditions for inserting one or more new records into the mapping table and the storage of information are provided later.
  • entries within a given page may be sorted by key.
  • the entries may be sorted in ascending order according to a key included in the entry.
  • the pages within a level may be sorted according to any desired sort order.
  • the pages within a level may also be sorted (e.g., according to key values or otherwise).
  • page 210a of Level N includes records sorted according to key value in ascending order.
  • one or more columns may be used to store key values.
  • two columns or fields are shown in each tuple for storing key values. Utilizing such key values, the records then may be sorted in a desired order. Sorting may be performed based on any of the key values for a records, or any combination of key values for the record.
  • the first record stores a key value including 0 and 8 stored in two columns
  • the last record stores a key value including 12 and 33.
  • each sorted record in page 210a between the first and the last record stores a key value between 0 and 12 in the first column and the records are arranged in a manner to store key values based (at least in part) on the first column in an ascending order from 0 to 12.
  • page 210b includes sorted records, wherein the first record stores key values of 12 and 39 and the last record stores key values of 31 and 19.
  • each sorted record in page 210b between the first and the last record stores a key value between 12 and 31 in the first column and the records are arranged in a manner to store key values in an ascending order from 12 to 31.
  • pages within Level N are sorted according to a desired order.
  • pages within a level may be sorted in a manner that reflects the order in which entries within a page are sorted. For example, pages within a level may be sorted according to key values in ascending order. As the first key value in page 210b is greater than the last key value in page 210a, page 210b follows page 210a in the sort order. Page 210g would then include entries whose key values are greater than those included in pages 210a-210f (not shown). In this manner, all entries within a level are sorted according to a common scheme. The entries are simply subdivided into page, or other, size units. As may be appreciated, other sorting schemes may be used as desired.
  • a key generator 304 may receive one or more requester data inputs 302.
  • a mapping table is an address translation directory table.
  • a given received read/write request may identify a particular volume, sector and length.
  • the key generator 304 may produce a query key value 306 that includes a volume identifier (ID), a logical or virtual address, a snapshot ID, and a sector number. Other combinations are possible and other or additional values may be utilized as well. Different portions of the query key value 306 may be compared to values stored in columns that may or may not be contiguous within the mapping table. In the shown example, a key value of "22" is used for ease of illustration.
  • both a chunking algorithm and/or a segmenting algorithm associated with the key generator 304 may receive data 302 corresponding to a storage access request. These algorithms may produce one or more data components and select a hash function to calculate a corresponding hash value, or query key value 306, for each data component. The resulting hash value may be used to index the deduplication table.
  • a primary index 310 may provide location identifying information for data stored in the storage devices 176a- 176m.
  • a corresponding primary index 310 (or portion thereof) may be logically included in each of level “1", level “2" and level “N”. Again, each level and each corresponding primary index may be physically stored in a random-access manner within the storage devices 176a- 176m.
  • the primary index 310 may be divided into partitions, such as partitions 312a-312b. In one embodiment, the size of the partitions may range from a 4 kilobyte (KB) page to 256 KB, though other sizes are possible and are contemplated.
  • Each entry of the primary index 310 may store a key value. In addition, each entry may store a corresponding unique virtual page identifier (ID) and a level ID corresponding to the key value. Each entry may store corresponding status information such as validity information.
  • ID unique virtual page identifier
  • Each entry may store corresponding status information such as validity information.
  • Information from the matching entry may then be used to locate and retrieve a mapping which identifies a storage location which is the target of a received read or write request.
  • the index 310 identifies the locations of mappings.
  • a hit in the index provides a corresponding page ID identifying a page within the storage devices 176a- 176m storing both the key value and a corresponding physical pointer value. The page identified by the corresponding page ID may be searched with the key value to find the physical pointer value.
  • a received request corresponds to a key "22".
  • This key is then used to access index 310.
  • a search of the index 310 results on a hit to an entry within partition 312b.
  • the matching entry in this case include information such as - page 28, and level 3.
  • the desired mapping for the request is found in a page identified as page 28 within level 3 of the mapping tables.
  • an access may then be made to the mapping tables to retrieve the desired mapping. If an access to the primary index 310 requires an access to storage, then at least two storage accesses would be required in order to obtain a desired mapping.
  • portions of the primary index are cached, or otherwise stored in a relatively fast access memory, in order to eliminate one access to the storage devices.
  • the entire primary index for the mapping tables is cached.
  • secondary, tertiary, or other index portions may be used in the cache to reduce its size. Secondary type indices are discussed below.
  • mapping pages corresponding to recent hits are also cached for at least some period of time. In this manner, processes which exhibit accesses with temporal locality can be serviced more rapidly (i.e., recently accessed locations will have their mappings cached and readily available).
  • the cached primary index 314 may include copies of information stored in each of the primary indexes 310 for the multiple levels in a mapping table.
  • the primary index 314 may be stored in one or more of RAM 172, buffers within controller 174, memory medium 130 and caches within processor 122. In one embodiment, the primary index 314 may be sorted by key value, though sorting otherwise is possible.
  • the primary index 314 may also be divided into partitions, such as partitions 316a- 316b. In one embodiment, the size of the partitions 316a-316b may be a same size as the partitions 312a-312b within the primary index 310.
  • each entry of the primary index 314 may store one or more of a key value, a corresponding unique virtual page identifier (ID), a level ID corresponding to the key value, and status information such as valid information.
  • ID unique virtual page identifier
  • the primary index 314 may convey a corresponding page ID identifying a page within the storage devices 176a- 176m storing both the key value and a corresponding pointer value.
  • the page identified by the corresponding page ID may be searched with the key value to find the pointer value.
  • the primary index 314 may have multiple records storing a same key value. Therefore, multiple hits may result from the search for a given key value.
  • a hit with a highest value of a level ID may be chosen. This selection of one hit from multiple hits may be performed by merge logic not shown here. A further description of the merge logic is provided later.
  • mapping table 340 may have a similar structure as the mapping table shown in FIG. 2. However, storage of a corresponding primary index 310 for each level is now shown. A copy of one or more of the primary index portions 310a-310i may be included in index copies 330 (e.g., cached copies). Copies 330 may generally correspond to the cached index depicted in FIG. 3B. The information in index copies 330 may be stored in RAM 172, buffers within controller 174, memory medium 130, and caches within processor 122.
  • the information in primary indexes 310a-310i may be stored with the pages of mappings in storage devices 176a- 176m. Also shown is a secondary index 320 which may be used to access a primary index, such as primary index 3 lOi shown in the diagram. Similarly, accessing and updating the mapping table 340 may occur as described earlier.
  • Mapping table 340 comprises multiple levels, such as Level “1" to Level “N”. In the illustrated example, each of the levels includes multiple pages. Level “N” is shown to include pages “0" to “D”, Level N-1 includes pages “E” to “G”, and so forth. Again, the levels within the mapping table 310 may be sorted by time. Level “N” may be younger than Level “N-1” and so forth. Mapping table 340 may be accessed by at least a key value. In the illustrated example, mapping table 340 is accessed by a key value "27" and a page ID "32". For example, in one embodiment, a level ID "8" may be used to identify a particular level (or "subtable") of the mapping table 340 to search. Having identified the desired subtable, the page ID may then be used to identify the desired page within the subtable. Finally, the key may be used to identify the desired entry within the desired page.
  • an access to the cached index 330 may result in multiple hits.
  • the results of these multiple hits are provided to merge logic 350 which identifies which hit is used to access the mapping table 340.
  • Merge logic 350 may represent hardware and/or software which is included within a storage controller.
  • merge logic 350 is configured to identify a hit which corresponds to a most recent (newest) mapping. Such an identification could be based upon an identification of a corresponding level for an entry, or otherwise.
  • a query corresponding to level 8 page 32, key 27 is received. Responsive to the query, page 32 of level 8 is accessed.
  • a corresponding result is returned (e.g., pointer xF3209B24 in the example shown). If the key 27 is not found within page 32, then a miss indication is returned.
  • This physical pointer value may be output from the mapping table 340 to service a storage access request corresponding to the key value "27".
  • the mapping table 340 supports inline mappings.
  • a mapping detected to have a sufficiently small target may be represented without an actual physical sector storing user data within the storage devices 176a- 176m.
  • One example may be a repeating pattern within the user data.
  • a corresponding mapping may have an indication marked in the status information, such as within one of the fields of fieldO to fieldN in the mapping table, that indicates what data value is to be returned for a read request.
  • an indication may be stored within the status information of the primary index 310 and any additional indexes that may be used (not shown here).
  • the storage system may simultaneously support multiple versions of the data organization, storage schemes, and so on.
  • new features may be incorporated or otherwise provided. Data, indexes, and mappings (for example) which are newer may take advantage of these new features.
  • new level N may correspond to one version of the system, while older level N-l may correspond to a prior version.
  • metadata may be stored in association with each of the levels which indicates which version, which features, compression schemes, and so on, are used by that level. This metadata could be stored as part of the index, the pages themselves, or both. When accesses are made, this metadata then indicates how the data is to be handled properly.
  • new schemes and features can be applied dynamically without the need to quiesce the system. In this manner, upgrading of the system is more flexible and a rebuild of older data to reflect newer schemes and approaches is not necessary.
  • FIG. 5A one embodiment of a method for servicing a read access is shown.
  • the components embodied in the network architecture 100 and mapping table 340 described above may generally operate in accordance with method 500.
  • the steps in this embodiment are shown in sequential order. However, some steps may occur in a different order than shown, some steps may be performed concurrently, some steps may be combined with other steps, and some steps may be absent in another embodiment.
  • Read and store (write) requests may be conveyed from one of the clients 110a- 110c to one of the data storage arrays 120a- 120b.
  • a read request 500 is received, and in block 502 a corresponding query key value may be generated.
  • the request itself may include the key which is used to access the index and a "generation" of the key 502 is not required.
  • the query key value may be a virtual address index comprising a volume ID, a logical address or virtual address associated with a received request, a snapshot ID, a sector number, and so forth.
  • the query key value may be generated using a hash function or other function. Other values are possible and contemplated for the query key value, which is used to access a mapping table.
  • the query key value may be used to access one or more cached indexes to identify one or more portions of a mapping table that may store a mapping that corresponds to the key value. Additionally, recently used mappings which have been cached may be searched as well. If a hit on the cached mappings is detected (block 505), the cached mapping may be used to perform the requested access (block 512). If there is no hit on the cached mappings, the a determination may be made as to whether or not there is a hit on the cached index (block 506). If so, a result corresponding to the hit is used to identify and access the mapping table (block 508).
  • an entry storing the query key value also may store a unique virtual page ID that identifies a single particular page within the mapping table. This single particular page may store both the query key value and an associated physical pointer value.
  • the identified potion of the mapping table may be accessed and a search performed using the query key value.
  • the mapping table result may then be returned (block 510) and used to perform a storage access (block 512) that corresponds to the target location of the original read request.
  • an index query responsive to a read request may result in a miss.
  • a miss could be due to only a portion of the index being cached or an error condition (e.g., a read access to a non-existent location, address corruption, etc.).
  • an access to the stored index may be performed. If the access to the stored index results in a hit (block 520), then a result may be returned (block 522) which is used to access the mapping tables (block 508).
  • an error condition may be detected. Handling of the error condition may be done in any of a variety of desired ways.
  • an exception may be generated (block 524) which is then handled as desired.
  • a portion of the mapping table is returned in block 510. In various embodiments, this portion is a page which may be a 4KB page, or otherwise. As previously discussed, the records within a page may be sorted to facilitate faster searches of the content included therein.
  • the mapping table utilizes traditional database systems methods for information storage in each page. For example, each record (or row or entry) within the mapping table is stored one right after the other. This approach may be used in row-oriented or row-store databases and additionally with correlation databases. These types of databases utilize a value-based storage structure.
  • a value -based storage (VBS) architecture stores a unique data value only once and an auto-generated indexing system maintains the context for all values.
  • data may be stored by row and compression may be used on the columns (fields) within a row.
  • the techniques used may include storing a base value and having a smaller field size for the offset and/or having a set of base values, with a column in a row consisting of a base selector and an offset from that base.
  • the compression information may be stored within (e.g., at the start) of the partition.
  • the mapping table utilizes a column-oriented database system (column- store) method for information storage in each page.
  • Column- stores store each database table column separately.
  • attribute values belonging to a same column may be stored contiguously, compressed, and densely packed. Accordingly, reading a subset of a table's columns, such as within a page, may be performed relatively quickly.
  • Column data may be of uniform type and may allow storage size optimizations to be used that may not be available in row-oriented data.
  • Some compression schemes such as Lempel-Ziv- Welch (LZ) and run-length encoding (RLE), take advantage of a detected similarity of adjacent data to compress.
  • a compression algorithm may be chosen that allows individual records within the page to be identified and indexed. Compressing the records within the mapping table may enable finegrained mapping.
  • the type of compression used for a particular portion of data may be stored in association with the data. For example, the type of compression could be stored in an index, as part of a same page as the compressed data (e.g., in a header of some type), or otherwise. In this manner, multiple compression techniques and algorithms may be used side by side within the storage system.
  • the type of compression used for storing page data may be determined dynamically at the time the data is stored.
  • one of a variety of compression techniques may be chosen based at least in part on the nature and type of data being compressed. In some embodiments, multiple compression techniques will be performed and the one exhibiting the best compression will then be selected for use in compressing the data. Numerous such approaches are possible and are contemplated.
  • one or more indications of a hit may be conveyed to the merge logic 350.
  • one or more hit indications may be conveyed from levels "1" to "J" as shown in FIG. 4.
  • the merge logic 350 may choose the highest level, which may also be the youngest level, of the levels "1" to "J” conveying a hit indication.
  • the chosen level may provide information stored in a corresponding record as a result of the access.
  • one or more corresponding fields within a matching record of a chosen page may be read to process a corresponding request.
  • the page is decompressed and a corresponding physical pointer value is read out.
  • only the matching record is decompressed and a corresponding physical pointer value is read out.
  • a full physical pointer value may be split between the mapping table and a corresponding target physical location. Therefore, multiple physical locations storing user data may be accessed to complete a data storage access request.
  • a new mapping table entry corresponding to the request may be created (block 532).
  • a new virtual-to-physical address mapping may be added (block 534) to the mapping table that pairs the virtual address of the write request with the physical location storing the corresponding data component.
  • the new mapping may be cached with other new mappings and added to a new highest level of the mapping table entries.
  • the write operation to persistent storage (block 536) may then be performed.
  • writing the new mapping table entry to the mapping tables in persistent storage may not be performed until a later point in time (block 538) which is deemed more efficient.
  • a later point in time block 538, which is deemed more efficient.
  • writes to storage are much slower than reads from storage. Accordingly, writes to storage are scheduled in such a way that they minimize impact on overall system performance.
  • the insertion of new records into the mapping table may be combined with other larger data updates. Combining the updates in this manner may provide for more efficient write operations. It is noted that in the method of 5B, as with each of the methods described herein, operations are described as occurring in a particular order for ease of discussion. However, the operations may in fact occur in a different order, and in some cases various ones of the operations may occur simultaneously. All such embodiments are contemplated.
  • FIG. 5B depicts operations 550 which may generally correspond to deduplication systems and methods.
  • a hash corresponding to a received write request may be generated (block 540) which is used to access deduplication tables (block 542). If there is a hit (block 544) in the deduplication tables (i.e., a copy of the data already exists within the system), then a new entry may be added to the deduplication tables (block 548) to reflect the new write. In such a case, there is no need to write the data itself to storage and the received write data may be discarded.
  • a new entry for the new data is created and stored in the deduplication tables (block 546). Additionally, a write of the data to storage is performed (block 536). Further, a new entry may be created in the index to reflect the new data (block 538).
  • a miss occurs during an inline deduplication operation, no insertion in the deduplication tables is performed at that time. Rather, during an inline deduplication operation, a query with a hash value may occur for only a portion of the entire deduplication table (e.g., a cached portion of the deduplication table). If a miss occurs, a new entry may be created and stored in the cache.
  • a query with a hash value may occur for the entire deduplication table.
  • a miss may indicate the hash value is a unique hash value. Therefore, a new entry such as a hash-to-physical-pointer mapping may be inserted into the deduplication table.
  • deduplication may be performed to eliminate one or more of the detected copies.
  • FIG. 6 a generalized block diagram of one embodiment of a multi- node network with shared mapping tables is shown.
  • three nodes 360a- 360c are used to form a cluster of mapping nodes.
  • each of the nodes 360a- 360c may be responsible for one or more logical unit numbers (LUNs).
  • LUNs logical unit numbers
  • a number of mapping table levels, level 1-N are shown. Level 1 may correspond to the oldest level, while level N may correspond to the newest level.
  • Level 1 may correspond to the oldest level
  • level N may correspond to the newest level.
  • node 360a is shown to store mapping subtables 362a and 364a.
  • subtables 362a and 362b may correspond to LUNs for which node 360a is generally responsible.
  • node 360b includes subtables 362b and 364b which may correspond to LUNs managed by that node
  • node 360c includes subtables 362c and 364c which may correspond to LUNs managed by that node.
  • these "newer" level mapping table entries are maintained only by their corresponding managing nodes and are generally not found on other nodes.
  • older levels represent mapping table entries which may be shared by all nodes 360a-360c in the sense that any of the nodes may be storing a copy of those entries.
  • these older levels 370, 372, and 374 are collectively identified as shared tables 380.
  • these older levels are static - apart from merging or similar operations which are discussed later.
  • a static layer is one which is not subject to modification (i.e., it is "fixed"). Given that such levels are fixed in this sense, an access to any copy of these lower levels may be made without concern for whether another of the copies has been, or is being, modified.
  • any of the nodes may safely store a copy of the shared tables 380 and service a request to those tables with confidence the request can be properly serviced. Having copies of the shared tables 380 stored on multiple nodes 360 may allow use of various load balancing schemes when performing lookups and otherwise servicing requests.
  • the levels 380 which may be shared may be organized in a manner which reflects the nodes 360 themselves.
  • node 360a may be responsible for LUNs 1 and 2
  • node 360b may be responsible for LUNs 3 and 4
  • node 360c may be responsible for LUNs 5 and 6.
  • the mapping table entries may include tuples which themselves identify a corresponding LUN.
  • the shared mapping tables 380 may be sorted according to key value, absolute width or amount of storage space, or otherwise.
  • entries 370a may correspond to LUNs 1 and 2
  • entries 370b may correspond to LUNs 3 and 4
  • entries 370c may correspond to LUNs 5 and 6.
  • Such an organization may speed lookups by a given node for a request targeted to a particular LUN by effectively reducing the amount of data that needs to be searched, allowing a coordinator to directly select the node responsible for a particular LUN as the target of a request.
  • the original node mappings for that node may be flushed to the shared levels (e.g., and merged).
  • Responsibility for the LUN is then transferred to the new node which then begins servicing that LUN.
  • FIG. 7 a generalized block diagram of one embodiment of a secondary index used to access a mapping table is shown.
  • requester data inputs 302 may be received by a key generator 304, which produces a query key value 306.
  • the query key value 306 is used to access a mapping table.
  • the primary index 310 shown in FIG. 3 may be too large (or larger than desired) to store in RAM 172 or memory medium 130.
  • older levels of the index may grow very large due to merging and flattening operations described later in FIG. 10 and FIG. 11. Therefore, a secondary index 320 may be cached for at least a portion of the primary index instead of the corresponding portion of the primary index 310.
  • the secondary index 320 may provide a more coarse level of granularity of location identification of data stored in the storage devices 176a- 176m. Therefore, the secondary index 320 may be smaller than the portion of the primary index 310 to which it corresponds. Accordingly, the secondary index 320 may be stored in RAM 172 or in memory medium 130.
  • the secondary index 320 is divided into partitions, such as partitions 322a-322b. Additionally, the secondary index may be organized according to level with the more recent levels appearing first. In one embodiment, older levels have lower numbers and younger levels have higher numbers (e.g., a level ID may be incremented with each new level).
  • Each entry of the secondary index 320 may identify a range of key values. For example, the first entry shown in the example may identify a range of key values from 0 to 12 in level 22. These key values may correspond to key values associated with a first record and a last record within a given page of the primary index 310.
  • the entry in the secondary index may simply store an identification of key 0 and an identification of key 12 to indicate the corresponding page includes entries within that range.
  • partition 312a may be a page and the key values of its first record and its last record are 0 and 12, respectively. Therefore, an entry within the secondary index 320 stores the range 0 to 12 as shown in FIG. 7. Since remappings are maintained in the levels within the mapping table, a range of key values may correspond to multiple pages and associated levels. The fields within the secondary index 320 may store this information as shown in FIG. 7. Each entry may store one or more corresponding unique virtual page identifiers (IDs) and associated level IDs corresponding to the range of key values.
  • IDs unique virtual page identifiers
  • Each entry may also store corresponding status information such as validity information.
  • the list of maintained page IDs and associated level IDs may indicate where a given query key value might be stored, but not confirm that the key value is present in that page and level.
  • the secondary index 320 is smaller than the primary index 310, but also has a coarse- level of granularity of location identification of data stored in the storage devices 176a- 176m.
  • the secondary index 320 may be sufficiently small to store in RAM 172 or in memory medium 130.
  • the secondary index 320 When the secondary index 320 is accessed with a query key value 306, it may convey one or more corresponding page IDs and associated level IDs. These results are then used to access and retrieve portions of the stored primary index.
  • the one or more identified pages may then be searched with the query key value to find a physical pointer value.
  • the level IDs may be used to determine a youngest level of the identified one or more levels that also store the query key value 306.
  • a record within a corresponding page may then be retrieved and a physical pointer value may be read for processing a storage access request.
  • the query key value 27 is within the range of keys 16 to 31.
  • the page IDs and level IDs stored in the corresponding entry are conveyed with the query key value to the mapping table.
  • FIG. 8 a generalized block diagram of one embodiment of a tertiary index used to access a mapping table is shown. Circuit and logic portions corresponding to those of FIG. 4 are numbered identically.
  • the primary index 310 shown in FIG. 3 may be too large to store in RAM 172 or memory medium 130.
  • the secondary index 320 may also become too large to store in these memories. Therefore, a tertiary index 330 may be accessed prior to the secondary index 320, which may still be faster than accessing the primary index 310.
  • the tertiary index 330 may provide a more coarse level of granularity than the secondary index 320 of location identification of data stored in the storage devices 176a- 176m. Therefore, the tertiary index 330 may be smaller than the portion of the secondary index 320 to which it corresponds. It is noted that each of the primary index 310, the secondary index 320, the tertiary index 330, and so forth, may be stored in a compressed format. The compressed format chosen may be a same compressed format used to store information within the mapping table 340.
  • the tertiary index 330 may include multiple partitions, such as partitions 332a, 332b and so forth.
  • the tertiary index 330 may be accessed with a query key value 306.
  • a query key value 306 of "27" is found to be between a range of key values from 0 to 78.
  • a first entry in the tertiary index 330 corresponds to this key value range.
  • a column in the tertiary index 330 may indicate which partition to access within the secondary index 320.
  • a key value range of 0 to 78 corresponds to partition 0 within the secondary index 320.
  • a filter may be accessed to determine if a query key value is not within any one of the indexes 310-330.
  • This filter may be a probabilistic data structure that determines whether an element is a member of a set. False positives may be possible, but false negatives may not be possible.
  • One example of such a filter is a Bloom filter. If an access of such a filter determines a particular value is not in the full index 142, then no query is sent to the storage. If an access of the filter determines the query key value is in a corresponding index, then it may be unknown whether a corresponding physical pointer value is stored in the storage devices 176a- 176m.
  • one or more overlay tables may be used to modify or elide tuples provided by the mapping table in response to a query. Such overlay tables may be used to apply filtering conditions for use in responding to accesses to the mapping table or during flattening operations when a new level is created. In various embodiments, other hardware and/or software may be used to apply filtering conditions. In some embodiments, the overlay table may be organized as time ordered levels in a manner similar to the mapping table described above. In other embodiments, they may be organized differently. Keys for the overlay table need not match the keys for the underlying mapping table.
  • an overlay table may contain a single entry stating that a particular volume has been deleted or is otherwise inaccessible (e.g., there is no natural access path to query this tuple), and that a response to a query corresponding to a tuple that refers to that volume identifier is instead invalid.
  • an entry in the overlay table may indicate that a storage location has been freed, and that any tuple that refers to that storage location is invalid, thus invalidating the result of the lookup rather than the key used by the mapping table.
  • the overlay table may modify fields in responses to queries to the underlying mapping table.
  • a single key may represent a range of values to efficiently identify multiple values to which the same operation (eliding or modification) is applied.
  • tuples may (effectively) be "deleted" from the mapping table by creating an "elide” entry in the overlay table and without modifying the mapping table.
  • the overlay table may include keys with no associated non-key data fields.
  • mapping table key (block 908) and first overlay table key (block 902) corresponding to the request are generated.
  • access to the overlay and mapping tables is shown as occurring concurrently.
  • accesses to the tables may be performed non-concurrently (e.g., sequentially or otherwise separate in time) in any desired order.
  • a corresponding tuple may be retrieved from the mapping table (block 910).
  • any tuple found in the mapping table is deemed invalid and an indication to this effect may be returned to the requester.
  • the overlay table contains a "modify" entry corresponding to the overlay table key (conditional block 912)
  • the values in the first overlay table entry may be used to modify one or more fields in the tuple retrieved from the mapping table (block 922).
  • a second overlay table key is generated (block 914) based on the tuple from the mapping table (whether modified or not) and a second lookup is done in a second overlay table (block 916) which may or may not be the same table as the first overlay table.
  • the tuple from the mapping table is deemed invalid (block 918). If a "modify" entry is found in the second overlay table (conditional block 924), one or more fields of the tuple from the mapping table may be modified (block 926). Such modification may include dropping a tuple, normalizing a tuple, or otherwise. The modified tuple may then be returned to the requester. If the second overlay table does not contain a modify entry (conditional block 924), the tuple may be returned to the requester unmodified. In some embodiments, at least some portions of the overlay table(s) may be cached to provide faster access to their contents.
  • a detected elide entry in the first overlay table may serve to short circuit any other corresponding lookups (e.g., blocks 914, 916, etc.).
  • accesses may be performed in parallel and "raced.” Numerous such embodiments are possible and are contemplated.
  • a flattening operation may be performed in response to detecting one or more conditions. For example, over time as the mapping table 340 grows and accumulates levels due to insertions of new records, the cost of searching more levels for a query key value may become undesirably high. In order to constrain the number of levels to search, multiple levels may be flattened into a single new level. For example, two or more levels which are logically adjacent or contiguous in time order may be chosen for a flattening operation.
  • the youngest record may be retained while the others are not included in the new "flattened" level.
  • the newly flattened level will return a same result for a search for a given key value as would be provided by a search of the corresponding multiple levels. Since the results of searches in the new flattened level do not change as compared to the two or more levels it replaces, the flattening operation need not be synchronized with update operations to the mapping table. In other words, flattening operations on a table may be performed asynchronously with respect to updates to the table.
  • other nodes may flatten levels, or use an already flattened level.
  • the two or more levels which have been used to form a flattened level may be retained for error recovery, mirroring, or other purposes.
  • records that have been elided may not be reinserted in to the new level.
  • the above described flattening may, for example, be performed responsive to detecting the number of levels in the mapping table has reached a given threshold.
  • the flattening may be performed responsive to detecting the size of one or more levels has exceeded a threshold.
  • Yet another condition that may be considered is the load on the system.
  • the decision of whether to flatten the levels may consider combinations of these conditions in addition to considering them individually.
  • the records are shown simply as key and pointer pairs.
  • the pages are shown to include four records for ease of illustration.
  • a level “F” and its next contiguous logical neighbor, level “F-l” may be considered for a flattening operation.
  • Level “F” may be younger than Level “F-l”.
  • two levels are shown to be flattened here, it is possible and contemplated that three or more levels may be chosen for flattening.
  • Level "F-l” may have records storing a same key value found in Level "F”. Bidirectional arrows are used to identify the records storing a same key value across the two contiguous levels.
  • the new Level "New F” includes a key corresponding to the duplicate key values found in Level “F” and Level “F-l".
  • the new Level “New F” includes a pointer value corresponding to the youngest (or younger in this case) record of the records storing the duplicate key value.
  • each of Level “F” and Level “F-l” includes a record storing the key value 4.
  • the younger record is in Level “F” and this record also stores the pointer value 512.
  • the Level “F-l” includes a record storing the key value 4 and also the pointer value 512, rather than the pointer value 656 found in the older Level "F-l”.
  • the new Level "New F” includes records with unique key values found between Level “F” and Level “F-l".
  • Level “F-l” includes records with the key and pointer pair of 6 and 246 found in Level “F” and the key and pointer pair of 2 and 398 found in Level “F-l”. As shown, each of the pages within the levels is sorted by key value.
  • an overlay table may be used to modify or elide tuples corresponding to key values in the underlying mapping table.
  • Such an overlay table(s) may be managed in a manner similar to that of the mapping tables.
  • an overlay table may be flattened and adjacent entries merged together to save space.
  • an overlay table may be managed in a manner different from that used to manage mapping tables.
  • an overlay table may contain a single entry that refers to a range of overlay table keys. In this way, the size of the overlay table can be limited.
  • the overlay table (after flattening) need contain no more than k+1 entries marking ranges as invalid, corresponding to the gaps between valid entries in the mapping table. Accordingly, the overlay table may used to identify tuples that may be dropped from the mapping table in a relatively efficient manner.
  • overlay tables may also be used to elide or modify values during flattening operations of the mapping tables. Accordingly, when a new level is created during a flattening operation of a mapping table, a key value that might otherwise be inserted into the new level may be elided.
  • a value may be modified before insertion in the new level. Such modifications may result in a single record corresponding to a given range of key values in the mapping table being replaced (in the new level) with multiple records - each corresponding to a subrange of the original record. Additionally, a record may be replaced with a new record that corresponds to a smaller range, or multiple records could be replaced by a single record whose range covers all ranges of the original records. All such embodiments are contemplated.
  • FIG. 11 a generalized block diagram of an embodiment of a flattening operation for levels within a mapping table is shown.
  • levels may be time ordered.
  • a Level "F” comprising one or more indexes and corresponding mappings is logically located above older Level “F-l”.
  • Level “F” is located logically below younger Level “F+l”.
  • Level “F-2” is logically located above younger Level “F-l”
  • Level “F+2" is logically located below older Level “F+l”.
  • levels “F” and “F-l” may be considered for a flattening operation. Bidirectional arrows are used to illustrate there are records storing same key values across the two contiguous levels.
  • a new Level “New F” includes key values corresponding to the duplicate key values found in Level “F” and Level “F-l".
  • the new Level “New F” includes a pointer value corresponding to the youngest (or younger in this case) record of the records storing the duplicate key value.
  • the Level “F” and the Level “F-l” may not yet be removed from the mapping table.
  • each node may verify it is ready to utilize the new single level, such as Level "New F", and no longer use the two or more levels it replaces (such as Level "F” and Level “F-l”). This verification may be performed prior to the new level becoming the replacement.
  • the two or more replaced levels may be kept in storage for error recovery, mirroring, or other purposes.
  • the new flattened level F is logically placed below younger levels (e.g., level F+l) and above the original levels that it replaces (e.g., level F and level F-l).
  • FIG. 12 one embodiment of a method 1000 for flattening levels within a mapping table is shown.
  • the components embodied in the network architecture 100 and the mapping table 340 described above may generally operate in accordance with method 1000.
  • the steps in this embodiment are shown in sequential order. However, some steps may occur in a different order than shown, some steps may be performed concurrently, some steps may be combined with other steps, and some steps may be absent in another embodiment.
  • mapping table storage space is allocated for a mapping table and corresponding indexes.
  • one or more conditions are determined for flattening two or more levels within the mapping table. For example, a cost of repeatedly searching a current number of levels within the mapping table in response to user requests may be greater than a cost of performing a flattening operation. Additionally, a cost may be based on at least one of the current (or predicted) number of levels in the structure to be flattened, the number of entries in one or more levels, the number of mapping entries that would be elided or modified, and the load on the system.
  • Cost may also include a time to perform a corresponding operation, an occupation of one or more buses, storage space used during a corresponding operation, a number of duplicate entries in a set of levels has reached some threshold, and so forth.
  • a count of a number of records within each level may be used to estimate when a flattening operation performed on two contiguous levels may produce a new single level with a number of records equal to twice a number of records within a next previous level.
  • the indexes and the mapping table are accessed and updated as data is stored and new mappings are found.
  • a number of levels within the mapping table increases as new records are inserted into the mapping table.
  • one or more groups of levels are identified for flattening.
  • a group of levels may include two or more levels. In one embodiment, the two or more levels are contiguous levels. Although the lowest levels, or the oldest levels, may be the best candidates for flattening, a younger group may also be selected.
  • a new single level comprising the newest records within a corresponding group is produced.
  • the new single Level "New F" includes the youngest records among the Level "F” and the Level "F+l".
  • an acknowledgment may be requested from each node within the cluster to indicate a respective node is ready to utilize the new levels produced by the flattening operation.
  • the current levels within the identified groups are replaced with the new levels.
  • synchronization across nodes is not needed. In such embodiments, some nodes may begin using a new level prior to other nodes.
  • nodes may continue to use the original level even after newly flattened levels are available.
  • a particular node may have original level data cached and used that in preference to using non-cached data of a newly flattened level. Numerous such embodiments are possible and are contemplated.
  • FIG. 13 one embodiment of a method 1100 for efficiently processing bulk array tasks within a mapping table is shown. Similar to the other described methods, the components embodied in the network architecture 100 and the mapping table 340 described above may generally operate in accordance with method 1100. In addition, the steps in this embodiment are shown in sequential order. However, some steps may occur in a different order than shown, some steps may be performed concurrently, some steps may be combined with other steps, and some steps may be absent in another embodiment.
  • mapping table may enable fine-grained mapping, which may allow direct manipulation of mapping information within the mapping table as an alternative to common bulk array tasks.
  • the direct map manipulation may reduce I/O network and bus traffic.
  • Flash memory has a low "seek time", which allows a number of dependent read operations to occur in less time than a single operation from a spinning disk.
  • These dependent reads may be used to perform online fine-grained mappings to integrate space-saving features like compression and deduplication.
  • these dependent read operations may allow the storage controller 174 to perform bulk array tasks entirely within a mapping table instead of accessing (reading and writing) the user data stored within the storage devices 176a- 176m.
  • a large or bulk array task is received.
  • a bulk copy or move request may correspond to a backup of a dozens or hundreds of virtual machines in addition to enterprise application data being executed and updated by the virtual machines.
  • the amount of data associated with the received request associated with a move, branch, clone, or copy of all of this data may be as large as 16 gigabytes (GB) or larger. If the user data was accessed to process this request, a lot of processing time may be spent on the request and system performance decreases.
  • a virtualized environment typically has less total input/output (I/O) resources than a physical environment.
  • the storage controller 174 may store an indication corresponding to the received request that relates a range of new keys to a range of old keys, wherein both the ranges of keys correspond to the received request. For example, if the received request is to copy of 16GB of data, a start key value and an end key value corresponding to the 16GB of data may be stored. Again, each of the start and the end key values may include a volume ID, a logical or virtual address within the received request, a snapshot ID, a sector number and so forth. In one embodiment, this information may be stored separate from the information stored in the indexes, such as the primary index 310, the secondary index 320, the tertiary index 330, and so forth. However, this information may be accessed when the indexes are accessed during the processing of later requests.
  • the data storage controller 174 may convey a response to a corresponding client of the client computer systems 110a- 1 10c indicating completion of the received request without prior access of user data. Therefore, the storage controller 174 may process the received request with low or no downtime and with no load on processor 122.
  • the storage controller 174 may set a condition, an indication, or a flag, or buffer update operations, for updating one or more records in the mapping table corresponding to the new keys replacing the old keys in the mapping table.
  • a condition, an indication, or a flag, or buffer update operations for updating one or more records in the mapping table corresponding to the new keys replacing the old keys in the mapping table.
  • one or more new records corresponding to the new keys may be inserted in the mapping table.
  • the keys may be inserted in a created new highest level as described earlier.
  • For a move request one or more old records may be removed from the mapping table after a corresponding new record has been inserted in the mapping table. Either immediately or at a later time, the records in the mapping table are actually updated.
  • an indication may be stored that a range of key values now corresponds to a series of binary zeroes. Additionally, as discussed above, overlay tables may be used to identify key values which are not (or no longer) valid.
  • the user data may not be overwritten.
  • the user data may be overwritten at a later time when the "freed" storage locations are allocated with new data for subsequent store (write) requests.
  • contiguous addresses may be chosen for sector reorganization, which may benefit applications executed on a client of the client computer systems 110a- 110c.
  • the storage controller 174 receives a data storage access request corresponding to one of the new keys (conditional block 1110), and the new key has already been inserted in the mapping table (conditional block 1112), then in block 1114, the indexes and the mapping table may be accessed with the new key. For example, either the primary index 310, the secondary index 320, or the tertiary index 330 may be accessed with the new key. When one or more pages of the mapping table are identified by the indexes, these identified pages may then be accessed. In block 1116, the storage access request may be serviced with a physical pointer value found in the mapping table that is associated with the new key.
  • the storage controller 174 receives a data storage access request corresponding to one of the new keys (conditional block 1110), and the new key has not already been inserted in the mapping table (conditional block 1112), then in block 11 18, the indexes and the mapping table may be accessed with a corresponding old key. The storage holding the range of old keys and the range of new keys may be accessed to determine the corresponding old key value. When one or more pages of the mapping table are identified by the indexes, these identified pages may then be accessed. In block 1120, the storage access request may be serviced with a physical pointer value found in the mapping table that is associated with the old key.
  • FIG. 14 a generalized block diagram illustrating an embodiment of a data layout architecture within a storage device is shown.
  • the data storage locations within the storage devices 176a- 176m may be arranged into redundant array of independent devices (RAID) arrays.
  • RAID redundant array of independent devices
  • different types of data may be stored in the storage devices 176a- 176k according to a data layout architecture.
  • each of the storage devices 176a- 176k is an SSD.
  • An allocation unit within an SSD may include one or more erase blocks within an SSD.
  • the user data 1230 may be stored within one or more pages included within one or more of the storage devices 176a- 176k. Within each intersection of a RAID stripe and one of the storage devices 176a-176k, the stored information may be formatted as a series of logical pages. Each logical page may in turn include a header and a checksum for the data in the page. When a read is issued it may be for one or more logical pages and the data in each page may be validated with the checksum. As each logical page may include a page header that contains a checksum for the page (which may be referred to as a "media" checksum), the actual page size for data may be smaller than one logical page.
  • the page header may be smaller, so that the parity page protects the page checksums in the data pages.
  • the checksum in parity pages storing inter-device recovery data 1250 may be calculated so that the checksum of the data page checksums is the same as the checksum of the parity page covering the corresponding data pages.
  • the header for a parity page need not be smaller than the header for a data page.
  • the inter-device ECC data 1250 may be parity information generated from one or more pages on other storage devices holding user data.
  • the inter-device ECC data 1250 may be parity information used in a RAID data layout architecture.
  • the stored information is shown as contiguous logical pages in the storage devices 176a- 176k, it is well known in the art the logical pages may be arranged in a random order, wherein each of the storage devices 176a- 176k is an SSD.
  • the intra-device ECC data 1240 may include information used by an intra-device redundancy scheme.
  • An intra-device redundancy scheme utilizes ECC information, such as parity information, within a given storage device.
  • ECC information such as parity information
  • This intra-device redundancy scheme and its ECC information corresponds to a given device and may be maintained within a given device, but is distinct from ECC that may be internally generated and maintained by the device itself. Generally speaking, the internally generated and maintained ECC of the device is invisible to the system within which the device is included.
  • the intra-device ECC data 1240 may also be referred to as intra-device error recovery data 1240.
  • the intra-device error recovery data 1240 may be used to protect a given storage device from latent sector errors (LSEs).
  • LSE latent sector errors
  • An LSE is an error that is undetected until the given sector is accessed. Therefore, any data previously stored in the given sector may be lost.
  • a single LSE may lead to data loss when encountered during RAID reconstruction after a storage device failure.
  • the term "sector” typically refers to a basic unit of storage on a HDD, such as a segment within a given track on the disk.
  • the term “sector” may also refer to a basic unit of allocation on a SSD.
  • LSEs Latent sector errors
  • ECC error-correction code
  • the intra-device error recovery data 1240 included within a given storage device may be used to increase data storage reliability within the given storage device.
  • the intra-device error recovery data 1240 is in addition to other ECC information that may be included within another storage device, such as parity information utilized in a RAID data layout architecture.
  • the intra-device error recovery data 1240 may be stored in one or more pages. As is well known by those skilled in the art, the intra-device error recovery data 1240 may be obtained by performing a function on chosen bits of information within the user data 1230. An XOR-based operation may be used to derive parity information to store in the intra-device error recovery data 1240.
  • Other examples of intra-device redundancy schemes include single parity check (SPC), maximum distance separable (MDS) erasure codes, interleaved parity check codes (IPC), hybrid SPC and MDS code (MDS+SPC), and column diagonal parity (CDP). The schemes vary in terms of delivered reliability and overhead depending on the manner the data 1240 is computed.
  • the system may be configured to calculate a checksum value for a region on the device. For example, a checksum may be calculated when information is written to the device. This checksum is stored by the system. When the information is read back from the device, the system may calculate the checksum again and compare it to the value that was stored originally. If the two checksums differ, the information was not read properly, and the system may use other schemes to recover the data. Examples of checksum functions include cyclical redundancy check (CRC), MD5, and SHA-1.
  • CRC cyclical redundancy check
  • MD5 cyclical redundancy check
  • SHA-1 cyclical redundancy check
  • An erase block within an SSD may comprise several pages.
  • a page may include 4KB of data storage space.
  • An erase block may include 64 pages, or 256KB. In other embodiments, an erase block may be as large as 1 megabyte (MB), and include 256 pages.
  • An allocation unit size may be chosen in a manner to provide both sufficiently large sized units and a relatively low number of units to reduce overhead tracking of the allocation units.
  • one or more state tables may maintain a state of an allocation unit (allocated, free, erased, error), a wear level, and a count of a number of errors (correctable and/or uncorrectable) that have occurred within the allocation unit.
  • an allocation unit is relatively small compared to the total storage capacity of an SSD. Other amounts of data storage space for pages, erase blocks and other unit arrangements are possible and contemplated.
  • the metadata 1260 may include page header information, RAID stripe identification information, log data for one or more RAID stripes, and so forth.
  • the single metadata page at the beginning of each stripe may be rebuilt from the other stripe headers.
  • this page could be at a different offset in the parity shard so the data can be protected by the inter-device parity.
  • the metadata 1260 may store or be associated with particular flag values that indicate this data is not to be deduplicated.
  • each of the pages in storage devices 176a- 176k may comprise additional protection such as a checksum stored within each given page.
  • the checksum (8 byte, 4 byte, or otherwise) may be placed inside a page after a header and before the corresponding data, which may be compressed.
  • data location information may be included in a checksum value.
  • the data in each of the pages may include this information. This information may include both a virtual address and a physical address. Sector numbers, data chunk and offset numbers, track numbers, plane numbers, and so forth may be included in this information as well.
  • This mapping information may also be used to rebuild the address translation mapping table if the content of the table is lost.
  • each of the pages in the storage devices 176a-176k stores a particular type of data, such as the data types 1230-1260.
  • pages may store more than one type of data.
  • the page header may store information identifying the data type for a corresponding page.
  • an intra-device redundancy scheme divides a device into groups of locations for storage of user data. For example, a division may be a group of locations within a device that correspond to a stripe within a RAID layout. In the example shown, only two stripes, 1270a and 1270b, are shown for ease of illustration.
  • a RAID engine within the storage controller 174 may determine a level of protection to use for storage devices 176a- 176k. For example, a RAID engine may determine to utilize RAID double parity for the storage devices 176a- 176k.
  • the inter-device redundancy data 1250 may represent the RAID double parity values generated from corresponding user data.
  • storage devices 176j and 176k may store the double parity information. It is understood other levels of RAID parity protection are possible and contemplated.
  • the storage of the double parity information may rotate between the storage devices rather than be stored within storage devices 176j and 176k for each RAID stripe.
  • the storage of the double parity information is shown to be stored in storage devices 176j and 176k for ease of illustration and description. Although each of the storage devices 176a- 176k comprises multiple pages, only page 1212 and page 1220 are labeled for ease of illustration.
  • the above-described embodiments may comprise software.
  • the program instructions that implement the methods and/or mechanisms may be conveyed or stored on a computer readable medium.
  • a computer readable medium Numerous types of media which are configured to store program instructions are available and include hard disks, floppy disks, CD- ROM, DVD, flash memory, Programmable ROMs (PROM), random access memory (RAM), and various other forms of volatile or non-volatile storage.
  • one or more portions of the methods and mechanisms described herein may form part of a cloud-computing environment.
  • resources may be provided over the Internet as services according to one or more various models.
  • models may include Infrastructure as a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS).
  • IaaS Infrastructure as a Service
  • PaaS Platform as a Service
  • SaaS Software as a Service
  • SaaS software tools and underlying equipment used by developers to develop software solutions
  • SaaS typically includes a service provider licensing software as a service on demand. The service provider may host the software, or may deploy the software to a customer for a given period of time. Numerous combinations of the above models are possible and are contemplated.

Abstract

A system and method for maintaining a mapping table in a data storage subsystem. A data storage subsystem supports multiple mapping tables. Records within a mapping table are arranged in multiple levels which may be logically ordered by time. Each level stores pairs of a key value and a pointer value. New records are inserted in a created new (youngest) level. All levels other than the youngest may be read only. In response to detecting a flattening condition, a data storage controller is configured to identify a group of two or more adjacent levels of the plurality of levels for flattening which are logically adjacent in time. A new level is created and one or more records stored within the group are stored in the new level, in response to detecting each of the one or more records stores a unique key among keys stored within the group.

Description

TITLE: MAPPING IN A STORAGE SYSTEM
BACKGROUND OF THE INVENTION Field of the Invention
[0001] This invention relates to computer networks and, more particularly, to maintaining a mapping structure in a storage system.
Description of the Related Art
[0002] As computer memory storage and data bandwidth increase, so does the amount and complexity of data that businesses daily manage. Large-scale distributed storage systems, such as data centers, typically run many business operations. A datacenter, which also may be referred to as a server room, is a centralized repository, either physical or virtual, for the storage, management, and dissemination of data pertaining to one or more businesses. A distributed storage system may be coupled to client computers interconnected by one or more networks. If any portion of the distributed storage system has poor performance, company operations may be impaired. A distributed storage system therefore maintains high standards for data availability and high-performance functionality.
[0003] The distributed storage system comprises physical volumes, which may be hard disks, solid-state devices, storage devices using another storage technology, or partitions of a storage device. Software applications, such as a logical volume manager or a disk array manager, provide a means of allocating space on mass-storage arrays. In addition, this software allows a system administrator to create units of storage groups including logical volumes. Storage virtualization provides an abstraction (separation) of logical storage from physical storage in order to access logical storage without end-users identifying physical storage.
[0004] To support storage virtualization, a volume manager performs input/output (I/O) redirection by translating incoming I/O requests using logical addresses from end-users into new requests using addresses associated with physical locations in the storage devices. As some storage devices may include additional address translation mechanisms, such as address translation layers which may be used in solid state storage devices, the translation from a logical address to another address mentioned above may not represent the only or final address translation. Redirection utilizes metadata stored in one or more mapping tables. In addition, information stored in one or more mapping tables may be used for storage deduplication and mapping virtual sectors at a specific snapshot level to physical locations. The volume manager may maintain a consistent view of mapping information for the virtualized storage. However, a supported address space may be limited by a storage capacity used to maintain a mapping table.
[0005] The technology and mechanisms associated with chosen storage disks determines the methods used by a volume manager. For example, a volume manager that provides mappings for a granularity level of a hard disk, a hard disk partition, or a logical unit number (LUN) of an external storage device is limited to redirecting, locating, removing duplicate data, and so forth, for large chunks of data. One example of another type of storage disk is a Solid-State Disk (SSD). An SSD may emulate a HDD interface, but an SSD utilizes solid-state memory to store persistent data rather than electromechanical devices as found in a HDD. For example, an SSD may comprise banks of Flash memory. Accordingly, a large supported address space by one or more mapping tables may not be achieved in systems comprising SSDs for storage while utilizing mapping table allocation algorithms developed for HDDs.
[0006] In view of the above, systems and methods for efficiently performing storage virtualization for data stored among a plurality of solid-state storage devices are desired.
SUMMARY OF THE INVENTION
[0007] Various embodiments of a computer system and methods for efficiently managing mapping tables in a data storage system are contemplated.
[0008] In one embodiment, a data storage subsystem coupled to a network receives read and write requests on the network from a client computer. The data storage subsystem comprises a plurality of data storage locations on a device group including a plurality of storage devices. The data storage subsystem further comprises at least one mapping table comprising a plurality of levels sorted by time. In one embodiment, each level stores one or more tuples, each of the tuples including one or more values that may be used as lookup keys. In addition, each of the tuples may include data values that are associated with the key values. In one embodiment, the mapping table is a virtual-to-physical address translation table. In another embodiment, the mapping table is a deduplication table. The data storage subsystem further comprises a data storage controller configured to create a new highest level (youngest level) to be added to the plurality of levels in response to detecting a condition for inserting one or more new tuples into the mapping table. Additionally, in response to detecting a flattening condition, a data storage controller is configured to identify a group of two or more adjacent levels of the plurality of levels for flattening which are logically adjacent in time. A new level is created and one or more records stored within the group are stored in the new level, in response to detecting each of the one or more records stores a unique key among keys stored within the group. Embodiments are contemplated in which the new level is maintained with the flattened levels. Also contemplated are embodiments wherein the new level replaces the flattened levels.
[0009] Also contemplated are embodiments the data storage controller is further configured to insert one or more second records stored within the group into the new level, in response to detecting each of the one or more second records corresponds to two or more records storing a same non-unique key within the group, and is in a younger level of the two or more adjacent levels.
[0010] Also contemplated are embodiments wherein only a youngest level of the plurality of levels may be updated with new mapping table entries. Additionally, flattening operations on the mapping table need not be synchronized with such updates to the mapping table.
[0011] These and other embodiments will become apparent upon consideration of the following description and accompanying drawings.
BRIEF DESCRIPTION OF THE DRAWINGS
[0012] FIG. 1 is a generalized block diagram illustrating one embodiment of network architecture.
[0013] FIG. 2 is a generalized block diagram of one embodiment of a mapping table.
[0014] FIG. 3A is a generalized block diagram of one embodiment of a primary index used to access a mapping table.
[0015] FIG. 3B is a generalized block diagram of another embodiment of a primary index used to access a mapping table.
[0016] FIG. 4 is a generalized block diagram of another embodiment of a primary index and mapping table.
[0017] FIG. 5A is a generalized flow diagram illustrating one embodiment of a method for performing a read access.
[0018] FIG. 5B is a generalized flow diagram illustrating one embodiment of a method for performing a write operation.
[0019] FIG. 6 is a generalized block diagram of one embodiment of a multi-node network with shared mapping tables.
[0020] FIG. 7 is a generalized block diagram of one embodiment of a secondary index used to access a mapping table. [0021] FIG. 8 is a generalized block diagram of one embodiment of a tertiary index accessing a mapping table.
[0022] FIG. 9 illustrates one embodiment of a method that utilizes overlay tables.
[0023] FIG. 10 is a generalized block diagram of one embodiment of a flattening operation for levels within a mapping table.
[0024] FIG. 11 is a generalized block diagram of another embodiment of a flattening operation for levels within a mapping table.
[0025] FIG. 12 is a generalized flow diagram illustrating one embodiment of a method for flattening levels within a mapping table.
[0026] FIG. 13 is a generalized flow diagram illustrating one embodiment of a method for efficiently processing bulk array tasks within a mapping table.
[0027] FIG. 14 is a generalized block diagram illustrating an embodiment of a data layout architecture within a storage device.
[0028] While the invention is susceptible to various modifications and alternative forms, specific embodiments are shown by way of example in the drawings and are herein described in detail. It should be understood, however, that drawings and detailed description thereto are not intended to limit the invention to the particular form disclosed, but on the contrary, the invention is to cover all modifications, equivalents and alternatives falling within the spirit and scope of the present invention as defined by the appended claims.
DETAILED DESCRIPTION
[0029] In the following description, numerous specific details are set forth to provide a thorough understanding of the present invention. However, one having ordinary skill in the art should recognize that the invention might be practiced without these specific details. In some instances, well-known circuits, structures, signals, computer program instruction, and techniques have not been shown in detail to avoid obscuring the present invention.
[0030] Referring to FIG. 1, a generalized block diagram of one embodiment of a network architecture 100 is shown. As described further below, one embodiment of network architecture 100 includes client computer systems 110a- 110b interconnected to one another through a network 180 and to data storage arrays 120a-120b. Network 180 may be coupled to a second network 190 through a switch 140. Client computer system 110c is coupled to client computer systems 1 10a- 1 10b and data storage arrays 120a- 120b via network 190. In addition, network 190 may be coupled to the Internet 160 or otherwise outside network through switch 1 0. [0031] It is noted that in alternative embodiments, the number and type of client computers and servers, switches, networks, data storage arrays, and data storage devices is not limited to those shown in FIG. 1. At various times one or more clients may operate offline. In addition, during operation, individual client computer connection types may change as users connect, disconnect, and reconnect to network architecture 100. Further, while the present description generally discusses network attached storage, the systems and methods described herein may also be applied to directly attached storage systems and may include a host operating system configured to perform one or more aspects of the described methods. Numerous such alternatives are possible and are contemplated. A further description of each of the components shown in FIG. 1 is provided shortly. First, an overview of some of the features provided by the data storage arrays 120a- 120b is described.
[0032] In the network architecture 100, each of the data storage arrays 120a- 120b may be used for the sharing of data among different servers and computers, such as client computer systems l lOa-l lOc. In addition, the data storage arrays 120a-120b may be used for disk mirroring, backup and restore, archival and retrieval of archived data, and data migration from one storage device to another. In an alternate embodiment, one or more client computer systems 110a- 110c may be linked to one another through fast local area networks (LANs) in order to form a cluster. Such clients may share a storage resource, such as a cluster shared volume residing within one of data storage arrays 120a- 120b.
[0033] Each of the data storage arrays 120a- 120b includes a storage subsystem 170 for data storage. Storage subsystem 170 may comprise a plurality of storage devices 176a- 176m. These storage devices 176a- 176m may provide data storage services to client computer systems 110a- 110c. Each of the storage devices 176a- 176m uses a particular technology and mechanism for performing data storage. The type of technology and mechanism used within each of the storage devices 176a-176m may at least in part be used to determine the algorithms used for controlling and scheduling read and write operations to and from each of the storage devices 176a- 176m. For example, the algorithms may locate particular physical locations corresponding to the operations. In addition, the algorithms may perform input/output (I/O) redirection for the operations, removal of duplicate data in the storage subsystem 170, and support one or more mapping tables used for address redirection and deduplication.
[0034] The logic used in the above algorithms may be included in one or more of a base operating system (OS) 132, a volume manager 134, within a storage subsystem controller 174, control logic within each of the storage devices 176a- 176m, or otherwise. Additionally, the logic, algorithms, and control mechanisms described herein may comprise hardware and/or software.
[0035] Each of the storage devices 176a- 176m may be configured to receive read and write requests and comprise a plurality of data storage locations, each data storage location being addressable as rows and columns in an array. In one embodiment, the data storage locations within the storage devices 176a- 176m may be arranged into logical, redundant storage containers or RAID arrays (redundant arrays of inexpensive/independent disks).
[0036] In some embodiments, each of the storage devices 176a- 176m may utilize technology for data storage that is different from a conventional hard disk drive (HDD). For example, one or more of the storage devices 176a- 176m may include or be further coupled to storage consisting of solid-state memory to store persistent data. In other embodiments, one or more of the storage devices 176a-176m may include or be further coupled to storage using other technologies such as spin torque transfer technique, magnetoresistive random access memory (MRAM) technique, shingled disks, memristors, phase change memory, or other storage technologies. These different storage techniques and technologies may lead to differing I/O characteristics between storage devices.
[0037] In one embodiment, the included solid-state memory comprises solid-state drive (SSD) technology. The differences in technology and mechanisms between HDD technology and SDD technology may lead to differences in input/output (I/O) characteristics of the data storage devices 176a- 176m. A Solid-State Disk (SSD) may also be referred to as a Solid-State Drive. Without moving parts or mechanical delays, an SSD may have a lower read access time and latency than a HDD. However, the write performance of SSDs is generally slower than the read performance and may be significantly impacted by the availability of free, programmable blocks within the SSD.
[0038] Storage array efficiency may be improved by creating a storage virtualization layer between user storage and physical locations within storage devices 176a- 176m. In one embodiment, a virtual layer of a volume manager is placed in a device-driver stack of an operating system (OS), rather than within storage devices or in a network. Many storage arrays perform storage virtualization at a coarse-grained level to allow storing of virtual-to-physical mapping tables entirely in memory. However, such storage arrays are unable to integrate features such as data compression, deduplication and copy-on-modify operations. Many file systems support fine-grained virtual-to-physical mapping tables, but they do not support large storage arrays, such as device groups 173 a- 173m. Rather, a volume manager or a disk array manager is used to support device groups 173a- 173m.
[0039] In one embodiment, one or more mapping tables may be stored in the storage devices 176a- 176m, rather than memory, such as RAM 172, memory medium 130 or a cache within processor 122. The storage devices 176a- 176 may be SSDs utilizing Flash memory. The low read access and latency times for SSDs may allow a small number of dependent read operations to occur while servicing a storage access request from a client computer. The dependent read operations may be used to access one or more indexes, one or more mapping tables, and user data during the servicing of the storage access request.
[0040] In one example, I/O redirection may be performed by the dependent read operations. In another example, inline deduplication may be performed by the dependent read operations. In yet another example, bulk array tasks, such as a large copy, move, or zeroing operation, may be performed entirely within a mapping table rather than accessing storage locations holding user data. Such a direct map manipulation may greatly reduce I/O traffic and data movement within the storage devices 176a- 176m. The combined time for both servicing the storage access request and performing the dependent read operations from SSDs may be less than servicing a storage access request from a spinning HDD.
[0041] In addition, the information within a mapping table may be compressed. A particular compression algorithm may be chosen to allow identification of individual components, such as a key within a record among multiple records. Therefore, a search for a given key among multiple compressed records may occur. If a match is found, only the matching record may be decompressed. Compressing the tuples within records of a mapping table may further enable fine-grained level mapping. This fine-grained level mapping may allow direct map manipulation as an alternative to common bulk array tasks. Further details concerning efficient storage virtualization will be discussed below.
[0042] Again, as shown, network architecture 100 includes client computer systems 110a- 110c interconnected through networks 180 and 190 to one another and to data storage arrays 120a-120b. Networks 180 and 190 may include a variety of techniques including wireless connection, direct local area network (LAN) connections, wide area network (WAN) connections such as the Internet, a router, storage area network, Ethernet, and others. Networks 180 and 190 may comprise one or more LANs that may also be wireless. Networks 180 and 190 may further include remote direct memory access (RDMA) hardware and/or software, transmission control protocol/internet protocol (TCP/IP) hardware and/or software, router, repeaters, switches, grids, and/or others. Protocols such as Fibre Channel, Fibre Channel over Ethernet (FCoE), iSCSI, and so forth may be used in networks 180 and 190. Switch 140 may utilize a protocol associated with both networks 180 and 190. The network 190 may interface with a set of communications protocols used for the Internet 160 such as the Transmission Control Protocol (TCP) and the Internet Protocol (IP), or TCP/IP. Switch 150 may be a TCP/IP switch.
[0043] Client computer systems 110a- 1 10c are representative of any number of stationary or mobile computers such as desktop personal computers (PCs), servers, server farms, workstations, laptops, handheld computers, servers, personal digital assistants (PDAs), smart phones, and so forth. Generally speaking, client computer systems 110a- 1 10c include one or more processors comprising one or more processor cores. Each processor core includes circuitry for executing instructions according to a predefined general-purpose instruction set. For example, the x86 instruction set architecture may be selected. Alternatively, the Alpha®, PowerPC®, SPARC®, or any other general-purpose instruction set architecture may be selected. The processor cores may access cache memory subsystems for data and computer program instructions. The cache subsystems may be coupled to a memory hierarchy comprising random access memory (RAM) and a storage device.
[0044] Each processor core and memory hierarchy within a client computer system may be connected to a network interface. In addition to hardware components, each of the client computer systems 110a- 110c may include a base operating system (OS) stored within the memory hierarchy. The base OS may be representative of any of a variety of operating systems, such as, for example, MS-DOS®, MS-WINDOWS®, OS/2®, UNIX®, Linux®, Solaris®, AIX®, DART, or otherwise. As such, the base OS may be operable to provide various services to the end-user and provide a software framework operable to support the execution of various programs. Additionally, each of the client computer systems 110a- 110c may include a hypervisor used to support virtual machines (VMs). As is well known to those skilled in the art, virtualization may be used in desktops and servers to fully or partially decouple software, such as an OS, from a system's hardware. Virtualization may provide an end-user with an illusion of multiple OSes running on a same machine each having its own resources and access to logical storage entities (e.g., LUNs) built upon the storage devices 176a-176m within each of the data storage arrays 120a- 120b.
[0045] Each of the data storage arrays 120a- 120b may be used for the sharing of data among different servers, such as the client computer systems 110a- 110c. Each of the data storage arrays 120a- 120b includes a storage subsystem 170 for data storage. Storage subsystem 170 may comprise a plurality of storage devices 176a- 176m. Each of these storage devices 176a- 176m may be an SSD. A controller 174 may comprise logic for handling received read/write requests. A random-access memory (RAM) 172 may be used to batch operations, such as received write requests. In various embodiments, when batching write operations (or other operations) non- volatile storage (e.g., NVRAM) may be used.
[0046] The base OS 132, the volume manager 134 (or disk array manager 134), any OS drivers (not shown) and other software stored in memory medium 130 may provide functionality providing access to files and the management of these functionalities. The base OS 132 may be a storage operating system such as NetApp Data ONTAP® or otherwise. The base OS 132 and the OS drivers may comprise program instructions stored on the memory medium 130 and executable by processor 122 to perform one or more memory access operations in storage subsystem 170 that correspond to received requests. The system shown in FIG. 1 may generally include one or more file servers and/or block servers.
[0047] Each of the data storage arrays 120a- 120b may use a network interface 124 to connect to network 180. Similar to client computer systems l lOa-HOc, in one embodiment, the functionality of network interface 124 may be included on a network adapter card. The functionality of network interface 124 may be implemented using both hardware and software. Both a random-access memory (RAM) and a read-only memory (ROM) may be included on a network card implementation of network interface 124. One or more application specific integrated circuits (ASICs) may be used to provide the functionality of network interface 124.
[0048] In addition to the above, each of the storage controllers 174 within the data storage arrays 120a- 120b may support storage array functions such as snapshots, replication and high availability. In addition, each of the storage controllers 174 may support a virtual machine environment that comprises a plurality of volumes with each volume including a plurality of snapshots. In one example, a storage controller 174 may support hundreds of thousands of volumes, wherein each volume includes thousands of snapshots. In one embodiment, a volume may be mapped in fixed-size sectors, such as a 4-kilobyte (KB) page within storage devices 176a- 176m. In another embodiment, a volume may be mapped in variable-size sectors such as for write requests. A volume ID, a snapshot ID, and a sector number may be used to identify a given volume.
[0049] An address translation table may comprise a plurality of entries, wherein each entry holds a virtual-to-physical mapping for a corresponding data component. This mapping table may be used to map logical read/write requests from each of the client computer systems 110a- 110c to physical locations in storage devices 176a- 176m. A "physical" pointer value may be read from the mapping table during a lookup operation corresponding to a received read/write request. This physical pointer value may then be used to locate a physical location within the storage devices 176a- 176m. It is noted the physical pointer value may be used to access another mapping table within a given storage device of the storage devices 176a- 176m. Consequently, one or more levels of indirection may exist between the physical pointer value and a target storage location.
[0050] In another embodiment, the mapping table may comprise information used to deduplicate data (deduplication table related information). The information stored in the deduplication table may include mappings between one or more calculated hash values for a given data component and a physical pointer to a physical location in one of the storage devices 176a- 176m holding the given data component. In addition, a length of the given data component and status information for a corresponding entry may be stored in the deduplication table.
[0051] Turning now to FIG. 2, a generalized block diagram of one embodiment of a mapping table is shown. As discussed earlier, one or more mapping tables may be used for I/O redirection or translation, deduplication of duplicate copies of user data, volume snapshot mappings, and so forth. Mapping tables may be stored in the storage devices 176a- 176m. The diagram shown in FIG. 2 represents a logical representation of one embodiment of the organization and storage of the mapping table. Each level shown may include mapping table entries corresponding to a different period of time. For example, level "1" may include information older than information stored in level "2". Similarly, level "2" may include information older than information stored in level "3". The information stored in the records, pages and levels shown in FIG. 2 may be stored in a random-access manner within the storage devices 176a- 176m. Additionally, copies of portions or all of a given mapping table entries may be stored in RAM 172, in buffers within controller 174, in memory medium 130, and in one or more caches within or coupled to processor 122. In various embodiments, a corresponding index may be included in each level for mappings which are part of the level (as depicted later in FIG. 4). Such an index may include an identification of mapping table entries and where they are stored (e.g., an identification of the page) within the level. In other embodiments, the index associated with mapping table entries may be a distinct entity, or entities, which are not logically part of the levels themselves.
[0052] Generally speaking, each mapping table comprises a set of rows and columns. A single record may be stored in a mapping table as a row. A record may also be referred to as an entry. In one embodiment, a record stores at least one tuple including a key. Tuples may (or may not) also include data fields including data such as a pointer used to identify or locate data components stored in storage subsystem 170. It is noted that in various embodiments, the storage subsystem may include storage devices (e.g., SSDs) which have internal mapping mechanisms. In such embodiments, the pointer in the tuple may not be an actual physical address per se. Rather, the pointer may be a logical address which the storage device maps to a physical location within the device. Over time, this internal mapping between logical address and physical location may change. In other embodiments, records in the mapping table may only contain key fields with no additional associated data fields. Attributes associated with a data component corresponding to a given record may be stored in columns, or fields, in the table. Status information, such as a valid indicator, a data age, a data size, and so forth, may be stored in fields, such as FieldO to FieldN shown in FIG. 2. In various embodiments, each column stores information corresponding to a given type. In some embodiments, compression techniques may be utilized for selected fields which in some cases may result in fields whose compressed representation is zero bits in length.
[0053] A key is an entity in a mapping table that may distinguish one row of data from another row. Each row may also be referred to as an entry or a record. A key may be a single column, or it may consist of a group of columns used to identify a record. In some embodiments, a key may correspond to a range of values rather than to a single value. A key corresponding to a range may be represented as a start and end of a range, or as a start and length, or in other ways. The ranges corresponding to keys may overlap with other keys, either ranges or individual values. In one example, an address translation mapping table may utilize a key comprising a volume identifier (ID), a logical or virtual address, a snapshot ID, a sector number, and so forth. A given received read/write storage access request may identify a particular volume, sector and length. A sector may be a logical block of data stored in a volume. Sectors may have different sizes on different volumes. The address translation mapping table may map a volume in sector- size units.
[0054] A volume identifier (ID) may be used to access a volume table that conveys a volume ID and a corresponding current snapshot ID. This information along with the received sector number may be used to access the address translation mapping table. Therefore, in such an embodiment, the key value for accessing the address translation mapping table is the combination of the volume ID, snapshot ID, and the received sector number. In one embodiment, the records within the address translation mapping table are sorted by volume ID, followed by the sector number and then by the snapshot ID. This ordering may group together different versions of data components in different snapshots. Therefore, during a lookup for a storage access read request, a corresponding data component may be found with fewer read operations to the storage devices 176a- 176m.
[0055] The address translation mapping table may convey a physical pointer value that indicates a location within the data storage subsystem 170 storing a data component corresponding to the received data storage access request. The key value may be compared to one or more key values stored in the mapping table. In the illustrated example, simpler key values, such as "0", "2", "12" and so forth, are shown for ease of illustration. The physical pointer value may be stored in one or more of the fields in a corresponding record.
[0056] The physical pointer value may include a segment identifier (ID) and a physical address identifying the location of storage. A segment may be a basic unit of allocation in each of the storage devices 176a- 176m. A segment may have a redundant array of independent device (RAID) level and a data type. During allocation, a segment may have one or more of the storage devices 176a- 176m selected for corresponding storage. In one embodiment, a segment may be allocated an equal amount of storage space on each of the one or more selected storage devices of the storage devices 176a- 176m. The data storage access request may correspond to multiple sectors, which may result in multiple parallel lookups. A write request may be placed in an NVRAM buffer, such as RAM 172, and a write completion acknowledgment may be sent to a corresponding client computer of the client computers 110a- 110c. At a later time, an asynchronous process may flush the buffered write requests to the storage devices 176a- 176m.
[0057] In another example, the mapping table shown in FIG. 2 may be a deduplication table. A deduplication table may utilize a key comprising a hash value determined from a data component associated with a storage access request. The initial steps of a deduplication operation may be performed concurrently with other operations, such as a read/write request, a garbage collection operation, a trim operation, and so forth. For a given write request, the data sent from one of the client computer systems 110a- 110c may be a data stream, such as a byte stream. As is well known to those skilled in the art, a data stream may be divided into a sequence of fixed-length or variable-length chunks. A chunking algorithm may perform the dividing of the data stream into discrete data components which may be referred to as "chunks". A chunk may be a sub-file content-addressable unit of data. In various embodiments, a table or other structure may be used to determine a particular chunking algorithm to use for a given file type or type of data. . A file's type may be determined by referring to its file name extension, separate identifying information, the content of the data itself, or otherwise. The resulting chunks may then be stored in one of the data storage arrays 120a- 120b to allow for sharing of the chunks. Such chunks may be stored separately or grouped together in various ways.
[0058] In various embodiments, the chunks may be represented by a data structure that allows reconstruction of a larger data component from its chunks (e.g. a particular file may be reconstructed based on one or more smaller chunks of stored data). A corresponding data structure may record its corresponding chunks including an associated calculated hash value, a pointer (physical and/or logical) to its location in one of the data storage arrays 120a- 120b, and its length. For each data component, a deduplication application may be used to calculate a corresponding hash value. For example, a hash function, such as Message-Digest algorithm 5 (MD5), Secure Hash Algorithm (SHA), or otherwise, may be used to calculate a corresponding hash value. In order to know if a given data component corresponding to a received write request is already stored in one of the data storage arrays 120a- 120b, bits of the calculated hash value (or a subset of bits of the hash value) for the given data component may be compared to bits in the hash values of data components stored in one or more of the data storage arrays 120a- 120b.
[0059] A mapping table may comprise one or more levels as shown in FIG. 2. A mapping table may comprise 16 to 64 levels, although another number of levels supported within a mapping table is possible and contemplated. In FIG. 2, three levels labeled Level "1", Level "2" and Level "N" are shown for ease of illustration. Each level within a mapping table may include one or more partitions. In one embodiment, each partition is a 4 kilo-byte (KB) page. For example, Level "N" is shown to comprise pages 210a-210g, Level "2" comprises pages 210h- 210j and Level "1" comprises pages 210k-210n. It is possible and contemplated other partition sizes may also be chosen for each of the levels within a mapping table. In addition, it is possible one or more levels have a single partition, which is the level itself.
[0060] In one embodiment, multiple levels within a mapping table are sorted by time. For example, in FIG. 2, Level "1" may be older than Level "2". Similarly, Level "2" may be older than Level "N". In one embodiment, when a condition for inserting one or more new records in the mapping table is detected, a new level may be created. In various embodiments, when a new level is created the number/designation given to the new level is greater than numbers given to levels that preceded the new level in time. For example, if the most recent level created is assigned the value 8, then a newly created level may be assigned the value 9. In this manner a temporal relationship between the levels may be established or determined. As may be appreciated, numerical values need not be strictly sequential. Additionally, alternative embodiments may reverse the numbering scheme such that newer levels have smaller numerical designations. Further, other embodiments may utilize non-numerical designations to distinguish between levels. Numerous such embodiments are possible and are contemplated. Each next older level has a label decremented by one from a label integer value of a previous younger level. A separate table not shown may be used to logically describe the mapping table. For example, each entry of the separate table may include a given level ID and a list of the page IDs stored within the given level ID.
[0061] By creating a new highest level for an insertion of new records, the mapping table is updated by appending the new records. In one embodiment, a single level is created as a new highest level and each of the new records is inserted into the single level. In another embodiment, the new records may be searched for duplicate keys prior to insertion into the mapping table. A single level may be created as a new highest level. When a given record storing a duplicate key is found, each of the records buffered ahead of the given record may be inserted into the single level. The new records may be buffered in a manner to preserve memory ordering, such as in-order completion of requests. Then another single level may be created and the remainder of the new records may be inserted into this other single level unless another record storing a duplicate key is found. If such a record is found, then the steps are repeated. Existing records within the mapping table storing a same key value as one of the new records are not edited or overwritten in-place by the insertion of the new records.
[0062] Although the sizes of the levels are illustrated as increasing with lower levels being larger than newer levels, the higher levels may alternate between being larger or smaller than neighboring levels. The number of newer records to insert into the mapping table may vary over time and create the fluctuating level sizes. The lower levels may be larger than newer levels due to flattening of the lower levels. Two or more lower levels may be flattened into a single level when particular conditions are detected. Further details are provided later.
[0063] With no edits in-place for the records stored in the mapping table, newer records placed in higher levels may override records storing a same key value located in the lower levels. For example, when the mapping table is accessed by a given key value, one or more levels may be found to store a record holding a key value matching the given key value. In such a case, the highest level of the one or more levels may be chosen to provide the information stored in its corresponding record as a result of the access. Further details are provided later. In addition, further details about the detected conditions for inserting one or more new records into the mapping table and the storage of information are provided later. [0064] In one embodiment, entries within a given page may be sorted by key. For example, the entries may be sorted in ascending order according to a key included in the entry. Additionally, in various embodiments, the pages within a level may be sorted according to any desired sort order. In various embodiments, the pages within a level may also be sorted (e.g., according to key values or otherwise). In the example of FIG. 2, page 210a of Level N includes records sorted according to key value in ascending order. In various embodiments, one or more columns may be used to store key values. In the example of FIG. 2, two columns or fields are shown in each tuple for storing key values. Utilizing such key values, the records then may be sorted in a desired order. Sorting may be performed based on any of the key values for a records, or any combination of key values for the record. In the example shown, the first record stores a key value including 0 and 8 stored in two columns, and the last record stores a key value including 12 and 33. In this illustrated example, each sorted record in page 210a between the first and the last record stores a key value between 0 and 12 in the first column and the records are arranged in a manner to store key values based (at least in part) on the first column in an ascending order from 0 to 12. Similarly, page 210b includes sorted records, wherein the first record stores key values of 12 and 39 and the last record stores key values of 31 and 19. In this illustrated example, each sorted record in page 210b between the first and the last record stores a key value between 12 and 31 in the first column and the records are arranged in a manner to store key values in an ascending order from 12 to 31.
[0065] In addition to the above, the pages within Level N are sorted according to a desired order. In various embodiments, pages within a level may be sorted in a manner that reflects the order in which entries within a page are sorted. For example, pages within a level may be sorted according to key values in ascending order. As the first key value in page 210b is greater than the last key value in page 210a, page 210b follows page 210a in the sort order. Page 210g would then include entries whose key values are greater than those included in pages 210a-210f (not shown). In this manner, all entries within a level are sorted according to a common scheme. The entries are simply subdivided into page, or other, size units. As may be appreciated, other sorting schemes may be used as desired.
[0066] Referring now to FIG. 3A, a generalized block diagram of one embodiment of a primary index used to access a mapping table is shown. A key generator 304 may receive one or more requester data inputs 302. In one embodiment, a mapping table is an address translation directory table. A given received read/write request may identify a particular volume, sector and length. The key generator 304 may produce a query key value 306 that includes a volume identifier (ID), a logical or virtual address, a snapshot ID, and a sector number. Other combinations are possible and other or additional values may be utilized as well. Different portions of the query key value 306 may be compared to values stored in columns that may or may not be contiguous within the mapping table. In the shown example, a key value of "22" is used for ease of illustration.
[0067] As described earlier, both a chunking algorithm and/or a segmenting algorithm associated with the key generator 304 may receive data 302 corresponding to a storage access request. These algorithms may produce one or more data components and select a hash function to calculate a corresponding hash value, or query key value 306, for each data component. The resulting hash value may be used to index the deduplication table.
[0068] A primary index 310, as shown in FIG. 3 A, may provide location identifying information for data stored in the storage devices 176a- 176m. For example, referring again to FIG. 2, a corresponding primary index 310 (or portion thereof) may be logically included in each of level "1", level "2" and level "N". Again, each level and each corresponding primary index may be physically stored in a random-access manner within the storage devices 176a- 176m.
[0069] In one embodiment, the primary index 310 may be divided into partitions, such as partitions 312a-312b. In one embodiment, the size of the partitions may range from a 4 kilobyte (KB) page to 256 KB, though other sizes are possible and are contemplated. Each entry of the primary index 310 may store a key value. In addition, each entry may store a corresponding unique virtual page identifier (ID) and a level ID corresponding to the key value. Each entry may store corresponding status information such as validity information. When the primary index 310 is accessed with a query key value, the entries within the index 310 may be searched for one or more entries which match, or otherwise correspond to, the key value. Information from the matching entry may then be used to locate and retrieve a mapping which identifies a storage location which is the target of a received read or write request. In other words, the index 310 identifies the locations of mappings. In one embodiment, a hit in the index provides a corresponding page ID identifying a page within the storage devices 176a- 176m storing both the key value and a corresponding physical pointer value. The page identified by the corresponding page ID may be searched with the key value to find the physical pointer value.
[0070] In the example of FIG. 3A, a received request corresponds to a key "22". This key is then used to access index 310. A search of the index 310 results on a hit to an entry within partition 312b. The matching entry in this case include information such as - page 28, and level 3. Based upon this result, the desired mapping for the request is found in a page identified as page 28 within level 3 of the mapping tables. Using this information, an access may then be made to the mapping tables to retrieve the desired mapping. If an access to the primary index 310 requires an access to storage, then at least two storage accesses would be required in order to obtain a desired mapping. Therefore, in various embodiments as described below, portions of the primary index are cached, or otherwise stored in a relatively fast access memory, in order to eliminate one access to the storage devices. In various embodiments, the entire primary index for the mapping tables is cached. In some embodiments, where the primary index has become too large to cache in its entirety, or is otherwise larger than desired, secondary, tertiary, or other index portions may be used in the cache to reduce its size. Secondary type indices are discussed below. In addition to the above, in various embodiments mapping pages corresponding to recent hits are also cached for at least some period of time. In this manner, processes which exhibit accesses with temporal locality can be serviced more rapidly (i.e., recently accessed locations will have their mappings cached and readily available).
[0071] Referring now to FIG. 3B, a generalized block diagram of one embodiment of a cached primary index used to access a mapping table is shown. Circuit and logic portions corresponding to those of FIG. 3 A are numbered identically. The cached primary index 314 may include copies of information stored in each of the primary indexes 310 for the multiple levels in a mapping table. The primary index 314 may be stored in one or more of RAM 172, buffers within controller 174, memory medium 130 and caches within processor 122. In one embodiment, the primary index 314 may be sorted by key value, though sorting otherwise is possible. The primary index 314 may also be divided into partitions, such as partitions 316a- 316b. In one embodiment, the size of the partitions 316a-316b may be a same size as the partitions 312a-312b within the primary index 310.
[0072] Similar to the primary index 310, each entry of the primary index 314 may store one or more of a key value, a corresponding unique virtual page identifier (ID), a level ID corresponding to the key value, and status information such as valid information. When the primary index 314 is accessed with a query key value 306, it may convey a corresponding page ID identifying a page within the storage devices 176a- 176m storing both the key value and a corresponding pointer value. The page identified by the corresponding page ID may be searched with the key value to find the pointer value. As shown, the primary index 314 may have multiple records storing a same key value. Therefore, multiple hits may result from the search for a given key value. In one embodiment, a hit with a highest value of a level ID (or whatever indicator is used to identify a youngest level or most recent entry) may be chosen. This selection of one hit from multiple hits may be performed by merge logic not shown here. A further description of the merge logic is provided later.
[0073] Turning now to FIG. 4, a generalized block diagram of another embodiment of a mapping table and primary index used to access the mapping table is shown. Circuit and logic portions corresponding to those of FIG. 3A are numbered identically. Mapping table 340 may have a similar structure as the mapping table shown in FIG. 2. However, storage of a corresponding primary index 310 for each level is now shown. A copy of one or more of the primary index portions 310a-310i may be included in index copies 330 (e.g., cached copies). Copies 330 may generally correspond to the cached index depicted in FIG. 3B. The information in index copies 330 may be stored in RAM 172, buffers within controller 174, memory medium 130, and caches within processor 122. In the embodiment shown, the information in primary indexes 310a-310i may be stored with the pages of mappings in storage devices 176a- 176m. Also shown is a secondary index 320 which may be used to access a primary index, such as primary index 3 lOi shown in the diagram. Similarly, accessing and updating the mapping table 340 may occur as described earlier.
[0074] Mapping table 340 comprises multiple levels, such as Level "1" to Level "N". In the illustrated example, each of the levels includes multiple pages. Level "N" is shown to include pages "0" to "D", Level N-1 includes pages "E" to "G", and so forth. Again, the levels within the mapping table 310 may be sorted by time. Level "N" may be younger than Level "N-1" and so forth. Mapping table 340 may be accessed by at least a key value. In the illustrated example, mapping table 340 is accessed by a key value "27" and a page ID "32". For example, in one embodiment, a level ID "8" may be used to identify a particular level (or "subtable") of the mapping table 340 to search. Having identified the desired subtable, the page ID may then be used to identify the desired page within the subtable. Finally, the key may be used to identify the desired entry within the desired page.
[0075] As discussed above, an access to the cached index 330 may result in multiple hits. In one embodiment, the results of these multiple hits are provided to merge logic 350 which identifies which hit is used to access the mapping table 340. Merge logic 350 may represent hardware and/or software which is included within a storage controller. In one embodiment, merge logic 350 is configured to identify a hit which corresponds to a most recent (newest) mapping. Such an identification could be based upon an identification of a corresponding level for an entry, or otherwise. In the example shown, a query corresponding to level 8, page 32, key 27 is received. Responsive to the query, page 32 of level 8 is accessed. If the key 27 is found within page 32 (a hit), then a corresponding result is returned (e.g., pointer xF3209B24 in the example shown). If the key 27 is not found within page 32, then a miss indication is returned. This physical pointer value may be output from the mapping table 340 to service a storage access request corresponding to the key value "27".
[0076] In one embodiment, the mapping table 340 supports inline mappings. For example, a mapping detected to have a sufficiently small target may be represented without an actual physical sector storing user data within the storage devices 176a- 176m. One example may be a repeating pattern within the user data. Rather than actually store multiple copies of a repeated pattern (e.g., a series of zeroes) as user data within the storage devices 176a-176m, a corresponding mapping may have an indication marked in the status information, such as within one of the fields of fieldO to fieldN in the mapping table, that indicates what data value is to be returned for a read request. However, there is no actual storage of this user data at a target location within the storage devices 176a- 176m. Additionally, an indication may be stored within the status information of the primary index 310 and any additional indexes that may be used (not shown here).
[0077] In addition to the above, in various embodiments the storage system may simultaneously support multiple versions of the data organization, storage schemes, and so on. For example, as the system hardware and software evolve, new features may be incorporated or otherwise provided. Data, indexes, and mappings (for example) which are newer may take advantage of these new features. In the example of FIG. 4, new level N may correspond to one version of the system, while older level N-l may correspond to a prior version. In order to accommodate these different versions, metadata may be stored in association with each of the levels which indicates which version, which features, compression schemes, and so on, are used by that level. This metadata could be stored as part of the index, the pages themselves, or both. When accesses are made, this metadata then indicates how the data is to be handled properly. Additionally, new schemes and features can be applied dynamically without the need to quiesce the system. In this manner, upgrading of the system is more flexible and a rebuild of older data to reflect newer schemes and approaches is not necessary.
[0078] Turning now to FIG. 5A, one embodiment of a method for servicing a read access is shown. The components embodied in the network architecture 100 and mapping table 340 described above may generally operate in accordance with method 500. For purposes of discussion, the steps in this embodiment are shown in sequential order. However, some steps may occur in a different order than shown, some steps may be performed concurrently, some steps may be combined with other steps, and some steps may be absent in another embodiment.
[0079] Read and store (write) requests may be conveyed from one of the clients 110a- 110c to one of the data storage arrays 120a- 120b. In the example shown, a read request 500 is received, and in block 502 a corresponding query key value may be generated. In some embodiments, the request itself may include the key which is used to access the index and a "generation" of the key 502 is not required. As described earlier, the query key value may be a virtual address index comprising a volume ID, a logical address or virtual address associated with a received request, a snapshot ID, a sector number, and so forth. In embodiments which are used for deduplication, the query key value may be generated using a hash function or other function. Other values are possible and contemplated for the query key value, which is used to access a mapping table.
[0080] In block 504, the query key value may be used to access one or more cached indexes to identify one or more portions of a mapping table that may store a mapping that corresponds to the key value. Additionally, recently used mappings which have been cached may be searched as well. If a hit on the cached mappings is detected (block 505), the cached mapping may be used to perform the requested access (block 512). If there is no hit on the cached mappings, the a determination may be made as to whether or not there is a hit on the cached index (block 506). If so, a result corresponding to the hit is used to identify and access the mapping table (block 508). For example, with the primary index 310, an entry storing the query key value also may store a unique virtual page ID that identifies a single particular page within the mapping table. This single particular page may store both the query key value and an associated physical pointer value. In block 508, the identified potion of the mapping table may be accessed and a search performed using the query key value. The mapping table result may then be returned (block 510) and used to perform a storage access (block 512) that corresponds to the target location of the original read request.
[0081] In some embodiments, an index query responsive to a read request may result in a miss. Such a miss could be due to only a portion of the index being cached or an error condition (e.g., a read access to a non-existent location, address corruption, etc.). In such a case, an access to the stored index may be performed. If the access to the stored index results in a hit (block 520), then a result may be returned (block 522) which is used to access the mapping tables (block 508). On the other hand, if the access to the stored index results in a miss, then an error condition may be detected. Handling of the error condition may be done in any of a variety of desired ways. In one embodiment, an exception may be generated (block 524) which is then handled as desired. In one embodiment, a portion of the mapping table is returned in block 510. In various embodiments, this portion is a page which may be a 4KB page, or otherwise. As previously discussed, the records within a page may be sorted to facilitate faster searches of the content included therein.
[0082] In one embodiment, the mapping table utilizes traditional database systems methods for information storage in each page. For example, each record (or row or entry) within the mapping table is stored one right after the other. This approach may be used in row-oriented or row-store databases and additionally with correlation databases. These types of databases utilize a value-based storage structure. A value -based storage (VBS) architecture stores a unique data value only once and an auto-generated indexing system maintains the context for all values. In various embodiments, data may be stored by row and compression may be used on the columns (fields) within a row. In some embodiments, the techniques used may include storing a base value and having a smaller field size for the offset and/or having a set of base values, with a column in a row consisting of a base selector and an offset from that base. In both cases, the compression information may be stored within (e.g., at the start) of the partition.
[0083] In some embodiments, the mapping table utilizes a column-oriented database system (column- store) method for information storage in each page. Column- stores store each database table column separately. In addition, attribute values belonging to a same column may be stored contiguously, compressed, and densely packed. Accordingly, reading a subset of a table's columns, such as within a page, may be performed relatively quickly. Column data may be of uniform type and may allow storage size optimizations to be used that may not be available in row-oriented data. Some compression schemes, such as Lempel-Ziv- Welch (LZ) and run-length encoding (RLE), take advantage of a detected similarity of adjacent data to compress. A compression algorithm may be chosen that allows individual records within the page to be identified and indexed. Compressing the records within the mapping table may enable finegrained mapping. In various embodiments, the type of compression used for a particular portion of data may be stored in association with the data. For example, the type of compression could be stored in an index, as part of a same page as the compressed data (e.g., in a header of some type), or otherwise. In this manner, multiple compression techniques and algorithms may be used side by side within the storage system. In addition, in various embodiments the type of compression used for storing page data may be determined dynamically at the time the data is stored. In one embodiment, one of a variety of compression techniques may be chosen based at least in part on the nature and type of data being compressed. In some embodiments, multiple compression techniques will be performed and the one exhibiting the best compression will then be selected for use in compressing the data. Numerous such approaches are possible and are contemplated.
[0084] If there is a match of the query key value 306 found in any of the levels of the mapping table (block 508), then in block 510, one or more indications of a hit may be conveyed to the merge logic 350. For example, one or more hit indications may be conveyed from levels "1" to "J" as shown in FIG. 4. The merge logic 350 may choose the highest level, which may also be the youngest level, of the levels "1" to "J" conveying a hit indication. The chosen level may provide information stored in a corresponding record as a result of the access.
[0085] In block 512, one or more corresponding fields within a matching record of a chosen page may be read to process a corresponding request. In one embodiment, when the data within the page is stored in a compressed format, the page is decompressed and a corresponding physical pointer value is read out. In another embodiment, only the matching record is decompressed and a corresponding physical pointer value is read out. In one embodiment, a full physical pointer value may be split between the mapping table and a corresponding target physical location. Therefore, multiple physical locations storing user data may be accessed to complete a data storage access request.
[0086] Turning now to FIG. 5B, one embodiment of a method corresponding to a received write request is shown. Responsive to a received write request (block 530), a new mapping table entry corresponding to the request may be created (block 532). In one embodiment, a new virtual-to-physical address mapping may be added (block 534) to the mapping table that pairs the virtual address of the write request with the physical location storing the corresponding data component. In various embodiments, the new mapping may be cached with other new mappings and added to a new highest level of the mapping table entries. The write operation to persistent storage (block 536) may then be performed. In various embodiments, writing the new mapping table entry to the mapping tables in persistent storage may not be performed until a later point in time (block 538) which is deemed more efficient. As previously discussed, in a storage system using solid state storage devices, writes to storage are much slower than reads from storage. Accordingly, writes to storage are scheduled in such a way that they minimize impact on overall system performance. In some embodiments, the insertion of new records into the mapping table may be combined with other larger data updates. Combining the updates in this manner may provide for more efficient write operations. It is noted that in the method of 5B, as with each of the methods described herein, operations are described as occurring in a particular order for ease of discussion. However, the operations may in fact occur in a different order, and in some cases various ones of the operations may occur simultaneously. All such embodiments are contemplated.
[0087] In addition to the above, deduplication mechanisms may be used in some embodiments. FIG. 5B depicts operations 550 which may generally correspond to deduplication systems and methods. In the example shown, a hash corresponding to a received write request may be generated (block 540) which is used to access deduplication tables (block 542). If there is a hit (block 544) in the deduplication tables (i.e., a copy of the data already exists within the system), then a new entry may be added to the deduplication tables (block 548) to reflect the new write. In such a case, there is no need to write the data itself to storage and the received write data may be discarded. Alternatively, if there is a miss in the deduplication table, then a new entry for the new data is created and stored in the deduplication tables (block 546). Additionally, a write of the data to storage is performed (block 536). Further, a new entry may be created in the index to reflect the new data (block 538). In some embodiments, if a miss occurs during an inline deduplication operation, no insertion in the deduplication tables is performed at that time. Rather, during an inline deduplication operation, a query with a hash value may occur for only a portion of the entire deduplication table (e.g., a cached portion of the deduplication table). If a miss occurs, a new entry may be created and stored in the cache. Subsequently, during a postprocessing deduplication operation, such as an operation occurring during garbage collection, a query with a hash value may occur for the entire deduplication table. A miss may indicate the hash value is a unique hash value. Therefore, a new entry such as a hash-to-physical-pointer mapping may be inserted into the deduplication table. Alternatively, if a hit is detected during post-processing deduplication (i.e., a duplicate is detected), deduplication may be performed to eliminate one or more of the detected copies.
[0088] Referring now to FIG. 6, a generalized block diagram of one embodiment of a multi- node network with shared mapping tables is shown. In the example shown, three nodes 360a- 360c are used to form a cluster of mapping nodes. In one embodiment, each of the nodes 360a- 360c may be responsible for one or more logical unit numbers (LUNs). In the depicted embodiment, a number of mapping table levels, level 1-N, are shown. Level 1 may correspond to the oldest level, while level N may correspond to the newest level. For mapping table entries of LUNs managed by a particular node, that particular node may itself have newer entries stored on the node itself. For example, node 360a is shown to store mapping subtables 362a and 364a. These subtables 362a and 362b may correspond to LUNs for which node 360a is generally responsible. Similarly, node 360b includes subtables 362b and 364b which may correspond to LUNs managed by that node, while node 360c includes subtables 362c and 364c which may correspond to LUNs managed by that node. In such an embodiment, these "newer" level mapping table entries are maintained only by their corresponding managing nodes and are generally not found on other nodes.
[0089] In contrast to the above discussed relatively newer levels, older levels (i.e., levels N-2 down to level 1) represent mapping table entries which may be shared by all nodes 360a-360c in the sense that any of the nodes may be storing a copy of those entries. In the example shown, these older levels 370, 372, and 374 are collectively identified as shared tables 380. Additionally, as previously discussed, in various embodiments these older levels are static - apart from merging or similar operations which are discussed later. Generally speaking, a static layer is one which is not subject to modification (i.e., it is "fixed"). Given that such levels are fixed in this sense, an access to any copy of these lower levels may be made without concern for whether another of the copies has been, or is being, modified. Consequently, any of the nodes may safely store a copy of the shared tables 380 and service a request to those tables with confidence the request can be properly serviced. Having copies of the shared tables 380 stored on multiple nodes 360 may allow use of various load balancing schemes when performing lookups and otherwise servicing requests.
[0090] In addition to the above, in various embodiments, the levels 380 which may be shared may be organized in a manner which reflects the nodes 360 themselves. For example, node 360a may be responsible for LUNs 1 and 2, node 360b may be responsible for LUNs 3 and 4, and node 360c may be responsible for LUNs 5 and 6. In various embodiments, the mapping table entries may include tuples which themselves identify a corresponding LUN. In such an embodiment, the shared mapping tables 380 may be sorted according to key value, absolute width or amount of storage space, or otherwise. If a sort of mapping table entries in the levels 380 is based in part on LUN, then entries 370a may correspond to LUNs 1 and 2, entries 370b may correspond to LUNs 3 and 4, and entries 370c may correspond to LUNs 5 and 6. Such an organization may speed lookups by a given node for a request targeted to a particular LUN by effectively reducing the amount of data that needs to be searched, allowing a coordinator to directly select the node responsible for a particular LUN as the target of a request. These and other organization and sort schemes are possible and are contemplated. In addition, if it is desired to move responsibility for a LUN from one node to another, the original node mappings for that node may be flushed to the shared levels (e.g., and merged). Responsibility for the LUN is then transferred to the new node which then begins servicing that LUN.
[0091] Referring now to FIG. 7, a generalized block diagram of one embodiment of a secondary index used to access a mapping table is shown. As described earlier, requester data inputs 302 may be received by a key generator 304, which produces a query key value 306. The query key value 306 is used to access a mapping table. In some embodiments, the primary index 310 shown in FIG. 3 may be too large (or larger than desired) to store in RAM 172 or memory medium 130. For example, older levels of the index may grow very large due to merging and flattening operations described later in FIG. 10 and FIG. 11. Therefore, a secondary index 320 may be cached for at least a portion of the primary index instead of the corresponding portion of the primary index 310. The secondary index 320 may provide a more coarse level of granularity of location identification of data stored in the storage devices 176a- 176m. Therefore, the secondary index 320 may be smaller than the portion of the primary index 310 to which it corresponds. Accordingly, the secondary index 320 may be stored in RAM 172 or in memory medium 130.
[0092] In one embodiment, the secondary index 320 is divided into partitions, such as partitions 322a-322b. Additionally, the secondary index may be organized according to level with the more recent levels appearing first. In one embodiment, older levels have lower numbers and younger levels have higher numbers (e.g., a level ID may be incremented with each new level). Each entry of the secondary index 320 may identify a range of key values. For example, the first entry shown in the example may identify a range of key values from 0 to 12 in level 22. These key values may correspond to key values associated with a first record and a last record within a given page of the primary index 310. In other words, the entry in the secondary index may simply store an identification of key 0 and an identification of key 12 to indicate the corresponding page includes entries within that range. Referring again to FIG. 3 A, partition 312a may be a page and the key values of its first record and its last record are 0 and 12, respectively. Therefore, an entry within the secondary index 320 stores the range 0 to 12 as shown in FIG. 7. Since remappings are maintained in the levels within the mapping table, a range of key values may correspond to multiple pages and associated levels. The fields within the secondary index 320 may store this information as shown in FIG. 7. Each entry may store one or more corresponding unique virtual page identifiers (IDs) and associated level IDs corresponding to the range of key values. Each entry may also store corresponding status information such as validity information. The list of maintained page IDs and associated level IDs may indicate where a given query key value might be stored, but not confirm that the key value is present in that page and level. The secondary index 320 is smaller than the primary index 310, but also has a coarse- level of granularity of location identification of data stored in the storage devices 176a- 176m. The secondary index 320 may be sufficiently small to store in RAM 172 or in memory medium 130.
[0093] When the secondary index 320 is accessed with a query key value 306, it may convey one or more corresponding page IDs and associated level IDs. These results are then used to access and retrieve portions of the stored primary index. The one or more identified pages may then be searched with the query key value to find a physical pointer value. In one embodiment, the level IDs may be used to determine a youngest level of the identified one or more levels that also store the query key value 306. A record within a corresponding page may then be retrieved and a physical pointer value may be read for processing a storage access request. In the illustrated example, the query key value 27 is within the range of keys 16 to 31. The page IDs and level IDs stored in the corresponding entry are conveyed with the query key value to the mapping table.
[0094] Referring now to FIG. 8, a generalized block diagram of one embodiment of a tertiary index used to access a mapping table is shown. Circuit and logic portions corresponding to those of FIG. 4 are numbered identically. As described earlier, the primary index 310 shown in FIG. 3 may be too large to store in RAM 172 or memory medium 130. In addition, as the mapping table 340 grows, the secondary index 320 may also become too large to store in these memories. Therefore, a tertiary index 330 may be accessed prior to the secondary index 320, which may still be faster than accessing the primary index 310.
[0095] The tertiary index 330 may provide a more coarse level of granularity than the secondary index 320 of location identification of data stored in the storage devices 176a- 176m. Therefore, the tertiary index 330 may be smaller than the portion of the secondary index 320 to which it corresponds. It is noted that each of the primary index 310, the secondary index 320, the tertiary index 330, and so forth, may be stored in a compressed format. The compressed format chosen may be a same compressed format used to store information within the mapping table 340.
[0096] In one embodiment, the tertiary index 330 may include multiple partitions, such as partitions 332a, 332b and so forth. The tertiary index 330 may be accessed with a query key value 306. In the illustrated example, a query key value 306 of "27" is found to be between a range of key values from 0 to 78. A first entry in the tertiary index 330 corresponds to this key value range. A column in the tertiary index 330 may indicate which partition to access within the secondary index 320. In the illustrated example, a key value range of 0 to 78 corresponds to partition 0 within the secondary index 320.
[0097] It is also noted a filter (not shown) may be accessed to determine if a query key value is not within any one of the indexes 310-330. This filter may be a probabilistic data structure that determines whether an element is a member of a set. False positives may be possible, but false negatives may not be possible. One example of such a filter is a Bloom filter. If an access of such a filter determines a particular value is not in the full index 142, then no query is sent to the storage. If an access of the filter determines the query key value is in a corresponding index, then it may be unknown whether a corresponding physical pointer value is stored in the storage devices 176a- 176m.
[0098] In addition to the above, in various embodiments one or more overlay tables may be used to modify or elide tuples provided by the mapping table in response to a query. Such overlay tables may be used to apply filtering conditions for use in responding to accesses to the mapping table or during flattening operations when a new level is created. In various embodiments, other hardware and/or software may be used to apply filtering conditions. In some embodiments, the overlay table may be organized as time ordered levels in a manner similar to the mapping table described above. In other embodiments, they may be organized differently. Keys for the overlay table need not match the keys for the underlying mapping table. For example, an overlay table may contain a single entry stating that a particular volume has been deleted or is otherwise inaccessible (e.g., there is no natural access path to query this tuple), and that a response to a query corresponding to a tuple that refers to that volume identifier is instead invalid. In another example, an entry in the overlay table may indicate that a storage location has been freed, and that any tuple that refers to that storage location is invalid, thus invalidating the result of the lookup rather than the key used by the mapping table. In some embodiments, the overlay table may modify fields in responses to queries to the underlying mapping table. In some embodiments, a single key may represent a range of values to efficiently identify multiple values to which the same operation (eliding or modification) is applied. In this manner, tuples may (effectively) be "deleted" from the mapping table by creating an "elide" entry in the overlay table and without modifying the mapping table. In this case, the overlay table may include keys with no associated non-key data fields.
[0099] Turning now to FIG. 9, one embodiment of a method for processing a read request in a system including mapping and overlay tables is shown. Responsive to a read request being received (block 900), a mapping table key (block 908) and first overlay table key (block 902) corresponding to the request are generated. In this example, access to the overlay and mapping tables is shown as occurring concurrently. However, in other embodiments, accesses to the tables may be performed non-concurrently (e.g., sequentially or otherwise separate in time) in any desired order. Using the key generated for the mapping table, a corresponding tuple may be retrieved from the mapping table (block 910). If the first overlay table contains an "elide" entry corresponding to the overlay table key (conditional block 906), any tuple found in the mapping table is deemed invalid and an indication to this effect may be returned to the requester. On the other hand, if the overlay table contains a "modify" entry corresponding to the overlay table key (conditional block 912), the values in the first overlay table entry may be used to modify one or more fields in the tuple retrieved from the mapping table (block 922). Once this process is done, a second overlay table key is generated (block 914) based on the tuple from the mapping table (whether modified or not) and a second lookup is done in a second overlay table (block 916) which may or may not be the same table as the first overlay table. If an "elide" entry is found in the second overlay table (conditional block 920), the tuple from the mapping table is deemed invalid (block 918). If a "modify" entry is found in the second overlay table (conditional block 924), one or more fields of the tuple from the mapping table may be modified (block 926). Such modification may include dropping a tuple, normalizing a tuple, or otherwise. The modified tuple may then be returned to the requester. If the second overlay table does not contain a modify entry (conditional block 924), the tuple may be returned to the requester unmodified. In some embodiments, at least some portions of the overlay table(s) may be cached to provide faster access to their contents. In various embodiments, a detected elide entry in the first overlay table may serve to short circuit any other corresponding lookups (e.g., blocks 914, 916, etc.). In other embodiments, accesses may be performed in parallel and "raced." Numerous such embodiments are possible and are contemplated.
[00100] Turning now to FIG. 10, a generalized block diagram of one embodiment of a flattening operation for levels within a mapping table is shown. In various embodiments, a flattening operation may be performed in response to detecting one or more conditions. For example, over time as the mapping table 340 grows and accumulates levels due to insertions of new records, the cost of searching more levels for a query key value may become undesirably high. In order to constrain the number of levels to search, multiple levels may be flattened into a single new level. For example, two or more levels which are logically adjacent or contiguous in time order may be chosen for a flattening operation. Where two or more records correspond to a same key value, the youngest record may be retained while the others are not included in the new "flattened" level. In such an embodiment, the newly flattened level will return a same result for a search for a given key value as would be provided by a search of the corresponding multiple levels. Since the results of searches in the new flattened level do not change as compared to the two or more levels it replaces, the flattening operation need not be synchronized with update operations to the mapping table. In other words, flattening operations on a table may be performed asynchronously with respect to updates to the table.
[00101] As previously noted, older levels are fixed in the sense that their mappings are not modified (i.e., a mapping from A to B remains unchanged). Consequently, modifications to the levels being flattened are not being made (e.g., due to user writes) and synchronization locks of the levels are not required. Additionally, in a node -based cluster environment where each node may store a copy of older levels of the index (e.g., as discussed in relation to FIG. 6), flattening operations may be undertaken on one node without the need to lock corresponding levels in other nodes. Consequently, processing may continue in all nodes while flattening takes place in an asynchronous manner on any of the nodes. At a later point in time, other nodes may flatten levels, or use an already flattened level. In one embodiment, the two or more levels which have been used to form a flattened level may be retained for error recovery, mirroring, or other purposes. In addition to the above, in various embodiments, records that have been elided may not be reinserted in to the new level. The above described flattening may, for example, be performed responsive to detecting the number of levels in the mapping table has reached a given threshold. Alternatively, the flattening may be performed responsive to detecting the size of one or more levels has exceeded a threshold. Yet another condition that may be considered is the load on the system. The decision of whether to flatten the levels may consider combinations of these conditions in addition to considering them individually. The decision of whether to flatten may also consider both the present value for the condition as well as a predicted value for the condition in the future. Other conditions for which flattening may be performed are possible and are contemplated.
[00102] In the illustrated example, the records are shown simply as key and pointer pairs. The pages are shown to include four records for ease of illustration. A level "F" and its next contiguous logical neighbor, level "F-l" may be considered for a flattening operation. Level "F" may be younger than Level "F-l". Although two levels are shown to be flattened here, it is possible and contemplated that three or more levels may be chosen for flattening. In the example shown, Level "F-l" may have records storing a same key value found in Level "F". Bidirectional arrows are used to identify the records storing a same key value across the two contiguous levels.
[00103] The new Level "New F" includes a key corresponding to the duplicate key values found in Level "F" and Level "F-l". In addition, the new Level "New F" includes a pointer value corresponding to the youngest (or younger in this case) record of the records storing the duplicate key value. For example, each of Level "F" and Level "F-l" includes a record storing the key value 4. The younger record is in Level "F" and this record also stores the pointer value 512. Accordingly, the Level "F-l" includes a record storing the key value 4 and also the pointer value 512, rather than the pointer value 656 found in the older Level "F-l". Additionally, the new Level "New F" includes records with unique key values found between Level "F" and Level "F-l". For example, the Level "F-l" includes records with the key and pointer pair of 6 and 246 found in Level "F" and the key and pointer pair of 2 and 398 found in Level "F-l". As shown, each of the pages within the levels is sorted by key value.
[00104] As noted above, in various embodiments an overlay table may be used to modify or elide tuples corresponding to key values in the underlying mapping table. Such an overlay table(s) may be managed in a manner similar to that of the mapping tables. For example, an overlay table may be flattened and adjacent entries merged together to save space. Alternatively, an overlay table may be managed in a manner different from that used to manage mapping tables. In some embodiments, an overlay table may contain a single entry that refers to a range of overlay table keys. In this way, the size of the overlay table can be limited. For example, if the mapping table contains k valid entries, the overlay table (after flattening) need contain no more than k+1 entries marking ranges as invalid, corresponding to the gaps between valid entries in the mapping table. Accordingly, the overlay table may used to identify tuples that may be dropped from the mapping table in a relatively efficient manner. In addition to the above, while the previous discussion describes using an overlay table to elide or modify responses to requests from the mapping table(s), overlay tables may also be used to elide or modify values during flattening operations of the mapping tables. Accordingly, when a new level is created during a flattening operation of a mapping table, a key value that might otherwise be inserted into the new level may be elided. Alternatively, a value may be modified before insertion in the new level. Such modifications may result in a single record corresponding to a given range of key values in the mapping table being replaced (in the new level) with multiple records - each corresponding to a subrange of the original record. Additionally, a record may be replaced with a new record that corresponds to a smaller range, or multiple records could be replaced by a single record whose range covers all ranges of the original records. All such embodiments are contemplated.
[00105] Referring now to FIG. 11, a generalized block diagram of an embodiment of a flattening operation for levels within a mapping table is shown. As previously discussed, levels may be time ordered. In the illustrated example, a Level "F" comprising one or more indexes and corresponding mappings is logically located above older Level "F-l". Also, Level "F" is located logically below younger Level "F+l". Similarly, Level "F-2" is logically located above younger Level "F-l" and Level "F+2" is logically located below older Level "F+l". In one example, levels "F" and "F-l" may be considered for a flattening operation. Bidirectional arrows are used to illustrate there are records storing same key values across the two contiguous levels.
[00106] As described earlier, a new Level "New F" includes key values corresponding to the duplicate key values found in Level "F" and Level "F-l". In addition, the new Level "New F" includes a pointer value corresponding to the youngest (or younger in this case) record of the records storing the duplicate key value. Upon completion of the flattening operation, the Level "F" and the Level "F-l" may not yet be removed from the mapping table. Again, in a node- based cluster, each node may verify it is ready to utilize the new single level, such as Level "New F", and no longer use the two or more levels it replaces (such as Level "F" and Level "F-l"). This verification may be performed prior to the new level becoming the replacement. In one embodiment, the two or more replaced levels, such as Level "F" and Level "F-l", may be kept in storage for error recovery, mirroring, or other purposes. In order to maintain the time ordering of the levels and their mappings, the new flattened level F is logically placed below younger levels (e.g., level F+l) and above the original levels that it replaces (e.g., level F and level F-l).
[00107] Turning now to FIG. 12, one embodiment of a method 1000 for flattening levels within a mapping table is shown. The components embodied in the network architecture 100 and the mapping table 340 described above may generally operate in accordance with method 1000. For purposes of discussion, the steps in this embodiment are shown in sequential order. However, some steps may occur in a different order than shown, some steps may be performed concurrently, some steps may be combined with other steps, and some steps may be absent in another embodiment.
[00108] In block 1002, storage space is allocated for a mapping table and corresponding indexes. In block 1004, one or more conditions are determined for flattening two or more levels within the mapping table. For example, a cost of repeatedly searching a current number of levels within the mapping table in response to user requests may be greater than a cost of performing a flattening operation. Additionally, a cost may be based on at least one of the current (or predicted) number of levels in the structure to be flattened, the number of entries in one or more levels, the number of mapping entries that would be elided or modified, and the load on the system. Cost may also include a time to perform a corresponding operation, an occupation of one or more buses, storage space used during a corresponding operation, a number of duplicate entries in a set of levels has reached some threshold, and so forth. In addition, a count of a number of records within each level may be used to estimate when a flattening operation performed on two contiguous levels may produce a new single level with a number of records equal to twice a number of records within a next previous level. These conditions taken singly or in any combination, and others, are possible and are contemplated.
[00109] In block 1006, the indexes and the mapping table are accessed and updated as data is stored and new mappings are found. A number of levels within the mapping table increases as new records are inserted into the mapping table. If a condition for flattening two or more levels within the mapping table is detected (conditional block 1008), then in block 1010, one or more groups of levels are identified for flattening. A group of levels may include two or more levels. In one embodiment, the two or more levels are contiguous levels. Although the lowest levels, or the oldest levels, may be the best candidates for flattening, a younger group may also be selected.
[00110] In block 1012, for each group a new single level comprising the newest records within a corresponding group is produced. In the earlier example, the new single Level "New F" includes the youngest records among the Level "F" and the Level "F+l". In block 1014, in a node-based cluster, an acknowledgment may be requested from each node within the cluster to indicate a respective node is ready to utilize the new levels produced by the flattening operation. When each node acknowledges that it can utilize the new levels, in block 1016, the current levels within the identified groups are replaced with the new levels. In other embodiments, synchronization across nodes is not needed. In such embodiments, some nodes may begin using a new level prior to other nodes. Further, some nodes may continue to use the original level even after newly flattened levels are available. For example, a particular node may have original level data cached and used that in preference to using non-cached data of a newly flattened level. Numerous such embodiments are possible and are contemplated.
[00111] Turning now to FIG. 13, one embodiment of a method 1100 for efficiently processing bulk array tasks within a mapping table is shown. Similar to the other described methods, the components embodied in the network architecture 100 and the mapping table 340 described above may generally operate in accordance with method 1100. In addition, the steps in this embodiment are shown in sequential order. However, some steps may occur in a different order than shown, some steps may be performed concurrently, some steps may be combined with other steps, and some steps may be absent in another embodiment.
[00112] Storing the information in a compressed format within the mapping table may enable fine-grained mapping, which may allow direct manipulation of mapping information within the mapping table as an alternative to common bulk array tasks. The direct map manipulation may reduce I/O network and bus traffic. As described earlier, Flash memory has a low "seek time", which allows a number of dependent read operations to occur in less time than a single operation from a spinning disk. These dependent reads may be used to perform online fine-grained mappings to integrate space-saving features like compression and deduplication. In addition, these dependent read operations may allow the storage controller 174 to perform bulk array tasks entirely within a mapping table instead of accessing (reading and writing) the user data stored within the storage devices 176a- 176m.
[00113] In block 1102, a large or bulk array task is received. For example, a bulk copy or move request may correspond to a backup of a dozens or hundreds of virtual machines in addition to enterprise application data being executed and updated by the virtual machines. The amount of data associated with the received request associated with a move, branch, clone, or copy of all of this data may be as large as 16 gigabytes (GB) or larger. If the user data was accessed to process this request, a lot of processing time may be spent on the request and system performance decreases. In addition, a virtualized environment typically has less total input/output (I/O) resources than a physical environment.
[00114] In block 1104, the storage controller 174 may store an indication corresponding to the received request that relates a range of new keys to a range of old keys, wherein both the ranges of keys correspond to the received request. For example, if the received request is to copy of 16GB of data, a start key value and an end key value corresponding to the 16GB of data may be stored. Again, each of the start and the end key values may include a volume ID, a logical or virtual address within the received request, a snapshot ID, a sector number and so forth. In one embodiment, this information may be stored separate from the information stored in the indexes, such as the primary index 310, the secondary index 320, the tertiary index 330, and so forth. However, this information may be accessed when the indexes are accessed during the processing of later requests.
[00115] In block 1 106, the data storage controller 174 may convey a response to a corresponding client of the client computer systems 110a- 1 10c indicating completion of the received request without prior access of user data. Therefore, the storage controller 174 may process the received request with low or no downtime and with no load on processor 122.
[00116] In block 1108, the storage controller 174 may set a condition, an indication, or a flag, or buffer update operations, for updating one or more records in the mapping table corresponding to the new keys replacing the old keys in the mapping table. For both a move request and a copy request, one or more new records corresponding to the new keys may be inserted in the mapping table. The keys may be inserted in a created new highest level as described earlier. For a move request, one or more old records may be removed from the mapping table after a corresponding new record has been inserted in the mapping table. Either immediately or at a later time, the records in the mapping table are actually updated.
[00117] For a zeroing or an erase request, an indication may be stored that a range of key values now corresponds to a series of binary zeroes. Additionally, as discussed above, overlay tables may be used to identify key values which are not (or no longer) valid. The user data may not be overwritten. For an erase request, the user data may be overwritten at a later time when the "freed" storage locations are allocated with new data for subsequent store (write) requests. For an externally-directed defragmentation request, contiguous addresses may be chosen for sector reorganization, which may benefit applications executed on a client of the client computer systems 110a- 110c.
[00118] If the storage controller 174 receives a data storage access request corresponding to one of the new keys (conditional block 1110), and the new key has already been inserted in the mapping table (conditional block 1112), then in block 1114, the indexes and the mapping table may be accessed with the new key. For example, either the primary index 310, the secondary index 320, or the tertiary index 330 may be accessed with the new key. When one or more pages of the mapping table are identified by the indexes, these identified pages may then be accessed. In block 1116, the storage access request may be serviced with a physical pointer value found in the mapping table that is associated with the new key.
[00119] If the storage controller 174 receives a data storage access request corresponding to one of the new keys (conditional block 1110), and the new key has not already been inserted in the mapping table (conditional block 1112), then in block 11 18, the indexes and the mapping table may be accessed with a corresponding old key. The storage holding the range of old keys and the range of new keys may be accessed to determine the corresponding old key value. When one or more pages of the mapping table are identified by the indexes, these identified pages may then be accessed. In block 1120, the storage access request may be serviced with a physical pointer value found in the mapping table that is associated with the old key.
[00120] Turning now to FIG. 14, a generalized block diagram illustrating an embodiment of a data layout architecture within a storage device is shown. In one embodiment, the data storage locations within the storage devices 176a- 176m may be arranged into redundant array of independent devices (RAID) arrays. As shown, different types of data may be stored in the storage devices 176a- 176k according to a data layout architecture. In one embodiment, each of the storage devices 176a- 176k is an SSD. An allocation unit within an SSD may include one or more erase blocks within an SSD.
[00121] The user data 1230 may be stored within one or more pages included within one or more of the storage devices 176a- 176k. Within each intersection of a RAID stripe and one of the storage devices 176a-176k, the stored information may be formatted as a series of logical pages. Each logical page may in turn include a header and a checksum for the data in the page. When a read is issued it may be for one or more logical pages and the data in each page may be validated with the checksum. As each logical page may include a page header that contains a checksum for the page (which may be referred to as a "media" checksum), the actual page size for data may be smaller than one logical page. In some embodiments, for pages storing inter-device recovery data 1250, such as RAID parity information, the page header may be smaller, so that the parity page protects the page checksums in the data pages. In other embodiments, the checksum in parity pages storing inter-device recovery data 1250 may be calculated so that the checksum of the data page checksums is the same as the checksum of the parity page covering the corresponding data pages. In such embodiments, the header for a parity page need not be smaller than the header for a data page.
[00122] The inter-device ECC data 1250 may be parity information generated from one or more pages on other storage devices holding user data. For example, the inter-device ECC data 1250 may be parity information used in a RAID data layout architecture. Although the stored information is shown as contiguous logical pages in the storage devices 176a- 176k, it is well known in the art the logical pages may be arranged in a random order, wherein each of the storage devices 176a- 176k is an SSD.
[00123] The intra-device ECC data 1240 may include information used by an intra-device redundancy scheme. An intra-device redundancy scheme utilizes ECC information, such as parity information, within a given storage device. This intra-device redundancy scheme and its ECC information corresponds to a given device and may be maintained within a given device, but is distinct from ECC that may be internally generated and maintained by the device itself. Generally speaking, the internally generated and maintained ECC of the device is invisible to the system within which the device is included.
[00124] The intra-device ECC data 1240 may also be referred to as intra-device error recovery data 1240. The intra-device error recovery data 1240 may be used to protect a given storage device from latent sector errors (LSEs). An LSE is an error that is undetected until the given sector is accessed. Therefore, any data previously stored in the given sector may be lost. A single LSE may lead to data loss when encountered during RAID reconstruction after a storage device failure. The term "sector" typically refers to a basic unit of storage on a HDD, such as a segment within a given track on the disk. Here, the term "sector" may also refer to a basic unit of allocation on a SSD. Latent sector errors (LSEs) occur when a given sector or other storage unit within a storage device is inaccessible. A read or write operation may not be able to complete for the given sector. In addition, there may be an uncorrectable error-correction code (ECC) error.
[00125] The intra-device error recovery data 1240 included within a given storage device may be used to increase data storage reliability within the given storage device. The intra-device error recovery data 1240 is in addition to other ECC information that may be included within another storage device, such as parity information utilized in a RAID data layout architecture.
[00126] Within each storage device, the intra-device error recovery data 1240 may be stored in one or more pages. As is well known by those skilled in the art, the intra-device error recovery data 1240 may be obtained by performing a function on chosen bits of information within the user data 1230. An XOR-based operation may be used to derive parity information to store in the intra-device error recovery data 1240. Other examples of intra-device redundancy schemes include single parity check (SPC), maximum distance separable (MDS) erasure codes, interleaved parity check codes (IPC), hybrid SPC and MDS code (MDS+SPC), and column diagonal parity (CDP). The schemes vary in terms of delivered reliability and overhead depending on the manner the data 1240 is computed.
[00127] In addition to the above described error recovery information, the system may be configured to calculate a checksum value for a region on the device. For example, a checksum may be calculated when information is written to the device. This checksum is stored by the system. When the information is read back from the device, the system may calculate the checksum again and compare it to the value that was stored originally. If the two checksums differ, the information was not read properly, and the system may use other schemes to recover the data. Examples of checksum functions include cyclical redundancy check (CRC), MD5, and SHA-1.
[00128] An erase block within an SSD may comprise several pages. A page may include 4KB of data storage space. An erase block may include 64 pages, or 256KB. In other embodiments, an erase block may be as large as 1 megabyte (MB), and include 256 pages. An allocation unit size may be chosen in a manner to provide both sufficiently large sized units and a relatively low number of units to reduce overhead tracking of the allocation units. In one embodiment, one or more state tables may maintain a state of an allocation unit (allocated, free, erased, error), a wear level, and a count of a number of errors (correctable and/or uncorrectable) that have occurred within the allocation unit. In one embodiment, an allocation unit is relatively small compared to the total storage capacity of an SSD. Other amounts of data storage space for pages, erase blocks and other unit arrangements are possible and contemplated.
[00129] The metadata 1260 may include page header information, RAID stripe identification information, log data for one or more RAID stripes, and so forth. In various embodiments, the single metadata page at the beginning of each stripe may be rebuilt from the other stripe headers. Alternatively, this page could be at a different offset in the parity shard so the data can be protected by the inter-device parity. In one embodiment, the metadata 1260 may store or be associated with particular flag values that indicate this data is not to be deduplicated.
[00130] In addition to inter-device parity protection and intra-device parity protection, each of the pages in storage devices 176a- 176k may comprise additional protection such as a checksum stored within each given page. The checksum (8 byte, 4 byte, or otherwise) may be placed inside a page after a header and before the corresponding data, which may be compressed. For yet another level of protection, data location information may be included in a checksum value. The data in each of the pages may include this information. This information may include both a virtual address and a physical address. Sector numbers, data chunk and offset numbers, track numbers, plane numbers, and so forth may be included in this information as well. This mapping information may also be used to rebuild the address translation mapping table if the content of the table is lost.
[00131] In one embodiment, each of the pages in the storage devices 176a-176k stores a particular type of data, such as the data types 1230-1260. Alternatively, pages may store more than one type of data. The page header may store information identifying the data type for a corresponding page. In one embodiment, an intra-device redundancy scheme divides a device into groups of locations for storage of user data. For example, a division may be a group of locations within a device that correspond to a stripe within a RAID layout. In the example shown, only two stripes, 1270a and 1270b, are shown for ease of illustration.
[00132] In one embodiment, a RAID engine within the storage controller 174 may determine a level of protection to use for storage devices 176a- 176k. For example, a RAID engine may determine to utilize RAID double parity for the storage devices 176a- 176k. The inter-device redundancy data 1250 may represent the RAID double parity values generated from corresponding user data. In one embodiment, storage devices 176j and 176k may store the double parity information. It is understood other levels of RAID parity protection are possible and contemplated. In addition, in other embodiments, the storage of the double parity information may rotate between the storage devices rather than be stored within storage devices 176j and 176k for each RAID stripe. The storage of the double parity information is shown to be stored in storage devices 176j and 176k for ease of illustration and description. Although each of the storage devices 176a- 176k comprises multiple pages, only page 1212 and page 1220 are labeled for ease of illustration.
[00133] It is noted that the above-described embodiments may comprise software. In such an embodiment, the program instructions that implement the methods and/or mechanisms may be conveyed or stored on a computer readable medium. Numerous types of media which are configured to store program instructions are available and include hard disks, floppy disks, CD- ROM, DVD, flash memory, Programmable ROMs (PROM), random access memory (RAM), and various other forms of volatile or non-volatile storage.
[00134] In various embodiments, one or more portions of the methods and mechanisms described herein may form part of a cloud-computing environment. In such embodiments, resources may be provided over the Internet as services according to one or more various models. Such models may include Infrastructure as a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS). In IaaS, computer infrastructure is delivered as a service. In such a case, the computing equipment is generally owned and operated by the service provider. In the PaaS model, software tools and underlying equipment used by developers to develop software solutions may be provided as a service and hosted by the service provider. SaaS typically includes a service provider licensing software as a service on demand. The service provider may host the software, or may deploy the software to a customer for a given period of time. Numerous combinations of the above models are possible and are contemplated.
[00135] Although the embodiments above have been described in considerable detail, numerous variations and modifications will become apparent to those skilled in the art once the above disclosure is fully appreciated. It is intended that the following claims be interpreted to embrace all such variations and modifications.

Claims

WHAT IS CLAIMED IS
A computer system comprising:
a data storage medium;
a mapping table organized as a plurality of levels, each level of the plurality of levels comprising one or more mapping table entries, where each of the plurality of entries comprises a tuple including a key; and
a data storage controller coupled to the data storage medium;
wherein in response to detecting a flattening condition, the data storage controller is configured to:
identify a group of two or more levels of the plurality of levels which are logically adjacent in time;
create a new level in the plurality of levels; and
insert one or more first records stored within the group into the new level, in response to detecting each of the one or more first records stores a unique key among keys stored within the group.
The computer system as recited in claim 1 , wherein the plurality of levels of the mapping table are organized as time ordered levels.
The computer system as recited in claim 1, wherein the data storage controller is further configured to sort records within the new level.
The computer system as recited in claim 1 , wherein the mapping table entries within a level of the plurality of levels are sorted by key.
The computer system as recited in claim 1 , wherein the data storage controller is configured to perform flattening operations on the mapping table asynchronously with respect to updates to the mapping table.
The computer system as recited in claim 1, wherein in response to detecting the flattening condition, the data storage controller is further configured to insert one or more second records stored within the group into the new level, in response to detecting each of the one or more second records:
corresponds to two or more records storing a same non-unique key within the group; and is in a youngest level containing a record with the non-unique key of the group.
7. The computer system as recited in claim 6, wherein a single record within the mapping table corresponds to a range of key values.
8. The computer system as recited in claim 6, further comprising an overlay table, wherein at least some of the first and second records inserted into the new level are modified based on entries in the overlay table.
9. The computer system as recited in claim 6, further comprising an overlay table, wherein at least some records of the group are elided from the new level based on entries in the overlay table.
10. The computer system as recited in claim 7, wherein at least one record corresponding to a range of key values in the group is replaced in the new level by a plurality of records corresponding to subranges of the at least one record.
11. The computer system as recited in claim 7, further comprising an overlay table, wherein at least one record in the group is replaced by a new record in the new level with a range smaller than that of the one record based on one or more entries in the overlay table.
12. The computer system as recited in claim 7, wherein a given plurality of records in the group are replaced by a single record in the new level whose range covers all ranges covered by the given plurality of records.
13. The computer system as recited in claim 1, wherein the data storage controller is further configured to replace the group of two or more adjacent levels with the new level.
14. The computer system as recited in claim 1, wherein the data storage controller is further configured to create a new level from fewer than all of the records in the group of two or more adjacent levels.
15. The computer system as recited in claim 1, wherein the flattening condition is based on at least one of a current or predicted value of: a number of levels in the mapping table, a number of entries in one or more levels of the plurality of levels, a number of mapping entries that would be elided or modified as part of a flattening operation, and a load on the system.
16. The computer system as recited in claim 1, wherein the data storage controller is further configured to utilize a filtering condition to determine which of the first records are inserted into the new level.
17. The computer system as recited in claim 16, further comprising an overlay table, and wherein the filtering condition comprises a validity of a given record as determined by the overlay table.
18. The computer system as recited in claim 16, wherein the filtering condition is based at least in part on a current or predicted number of entries in the new level.
19. A method for use in a storage system, the method comprising:
storing a mapping table organized as a plurality of levels, each level of the plurality of levels comprising one or more mapping table entries, where each of the plurality of entries comprises a tuple including a key; and
responsive to detecting a flattening condition:
identifying a group of two or more levels of the plurality of levels which are logically adjacent in time;
creating a new level in the plurality of levels; and
inserting one or more first records stored within the group into the new level, in response to detecting each of the one or more first records stores a unique key among keys stored within the group.
20. The method as recited in claim 19, wherein only a youngest level of the plurality of levels may be updated with new mapping table entries.
21. The method as recited in claim 19, wherein the data storage controller is further configured to sort records within the new level.
22. The method as recited in claim 19, wherein the mapping table entries within a level of the plurality of levels are sorted by key.
23. The method as recited in claim 19, further comprising performing flattening operations on the mapping table asynchronously with respect to updates to the mapping table.
24. The method as recited in claim 19, wherein in response to detecting the flattening condition, the method further comprises inserting one or more second records stored within the group into the new level, in response to detecting each of the one or more second records:
corresponds to two or more records storing a same non-unique key within the group;
and
is in a youngest level containing a record with the non-unique key of the group.
25. The method as recited in claim 19, further comprising utilizing a filtering condition to determine which of the first records are inserted into the new level.
26. The method as recited in claim 25, wherein a single record within the mapping table corresponds to a range of key values.
27. The method as recited in claim 25, further comprising an overlay table, wherein at least some of the first and second records inserted into the new level are modified based on entries in the overlay table.
28. The method as recited in claim 25, further comprising an overlay table, wherein at least some records of the group are elided from the new level based on entries in the overlay table.
29. The method as recited in claim 26, wherein at least one record corresponding to a range of key values in the group is replaced in the new level by a plurality of records corresponding to subranges of the at least one record.
30. The method as recited in claim 26, further comprising an overlay table, wherein at least one record in the group is replaced by a new record in the new level with a range smaller than that of the one record based on one or more entries in the overlay table.
31. The method as recited in claim 26, wherein a given plurality of records in the group are replaced by a single record in the new level whose range covers all ranges covered by the given plurality of records.
32. A non-transitory computer readable storage medium storing program instruction executable by a processor to:
store a mapping table organized as a plurality of levels, each level of the plurality of levels comprising one or more mapping table entries, where each of the plurality of entries comprises a tuple including a key; and
responsive to detecting a flattening condition:
identify a group of two or more levels of the plurality of levels which are logically adjacent in time;
create a new level in the plurality of levels; and
insert one or more first records stored within the group into the new level, in response to detecting each of the one or more first records stores a unique key among keys stored within the group.
33. The computer readable storage medium as recited in claim 32, wherein in response to detecting the flattening condition, the program instructions are further executable by a processor to insert one or more second records stored within the group into the new level, in response to detecting each of the one or more second records:
corresponds to two or more records storing a same non-unique key within the group; and is in a youngest level containing a record with the non-unique key of the group.
34. The computer readable storage medium as recited in claim 32, wherein the plurality of levels of the mapping table are organized as time ordered levels.
35. The computer readable storage medium as recited in claim 32, wherein only a youngest level of the plurality of levels may be updated with new mapping table entries.
PCT/US2012/051059 2011-08-16 2012-08-16 Mapping in a storage system WO2013025864A1 (en)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2014526196A JP6240071B2 (en) 2011-08-16 2012-08-16 Computer system and method for effectively managing mapping table in storage system
CN201280048353.8A CN103874980B (en) 2011-08-16 2012-08-16 Mapping in a storage system
AU2012296510A AU2012296510B2 (en) 2011-08-16 2012-08-16 Mapping in a storage system
EP12754134.0A EP2745197A1 (en) 2011-08-16 2012-08-16 Mapping in a storage system
EP19168967.8A EP3588260B1 (en) 2011-08-16 2012-08-16 Mapping in a storage system

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/211,288 2011-08-16
US13/211,288 US8806160B2 (en) 2011-08-16 2011-08-16 Mapping in a storage system

Publications (1)

Publication Number Publication Date
WO2013025864A1 true WO2013025864A1 (en) 2013-02-21

Family

ID=46796737

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2012/051059 WO2013025864A1 (en) 2011-08-16 2012-08-16 Mapping in a storage system

Country Status (6)

Country Link
US (3) US8806160B2 (en)
EP (2) EP3588260B1 (en)
JP (1) JP6240071B2 (en)
CN (1) CN103874980B (en)
AU (1) AU2012296510B2 (en)
WO (1) WO2013025864A1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018171296A1 (en) * 2017-03-22 2018-09-27 华为技术有限公司 File merging method and controller

Families Citing this family (237)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013501293A (en) * 2009-08-04 2013-01-10 アクサナ・(イスラエル)・リミテッド Data gap management in remote data mirroring system
US8671265B2 (en) 2010-03-05 2014-03-11 Solidfire, Inc. Distributed data storage system providing de-duplication of data using block identifiers
US8589625B2 (en) 2010-09-15 2013-11-19 Pure Storage, Inc. Scheduling of reconstructive I/O read operations in a storage environment
US11614893B2 (en) 2010-09-15 2023-03-28 Pure Storage, Inc. Optimizing storage device access based on latency
US8589655B2 (en) 2010-09-15 2013-11-19 Pure Storage, Inc. Scheduling of I/O in an SSD environment
US8468318B2 (en) 2010-09-15 2013-06-18 Pure Storage Inc. Scheduling of I/O writes in a storage environment
US11275509B1 (en) 2010-09-15 2022-03-15 Pure Storage, Inc. Intelligently sizing high latency I/O requests in a storage environment
US8732426B2 (en) 2010-09-15 2014-05-20 Pure Storage, Inc. Scheduling of reactive I/O operations in a storage environment
US8775868B2 (en) 2010-09-28 2014-07-08 Pure Storage, Inc. Adaptive RAID for an SSD environment
US9244769B2 (en) 2010-09-28 2016-01-26 Pure Storage, Inc. Offset protection data in a RAID array
US8806160B2 (en) 2011-08-16 2014-08-12 Pure Storage, Inc. Mapping in a storage system
US8589640B2 (en) 2011-10-14 2013-11-19 Pure Storage, Inc. Method for maintaining multiple fingerprint tables in a deduplicating storage system
US8527544B1 (en) * 2011-08-11 2013-09-03 Pure Storage Inc. Garbage collection in a storage system
US11636031B2 (en) 2011-08-11 2023-04-25 Pure Storage, Inc. Optimized inline deduplication
US9071584B2 (en) * 2011-09-26 2015-06-30 Robert Lariviere Multi-tier bandwidth-centric deduplication
US9836340B2 (en) * 2011-10-03 2017-12-05 International Business Machines Corporation Safe management of data storage using a volume manager
US10872082B1 (en) * 2011-10-24 2020-12-22 NetBase Solutions, Inc. Methods and apparatuses for clustered storage of information
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
KR101312125B1 (en) * 2012-02-22 2013-09-26 주식회사 팬택 Contents filtering apparatus and method thereof
US20130238852A1 (en) * 2012-03-07 2013-09-12 Hitachi, Ltd. Management interface for multiple storage subsystems virtualization
US8719540B1 (en) 2012-03-15 2014-05-06 Pure Storage, Inc. Fractal layout of data blocks across multiple devices
WO2013147785A1 (en) * 2012-03-29 2013-10-03 Hitachi Data Systems Corporation Highly available search index with storage node addition and removal
WO2013164878A1 (en) * 2012-05-01 2013-11-07 株式会社日立製作所 Management apparatus and management method for computer system
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
US11032259B1 (en) 2012-09-26 2021-06-08 Pure Storage, Inc. Data protection in a storage system
US8745415B2 (en) 2012-09-26 2014-06-03 Pure Storage, Inc. Multi-drive cooperation to generate an encryption key
US10623386B1 (en) 2012-09-26 2020-04-14 Pure Storage, Inc. Secret sharing data protection in a storage system
FI20126010A (en) * 2012-09-28 2014-03-29 Tekla Corp Convert source targets to targets
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
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
US11768623B2 (en) 2013-01-10 2023-09-26 Pure Storage, Inc. Optimizing generalized transfers between storage systems
US9646039B2 (en) 2013-01-10 2017-05-09 Pure Storage, Inc. Snapshots in a storage system
US9959070B2 (en) * 2013-03-06 2018-05-01 Ab Initio Technology Llc Managing operations on stored data units
US10133500B2 (en) 2013-03-06 2018-11-20 Ab Initio Technology Llc Managing operations on stored data units
US9875054B2 (en) 2013-03-06 2018-01-23 Ab Initio Technology Llc Managing operations on stored data units
KR101505263B1 (en) * 2013-03-07 2015-03-24 포항공과대학교 산학협력단 Method for de-duplicating data and apparatus therefor
WO2014160718A1 (en) * 2013-03-25 2014-10-02 Altiostar Networks, Inc. Optimization of a backhaul connection in a mobile communications network
US9336232B1 (en) 2013-05-03 2016-05-10 Emc Corporation Native file access
US9442938B1 (en) * 2013-05-03 2016-09-13 Emc Corporation File system layer
US9274989B2 (en) 2013-06-12 2016-03-01 International Business Machines Corporation Impersonating SCSI ports through an intermediate proxy
US9274916B2 (en) 2013-06-12 2016-03-01 International Business Machines Corporation Unit attention processing in proxy and owner storage systems
US8819317B1 (en) 2013-06-12 2014-08-26 International Business Machines Corporation Processing input/output requests using proxy and owner storage systems
US9779003B2 (en) 2013-06-12 2017-10-03 International Business Machines Corporation Safely mapping and unmapping host SCSI volumes
US9769062B2 (en) 2013-06-12 2017-09-19 International Business Machines Corporation Load balancing input/output operations between two computers
US9940019B2 (en) 2013-06-12 2018-04-10 International Business Machines Corporation Online migration of a logical volume between storage systems
US9471710B2 (en) 2013-06-14 2016-10-18 International Business Machines Corporation On-the-fly encoding method for efficient grouping and aggregation
US20150006478A1 (en) * 2013-06-28 2015-01-01 Silicon Graphics International Corp. Replicated database using one sided rdma
US10394848B2 (en) 2013-07-29 2019-08-27 Amazon Technologies, Inc. Generating a multi-column index for relational databases by interleaving data bits for selectivity
US8751486B1 (en) 2013-07-31 2014-06-10 Splunk Inc. Executing structured queries on unstructured data
US9405783B2 (en) 2013-10-02 2016-08-02 Netapp, Inc. Extent hashing technique for distributed storage architecture
US10263770B2 (en) 2013-11-06 2019-04-16 Pure Storage, Inc. Data protection in a storage system using external secrets
US11128448B1 (en) 2013-11-06 2021-09-21 Pure Storage, Inc. Quorum-aware secret sharing
US10365858B2 (en) 2013-11-06 2019-07-30 Pure Storage, Inc. Thin provisioning in a storage device
US9529546B2 (en) 2014-01-08 2016-12-27 Netapp, Inc. Global in-line extent-based deduplication
US9448924B2 (en) 2014-01-08 2016-09-20 Netapp, Inc. Flash optimized, log-structured layer of a file system
US9208086B1 (en) 2014-01-09 2015-12-08 Pure Storage, Inc. Using frequency domain to prioritize storage of metadata in a cache
US9256549B2 (en) 2014-01-17 2016-02-09 Netapp, Inc. Set-associative hash table organization for efficient storage and retrieval of data in a storage system
US9268653B2 (en) 2014-01-17 2016-02-23 Netapp, Inc. Extent metadata update logging and checkpointing
WO2015116078A1 (en) * 2014-01-30 2015-08-06 Hewlett-Packard Development Company, L.P. Memory data versioning
US20150244795A1 (en) 2014-02-21 2015-08-27 Solidfire, Inc. Data syncing in a distributed system
US20150242531A1 (en) * 2014-02-25 2015-08-27 International Business Machines Corporation Database access control for multi-tier processing
US10656864B2 (en) 2014-03-20 2020-05-19 Pure Storage, Inc. Data replication within a flash storage array
US9495293B1 (en) * 2014-05-05 2016-11-15 EMC IP Holding Company, LLC Zone consistency
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
US9779268B1 (en) 2014-06-03 2017-10-03 Pure Storage, Inc. Utilizing a non-repeating identifier to encrypt data
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
US9218407B1 (en) 2014-06-25 2015-12-22 Pure Storage, Inc. Replication and intermediate read-write state for mediums
US10496556B1 (en) 2014-06-25 2019-12-03 Pure Storage, Inc. Dynamic data protection within a flash storage system
US9798728B2 (en) 2014-07-24 2017-10-24 Netapp, Inc. System performing data deduplication using a dense tree data structure
US10296469B1 (en) 2014-07-24 2019-05-21 Pure Storage, Inc. Access control in 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
US9864761B1 (en) 2014-08-08 2018-01-09 Pure Storage, Inc. Read optimization operations in a storage system
US9112890B1 (en) 2014-08-20 2015-08-18 E8 Storage Systems Ltd. Distributed storage over shared multi-queued storage device
KR20160028680A (en) * 2014-09-04 2016-03-14 삼성전자주식회사 Data storage device and method thereof
US10430079B2 (en) 2014-09-08 2019-10-01 Pure Storage, Inc. Adjusting storage capacity in a computing system
US10133511B2 (en) 2014-09-12 2018-11-20 Netapp, Inc Optimized segment cleaning technique
US9671960B2 (en) 2014-09-12 2017-06-06 Netapp, Inc. Rate matching technique for balancing segment cleaning and I/O workload
US9274720B1 (en) 2014-09-15 2016-03-01 E8 Storage Systems Ltd. Distributed RAID over shared multi-queued storage devices
US10164841B2 (en) 2014-10-02 2018-12-25 Pure Storage, Inc. Cloud assist for storage systems
US9489132B2 (en) 2014-10-07 2016-11-08 Pure Storage, Inc. Utilizing unmapped and unknown states in a replicated storage system
US10430282B2 (en) 2014-10-07 2019-10-01 Pure Storage, Inc. Optimizing replication by distinguishing user and system write activity
US9672248B2 (en) 2014-10-08 2017-06-06 International Business Machines Corporation Embracing and exploiting data skew during a join or groupby
US9836229B2 (en) 2014-11-18 2017-12-05 Netapp, Inc. N-way merge technique for updating volume metadata in a storage I/O stack
US9727485B1 (en) * 2014-11-24 2017-08-08 Pure Storage, Inc. Metadata rewrite and flatten optimization
US9519666B2 (en) * 2014-11-27 2016-12-13 E8 Storage Systems Ltd. Snapshots and thin-provisioning in distributed storage over shared storage devices
US9773007B1 (en) 2014-12-01 2017-09-26 Pure Storage, Inc. Performance improvements in a storage system
US9588842B1 (en) 2014-12-11 2017-03-07 Pure Storage, Inc. Drive rebuild
US9552248B2 (en) 2014-12-11 2017-01-24 Pure Storage, Inc. Cloud alert to replica
US9864769B2 (en) 2014-12-12 2018-01-09 Pure Storage, Inc. Storing data utilizing repeating pattern detection
US10469580B2 (en) * 2014-12-12 2019-11-05 International Business Machines Corporation Clientless software defined grid
US10554749B2 (en) 2014-12-12 2020-02-04 International Business Machines Corporation Clientless software defined grid
US10545987B2 (en) 2014-12-19 2020-01-28 Pure Storage, Inc. Replication to the cloud
US20170344579A1 (en) * 2014-12-23 2017-11-30 Hewlett Packard Enterprise Development Lp Data deduplication
US9740633B2 (en) * 2015-01-07 2017-08-22 International Business Machines Corporation Updatable address lookup application program interface
US10296354B1 (en) 2015-01-21 2019-05-21 Pure Storage, Inc. Optimized boot operations within a flash storage array
US11947968B2 (en) 2015-01-21 2024-04-02 Pure Storage, Inc. Efficient use of zone in a storage device
WO2016122546A1 (en) 2015-01-29 2016-08-04 Hewlett Packard Enterprise Development Lp Transactional key-value store
US9720601B2 (en) 2015-02-11 2017-08-01 Netapp, Inc. Load balancing technique for a storage array
US9710165B1 (en) 2015-02-18 2017-07-18 Pure Storage, Inc. Identifying volume candidates for space reclamation
US10650011B2 (en) * 2015-03-20 2020-05-12 International Business Machines Corporation Efficient performance of insert and point query operations in a column store
US9922064B2 (en) 2015-03-20 2018-03-20 International Business Machines Corporation Parallel build of non-partitioned join hash tables and non-enforced N:1 join hash tables
US9762460B2 (en) 2015-03-24 2017-09-12 Netapp, Inc. Providing continuous context for operational information of a storage system
US10082985B2 (en) 2015-03-27 2018-09-25 Pure Storage, Inc. Data striping across storage nodes that are assigned to multiple logical arrays
US10108653B2 (en) 2015-03-27 2018-10-23 International Business Machines Corporation Concurrent reads and inserts into a data structure without latching or waiting by readers
US10831736B2 (en) 2015-03-27 2020-11-10 International Business Machines Corporation Fast multi-tier indexing supporting dynamic update
US9710317B2 (en) 2015-03-30 2017-07-18 Netapp, Inc. Methods to identify, handle and recover from suspect SSDS in a clustered flash array
US10178169B2 (en) 2015-04-09 2019-01-08 Pure Storage, Inc. Point to point based backend communication layer for storage processing
US9525737B2 (en) 2015-04-14 2016-12-20 E8 Storage Systems Ltd. Lockless distributed redundant storage and NVRAM cache in a highly-distributed shared topology with direct memory access capable interconnect
US9529542B2 (en) 2015-04-14 2016-12-27 E8 Storage Systems Ltd. Lockless distributed redundant storage and NVRAM caching of compressed data in a highly-distributed shared topology with direct memory access capable interconnect
US10140149B1 (en) 2015-05-19 2018-11-27 Pure Storage, Inc. Transactional commits with hardware assists in remote memory
US10496626B2 (en) 2015-06-11 2019-12-03 EB Storage Systems Ltd. Deduplication in a highly-distributed shared topology with direct-memory-access capable interconnect
US10310740B2 (en) 2015-06-23 2019-06-04 Pure Storage, Inc. Aligning memory access operations to a geometry of a storage device
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
US10983732B2 (en) * 2015-07-13 2021-04-20 Pure Storage, Inc. Method and system for accessing a file
US9740566B2 (en) 2015-07-31 2017-08-22 Netapp, Inc. Snapshot creation workflow
US20170060421A1 (en) * 2015-08-31 2017-03-02 Dell Products, Lp System and Method to Support Shingled Magnetic Recording Hard Drives in a Storage System
US11341136B2 (en) 2015-09-04 2022-05-24 Pure Storage, Inc. Dynamically resizable structures for approximate membership queries
US11269884B2 (en) 2015-09-04 2022-03-08 Pure Storage, Inc. Dynamically resizable structures for approximate membership queries
KR20170028825A (en) 2015-09-04 2017-03-14 퓨어 스토리지, 아이앤씨. Memory-efficient storage and searching in hash tables using compressed indexes
US10515055B2 (en) * 2015-09-18 2019-12-24 Netapp, Inc. Mapping logical identifiers using multiple identifier spaces
CN106557531B (en) * 2015-09-30 2020-07-03 伊姆西Ip控股有限责任公司 Method, apparatus and storage medium for converting complex structured objects into flattened data
US9843453B2 (en) 2015-10-23 2017-12-12 Pure Storage, Inc. Authorizing I/O commands with I/O tokens
US20170154057A1 (en) * 2015-11-30 2017-06-01 Linkedin Corporation Efficient consolidation of high-volume metrics
US10218647B2 (en) * 2015-12-07 2019-02-26 Intel Corporation Mechanism to support multiple-writer/multiple-reader concurrency for software flow/packet classification on general purpose multi-core systems
KR102473209B1 (en) * 2015-12-14 2022-12-02 삼성전자주식회사 Storage device and operating method of storage device
US10162835B2 (en) 2015-12-15 2018-12-25 Pure Storage, Inc. Proactive management of a plurality of storage arrays in a multi-array system
US10496283B2 (en) * 2016-01-22 2019-12-03 Suraj Prabhakar WAGHULDE Adaptive prefix tree based order partitioned data storage system
US9946462B1 (en) * 2016-02-15 2018-04-17 Seagate Technology Llc Address mapping table compression
US10146881B2 (en) 2016-03-29 2018-12-04 Microsoft Technology Licensing, Llc Scalable processing of heterogeneous user-generated content
US9842084B2 (en) 2016-04-05 2017-12-12 E8 Storage Systems Ltd. Write cache and write-hole recovery in distributed raid over shared multi-queue storage devices
US10929022B2 (en) 2016-04-25 2021-02-23 Netapp. Inc. Space savings reporting for storage system supporting snapshot and clones
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
US11243987B2 (en) * 2016-06-16 2022-02-08 Microsoft Technology Licensing, Llc Efficient merging and filtering of high-volume metrics
US10713072B1 (en) * 2016-06-27 2020-07-14 Amazon Technologies, Inc. Computing resource provisioning
US10733045B2 (en) * 2016-07-14 2020-08-04 Microsoft Technology Licensing, Llc Online repair of metadata for structured data including file systems
US10203903B2 (en) 2016-07-26 2019-02-12 Pure Storage, Inc. Geometry based, space aware shelf/writegroup evacuation
US10642763B2 (en) 2016-09-20 2020-05-05 Netapp, Inc. Quality of service policy sets
US10320907B2 (en) * 2016-09-26 2019-06-11 Netapp, Inc. Multi-stage prefetching to exploit long-term future data access sequence knowledge
US10756816B1 (en) 2016-10-04 2020-08-25 Pure Storage, Inc. Optimized fibre channel and non-volatile memory express access
US10191662B2 (en) 2016-10-04 2019-01-29 Pure Storage, Inc. Dynamic allocation of segments in a flash storage system
US10162523B2 (en) 2016-10-04 2018-12-25 Pure Storage, Inc. Migrating data between volumes using virtual copy operation
US10613974B2 (en) 2016-10-04 2020-04-07 Pure Storage, Inc. Peer-to-peer non-volatile random-access memory
US10481798B2 (en) 2016-10-28 2019-11-19 Pure Storage, Inc. Efficient flash management for multiple controllers
US10185505B1 (en) 2016-10-28 2019-01-22 Pure Storage, Inc. Reading a portion of data to replicate a volume based on sequence numbers
KR101831604B1 (en) * 2016-10-31 2018-04-04 삼성에스디에스 주식회사 Method for transmitting data, method for authentication, and server for executing the same
US10359942B2 (en) 2016-10-31 2019-07-23 Pure Storage, Inc. Deduplication aware scalable content placement
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
US10031872B1 (en) 2017-01-23 2018-07-24 E8 Storage Systems Ltd. Storage in multi-queue storage devices using queue multiplexing and access control
US10528488B1 (en) 2017-03-30 2020-01-07 Pure Storage, Inc. Efficient name coding
US10261913B2 (en) 2017-04-20 2019-04-16 Alibaba Group Holding Limited Persistent memory for key-value storage
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
US10936759B1 (en) * 2017-09-01 2021-03-02 Amzetta Technologies, Llc Systems, methods and computer-readable media for providing enhanced encryption in a storage system
US10685010B2 (en) 2017-09-11 2020-06-16 Amazon Technologies, Inc. Shared volumes in distributed RAID over shared multi-queue storage devices
US10776202B1 (en) 2017-09-22 2020-09-15 Pure Storage, Inc. Drive, blade, or data shard decommission via RAID geometry shrinkage
US10474528B2 (en) * 2017-10-02 2019-11-12 Western Digital Technologies, Inc. Redundancy coding stripe based on coordinated internal address scheme across multiple devices
US10379948B2 (en) 2017-10-02 2019-08-13 Western Digital Technologies, Inc. Redundancy coding stripe based on internal addresses of storage devices
US10789211B1 (en) 2017-10-04 2020-09-29 Pure Storage, Inc. Feature-based deduplication
US10789002B1 (en) * 2017-10-23 2020-09-29 EMC IP Holding Company LLC Hybrid data deduplication for elastic cloud storage devices
US11269531B2 (en) * 2017-10-25 2022-03-08 International Business Machines Corporation Performance of dispersed location-based deduplication
US10884919B2 (en) 2017-10-31 2021-01-05 Pure Storage, Inc. Memory management in a storage system
US10545696B2 (en) * 2017-11-14 2020-01-28 Samsung Electronics Co., Ltd. Data deduplication using KVSSD
US10860475B1 (en) 2017-11-17 2020-12-08 Pure Storage, Inc. Hybrid flash translation layer
EP3509003B1 (en) * 2018-01-04 2021-04-21 Shenzhen Goodix Technology Co., Ltd. Method and apparatus to protect code processed by an embedded micro-processor against altering
US10970395B1 (en) 2018-01-18 2021-04-06 Pure Storage, Inc Security threat monitoring for a storage system
US11010233B1 (en) 2018-01-18 2021-05-18 Pure Storage, Inc Hardware-based system monitoring
US11144638B1 (en) 2018-01-18 2021-10-12 Pure Storage, Inc. Method for storage system detection and alerting on potential malicious action
US10467527B1 (en) 2018-01-31 2019-11-05 Pure Storage, Inc. Method and apparatus for artificial intelligence acceleration
CN108334457B (en) * 2018-02-12 2020-06-30 杭州宏杉科技股份有限公司 IO processing method and device
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
US10747439B2 (en) * 2018-03-02 2020-08-18 Intel Corporation Method and apparatus for power-fail safe compression and dynamic capacity for a storage device
US20190286569A1 (en) * 2018-03-19 2019-09-19 Seagate Technology Llc Logical to physical data storage mapping
US11934322B1 (en) 2018-04-05 2024-03-19 Pure Storage, Inc. Multiple encryption keys on storage drives
US11385792B2 (en) 2018-04-27 2022-07-12 Pure Storage, Inc. High availability controller pair transitioning
US10678433B1 (en) 2018-04-27 2020-06-09 Pure Storage, Inc. Resource-preserving system upgrade
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
US10409511B1 (en) 2018-06-30 2019-09-10 Western Digital Technologies, Inc. Multi-device storage system with distributed read/write processing
US10725941B2 (en) 2018-06-30 2020-07-28 Western Digital Technologies, Inc. Multi-device storage system with hosted services on peer storage devices
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
US11869586B2 (en) 2018-07-11 2024-01-09 Pure Storage, Inc. Increased data protection by recovering data from partially-failed solid-state devices
US10592144B2 (en) 2018-08-03 2020-03-17 Western Digital Technologies, Inc. Storage system fabric with multichannel compute complex
KR20200019430A (en) * 2018-08-14 2020-02-24 에스케이하이닉스 주식회사 Controller and operating method thereof
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
JP6995723B2 (en) * 2018-09-19 2022-01-17 キオクシア株式会社 Memory system, storage system, and control method
US10521328B1 (en) * 2018-10-22 2019-12-31 Sap Se Application data flow mapping
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
KR20200057866A (en) * 2018-11-16 2020-05-27 삼성전자주식회사 Storage device including nonvolatile memory device and operating method thereof
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
US11775189B2 (en) 2019-04-03 2023-10-03 Pure Storage, Inc. Segment level heterogeneity
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
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
JP7362369B2 (en) * 2019-09-03 2023-10-17 キオクシア株式会社 memory system
US11403043B2 (en) 2019-10-15 2022-08-02 Pure Storage, Inc. Efficient data compression by grouping similar data within a data segment
US11651075B2 (en) 2019-11-22 2023-05-16 Pure Storage, Inc. Extensible attack monitoring by a storage system
US11645162B2 (en) 2019-11-22 2023-05-09 Pure Storage, Inc. Recovery point determination for data restoration in 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
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
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
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
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
US11520907B1 (en) 2019-11-22 2022-12-06 Pure Storage, Inc. Storage system snapshot retention based on encrypted data
US11720692B2 (en) 2019-11-22 2023-08-08 Pure Storage, Inc. Hardware token based management of recovery datasets for a storage system
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
US11341236B2 (en) 2019-11-22 2022-05-24 Pure Storage, Inc. Traffic-based detection of a security threat to a storage system
US11687418B2 (en) 2019-11-22 2023-06-27 Pure Storage, Inc. Automatic generation of recovery plans specific to individual storage elements
US11442896B2 (en) * 2019-12-04 2022-09-13 Commvault Systems, Inc. Systems and methods for optimizing restoration of deduplicated data stored in cloud-based storage resources
US11204907B2 (en) * 2019-12-05 2021-12-21 Exagrid Systems, Inc. Accelerated and memory efficient similarity matching
CN113114709B (en) * 2021-06-16 2021-09-17 紫光恒越技术有限公司 Application method and device for customized URL filtering classification, server and storage device
CN116501504B (en) * 2023-06-27 2023-09-12 上海燧原科技有限公司 Space-time mapping method and device for data stream, electronic equipment and storage medium

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020087544A1 (en) * 2000-06-20 2002-07-04 Selkirk Stephen S. Dynamically changeable virtual mapping scheme
US7873619B1 (en) * 2008-03-31 2011-01-18 Emc Corporation Managing metadata
US20110167221A1 (en) * 2010-01-06 2011-07-07 Gururaj Pangal System and method for efficiently creating off-site data volume back-ups

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7111147B1 (en) 2003-03-21 2006-09-19 Network Appliance, Inc. Location-independent RAID group virtual block management
US7406488B2 (en) * 2004-02-04 2008-07-29 Netapp Method and system for maintaining data in a continuous data protection system
US7873782B2 (en) 2004-11-05 2011-01-18 Data Robotics, Inc. Filesystem-aware block storage system, apparatus, and method
US7363444B2 (en) * 2005-01-10 2008-04-22 Hewlett-Packard Development Company, L.P. Method for taking snapshots of data
US7711897B1 (en) 2005-06-10 2010-05-04 American Megatrends, Inc. Method, system, apparatus, and computer-readable medium for improving disk array performance
JP2007087036A (en) * 2005-09-21 2007-04-05 Hitachi Ltd Snapshot maintenance device and method
US8533409B2 (en) * 2006-01-26 2013-09-10 Infortrend Technology, Inc. Method of managing data snapshot images in a storage system
US7653832B2 (en) 2006-05-08 2010-01-26 Emc Corporation Storage array virtualization using a storage block mapping protocol client and server
KR101473344B1 (en) 2007-08-24 2014-12-17 삼성전자 주식회사 Apparatus using flash memory as storage and operation method for the same
US8032637B2 (en) 2007-12-26 2011-10-04 Symantec Corporation Balanced consistent hashing for distributed resource management
US8041907B1 (en) 2008-06-30 2011-10-18 Symantec Operating Corporation Method and system for efficient space management for single-instance-storage volumes
US8645334B2 (en) * 2009-02-27 2014-02-04 Andrew LEPPARD Minimize damage caused by corruption of de-duplicated data
US8290972B1 (en) * 2009-04-29 2012-10-16 Netapp, Inc. System and method for storing and accessing data using a plurality of probabilistic data structures
US8612699B2 (en) * 2010-06-25 2013-12-17 International Business Machines Corporation Deduplication in a hybrid storage environment
US9104326B2 (en) * 2010-11-15 2015-08-11 Emc Corporation Scalable block data storage using content addressing
US8806160B2 (en) 2011-08-16 2014-08-12 Pure Storage, Inc. Mapping in a storage system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020087544A1 (en) * 2000-06-20 2002-07-04 Selkirk Stephen S. Dynamically changeable virtual mapping scheme
US7873619B1 (en) * 2008-03-31 2011-01-18 Emc Corporation Managing metadata
US20110167221A1 (en) * 2010-01-06 2011-07-07 Gururaj Pangal System and method for efficiently creating off-site data volume back-ups

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
See also references of EP2745197A1 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018171296A1 (en) * 2017-03-22 2018-09-27 华为技术有限公司 File merging method and controller
US11403021B2 (en) 2017-03-22 2022-08-02 Huawei Technologies Co., Ltd. File merging method and controller

Also Published As

Publication number Publication date
US8806160B2 (en) 2014-08-12
USRE49011E1 (en) 2022-04-05
AU2012296510B2 (en) 2017-10-26
AU2012296510A1 (en) 2014-04-24
EP2745197A1 (en) 2014-06-25
US20140365745A1 (en) 2014-12-11
EP3588260B1 (en) 2022-07-27
CN103874980A (en) 2014-06-18
US9239688B2 (en) 2016-01-19
JP6240071B2 (en) 2017-11-29
EP3588260A1 (en) 2020-01-01
US20130046949A1 (en) 2013-02-21
JP2014527672A (en) 2014-10-16
CN103874980B (en) 2017-05-10

Similar Documents

Publication Publication Date Title
USRE49011E1 (en) Mapping in a storage system
US9454477B2 (en) Logical sector mapping in a flash storage array
EP2761420B1 (en) Variable length encoding in a storage system
USRE49148E1 (en) Reclaiming space occupied by duplicated data in a storage system
US10540343B2 (en) Data object attribute based event detection in a storage system

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 12754134

Country of ref document: EP

Kind code of ref document: A1

ENP Entry into the national phase

Ref document number: 2014526196

Country of ref document: JP

Kind code of ref document: A

NENP Non-entry into the national phase

Ref country code: DE

WWE Wipo information: entry into national phase

Ref document number: 2012754134

Country of ref document: EP

ENP Entry into the national phase

Ref document number: 2012296510

Country of ref document: AU

Date of ref document: 20120816

Kind code of ref document: A