A first data block on a storage device including a data structure of deallocated data blocks on the storage device and a corresponding program erase count value for each of the deallocated data blocks is identified. A determination as to whether a second data block from the data structure of deallocated data blocks remains deallocated after being added to the data structure of deallocated data blocks based on the program erase count value is made. The data is stored at the second data block upon determining that the second data block remains deallocated after being added to the data structure of deallocated data blocks.

Patent
   11995318
Priority
Oct 28 2016
Filed
Apr 06 2023
Issued
May 28 2024
Expiry
Oct 28 2036

TERM.DISCL.
Assg.orig
Entity
Large
0
490
currently ok
8. A method comprising:
identifying a data structure containing metadata associated with a data block of the plurality of storage devices;
identifying a list of deallocated data blocks for the plurality of storage devices;
comparing an access operation count value for the data block associated with the data structure with an access operation count value for the data block associated with the list of deallocated blocks; and
determining whether the data block is available for writing additional data based on comparison of access operation count values.
15. A non-transitory computer readable storage medium comprising instructions which, when executed by a processing device, cause the processing device to:
identify a data structure containing metadata associated with a data block of the plurality of storage devices;
identify a list of deallocated data blocks for the plurality of storage devices;
compare an access operation count value for the data block associated with the data structure with an access operation count value for the data block associated with the list of deallocated blocks; and
determine whether the data block is available for writing additional data based on comparison of access operation count values.
1. A system comprising:
a plurality of storage devices; and
a storage controller coupled to the plurality of storage devices, the storage controller comprising a processing device, the processing device configured to:
identify a data structure containing metadata associated with a data block of the plurality of storage devices;
identify a list of deallocated data blocks for the plurality of storage devices;
compare an access operation count value for the data block associated with the data structure with an access operation count value for the data block associated with the list of deallocated blocks; and
determine whether the data block is available for writing additional data based on comparison of access operation count values.
2. The system of claim 1, wherein identification of the data structure containing metadata is responsive to a restart of the system.
3. The system of claim 1, wherein the data structure containing metadata is a dynamic table comprising block metadata for each data block on the storage device.
4. The system of claim 3, wherein the block metadata comprises an indication of a block type of each data block on the storage device and a corresponding program erase count value for each data block on the storage device.
5. The system of claim 4, wherein the data block is identified from the dynamic table based on the indication of the block type of the data block.
6. The system of claim 1, wherein the data structure containing metadata is a frontier set.
7. The system of claim 1, wherein the processing device is configured to remove the data block from the list of deallocated data blocks in response to the access operation counts not matching.
9. The method of claim 8, wherein identification of the data structure containing metadata is responsive to a restart of the system.
10. The method of claim 8, wherein the data structure containing metadata is a dynamic table comprising block metadata for each data block on the storage device.
11. The method of claim 10, wherein the block metadata comprises an indication of a block type of each data block on the storage device and a corresponding program erase count value for each data block on the storage device.
12. The method of claim 11, wherein the data block is identified from the dynamic table based on the indication of the block type of the data block.
13. The method of claim 8, wherein the data structure containing metadata is a frontier set.
14. The method of claim 8, wherein the processing device is configured to remove the data block from the list of deallocated data blocks in response to the access operation counts not matching.
16. The non-transitory computer readable storage medium of claim 15, wherein identification of the data structure containing metadata is responsive to a restart of the system.
17. The non-transitory computer readable storage medium of claim 15, wherein the data structure containing metadata is a dynamic table comprising block metadata for each data block on the storage device.
18. The non-transitory computer readable storage medium of claim 17, wherein the block metadata comprises an indication of a block type of each data block on the storage device and a corresponding program erase count value for each data block on the storage device.
19. The non-transitory computer readable storage medium of claim 18, wherein the data block is identified from the dynamic table based on the indication of the block type of the data block.
20. The non-transitory computer readable storage medium of claim 15, wherein the data structure containing metadata is a frontier set.

This is a continuation application for patent entitled to a filing date and claiming the benefit of earlier-filed U.S. patent application Ser. No. 17/401,436, filed Aug. 13, 2021, which is a continuation of U.S. Pat. No. 11,119,657, issued Sep. 14, 2021, which is a continuation of U.S. Pat. No. 10,481,798, issued Nov. 19, 2019, each of which are hereby incorporated by reference in their entirety.

As computer memory storage and data bandwidth increase, so does the amount and complexity of data that businesses manage daily. 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.

The present disclosure is illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings.

FIG. 1 is a block diagram illustrating a storage system in which embodiments of the present disclosure may be implemented.

FIG. 2 is a block diagram illustrating a memory manager in a storage controller, according to an embodiment.

FIG. 3 is a flow diagram illustrating a method for performing a metadata scan to populate a data structure, according to an embodiment.

FIG. 4 is a flow diagram illustrating a method for identifying a deallocated data block on a storage device, according to an embodiment.

FIG. 5 is a flow diagram illustrating a method for identifying leading edge data on a storage device, according to an embodiment.

FIG. 6 is a block diagram illustrating an exemplary computer system, according to an embodiment.

Embodiments are described for efficient flash management for multiple controllers. In one embodiment, a memory manager module running on a storage controller utilizes physical block addressing rather than logical addressing to manage the data stored on the underlying storage devices in a connected storage array. The memory manager may abide by certain principles including having no preference for particular physical addresses, such that data does not have a “primary” location, “secondary” location, etc., but rather is just scattered randomly about the drive. Another principle of operations is not trying to write a “trickle” of tiny metadata updates because as the drive's state evolves, it may be best to use only the metadata persisted into flash blocks, along with periodically persisted data managed by the memory manager.

In one embodiment, the memory manager described herein achieves these principles by meeting at least three individual objectives. First, the memory manager allows a fast start of the primary storage controller by quickly locating recently-written flash blocks of one or more types of data. Second, the memory manager provides a list of flash blocks that are deallocated and ready for client writes. Third, the memory manager respects the needs of modern flash devices by delaying the erase of flash blocks until just before those blocks are needed for writing.

To accomplish the above objectives, the memory manager works in connection with firmware in the underlying storage devices. In one embodiment, the storage device firmware implements a metadata tracking scheme that stores certain values along with any data payload. These values may include a program/erase count for each data block that indicates a number of cycles during which the block has been written and erased, and a block type value, which may identify a storage client that owns the data in that block. In addition, the storage device firmware maintains a table or other data structure containing data for each data block and allows the memory manager to access the table. For each data block, the table also stores the program/erase count, the block type value, and a block status indicator (erased, written, unreadable, bad, etc.). On power-up of the storage device, the firmware may scan the data blocks to recover the embedded metadata and populate the data structure with the metadata recovered from those blocks.

The memory manager manages blocks in concert with a data structure called the “frontier set.” The frontier set is a data structure that is written to flash that declares the state of a storage device in a way that allows future readers to determine not only what was true at that point in time, but also to recover the effect of operations that occurred after the frontier set was written to flash. The frontier set, in its most primitive form, is simply a list of block numbers and their corresponding program/erase counts. This is a declaration that at the moment the frontier set was created, block X was deallocated when its program/erase count was Y. The memory manager can use the frontier set to extrapolate the state of a block beyond the moment the frontier set was created and written. If block X was deallocated when its program/erase count was Y, the memory manager can make at least two logical conclusions. First, a future reader that finds block X still at program/erase count Y can conclude that block must still be deallocated. Second, a future reader that finds block X at some program/erase count Z>Y can conclude that some client must have written new data to that block, after this frontier set was created or updated.

As explained herein, these conclusions allow the memory manager to achieve the objectives described above. As long as the memory manager writes a new frontier set periodically (and sufficient blocks remain available), it is possible to allow the controller to discover known deallocated blocks that are ready for new writes. In addition, erases can be delayed until just before the blocks are rewritten because block deallocation will be “eventually consistent.” This means that a deallocated block may not be seen as deallocated by all possible future primary controllers since it's possible that deallocated blocks may revert to the allocated state, until the next frontier set is persisted. Deallocated blocks are available for reuse, but until the moment that their new owner actually writes to them (which implies that the embedded metadata will include a new program/erase count and block type value), that block may revert back to its previous owner. Furthermore, a fast start of the primary controller is achieved by locating the leading edge of newly written data from a particular client. To assist a major client storing on the order of 100,000 to 1,000,000 blocks or more, the memory manager can define two classes of data, or more precisely, two states that a data block can be in. A “boot” block is one that contains new data and a “standalone” block contains cold data (i.e., data that has been around and untouched for a certain period of time). Boot blocks can be quickly and efficiently enumerated by memory manager to the client, after a crash or power loss. When the client no longer requires this block to be enumerated as a boot block, it will indicate this to the memory manager (a process referred to as “graduation”). This block will then become a standalone block at the memory manager's discretion.

FIG. 1 is a block diagram illustrating a storage system 100 in which embodiments of the present disclosure may be implemented. Storage system 100 may include storage controllers 110, 150 and storage array 130, which is representative of any number of data storage arrays or storage device groups. As shown, storage array 130 includes storage devices 135A-n, which are representative of any number and type of storage devices (e.g., solid-state drives (SSDs)). Storage controller 110 may be coupled directly to initiator device 125 and storage controller 110 may be coupled remotely over network 120 to initiator device 115. In one embodiment, storage controller 150 is coupled remotely over network 120 to initiator device 115. Initiator devices 115 and 125 are representative of any number of clients which may utilize storage controllers 110 and 150 for storing and accessing data in storage system 100. It is noted that some systems may include only a single client or initiator device, connected directly or remotely, to storage controllers 110 and 150.

In one embodiment, controller 110 is designated as the “primary” controller, which performs most or all of the I/O operations on the array 130. If, however, a software crash, hardware fault or other error occurs, the “secondary” controller 150 may be promoted to serve as the primary controller and take over all responsibilities for servicing the array 130. In one embodiment, storage controllers 110 and 150 are identical and any description of controller 110 herein may be equally attributed to storage controller 150.

Storage controller 110 may include software and/or hardware configured to provide access to storage devices 135A-n. Although storage controller 110 is shown as being separate from storage array 130, in some embodiments, storage controller 110 may be located within storage array 130. Storage controller 110 may include or be coupled to a base operating system (OS), a volume manager, and additional control logic, such as memory manager 140, for implementing the various techniques disclosed herein. In one embodiment, the OS is designed with flash storage in mind, so while it can use conventional SSDs to store data, it does not depend on a 512 byte random overwrite capability. Even on conventional SSDs, storage controller 110 can achieve better performance by writing and discarding data in large chunks. This style of I/O is sometimes called “flash friendly I/O.” This also makes it a much easier task to convert the OS to use the physical addressing of storage devices, as compared to conventional filesystems.

In one embodiment, the logic of memory manager 140 is contained within an object which manages one of devices 135A-n. Thus, there may be a separate memory manager object for each device 135A-n in storage array 130. As new devices are connected to controller 110, new memory manager objects may be created. These objects may be similarly discarded when a corresponding device is disconnected from storage controller 110. Clients wishing to communicate with memory manager 140, such as one of initiator applications 112, 122, the operating system running on storage controller 110 or another client application running on storage controller 110, may do so via a memory manager application programming interface (API) published by memory manager 140. In one embodiment, multiple clients can access the same memory manager object concurrently. In one embodiment, storage controller 150 includes a separate instance(s) of memory manager 152.

Storage controller 110 may include and/or execute on any number of processing devices and may include and/or execute on a single host computing device or be spread across multiple host computing devices, depending on the embodiment. In some embodiments, storage controller 110 may generally include or execute on one or more file servers and/or block servers. Storage controller 110 may use any of various techniques for replicating data across devices 135A-n to prevent loss of data due to the failure of a device or the failure of storage locations within a device. Storage controller 110 may also utilize any of various deduplication techniques for reducing the amount of data stored in devices 135A-n by deduplicating common data.

In one embodiment, storage controller 110 may utilize logical volumes and mediums to track client data that is stored in storage array 130. A medium is defined as a logical grouping of data, and each medium has an identifier with which to identify the logical grouping of data. A volume is a single accessible storage area with a single file system, typically, though not necessarily, resident on a single partition of a storage device. The volumes may be logical organizations of data physically located on one or more of storage device 135A-n in storage array 130. Storage controller 110 may maintain a volume to medium mapping table to map each volume to a single medium, and this medium is referred to as the volume's anchor medium. A given request received by storage controller 110 may indicate at least a volume and block address or file name, and storage controller 110 may determine an anchor medium targeted by the given request from the volume to medium mapping table.

In one embodiment, storage controller 110 includes memory manager 140. Memory manager 140 can perform various operations to identify deallocated data blocks available for writing and to identify leading edge data that was most recently written by a particular client. In one embodiment, memory manager 140 can receive a request to write data to a storage device 135A and can determine a first data block on storage device 135A comprising a list of deallocated data blocks. That list may include a block number of each deallocated data block and an access operation count value (e.g., program/erase count value) at which each deallocated data block was deallocated. Memory manager 140 can then identify a second data block from the list of deallocated data blocks and write the requested data to that second data block. To identify the leading edge data, memory manager 140 may access a data structure stored in memory on storage device 135A, where the data structure stores block metadata for each data block on storage device 135A. Memory manager 140 may determine, from the data structure, a first data block on storage device 135A comprising a list of deallocated data blocks on the storage device and compare a first access operation count value associated with each of the deallocated data blocks from the data structure to a second access operation count value associated with each of the deallocated data blocks from the list of deallocated data blocks. Memory manager 140 may label a second data block on the list as comprising new data responsive to the first access operation count value associated with the second data block from the data structure not matching the second access operation count value associated with the second data block from the list of deallocated data blocks.

In various embodiments, multiple mapping tables may be maintained by storage controller 110. These mapping tables may include a medium mapping table and a volume to medium mapping table. These tables may be utilized to record and maintain the mappings between mediums and underlying mediums and the mappings between volumes and mediums. Storage controller 110 may also include an address translation table with 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 initiator devices 115 and 125 to physical locations in storage devices 135A-n. A “physical” pointer value may be read from the mappings associated with a given medium during a lookup operation corresponding to a received read/write request. The term “mappings” is defined as the one or more entries of the address translation mapping table which convert a given medium ID and block number into a physical pointer value. This physical pointer value may then be used to locate a physical location within the storage devices 135A-n. The physical pointer value may be used to access another mapping table within a given storage device of the storage devices 135A-n. Consequently, one or more levels of indirection may exist between the physical pointer value and a target storage location.

In alternative embodiments, the number and type of client computers, initiator devices, storage controllers, networks, 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 storage system 100. Further, the systems and methods described herein may be applied to directly attached storage systems or network 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.

Network 120 may utilize a variety of techniques including wireless connections, direct local area network (LAN) connections, wide area network (WAN) connections such as the Internet, a router, storage area network, Ethernet, and others. Network 120 may comprise one or more LANs that may also be wireless. Network 120 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 network 120. The network 120 may interface with a set of communications protocols used for the Internet such as the Transmission Control Protocol (TCP) and the Internet Protocol (IP), or TCP/IP. In one embodiment, network 120 represents a storage area network (SAN) which provides access to consolidated, block level data storage. The SAN may be used to enhance the storage devices accessible to initiator devices so that the devices 135A-n appear to the initiator devices 115 and 125 as locally attached storage.

Initiator devices 115 and 125 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, initiator devices 115 and 125 include one or more processing devices, each 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 ARM®, 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.

In one embodiment, initiator device 115 includes initiator application 112 and initiator device 125 includes initiator application 122. Initiator applications 112 and 122 may be any computer application programs designed to utilize the data on devices 135A-n in storage array 130 to implement or provide various functionalities. Initiator applications 112 and 122 may issue requests to read or write data from certain logical volumes data within storage system 100. Those requests can be serviced by memory manager 140 of storage controller 110, as described in detail herein.

FIG. 2 is a block diagram illustrating memory manager 140 in a storage controller 110, according to an embodiment. In one embodiment, memory manager 140 includes client interface 242, data structure interface 244, data block interface 246 and comparison logic 248. This arrangement of modules may be a logical separation, and in other embodiments, these modules, interfaces or other components can be combined together or separated in further components. In one embodiment, storage device 135A is connected to memory manager 140 and includes firmware 252, memory 235 storing data structure 254, and data blocks 256. In one embodiment, storage device 135A may be external to storage controller 110 as part of storage array 130 and may be connected to storage controller 110 over a network or other connection. In other embodiments, storage controller 110 may include different and/or additional components which are not shown to simplify the description. Storage device 135A may include one or more mass storage devices which can include, for example, flash memory or solid-state drives (SSDs). Memory 235 may include for example, random-access memory (RAM); dynamic random-access memory (DRAM); erasable programmable memory (e.g., EPROM and EEPROM); flash memory; or any other type of storage medium. In one embodiment, storage device 135A includes volatile memory 235, such as DRAM, and non-volatile data blocks 256, such as flash blocks or other persistent data blocks.

In one embodiment, client interface 242 manages communication with client devices or applications in storage system 100, such as initiator devices 115 or 125, or applications within storage controller 110. Client interface 242 can receive I/O requests to access data blocks 256 on storage device 135A from an initiator application 112 or 122 over network 120. In one embodiment, the I/O request includes a request to write new data to storage device 135A. After the write is performed, client interface may provide a notification to initiator device 115 or 125 over network 120 indicating that the write was successfully performed.

In one embodiment, data structure interface 244 interacts with data structure 254 in memory 235 on storage device 135A. In response to client interface 242 receiving a write request, for example, data structure interface 244 may access data structure 254 (e.g., a dynamic table) comprising block metadata for each of data blocks 256 on storage device 135A. The block metadata may include an indication of a block type of each data block 256 and an access operation count value for each data block 256. In one embodiment, the access operation count value is a total number of program/erase cycles that have been performed on the block. Using the block type indicator, data structure interface 244 may determine a first data block on storage device 135A which stores a list of deallocated data blocks on storage device 135A. This list may include a block number of each deallocated data block and an access operation count value at which each deallocated data block was deallocated.

In one embodiment, data block interface 246 interacts with data blocks 256 of storage device 135A as part of any data access operations being performed. For example, once data structure interface 244 determines the block storing the list of deallocated data blocks, data block interface 246 may identify a second block of those deallocated blocks from the list, and read an access operation count value associated with the second block from the list. If memory manager 140 ultimately determines that the second block was in fact deallocated, data block interface 246 may perform the requested write operation by overwriting the old data in the second data block with new data. If the allegedly deallocated data block was not actually deallocated (or has since been reallocated), data block interface 246 can remove the second data block from the list stored in the first data block. When memory manager 140 is attempting to locate leading edge data, data block interface 246 can determine whether a particular block was previously labeled as comprising new data. In addition, once memory manager 140 identifies the leading edge data, data block interface 246 can label the data blocks as comprising either new or old data, as appropriate.

In one embodiment, comparison logic 248 performs various calculations and comparisons as part of the operations performed by memory manager 140. For example, to verify that a block appearing on the list of deallocated data blocks is in fact deallocated or to determine whether a block is storing new or old data, comparison logic 248 may compare a first access operation count value associated with the data block from data structure 254 to a second access operation count value associated with the data block from the list of deallocated data blocks stored in one of data blocks 256 (identified by the block type value). If comparison logic 248 determines that the count values match, this indicates that the block has not been reallocated since it was added to the list of deallocated blocks and, thus, can either be labeled as storing old data or can safely be overwritten without losing any critical data. If the count values don't match, however, this indicates that another client has written data to that block and it should be removed from the list of deallocated blocks and/or labeled as comprising new data.

FIG. 3 is a flow diagram illustrating a method for performing a metadata scan to populate a data structure, according to an embodiment. The method 300 may be performed by processing logic that comprises hardware (e.g., circuitry, dedicated logic, programmable logic, microcode, etc.), software (e.g., instructions run on a processing device to perform hardware simulation), firmware, or a combination thereof. On power-up of the storage device 135A, the method 300 may scan the data blocks 256 to recover the embedded metadata and populate the data structure 254 with the metadata recovered from those blocks. In one embodiment, method 300 may be performed by the firmware 252 of storage device 135A, as shown in FIG. 2.

Referring to FIG. 3, at block 310, method 300 detects a restart of storage device 135A. After an event, such as a sudden power loss or software crash, storage device 135A may be automatically restarted. Firmware 252 can detect the restart and initiate any number of start-up procedures. Storage system 100 is designed to be extremely reliable even in the face of hardware or software failures, including sudden power losses or software crashes. Storage devices 135A-n may be designed with failures in mind, specifically to account for sudden crashes or power loss at any point during the process, and to assure that restarting after such an event is no different than any other restart operation.

At block 320, method 300 scans a plurality of data blocks 256 on storage device 135A to identify block metadata for each of the plurality of data blocks 256. In one embodiment, firmware 252 may scan each of the data blocks 256 to recover the embedded metadata. This metadata may include, for example, an indication of a block type of each of the data blocks 256 and an access operation count value for each of the data blocks 256. In one embodiment, this metadata may be stored in a header section of each individual block 256, so that it can be obtained quickly and efficiently. In one embodiment, the scan is reasonably fast (e.g., taking less than 10 seconds to scan one million or more blocks).

At block 330, method 300 stores the block metadata in data structure 254 stored in memory 235 on storage device 135A, wherein the block metadata is accessible by storage controller 110 coupled to storage device 135A. In one embodiment, data structure 254 comprises a plurality of entries, each of the entries corresponding to a different one of the data blocks 256 on storage device 135A. In one embodiment, data structure 254 maintains an indication of a block type and an access operation count value for each data block. One example of a block type that may be stored in metadata is a “bootstrap data” block. This block type stores data that is needed to restart the system after a power loss or other failure. Since the data blocks 256 may have limited reusability (e.g., approximately three thousand program/erase cycles), this data cannot be stored in the same place since it gets accessed regularly. Since the bootstrap data can be located easily during the metadata scan, it can be located anywhere on storage device 135A.

Data storage on flash follows a simple looking cycle: erase, program; erase, program. Once written or programmed, data is nonvolatile and may be read millions of times. Flash structures have a complex hierarchy (i.e., packages, dies, planes, blocks, pages, and bits). The memory manager 140 described herein operates primarily on the block level. This is because the block is the most common unit of erase and reuse. If a particular flash chip uses 16 MB blocks, then data will be written to flash in 16 MB chunks, and will be discarded in 16 MB chunks. One physical detail of NAND flash that becomes important is that the physical blocks and pages have some “extra” storage beyond the expected powers of two. Thus, a physical 16 KB block may actually contain 19 KB of physical bits. While most of these “extra” bits are consumed by error correction codes, there may be some room left over to store metadata about the block or its contents. Storage system 100 makes use of some of these bits to store metadata alongside any data stored by the controller.

There are a number of management tasks performed by any system that stores data on NAND flash chips. Normally these functions are all performed in SSD firmware and are concealed from the host computer. Flash chips have a limited lifespan, measured in program/erase (PE) cycles. Management software must spread data around such that flash blocks wear more or less evenly across the drive, or premature drive failure may result due to block failures. This may be referred to as “wear leveling.” Flash is an imperfect media and blocks may fail spontaneously. Thus, in one embodiment, management software must maintain a bad block list over the lifetime of the drive. In addition, most SSDs support a storage interface that is backwards compatible with hard disks from the last 20+ years, allowing a contiguous range of logical 512 byte sectors that can be overwritten randomly an arbitrary number of times. Firmware supports this interface via a complicated abstraction layer that maps logical addresses to physical flash locations dynamically to provide logical address mapping. In one embodiment, wear leveling and bad block handling are not performed in firmware, but rather are handled within memory manager 140 of storage controller 110. Thus, the logical address feature may be discarded as only physical flash addresses are used.

FIG. 4 is a flow diagram illustrating a method for identifying a deallocated data block on a storage device, according to an embodiment. The method 400 may be performed by processing logic that comprises hardware (e.g., circuitry, dedicated logic, programmable logic, microcode, etc.), software (e.g., instructions run on a processing device to perform hardware simulation), firmware, or a combination thereof. The method 400 can allow a storage controller to identify deallocated data blocks to allow those blocks to be overwritten without the risk of losing any critical data. In one embodiment, method 400 may be performed by memory manager 140, as shown in FIGS. 1 and 2.

Referring to FIG. 4, at block 410, method 400 receives a request to write data to storage device 135A (e.g., an SSD). In one embodiment, client interface 242 receives the request from an initiator application 112 or 122 over network 120, or from another client application on storage controller 110. The write request may not specify a particular data block on storage device 135A, so it may be up to memory manager 140 to identify a deallocated block. Since data blocks 256 may not be erased until right before they are written, even a block currently storing data may be “deallocated” and, thus, available for writing.

At block 420, method 400 accesses a dynamic table (e.g., data structure 254) stored in memory 235 on storage device 135A, the dynamic table comprising block metadata for each data block 256 on storage device 135A. In one embodiment, data structure interface 244 may access data structure 254 comprising block metadata for each of data blocks 256 on storage device 135A. The block metadata may include an indication of a block type of each data block and an access operation count value for each data block.

At block 430, method 400 determines a first data block on storage device 135A comprising a list of deallocated data blocks on the storage device 135A. In one embodiment, data structure interface 244 determines the first data block from the dynamic table based on the indication of the block type of the first data block. Using the block type indicator stored in the dynamic table, data structure interface 244 may determine a first data block on storage device 135A which stores a list of deallocated data blocks on storage device 135A. This list may include a block number of each deallocated data block and an access operation count value at which each deallocated data block was deallocated. In one embodiment, this list may be referred to as the “frontier set” and the block where it is stored may be given a special block type. In one embodiment, the frontier set is identified and read once when storage device 135A is started-up (or restarted), and the list of deallocated blocks is stored and their corresponding operation count values are stored in memory 235.

At block 440, method 400 identifies a second data block from the list of deallocated data blocks on the storage device 135A. In one embodiment, data block interface 246 accesses the first block on storage device 135A identified at block 430 from the dynamic table. Data block interface 246 may identify a second block of those deallocated blocks from the list, and read an access operation count value associated with the second block from the list. In one embodiment, the second data block may be identified from the list of deallocated blocks stored in memory 235 some period of time after the frontier set is initially identified at block 430.

At block 450, method 400 compares a first access operation count value associated with the second data block from the dynamic table to a second access operation count value associated with the second data block from the list of deallocated data blocks. In one embodiment, comparison logic 248 compares the first access operation count value to the second access operation count value associated with the data block. If comparison logic 248 determines that the count values match, this indicates that the block has not been reallocated since it was added to the list of deallocated blocks. Thus, at block 460, method 400 writes the requested data to the second data block. In one embodiment, data block interface 246 overwrites the old data stored in the second data block with the newly requested data received at block 410. If the count values do not match, however, this indicates that another client has since written new data to that block. Thus, at block 470, data block interface 246 removes the second data block from the list of deallocated data blocks.

FIG. 5 is a flow diagram illustrating a method for identifying leading edge data on a storage device, according to an embodiment. The method 500 may be performed by processing logic that comprises hardware (e.g., circuitry, dedicated logic, programmable logic, microcode, etc.), software (e.g., instructions run on a processing device to perform hardware simulation), firmware, or a combination thereof. The method 500 can allow a storage controller to identify leading edge data that was most recently written to storage device 135A by a particular storage client. In one embodiment, method 500 may be performed by memory manager 140, as shown in FIGS. 1 and 2.

Referring to FIG. 5, at block 510, method 500 accesses data structure 254 in memory 235 on storage device 135A, the data structure 254 comprising block metadata for each data block 256 on storage device 135A. In one embodiment, data structure interface 244 may access data structure 254 comprising block metadata for each of data blocks 256 on storage device 135A. The block metadata may include an indication of a block type of each data block and an access operation count value for each data block.

At block 520, method 500 determines, from data structure 254, a first data block on storage device 135A comprising a list of deallocated data blocks on storage device 135A. In one embodiment, data structure interface 244 determines the first data block from the data structure 254 based on the indication of the block type of the first data block. Using the block type indicator stored in the data structure 254, data structure interface 244 may determine a first data block on storage device 135A which stores a list of deallocated data blocks on storage device 135A. This list may include a block number of each deallocated data block and an access operation count value at which each deallocated data block was deallocated and a state value indicating whether the block is known to be in use. The state value may be indicated as “boot” or “future,” where a boot block is known to be in use (because it includes new data) and a future block was, at the time data structure 254 was populated, not in use (because it includes old data). In one embodiment, this list may be referred to as the “frontier set” and the block where it is stored may be given a special block type. The frontier set represents a snapshot in time and permits a future primary controller to correctly recover the state of the drive (and all the clients' data storage). A newly started primary controller can examine this frontier set, and compare the program/erase counts to those on the drive itself. “Future” blocks will become boot blocks if the program/erase count indicates new writes have occurred. “Boot” blocks will generally stay boot blocks, barring unusual events, such as flash errors, etc.

At block 530, method 500 determines whether a data block on the list of deallocated data blocks was previously labeled as comprising old data. In one embodiment, data block interface 246 reads the data from the first data block where the frontier set itself is stored, locates an entry in the frontier set corresponding to a second data block and reads the state value for that entry. As described above, data blocks on storage device 135A comprising old data may be labeled as “future” blocks in the frontier set and data blocks comprising new data may be labeled as “boot” blocks in the frontier set.

If the block was previously labeled as comprising new data (i.e., labeled as “boot” blocks), at block 540, method 500 maintains the previous new data label. Thus, boot blocks stay labeled boot blocks, regardless of whether they have new writes.

If the block was previously labeled as comprising old data, at block 550, method 500 compares a first access operation count value associated with the deallocated data blocks from the data structure 254 to a second access operation count value associated with the deallocated data block from the list of deallocated data blocks. In one embodiment, comparison logic 248 compares the first access operation count value to the second access operation count value associated with the data block. If comparison logic 248 determines that the first access operation count value associated with the second data block from the data structure does not match the second access operation count value associated with the second data block from the list of deallocated data blocks, this indicates that the block has been written with new data since it was added to the list. Thus, at block 540, method 500 labels the second data block on the list as comprising new data. In one embodiment, data block interface 246 changes the state value in the entry of the frontier set corresponding to the data block to “boot.” If the first access operation count value associated with the second data block from the data structure matches the second access operation count value associated with the second data block from the list of deallocated data blocks, however, this indicates that no new data has been written to that block. Thus, at block 560, method 500 labels the second data block on the list as comprising old data. In one embodiment, data block interface 246 maintains the state value in the entry of the frontier set corresponding to the data block as “future.”

In one embodiment, standalone blocks are not tracked by the frontier set. Rather, they can be defined as “all the blocks not listed in the frontier set” (or marked bad). These blocks can be enumerated simply by searching the drive tables for blocks with the correct block type that are not covered by the current frontier set. It should also be noted that all newly allocated blocks may come from the list of blocks written in the frontier set. Otherwise, the newly written data would not be detected as a boot block by a future primary controller. Furthermore, because boot blocks are listed in the frontier set, there can be policy on clients with small storage needs that they will never use standalone blocks. This means that any blocks that contain data with that client's block type, but are not listed in the frontier set, have been deallocated, saving clients the bother of sifting through old data and deallocating those blocks.

Periodically, a new frontier set may be constructed and written to flash. This may be desirable if most of the deallocated blocks in the current frontier set have been exhausted. Writing a new frontier set can make additional blocks ready for allocation. In addition, if a particular client has written and then deallocated many blocks, a new frontier set may be created. In one embodiment, deallocations are not made permanent until a new frontier set is written. Thus, completing that write will limit the number of blocks a future primary will discover. This can affect failover time, so it may be advantageous to limit some clients' block usage. Failover includes the transfer of the “primary” designation from one controller to another, which includes the transfer of the functionality of memory manager 140. Furthermore, when some blocks with attractive (i.e., low) program/erase counts have become deallocated, for best wear leveling behavior, the system tries to use the blocks with the lowest program/erase count first. Persisting a new frontier set can make those more attractive blocks available.

A new frontier set may be constructed by selecting some new future blocks from the list of deallocated blocks and adding the list of known boot blocks. Blocks which were formerly boot blocks in the previous frontier set but have since been graduated may not be recorded in the new frontier set. While persisting a new frontier set, the system need not halt all client allocations and writes. The new frontier set is constructed to contain at least a small number of blocks that are also part of the previous frontier set (and are marked as “future” blocks). In this way the system can continue allocating blocks from this overlapping set, knowing that if it crashes or loses power at any time, memory manager 140 can safely start up using either the new set (assuming the new frontier set write completed) or the old set (if the write did not complete). Each new frontier set may be written to a flash block using a “frontier set” block type value. This assists in quickly locating the frontier set.

Because this design does not persist a new frontier set during every state change, there may be an accumulation of changes that have only taken effect inside the controller memory. These changes can be lost if a failover or power loss occurs. It is possible to lose block deallocations and graduations across these events, however, this does not affect the correctness of the controller application, as it is straightforward to simply repeat these actions on the new primary controller. It is also possible to lose a block allocation if the client did not write to the block in question before the failover or restart. In one embodiment, this problem is alleviated as whatever task that intended to write something will be repeated on the new primary controller and may allocate a new block without being aware that a previous primary controller was attempting a similar operation.

In one embodiment, the storage device firmware 252 provides a list of blocks containing data of a particular block type to memory manager 140. This reduces the work required to locate the frontier set, and allows faster primary controller startup. When writing the frontier set, memory manager 140 also takes the unusual step of physically erasing old copies of frontier sets. This allows faster startup time by ensuring that controller 110 does not have to sift through many old frontier sets looking for the current one. To ensure correct behavior across a surprise block failure, frontier sets may be written to at least two physical locations, preferably spread across different failure domains (e.g. flash dies) to minimize the chance that both fail simultaneously. In one embodiment, the encryption capabilities of storage device firmware 252 are customized such that the data structures needed during startup (e.g. the frontier set) can be written unencrypted, and most client data can be written encrypted.

FIG. 6 illustrates a diagrammatic representation of a machine in the exemplary form of a computer system 600 within which a set of instructions, for causing the machine to perform any one or more of the methodologies discussed herein, may be executed. In alternative embodiments, the machine may be connected (e.g., networked) to other machines in a local area network (LAN), an intranet, an extranet, or the Internet. The machine may operate in the capacity of a server or a client machine in a client-server network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. The machine may be a personal computer (PC), a tablet PC, a set-top box (STB), a Personal Digital Assistant (PDA), a cellular telephone, a web appliance, a server, a network router, switch or bridge, or any machine capable of executing a set of instructions (sequential or otherwise) that specify actions to be taken by that machine. Further, while only a single machine is illustrated, the term “machine” shall also be taken to include any collection of machines that individually or jointly execute a set (or multiple sets) of instructions to perform any one or more of the methodologies discussed herein. In one embodiment, computer system 600 may be representative of a server, such as storage controller 110 running memory manager 140 or of a client, such as initiator devices 115 or 125.

The exemplary computer system 600 includes a processing device 602, a main memory 604 (e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM), a static memory 606 (e.g., flash memory, static random access memory (SRAM), etc.), and a data storage device 618, which communicate with each other via a bus 630. Data storage device 618 may be one example of any of the storage devices 135A-n in FIGS. 1 and 2. Any of the signals provided over various buses described herein may be time multiplexed with other signals and provided over one or more common buses. Additionally, the interconnection between circuit components or blocks may be shown as buses or as single signal lines. Each of the buses may alternatively be one or more single signal lines and each of the single signal lines may alternatively be buses.

Processing device 602 represents one or more general-purpose processing devices such as a microprocessor, central processing unit, or the like. More particularly, the processing device may be complex instruction set computing (CISC) microprocessor, reduced instruction set computer (RISC) microprocessor, very long instruction word (VLIW) microprocessor, or processor implementing other instruction sets, or processors implementing a combination of instruction sets. Processing device 602 may also be one or more special-purpose processing devices such as an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a digital signal processor (DSP), network processor, or the like. The processing device 602 is configured to execute processing logic 626, which may be one example of memory manager 140 shown in FIGS. 1 and 2, or of initiator application 112 or 122, for performing the operations and steps discussed herein.

The data storage device 618 may include a machine-readable storage medium 628, on which is stored one or more set of instructions 622 (e.g., software) embodying any one or more of the methodologies of functions described herein, including instructions to cause the processing device 602 to execute virtual copy logic 140 or initiator application 112 or 122. The instructions 622 may also reside, completely or at least partially, within the main memory 604 and/or within the processing device 602 during execution thereof by the computer system 600; the main memory 604 and the processing device 602 also constituting machine-readable storage media. The instructions 622 may further be transmitted or received over a network 620 via the network interface device 608.

The machine-readable storage medium 628 may also be used to store instructions to perform a method for efficient flash management for multiple controllers, as described herein. While the machine-readable storage medium 628 is shown in an exemplary embodiment to be a single medium, the term “machine-readable storage medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, and/or associated caches and servers) that store the one or more sets of instructions. A machine-readable medium includes any mechanism for storing information in a form (e.g., software, processing application) readable by a machine (e.g., a computer). The machine-readable medium may include, but is not limited to, magnetic storage medium (e.g., floppy diskette); optical storage medium (e.g., CD-ROM); magneto-optical storage medium; read-only memory (ROM); random-access memory (RAM); erasable programmable memory (e.g., EPROM and EEPROM); flash memory; or another type of medium suitable for storing electronic instructions.

The preceding description sets forth numerous specific details such as examples of specific systems, components, methods, and so forth, in order to provide a good understanding of several embodiments of the present disclosure. It will be apparent to one skilled in the art, however, that at least some embodiments of the present disclosure may be practiced without these specific details. In other instances, well-known components or methods are not described in detail or are presented in simple block diagram format in order to avoid unnecessarily obscuring the present disclosure. Thus, the specific details set forth are merely exemplary. Particular embodiments may vary from these exemplary details and still be contemplated to be within the scope of the present disclosure.

In situations in which the systems discussed herein collect personal information about users, or may make use of personal information, the users may be provided with an opportunity to control whether programs or features collect user information (e.g., information about a user's social network, social actions or activities, profession, a user's preferences, or a user's current location), or to control whether and/or how to receive content from the media server that may be more relevant to the user. In addition, certain data may be treated in one or more ways before it is stored or used, so that personally identifiable information is removed. For example, a user's identity may be treated so that no personally identifiable information can be determined for the user, or a user's geographic location may be generalized where location information is obtained (such as to a city, ZIP code, or state level), so that a particular location of a user cannot be determined. Thus, the user may have control over how information is collected about the user and used by the web server or media server.

Reference throughout this specification to “one embodiment” or “an embodiment” means that a particular feature, structure, or characteristic described in connection with the embodiments included in at least one embodiment. Thus, the appearances of the phrase “in one embodiment” or “in an embodiment” in various places throughout this specification are not necessarily all referring to the same embodiment. In addition, the term “or” is intended to mean an inclusive “or” rather than an exclusive “or.”

Although the operations of the methods herein are shown and described in a particular order, the order of the operations of each method may be altered so that certain operations may be performed in an inverse order or so that certain operation may be performed, at least in part, concurrently with other operations. In another embodiment, instructions or sub-operations of distinct operations may be in an intermittent and/or alternating manner.

Vachharajani, Neil Buda, Seppanen, Eric D., Doshi, Nidhi Pankaj

Patent Priority Assignee Title
Patent Priority Assignee Title
10007457, Dec 22 2015 Pure Storage, Inc.; Pure Storage, Inc Distributed transactions with token-associated execution
10013177, Apr 20 2015 Hewlett Packard Enterprise Development LP Low write amplification in solid state drive
10013311, Jan 17 2014 NetApp, Inc. File system driven raid rebuild technique
10019314, Apr 27 2016 SILICON MOTION INC. Flash memory apparatus and storage management method for flash memory
10019317, Apr 25 2016 NEXENTA BY DDN, INC Parity protection for data chunks in an object storage system
10031703, Dec 31 2013 EMC Corporation Extent-based tiering for virtual storage using full LUNs
10061512, Oct 07 2016 Silicon Motion, Inc. Data storage device and data writing method thereof
10073626, Mar 15 2013 SanDisk Technologies, Inc Managing the write performance of an asymmetric memory system
10082985, Mar 27 2015 Pure Storage, Inc. Data striping across storage nodes that are assigned to multiple logical arrays
10089012, Jun 25 2015 EMC IP HOLDING COMPANY LLC Zero on demand operations based on zeroed chunk tables of storage drive objects stored in main memory
10089174, Aug 10 2015 SILICON MOTION INC Flash memory controller and memory device for accessing flash memory module, and associated method
10089176, Jul 01 2015 Amazon Technologies, Inc Incremental updates of grid encoded data storage systems
10108819, Jul 01 2015 Amazon Technologies, Inc Cross-datacenter extension of grid encoded data storage systems
10146787, Jul 26 2013 QUEST SOFTWARE INC F K A DELL SOFTWARE INC ; Aventail LLC Transferring differences between chunks during replication
10152268, Mar 30 2016 EMC Corporation System and methods for replication resource management in asymmetric secure multi-tenancy deployments in protection storage
10157098, Apr 27 2016 SILICON MOTION INC. Flash memory apparatus and storage management method for flash memory
10162704, Jul 01 2015 Amazon Technologies, Inc Grid encoded data storage systems for efficient data repair
10180875, Jul 08 2016 Kioxia Corporation Pool-level solid state drive error correction
10185730, Dec 31 2014 NEXENTA BY DDN, INC Methods and systems for key-value-tuple-encoded storage
10235065, Dec 11 2014 Pure Storage, Inc. Datasheet replication in a cloud computing environment
10324639, Mar 14 2016 Samsung Electronics Co., Ltd. Data storage device having multiple solid state drives for data duplication, and data processing system including the same
10481798, Oct 28 2016 Pure Storage, Inc.; Pure Storage, Inc Efficient flash management for multiple controllers
10567406, Aug 16 2016 International Business Machines Corporation Cloud computing environment activity monitoring
10846137, Jan 12 2018 ROBIN SYSTEMS, INC Dynamic adjustment of application resources in a distributed computing system
10877683, Apr 09 2019 International Business Machines Corporation Tiered storage optimization and migration
11076509, Jan 24 2017 The Research Foundation for The State University of New York; Research Foundation for the State University of New York Control systems and prediction methods for it cooling performance in containment
11106810, Jul 30 2018 EMC IP HOLDING COMPANY LLC Multi-tenant deduplication with non-trusted storage system
11119657, Oct 28 2016 Pure Storage, Inc. Dynamic access in flash system
11194707, Jun 11 2010 California Institute of Technology Systems and methods for rapid processing and storage of data
5390327, Jun 29 1993 HEWLETT-PACKARD DEVELOPMENT COMPANY, L P Method for on-line reorganization of the data on a RAID-4 or RAID-5 array in the absence of one disk and the on-line restoration of a replacement disk
5450581, Apr 30 1992 International Business Machines Corporation System for copying from one database management system to another by translating authorization statements
5479653, Jul 14 1994 PURE FLASH INC Disk array apparatus and method which supports compound raid configurations and spareless hot sparing
5488731, Aug 03 1992 International Business Machines Corporation Synchronization method for loosely coupled arrays of redundant disk drives
5504858, Jun 29 1993 HEWLETT-PACKARD DEVELOPMENT COMPANY, L P Method and apparatus for preserving data integrity in a multiple disk raid organized storage system
5564113, Apr 30 1992 International Business Machines Corporation Computer program product for rendering relational database management system differences transparent
5574882, Mar 03 1995 International Business Machines Corporation System and method for identifying inconsistent parity in an array of storage
5649093, May 22 1995 PURE FLASH INC Server disk error recovery system
5883909, Nov 06 1996 AVAGO TECHNOLOGIES GENERAL IP SINGAPORE PTE LTD Method and apparatus for reducing data transfers across a memory bus of a disk array controller
6000010, May 09 1997 Unisys Corporation Method of increasing the storage capacity of a level five RAID disk array by adding, in a single step, a new parity block and N--1 new data blocks which respectively reside in a new columns, where N is at least two
6260156, Dec 04 1998 DATALIGHT, INC Method and system for managing bad areas in flash memory
6269453, Jun 29 1993 Hewlett Packard Enterprise Development LP Method for reorganizing the data on a RAID-4 or RAID-5 array in the absence of one disk
6275898, May 13 1999 AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED Methods and structure for RAID level migration within a logical unit
6453428, Jul 17 1998 PMC-SIERRA, INC Dual-drive fault tolerant method and system for assigning data chunks to column parity sets
6523087, Mar 06 2001 DOT HILL SYSTEMS CORP Utilizing parity caching and parity logging while closing the RAID5 write hole
6535417, Jul 31 2000 Renesas Electronics Corporation Semiconductor storage device
6643748, Apr 20 2000 Microsoft Technology Licensing, LLC Programmatic masking of storage units
6725392, Mar 03 1999 PMC-SIERRA, INC Controller fault recovery system for a distributed file system
6763455, Feb 10 2000 Fujitsu Services Limited Masking logical unit numbers in a shared data storage system
6836816, Mar 28 2001 INTEL NDTM US LLC Flash memory low-latency cache
6985995, Mar 29 2002 Panasas, Inc Data file migration from a mirrored RAID to a non-mirrored XOR-based RAID without rewriting the data
7032125, Apr 25 2002 AVAGO TECHNOLOGIES GENERAL IP SINGAPORE PTE LTD Method for loosely coupling metadata and data in a storage array
7047358, Dec 26 2001 BOON STORAGE TECHNOLOGIES, INC High-performance log-structured RAID
7051155, Aug 05 2002 Oracle America, Inc Method and system for striping data to accommodate integrity metadata
7055058, Dec 26 2001 BOON STORAGE TECHNOLOGIES, INC Self-healing log-structured RAID
7065617, Jul 31 2000 Microsoft Technology Licensing, LLC Efficient write-watch mechanism useful for garbage collection in a computer system
7069383, Apr 08 1996 Hitachi, Ltd. Apparatus and method for reallocating logical to physical disk devices using a storage controller, with access frequency and sequential access ratio calculations and display
7076606, Sep 20 2002 Quantum Corporation Accelerated RAID with rewind capability
7107480, Dec 22 2000 INNOVATIVE MEMORY SYSTEMS, INC System and method for preventing data corruption in solid-state memory devices after a power failure
7159150, Dec 31 2002 LinkedIn Corporation Distributed storage system capable of restoring data in case of a storage failure
7162575, Dec 20 2002 Veritas Technologies LLC Adaptive implementation of requested capabilities for a logical volume
7164608, Feb 11 2005 ABEDNEJA ASSETS AG L L C NVRAM memory cell architecture that integrates conventional SRAM and flash cells
7188270, Nov 21 2002 PMC-SIERRA, INC Method and system for a disk fault tolerance in a disk array using rotating parity
7334156, Feb 13 2004 Tandberg Data Corporation Method and apparatus for RAID conversion
7370220, Dec 26 2003 Oracle America, Inc Method and apparatus for controlling power sequencing of a plurality of electrical/electronic devices
7386666, Sep 30 2005 EMC IP HOLDING COMPANY LLC Global sparing of storage capacity across multiple storage arrays
7398285, Jul 30 2003 ServiceNow, Inc Apparatus and system for asynchronous replication of a hierarchically-indexed data store
7424498, Jun 30 2003 EMC IP HOLDING COMPANY LLC Probabilistic summary data structure based encoding for garbage collection
7424592, Jul 30 2004 Veritas Technologies LLC System and method for implementing volume sets in a storage system
7444532, Dec 03 2001 Dell Products L.P.; Dell Products L P System and method for autonomous power sequencing
7480658, Jul 14 2004 Skype Limited Distributed database system and method having nodes co-ordinated in a decentralized manner
7484056, Jun 29 2006 EMC IP HOLDING COMPANY LLC Partitioning of a storage array into N-storage arrays using full array non-disruptive data migration
7484057, Jun 29 2006 EMC IP HOLDING COMPANY LLC Consolidating N-storage arrays into one storage array using full array non-disruptive data migration
7484059, Jun 29 2006 EMC IP HOLDING COMPANY LLC Full array non-disruptive migration of extended storage functionality
7536506, Jun 21 2004 Dot Hill Systems Corporation RAID controller using capacitor energy source to flush volatile cache data to non-volatile memory during main power outage
7558859, Oct 17 2005 Microsoft Technology Licensing, LLC Peer-to-peer auction based data distribution
7565446, Aug 27 2007 Innovations In Memory LLC Method for efficient delivery of clustered data via adaptive TCP connection migration
7613947, Nov 30 2006 NetApp, Inc System and method for storage takeover
7634617, Jan 03 2006 EMC IP HOLDING COMPANY LLC Methods, systems, and computer program products for optimized copying of logical units (LUNs) in a redundant array of inexpensive disks (RAID) environment using buffers that are larger than LUN delta map chunks
7634618, Jan 03 2006 EMC IP HOLDING COMPANY LLC Methods, systems, and computer program products for optimized copying of logical units (LUNs) in a redundant array of inexpensive disks (RAID) environment using buffers that are smaller than LUN delta map chunks
7681104, Aug 09 2004 QUEST SOFTWARE INC F K A DELL SOFTWARE INC ; Aventail LLC Method for erasure coding data across a plurality of data stores in a network
7681105, Aug 09 2004 QUEST SOFTWARE INC F K A DELL SOFTWARE INC ; Aventail LLC Method for lock-free clustered erasure coding and recovery of data across a plurality of data stores in a network
7681109, Oct 13 2005 Ramot at Tel Aviv University Ltd. Method of error correction in MBC flash memory
7730257, Dec 16 2004 AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED Method and computer program product to increase I/O write performance in a redundant array
7730258, Nov 01 2005 Network Appliance, Inc System and method for managing hard and soft lock state information in a distributed storage system environment
7730274, Aug 30 2005 Veritas Technologies LLC Preventing undesired trespass in storage arrays
7743276, Sep 27 2006 Hewlett Packard Enterprise Development LP Sufficient free space for redundancy recovery within a distributed data-storage system
7752489, May 10 2007 International Business Machines Corporation Data integrity validation in storage systems
7757038, Oct 20 2006 Hitachi, Ltd. Storage device and storing method
7757059, Jun 29 2006 EMC IP HOLDING COMPANY LLC Virtual array non-disruptive management data migration
7778960, Oct 20 2005 AMZETTA TECHNOLOGIES, LLC, Background movement of data between nodes in a storage cluster
7783955, Jan 18 2006 Western Digital Israel Ltd Method for implementing error-correction codes in flash memory
7814272, Nov 05 2004 STORCENTRIC DIP LENDER, LLC Dynamically upgradeable fault-tolerant storage system permitting variously sized storage devices and method
7814273, Nov 05 2004 STORCENTRIC DIP LENDER, LLC Dynamically expandable and contractible fault-tolerant storage system permitting variously sized storage devices and method
7818531, Nov 05 2004 STORCENTRIC DIP LENDER, LLC Storage system condition indicator and method
7827351, Jul 31 2007 Hitachi, Ltd. Storage system having RAID level changing function
7827439, Sep 28 2007 Veritas Technologies LLC System and method of redundantly storing and retrieving data with cooperating storage devices
7831768, Nov 03 2006 VALTRUS INNOVATIONS LIMITED Method and apparatus for writing data to a disk array
7856583, Sep 16 2005 SILICON VALLEY BANK, AS ADMINISTRATIVE AGENT Techniques for enhanced reliability of data transfer with dynamic scaling
7870105, Nov 20 2007 Hitachi, Ltd.; Hitachi, LTD Methods and apparatus for deduplication in storage system
7873878, Sep 24 2007 AVAGO TECHNOLOGIES GENERAL IP SINGAPORE PTE LTD Data integrity validation in storage systems
7885938, Feb 27 2008 Veritas Technologies LLC Techniques for granular recovery of data from local and remote storage
7886111, May 24 2006 DELL INTERNATIONAL L L C System and method for raid management, reallocation, and restriping
7908448, Jan 30 2007 AMZETTA TECHNOLOGIES, LLC, Maintaining data consistency in mirrored cluster storage systems with write-back cache
7916538, Jan 28 2008 Samsung Electronics Co., Ltd. Memory device employing NVRAM and flash memory cells
7921268, Jul 12 2007 Seagate Technology LLC Method and system for function-specific time-configurable replication of data
7930499, Aug 15 2007 Digi-Data Corporation Method to accelerate block level snapshots in archiving storage systems
7941697, Dec 30 2008 Veritas Technologies LLC Failure handling using overlay objects on a file system using object based storage devices
7958303, Apr 27 2007 STRIPE, INC Flexible data storage system
7971129, May 10 2006 Qualcomm Incorporated Code generator and decoder for communications systems operating using hybrid codes to allow for multiple efficient users of the communications systems
7975115, Apr 11 2007 Dot Hill Systems Corporation Method and apparatus for separating snapshot preserved and write data
7984016, Jul 30 2003 ServiceNow, Inc Method for asynchronous replication of a hierarchically-indexed data store
7991822, Aug 29 2007 International Business Machines Corporation Propagation of updates for attributes of a storage object from an owner node of the storage object to other nodes
8006126, May 10 2007 International Business Machines Corporation Data integrity validation in storage systems
8010485, Oct 20 2005 AMZETTA TECHNOLOGIES, LLC, Background movement of data between nodes in a storage cluster
8010829, Oct 20 2005 AMZETTA TECHNOLOGIES, LLC, Distributed hot-spare storage in a storage cluster
8020047, Jan 17 2006 Xyratex Technology Limited Method and apparatus for managing storage of data
8046548, Jan 30 2007 AMZETTA TECHNOLOGIES, LLC, Maintaining data consistency in mirrored cluster storage systems using bitmap write-intent logging
8051361, Aug 09 2004 QUEST SOFTWARE INC F K A DELL SOFTWARE INC ; Aventail LLC Method for lock-free clustered erasure coding and recovery of data across a plurality of data stores in a network
8051362, Jun 15 2007 Microsoft Technology Licensing, LLC Distributed data storage using erasure resilient coding
8074038, May 12 2009 Microsoft Technology Licensing, LLC Converting luns into files or files into luns in real time
8082393, Jun 06 2008 PIVOT3 Method and system for rebuilding data in a distributed RAID system
8086603, Dec 21 2007 NetApp, Inc. Using LUN type for storage allocation
8086634, Oct 07 2008 Hitachi, Ltd. Method and apparatus for improving file access performance of distributed storage system
8086911, Oct 29 2008 NetApp, Inc Method and apparatus for distributed reconstruct in a raid system
8090837, May 27 2004 Hewlett Packard Enterprise Development LP Communication in multiprocessor using proxy sockets
8108502, Jul 24 2008 Quantum Corporation Storage device for use in a shared community storage network
8117388, Apr 30 2009 NetApp, Inc. Data distribution through capacity leveling in a striped file system
8117521, Aug 26 2008 VALLEY DEVICE MANAGEMENT Implementation of recycling unused ECC parity bits during flash memory programming
8140821, Dec 18 2009 EMC IP HOLDING COMPANY LLC Efficient read/write algorithms and associated mapping for block-level data reduction processes
8145838, Mar 10 2009 NetApp, Inc. Processing and distributing write logs of nodes of a cluster storage system
8145840, Jun 05 2009 AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED Method and system for storing excess data in a redundant array of independent disk level 6
8175012, Mar 26 2009 MEDIATEK INC. Decoding/encoding method for booting from a NAND flash and system thereof
8176360, Aug 11 2009 International Business Machines Corporation Method and apparatus for addressing actual or predicted failures in a FLASH-based storage system
8176405, Sep 24 2007 AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED Data integrity validation in a computing environment
8180855, Jan 27 2005 NetApp, Inc Coordinated shared storage architecture
8200922, Dec 17 2008 NetApp, Inc Storage system snapshot assisted by SSD technology
8209469, Mar 10 2009 Microsoft Technology Licensing, LLC Offline device-side logical unit number controller
8225006, Aug 30 2007 Western Digital Technologies, INC Methods for data redundancy across three or more storage devices
8239618, May 27 2010 Dell Products L.P. System and method for emulating preconditioning of solid-state device
8244999, Jan 30 2007 AMZETTA TECHNOLOGIES, LLC, Maintaining data consistency in mirrored cluster storage systems with write-back cache
8261016, Apr 24 2009 NetApp, Inc. Method and system for balancing reconstruction load in a storage array using a scalable parity declustered layout
8271455, Feb 09 2010 GOOGLE LLC Storing replication requests for objects in a distributed storage system
8285686, Feb 09 2010 GOOGLE LLC Executing prioritized replication requests for objects in a distributed storage system
8305811, Jun 19 2009 Samsung Electronics Co., Ltd. Flash memory device and method of reading data
8315999, Aug 29 2007 Oracle International Corporation Policy-based file management for a storage delivery network
8327080, Sep 28 2010 EMC IP HOLDING COMPANY LLC Write-back cache protection
8335769, Feb 09 2010 GOOGLE LLC Executing replication requests for objects in a distributed storage system
8341118, Feb 09 2010 GOOGLE LLC Method and system for dynamically replicating data within a distributed storage system
8351290, Sep 12 2008 CAVIUM INTERNATIONAL; MARVELL ASIA PTE, LTD Erased page detection
8364920, Apr 06 2009 NetApp, Inc System and method for transferring and backing up luns and lun clones on primary and secondary servers
8365041, Mar 17 2010 SanDisk Technologies LLC MLC self-raid flash data protection scheme
8375146, Aug 09 2004 SanDisk Technologies LLC Ring bus structure and its use in flash memory systems
8397016, Dec 31 2008 Innovations In Memory LLC Efficient use of hybrid media in cache architectures
8402152, Aug 13 2007 DIGITAL KIVA, INC Apparatus and system for object-based storage solid-state drive
8412880, Jan 08 2009 U S BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT Memory system controller to manage wear leveling across a plurality of storage nodes
8423739, Feb 06 2008 International Business Machines Corporation Apparatus, system, and method for relocating logical array hot spots
8429436, Sep 09 2009 SanDisk Technologies LLC Apparatus, system, and method for power reduction in a storage device
8452928, Jun 29 2006 EMC IP HOLDING COMPANY LLC Virtual array non-disruptive migration of extended storage functionality
8473698, May 12 2009 Microsoft Technology Licensing, LLC Converting LUNs into files or files into LUNs in real
8473778, Sep 08 2010 Microsoft Technology Licensing, LLC Erasure coding immutable data
8473815, Dec 22 2008 Industrial Technology Research Institute Methods and systems of a flash memory controller and an error correction code (ECC) controller using variable-length segmented ECC data
8479037, Oct 20 2005 AMZETTA TECHNOLOGIES, LLC, Distributed hot-spare storage in a storage cluster
8484414, Aug 31 2009 Hitachi, LTD Storage system having plurality of flash packages
8498967, Jan 30 2007 AMZETTA TECHNOLOGIES, LLC, Two-node high availability cluster storage solution using an intelligent initiator to avoid split brain syndrome
8504797, Jun 02 2009 Hitachi, Ltd. Method and apparatus for managing thin provisioning volume by using file storage system
8522073, Feb 03 2009 BITTORRENT, INC Distributed storage of recoverable data
8533408, Jun 29 2006 EMC IP HOLDING COMPANY LLC Consolidating N-storage arrays into one storage array using virtual array non-disruptive data migration
8533527, Jun 13 2007 Fujitsu Limited Raid-group converting apparatus and method
8539177, Jun 29 2006 EMC IP HOLDING COMPANY LLC Partitioning of a storage array into N-storage arrays using virtual array non-disruptive data migration
8544029, May 24 2011 International Business Machines Corporation Implementing storage adapter performance optimization with chained hardware operations minimizing hardware/firmware interactions
8549224, Dec 16 2009 EMC IP HOLDING COMPANY LLC Migration analyzer for hardware-based storage tiering
8583861, Jun 29 2006 EMC IP HOLDING COMPANY LLC Presentation of management functionality of virtual arrays
8589625, Sep 15 2010 Pure Storage, Inc.; Pure Storage, Inc Scheduling of reconstructive I/O read operations in a storage environment
8595455, Jan 30 2007 AMZETTA TECHNOLOGIES, LLC, Maintaining data consistency in mirrored cluster storage systems using bitmap write-intent logging
8615599, Mar 31 2006 Cisco Technology, Inc Method and apparatus for preventing loops in a network by controlling broadcasts
8627136, Dec 27 2010 NetApp, Inc Non-disruptive failover of RDMA connection
8627138, Mar 26 2010 EMC IP HOLDING COMPANY LLC Data protection system and method
8639669, Dec 22 2011 EMC IP HOLDING COMPANY LLC Method and apparatus for determining optimal chunk sizes of a deduplicated storage system
8639863, Aug 30 2007 SanDisk Technologies, Inc Memory apparatus for replaceable non-volatile memory
8640000, Jun 16 2010 GOOGLE LLC Nested coding techniques for data storage
8650343, Aug 30 2007 SanDisk Technologies, Inc Methods for upgrading, diagnosing, and maintaining replaceable non-volatile memory
8660131, Jun 09 2005 MORGAN STANLEY SENIOR FUNDING, INC Storage unit for communication system node, method for data storage and communication system node
8661218, Oct 18 2007 DataDirect Networks, Inc.; DATADIRECT NETWORKS, INC Method for reducing latency in a solid-state memory system while maintaining data integrity
8671072, Sep 14 2009 NetApp, Inc System and method for hijacking inodes based on replication operations received in an arbitrary order
8689042, Aug 30 2007 SanDisk Technologies, Inc Methods for data redundancy across replaceable non-volatile memory storage devices
8700875, Sep 20 2011 NetApp, Inc.; NetApp, Inc Cluster view for storage devices
8706694, Jul 15 2008 AMZETTA TECHNOLOGIES, LLC, Continuous data protection of files stored on a remote storage device
8706914, Apr 23 2007 Computing infrastructure
8706932, Aug 30 2007 SanDisk Technologies, Inc Replaceable non-volatile memory apparatus with a plurality of pluggable electrical connectors
8712963, Dec 22 2011 EMC IP HOLDING COMPANY LLC Method and apparatus for content-aware resizing of data chunks for replication
8713405, Nov 22 2011 Hewlett Packard Enterprise Development LP Method and apparatus for allocating erasure coded data to disk storage
8719621, May 05 2010 CAVIUM INTERNATIONAL; MARVELL ASIA PTE, LTD Solid-state disk cache assisted redundant array of independent disks
8725730, May 23 2011 Hewlett Packard Enterprise Development LP Responding to a query in a data processing system
8751859, May 10 2007 International Business Machines Corporation Monitoring lost data in a storage system
8756387, Mar 05 2010 International Business Machines Corporation Method and apparatus for optimizing the performance of a storage system
8762793, Aug 26 2010 Pure Storage, Inc Migrating encoded data slices from a re-provisioned memory device of a dispersed storage network memory
8769232, Apr 06 2011 SanDisk Technologies, Inc Non-volatile semiconductor memory module enabling out of order host command chunk media access
8775858, Jun 24 2010 GLOBALFOUNDRIES U S INC Heterogeneous recovery in a redundant memory system
8775868, Sep 28 2010 Pure Storage, Inc.; Pure Storage, Inc Adaptive RAID for an SSD environment
8788913, Dec 30 2011 EMC IP HOLDING COMPANY LLC Selection of erasure code parameters for no data repair
8793447, Mar 30 2010 NetApp, Inc.; Network Appliance, Inc Restoration of a parent LUN through modification of a read-write clone LUN as the parent LUN
8799746, Jun 13 2012 DataCore Software Corporation Erasure coding and replication in storage clusters
8819311, May 23 2007 RPX Corporation Universal user input/output application layers
8819383, Feb 17 2012 NetApp, Inc. Non-disruptive realignment of virtual data
8822155, Oct 28 2003 The Johns Hopkins University Quantitative multiplex methylation-specific PCR
8824261, Mar 07 2013 Seagate Technology LLC Peer to peer vibration mitigation
8832528, May 18 2009 Unification Technologies LLC Apparatus, system, and method to increase data integrity in a redundant storage system
8838541, Oct 25 2007 Hewlett Packard Enterprise Development LP Data processing apparatus and method of processing data
8838892, Dec 28 2012 Huawei Technologies Co., Ltd. Data storage method and storage device
8843700, Nov 29 2013 NGD SYSTEMS, INC Power efficient method for cold storage data retention management
8850108, Jun 04 2014 Pure Storage, Inc. Storage cluster
8850288, Jun 27 2012 Amazon Technologies, Inc Throughput-sensitive redundancy encoding schemes for data storage
8856593, Apr 12 2011 SanDisk Technologies LLC Failure recovery using consensus replication in a distributed flash memory system
8856619, Mar 09 2012 GOOGLE LLC Storing data across groups of storage nodes
8862617, Feb 09 2010 GOOGLE LLC System and method for replicating objects in a distributed storage system
8862847, Feb 08 2013 Huawei Technologies Co., Ltd. Distributed storage method, apparatus, and system for reducing a data loss that may result from a single-point failure
8862928, Sep 20 2011 CloudByte, Inc.; CLOUDBYTE, INC Techniques for achieving high availability with multi-tenant storage when a partial fault occurs or when more than two complete faults occur
8868825, Jul 02 2014 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
8874836, Jul 03 2014 Pure Storage, Inc. Scheduling policy for queues in a non-volatile solid-state storage
8880793, Apr 08 2011 Veritas Technologies LLC Storage management systems and methods
8880825, May 12 2009 Microsoft Technology Licensing, LLC Converting LUNs into files or files into LUNs in real time
8886778, Apr 29 2005 NetApp, Inc System and method for proxying network management protocol commands to enable cluster wide management of data backups
8898383, Apr 08 1996 Hitachi, Ltd. Apparatus for reallocating logical to physical disk devices using a storage controller and method of the same
8898388, Jan 08 2014 NetApp, Inc. NVRAM caching and logging in a storage system
8904231, Aug 08 2012 NetApp, Inc Synchronous local and cross-site failover in clustered storage systems
8918478, Jul 31 2009 Microsoft Technology Licensing, LLC Erasure coded storage aggregation in data centers
8930307, Sep 30 2011 Pure Storage, Inc.; Pure Storage, Inc Method for removing duplicate data from a storage array
8930633, Jun 14 2012 International Business Machines Corporation Reducing read latency using a pool of processing cores
8943357, Oct 27 2008 KAMINARIO TECHNOLOGIES LTD System and methods for RAID writing and asynchronous parity computation
8949502, Nov 18 2010 Hewlett Packard Enterprise Development LP PCIe NVRAM card based on NVDIMM
8959110, Sep 18 2011 Microsoft Technology Licensing, LLC Dynamic query for external data connections
8959388, Dec 28 2012 EMC IP HOLDING COMPANY LLC Managing TLU recovery using pre-allocated LUN slices
8972478, May 23 2012 NetApp, Inc. Using append only log format in data storage cluster with distributed zones for determining parity of reliability groups
8972779, Dec 08 2010 Electronics and Telecommunications Research Institute Method of calculating parity in asymetric clustering file system
8977597, May 21 2008 Oracle International Corporation Generating and applying redo records
8996828, Apr 20 2012 International Business Machines Corporation Systems and methods for migrating data
9003144, Jun 04 2014 Pure Storage, Inc. Mechanism for persisting messages in a storage system
9009724, Sep 24 2010 Hewlett Packard Enterprise Development LP Load balancing data access in virtualized storage nodes
9021053, Sep 02 2011 Compuverde AB Method and device for writing data to a data storage system comprising a plurality of data storage nodes
9021215, Mar 14 2012 Apple Inc Storage system exporting internal storage rules
9025393, Mar 25 2013 Seagate Technology LLC Method of optimizing solid state drive soft retry voltages
9043372, Dec 08 2009 NetApp, Inc Metadata subsystem for a distributed object store in a network storage system
9047214, May 22 2012 IP GEM GROUP, LLC System and method for tolerating a failed page in a flash device
9053808, Jun 21 2012 SanDisk Technologies LLC Flash memory with targeted read scrub algorithm
9058155, Jun 19 2009 Hewlett Packard Enterprise Development LP Enclosure power controller providing plurality of power control signals to plurality of removable compute nodes based on a duty cycle of each power control signal
9063895, Jun 29 2007 EMC IP HOLDING COMPANY LLC System and method of non-disruptive data migration between heterogeneous storage arrays
9063896, Jun 29 2007 EMC IP HOLDING COMPANY LLC System and method of non-disruptive data migration between virtual arrays of heterogeneous storage arrays
9098211, Jun 29 2007 EMC IP HOLDING COMPANY LLC System and method of non-disruptive data migration between a full storage array and one or more virtual arrays
9110898, Dec 20 2012 EMC IP HOLDING COMPANY LLC Method and apparatus for automatically detecting replication performance degradation
9110964, Mar 05 2013 EMC IP HOLDING COMPANY LLC Metadata optimization for network replication using differential encoding
9116819, Oct 17 2012 DataDirect Networks, Inc.; DATADIRECT NETWORKS, INC Reducing metadata in a write-anywhere storage system
9117536, Dec 05 2012 Samsung Electronics Co., Ltd. Method for operating non-volatile memory device and memory controller
9122401, Aug 23 2012 Apple Inc.; Apple Inc Efficient enforcement of command execution order in solid state drives
9123422, Jul 02 2012 SUPER TALENT TECHNOLOGY, CORP Endurance and retention flash controller with programmable binary-levels-per-cell bits identifying pages or blocks as having triple, multi, or single-level flash-memory cells
9124300, Feb 28 2013 SanDisk Technologies LLC Error correction coding in non-volatile memory
9134908, Jan 09 2013 Apple Inc Logical volume space sharing
9153337, Dec 11 2006 MARVELL INTERNATIONAL LTD; CAVIUM INTERNATIONAL; MARVELL ASIA PTE, LTD Fatigue management system and method for hybrid nonvolatile solid state memory system
9158472, Dec 27 2013 GOOGLE LLC Hierarchical chunking of objects in a distributed storage system
9159422, Apr 12 2011 SK HYNIX MEMORY SOLUTIONS INC Cross page management to avoid NAND physical page size limitation
9164891, Mar 15 2013 SanDisk Technologies, Inc Managing the write performance of an asymmetric memory system
9183136, May 16 2012 Hitachi, Ltd. Storage control apparatus and storage control method
9189650, Jul 31 2012 J D POWER Privacy preserving method for summarizing user data
9201733, Mar 13 2013 FUTUREWEI TECHNOLOGIES, INC Systems and methods for data repair
9207876, Apr 19 2007 Microsoft Technology Licensing, LLC Remove-on-delete technologies for solid state drive optimization
9229656, Jun 28 2012 EMC IP HOLDING COMPANY LLC Managing settings and queries in host-based data migration
9229810, Jul 31 2012 International Business Machines Corporation Enabling efficient recovery from multiple failures together with one latent error in a storage array
9235475, Mar 05 2013 EMC IP HOLDING COMPANY LLC Metadata optimization for network replication using representative of metadata batch
9244626, Sep 14 2009 NetApp, Inc. System and method for hijacking inodes based on replication operations received in an arbitrary order
9250999, Nov 19 2013 GOOGLE LLC Non-volatile random access memory in computer primary memory
9251066, Aug 11 2011 Pure Storage, Inc. Garbage collection in a storage system
9268648, Jul 28 2015 Hewlett Packard Enterprise Development LP System and method for consistency verification of replicated data in a recovery system
9268806, Jul 26 2013 GOOGLE LLC Efficient reference counting in content addressable storage
9280678, Dec 02 2013 Fortinet, INC Secure cloud storage distribution and aggregation
9286002, Dec 28 2012 SanDisk Technologies, Inc Dynamic restriping in nonvolatile memory systems
9292214, Apr 20 2012 International Business Machines Corporation Systems and methods for migrating data
9298760, Aug 03 2012 GOOGLE LLC Method for shard assignment in a large-scale data processing job
9304908, Mar 15 2013 SanDisk Technologies, Inc Small block write operations in non-volatile memory systems
9311969, Jul 22 2011 SanDisk Technologies LLC Systems and methods of storing data
9311970, Jul 22 2011 SanDisk Technologies LLC Systems and methods of storing data
9323663, Mar 15 2013 SanDisk Technologies, Inc Managing the write performance of an asymmetric memory system
9323667, Apr 12 2012 Innovations In Memory LLC System and method for managing trim operations in a flash memory system using mapping tables and block status tables
9323681, Sep 18 2008 Microsoft Technology Licensing, LLC File storage system, cache appliance, and method
9335942, Apr 18 2012 AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED Methods and structure for LUN masking in a switching device
9348538, Oct 18 2012 NetApp, Inc. Selective deduplication
9355022, Dec 07 2012 SanDisk Technologies LLC Systems and methods for intelligent flash management
9384082, Oct 23 2015 Pure Storage, Inc. Proactively providing corrective measures for storage arrays
9384252, Jun 05 2012 International Business Machines Corporation User initiated replication in a synchronized object replication system
9389958, Jan 17 2014 NetApp, Inc. File system driven raid rebuild technique
9390019, Feb 28 2006 Innovations In Memory LLC Method and apparatus for providing high-performance and highly-scalable storage acceleration
9395922, Jan 10 2014 Hitachi, LTD Information system and I/O processing method
9396202, Dec 27 2013 GOOGLE LLC Weakly synchronized garbage collection and compaction for aggregated, replicated object stores
9400828, Dec 27 2013 GOOGLE LLC Hierarchical chunking of objects in a distributed storage system
9405478, Feb 08 2012 Hitachi, Ltd. Storage apparatus provided with a plurality of nonvolatile semiconductor storage media and storage control method
9411685, Nov 27 2013 Electronics and Telecommunications Research Institute Parity chunk operating method and data server apparatus for supporting the same in distributed raid system
9417960, Dec 20 2013 Seagate Technology LLC Preventing programming errors from occurring when programming flash memory cells
9417963, Jul 31 2012 International Business Machines Corporation Enabling efficient recovery from multiple failures together with one latent error in a storage array
9430250, Dec 03 2012 Kingston Digital, Inc Bootability with multiple logical unit numbers
9430542, Jun 05 2012 International Business Machines Corporation User initiated replication in a synchronized object replication system
9432541, Jul 04 2014 Canon Kabushiki Kaisha Transfer controlling method, transfer controlling apparatus, and storage medium storing program
9454434, Jan 17 2014 NetApp, Inc.; NetApp, Inc File system driven raid rebuild technique
9471579, Jun 24 2011 EMC IP HOLDING COMPANY LLC Replicating selected snapshots from one storage array to another, with minimal data transmission
9477554, Jun 04 2014 Pure Storage, Inc. Mechanism for persisting messages in a storage system
9477632, May 02 2013 Huawei Technologies Co., Ltd. Access proxy for accessing peripheral component interconnect express endpoint device, PCIe exchanger and computer system
9501398, Dec 26 2012 SanDisk Technologies LLC Persistent storage device with NVRAM for staging writes
9525737, Apr 14 2015 Amazon Technologies, Inc Lockless distributed redundant storage and NVRAM cache in a highly-distributed shared topology with direct memory access capable interconnect
9529542, Apr 14 2015 Amazon Technologies, Inc Lockless distributed redundant storage and NVRAM caching of compressed data in a highly-distributed shared topology with direct memory access capable interconnect
9535631, Aug 26 2013 GLOBALFOUNDRIES Inc Multi-path management
9552248, Dec 11 2014 Pure Storage, Inc.; Pure Storage, Inc Cloud alert to replica
9552291, Jun 17 2014 International Business Machines Corporation Memory management method
9552299, Jun 11 2010 California Institute of Technology Systems and methods for rapid processing and storage of data
9563517, Dec 30 2013 EMC IP HOLDING COMPANY LLC Cloud snapshots
9588698, Mar 15 2013 SanDisk Technologies, Inc Managing the write performance of an asymmetric memory system
9588712, Apr 20 2012 International Business Machines Corporation Systems and methods for migrating data
9594652, Dec 19 2013 Veritas Technologies LLC Systems and methods for decreasing RAID rebuilding time
9600193, Feb 04 2015 Silicon Valley Bank Replicating snapshots from a source storage system to a target storage system
9619321, Oct 08 2015 AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED Internal copy-back with read-verify
9619430, Feb 24 2012 Hewlett Packard Enterprise Development LP Active non-volatile memory post-processing
9645754, Jan 06 2014 International Business Machines Corporation Data duplication that mitigates storage requirements
9667720, Jun 30 2014 EMC IP HOLDING COMPANY LLC Shard reorganization based on dimensional description in sharded storage systems
9710535, Aug 12 2011 NEXENTA BY DDN, INC Object storage system with local transaction logs, a distributed namespace, and optimized support for user directories
9733840, Mar 15 2013 SanDisk Technologies, Inc Managing the write performance of an asymmetric memory system
9734225, Jun 05 2012 International Business Machines Corporation User initiated replication in a synchronized object replication system
9740403, May 23 2012 NetApp, Inc. Methods for managing storage in a data storage cluster with distributed zones based on parity values and devices thereof
9740700, Nov 18 2013 EMC IP HOLDING COMPANY LLC Snapshot map
9740762, Apr 01 2011 MONGODB, INC System and method for optimizing data migration in a partitioned database
9747319, Dec 31 2014 NEXENTA BY DDN, INC Read-modify-write processing of chunks at the storage server level in a distributed object storage system
9747320, Jul 26 2013 GOOGLE LLC Efficient reference counting in content addressable storage
9767130, Dec 31 2014 NEXENTA BY DDN, INC Methods and systems for key sharding of objects stored in distributed storage system
9781227, Apr 14 2015 Amazon Technologies, Inc Lockless distributed redundant storage and NVRAM caching of compressed data in a highly-distributed shared topology with direct memory access capable interconnect
9785498, Apr 29 2011 Tata Consultancy Services Limited Archival storage and retrieval system
9798486, Dec 18 2013 EMC IP HOLDING COMPANY LLC Method and system for file system based replication of a deduplicated storage system
9804925, Feb 25 2014 GOOGLE LLC Data reconstruction in distributed storage systems
9811285, Dec 28 2012 SanDisk Technologies, Inc Dynamic restriping in nonvolatile memory systems
9811546, Jun 30 2014 EMC IP HOLDING COMPANY LLC Storing data and metadata in respective virtual shards on sharded storage systems
9818478, Dec 07 2012 ATTOPSEMI TECHNOLOGY CO , LTD Programmable resistive device and memory using diode as selector
9829066, Apr 07 2014 Gates Corporation Electrically conductive power transmission belt
9836245, Jul 02 2014 Pure Storage, Inc. Non-volatile RAM and flash memory in a non-volatile solid-state storage
9891854, Jun 17 2014 International Business Machines Corporation Memory management method
9891860, Jun 28 2013 EMC Corporation Managing copying of data in storage systems
9892005, May 21 2015 Hewlett Packard Enterprise Development LP System and method for object-based continuous data protection
9892186, Jun 05 2012 International Business Machines Corporation User initiated replication in a synchronized object replication system
9904589, Jul 01 2015 Amazon Technologies, Inc Incremental media size extension for grid encoded data storage systems
9904717, Aug 30 2011 International Business Machines Corporation Replication of data objects from a source server to a target server
9910748, Dec 31 2015 Futurewei Technologies, Inc.; FUTUREWEI TECHNOLOGIES, INC Rebuilding process for storage array
9910904, Aug 30 2011 International Business Machines Corporation Replication of data objects from a source server to a target server
9934237, Mar 05 2013 EMC IP HOLDING COMPANY LLC Metadata optimization for network replication using representative of metadata batch
9940065, Apr 20 2012 International Business Machines Corporation Systems and methods for migrating data
9946604, Feb 04 2015 TINTRI BY DDN, INC Optimized remote cloning
9952809, Nov 01 2013 DELL PRODUCTS, L.P.; DELL PRODUCTS, L P Self destroying LUN
9959167, Jul 01 2015 Amazon Technologies, Inc Rebundling grid encoded data storage systems
9965539, Sep 18 2014 Western Digital Technologies, INC Computer implemented method for dynamic sharding
9998539, Jul 01 2015 Amazon Technologies, Inc Non-parity in grid encoded data storage systems
20020144059,
20030105984,
20030110205,
20040161086,
20050001652,
20050076228,
20050235132,
20050278460,
20050283649,
20060015683,
20060114930,
20060174157,
20060248294,
20070079068,
20070214194,
20070214314,
20070234016,
20070268905,
20080080709,
20080107274,
20080155191,
20080256141,
20080295118,
20090077208,
20090138654,
20090216910,
20090216920,
20100017444,
20100042636,
20100094806,
20100115070,
20100125695,
20100162076,
20100169707,
20100174576,
20100223423,
20100268908,
20100306500,
20110035540,
20110040925,
20110060927,
20110119462,
20110219170,
20110238625,
20110264843,
20110302369,
20120011398,
20120079318,
20120089567,
20120110249,
20120131253,
20120158923,
20120191900,
20120198152,
20120198261,
20120209943,
20120226934,
20120246435,
20120260055,
20120311557,
20130022201,
20130036314,
20130042056,
20130060884,
20130067188,
20130073894,
20130124776,
20130132800,
20130151653,
20130151771,
20130173853,
20130238554,
20130339314,
20130339635,
20130339818,
20140040535,
20140040702,
20140047263,
20140047269,
20140063721,
20140064048,
20140068224,
20140075252,
20140122510,
20140136880,
20140181402,
20140220561,
20140237164,
20140279936,
20140280025,
20140289588,
20140330785,
20140372838,
20140380125,
20140380126,
20150032720,
20150039645,
20150039849,
20150089283,
20150100746,
20150134824,
20150153800,
20150154418,
20150180714,
20150280959,
20160026397,
20160182542,
20160191508,
20160246537,
20160248631,
20160378612,
20170091236,
20170103092,
20170103094,
20170103098,
20170103116,
20170177236,
20170262202,
20180039442,
20180054454,
20180081958,
20180101441,
20180101587,
20180101588,
20180217756,
20180307560,
20180321874,
20190036703,
20190220315,
20200034560,
20200326871,
20210360833,
EP2164006,
EP2256621,
WO213033,
WO2008103569,
WO2008157081,
WO2013032825,
////
Executed onAssignorAssigneeConveyanceFrameReelDoc
Oct 27 2016DOSHI, NIDHI PANKAJPure Storage, IncASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0632490706 pdf
Oct 27 2016VACHHARAJANI, NEIL BUDAPure Storage, IncASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0632490706 pdf
Oct 28 2016SEPPANEN, ERIC D Pure Storage, IncASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0632490706 pdf
Apr 06 2023Pure Storage, Inc.(assignment on the face of the patent)
Date Maintenance Fee Events
Apr 06 2023BIG: Entity status set to Undiscounted (note the period is included in the code).


Date Maintenance Schedule
May 28 20274 years fee payment window open
Nov 28 20276 months grace period start (w surcharge)
May 28 2028patent expiry (for year 4)
May 28 20302 years to revive unintentionally abandoned end. (for year 4)
May 28 20318 years fee payment window open
Nov 28 20316 months grace period start (w surcharge)
May 28 2032patent expiry (for year 8)
May 28 20342 years to revive unintentionally abandoned end. (for year 8)
May 28 203512 years fee payment window open
Nov 28 20356 months grace period start (w surcharge)
May 28 2036patent expiry (for year 12)
May 28 20382 years to revive unintentionally abandoned end. (for year 12)