An erasure resilient coding (ERC) distributed data storage system and method for storing data in a reliable and survivable fashion while minimizing hardware and associated costs. The system and method includes forming multiple protection groups both within and across storage nodes of the storage system. data is segmented into original data blocks and ERC data blocks. Load balancing occurs by interleaving storage nodes with equal numbers of original data blocks and ERC data blocks while ensuring each node has an equal number of combined read and write operations. Unique read and write operations on data block can be performed independent of other data blocks in a protection group. The write operation uses galois field arithmetic and ERC transform to either write or append a new data block to a storage node. The read operation recovers data in a variety of ways using ERC decoding.
|
1. A method for processing an original data piece having a plurality of data blocks in a distributed data storage system, comprising:
forming multiple protection groups within the distributed data storage system such that each of the multiple protection groups contains more than one of the plurality of data blocks; and
writing and reading each of the plurality of data blocks independently of other data blocks in a same multiple protection group to reconstruct any one of the plurality of data blocks on demand.
12. A computer-readable medium having computer-executable instructions for writing a data piece to a multiple protected data blocks contained in storage nodes of a distributed data storage system, comprising:
replacing an old data block with a new data block;
perform a first galois field add operation on the new data block and the old data block to obtain a modified data block;
perform a mathematical transform on the modified data block to generate a transformed data block; and
writing the transformed data block to each of the storage nodes that contained the old data block.
16. A computer-implemented process for reading a data block that is part of an original data piece having a plurality of data blocks, the data block stored on a storage node in a distributed data storage system having multiple protection groups, comprising:
determining whether the data block is live on the storage node;
if the data block is live, then reading the data block from the storage node;
if the data block is not live, then finding one multiple protection group having all the live data blocks of the original data piece; and
decoding each of the live plurality of data blocks using an erasure resilient coding (ERC) decoding process to recover the data block.
2. The method of
3. The method of
4. The method of
forming multiple protection groups within a storage node; and
forming protection groups across storage nodes.
5. The method of
6. The method of
7. The method of
reading out the old data block from each storage node containing the old data block; and
replacing the old data block with the new data block.
8. The method of
performing a first galois field add operation on the new data block and the old data block to obtain a modified data block;
performing a mathematical transform on the modified data block to generate a transformed data block; and
performing a second galois field add operation on the transformed data block and the old data block to write the new data block.
9. The method of
determining whether the data block is alive on its storage node; and
reading directly from the data block from the storage node if it is alive.
10. The method of
determining that the data block is not alive;
determining whether any one of the multiple protection groups contains live plurality of data blocks;
performing a distributed read from a multiple protection group containing all live plurality of data blocks; and
using erasure resilient coding (ERC) decoding to recover the data block.
11. The method of
determining that none of the multiple protection groups contain all live plurality of data blocks; and
performing another type of decoding other than ERC decoding to attempt to recover the data block.
13. The computer-readable medium of
14. The computer-readable medium of
15. The computer-readable medium of
forming protection groups in the distributed data storage system such that the protection groups are formed both across the storage nodes and within storage nodes; and
interleaving the multiple protected data blocks having both original data blocks and ERC data blocks such that each storage node contains a relatively equal number of original data blocks and ERC data blocks.
17. The computer-implemented process of
18. The computer-implemented process of
19. The computer-implemented process of
reading out an old data block from a storage nodes containing the old data block;
replacing the old data fragment with the data block;
performing a first galois field add operation on the data block and the old data fragment to create a modified data block;
performing a mathematical transform on the modified data block to create a transformed data block; and
performing a second galois field add operation on the transformed data block to write the transformed data block to the storage nodes that contained the old data blocks.
20. The computer-implemented process of
forming the multiple protection groups such that protection groups are formed both across and within storage nodes in the in the distributed data storage system; and
writing and reading the data block independently of other data blocks in a same multiple protection group.
|
Enterprises and consumers today face the problem of storing and managing an ever-increasing amount of data on non-volatile data storage systems such as hard disk drives. One promising direction in computer storage systems is to harness the collective storage capacity of massive commodity computers to form a large distributed data storage system. When designing such distributed data storage system an important factor to consider is data reliability. Once data is stored a user typically does not want or cannot afford to lose any of the stored data. Unfortunately, the data management chain is prone to failures at various links that can result in permanent data loss or a temporary unavailability of the data. For example, any one of a number of individual components of a massive distributed data storage system may fail for a variety of reasons. Hard drive failures, computer motherboard failures, memory problems, network cable problems, loose connections (such as a loose hard drive cable, memory cable, or network cable), power supply problems, and so forth can occur leaving the data inaccessible.
For distributed data storage systems to be useful in practice, proper redundancy schemes must be implemented to provide high reliability, availability and survivability. One type of redundancy scheme is replication, whereby data is replicated two, three, or more times to different computers in the system. As long as any one of the replica is accessible, the data is available. Most distributed data storage systems use replication for simplified system design and low access overhead.
One problem, however, with the replication technique is that the cost of storing a duplication of data can become prohibitively expense. Large storage cost directly translates into high cost in hardware (hard drives and associated machines), as well as the cost to operate the storage system, which includes the power for the machine, cooling, and maintenance. For example, if the data is replicated three times then the associated costs of storing the data are tripled.
One way to decrease this storage cost is by using another type of redundancy scheme called erasure resilient coding (ERC). Erasure resilient coding enables lossless data recovery notwithstanding loss of information during storage or transmission. The basic idea of the ERC technique is to use certain mathematical transforms and map k original data blocks from an original data piece into n total data blocks, where n>k. The original data piece includes the k original data blocks and the n−k parity (or ERC) data blocks. When there are no more than n−k failures all original data can be retrieved using the inverse of the mathematical transforms. At retrieval time the n data blocks are retrieved to recover the original data piece. Currently, the main use of the ERC technique in distributed data storage systems is in the form of large peer-to-peer (P2P) systems.
A protection group is often used in ERC to provide an added measure of protection to the data. Typically, each of the n data blocks is placed in a single protection group. One problem, however, with using the ERC technique in distributed data storage systems is that because the data is fragmented and stored in a plurality of blocks multiple protection groups cannot be created. Another problem is that when a data block is modified each of the data blocks belonging to the same protection group must also be modified. In other words, whenever a data block is written or read then all the other data blocks in the protection group also must be modified.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
The erasure resilient coding (ERC) distributed data storage system and method includes using ERC in a distributed data storage environment to achieve the same level of reliability as data replication with much less hardware. The system and method use software instead of hardware to improve data reliability and survivability. More specifically, the system and method allows the formation of multiple protection groups that contain a plurality of data blocks. The multiple protection groups are formed both across and within storage nodes. Because of the unique read and write operations based on erasure resilient coding, the reading and writing of each data block can be performed independent of other data blocks in the same protection group.
The ERC distributed data storage system and method also achieves load balancing over the ERC distributed data storage system. In particular, an original data piece is segmented into a plurality of data blocks, including original data blocks and ERC data blocks. The system includes several storage nodes that store both types of data blocks. The system and method interleaves original data blocks and ERC data blocks among the storage nodes so that the load is balanced between nodes. In some embodiments, this balancing is achieved by dispersing the data blocks such that each storage node performs approximately the same number of read and write operations. In other embodiments, the balancing is achieved by ensuring that each storage node contains a relatively equal number of original data blocks and ERC data blocks.
The ERC distributed data storage system and method reads and writes a data block independent of other data blocks with the same protection group. The unique write operation is capable of a true write operation (when there is an existing data block) or an append operation (when there is not an existing data block). In the first case, the write operation replaces an old data block with a new data block and performs Galois field arithmetic on the new and old data blocks. Further mathematical operations are performed, including a mathematical transform using erasure resilient coding and a second Galois field arithmetic operation. The resultant transformed data block is written to each of the storage nodes containing the old data block. In the second case, there is no old data block and the new data block is appended to either the front or back of the data after being mathematically processed as described above.
The unique read operation of the ERC distributed data storage system and method is capable of recovering a data block in a variety of ways. First, any data block that is live and fresh on its storage node is directly read out of the node. Second, if the data block is stale then a search is made for one protection group having all the live data blocks of the original data piece. Stale means that a failure has occurred or that the machine is in the process of recovering from such a failure. If such a protection group is found, then a distributed read and ERC decoding are performed to recover the data block. Third, if such a protection group cannot be found then another type of decoding is performed to attempt to recover the data block.
It should be noted that alternative embodiments are possible, and that steps and elements discussed herein may be changed, added, or eliminated, depending on the particular embodiment. These alternative embodiments include alternative steps and alternative elements that may be used, and structural changes that may be made, without departing from the scope of the invention.
Referring now to the drawings in which like reference numbers represent corresponding parts throughout:
In the following description of the erasure resilient coding (ERC) distributed data storage system and method reference is made to the accompanying drawings, which form a part thereof, and in which is shown by way of illustration a specific example whereby the ERC distributed data storage system and method may be practiced. It is to be understood that other embodiments may be utilized and structural changes may be made without departing from the scope of the claimed subject matter.
I. System and Operational Overview
Referring to
The ERC distributed data storage system 200 includes software or program modules for execution on the storage node computing device 210. In particular, the ERC distributed data storage system 200 includes a multiple protection group module 240 and a data block allocation module 250. The multiple protection group module 240 generates multiple protection groups for the original data piece 220. The data block allocation module 250 allocates both original data blocks and ERC data blocks among the storage nodes such the computation load is equally balanced between the storage nodes.
The ERC distributed data storage system 200 also includes a data write module 260 and a data read module 270. The data write module 260 appends a data block to storage nodes by performing mathematical modifications to the data blocks and replacing the old data block with the new data block. The data read module 270 recovers data by determining whether a data block is alive or dead on a storage node and acting accordingly. The operation of each of these modules will be discussed in detail below.
The method then forms multiple protection group each having more than a single data block (box 320). These multiple protection groups add another layer of data reliability. Next, each of the plurality of data blocks can be written independently of other data blocks in the same protection group (box 330). Similarly, each of the plurality of data blocks also can be read independently of other data blocks in the same protection group (box 340). The read and write operations can be used to reconstruct the data piece on demand (box 350). Once requested, the method reconstructs the data piece and outputs a reconstructed data piece (box 360).
II. Operational Details
Each of the mentioned above will now be discussed in further detail. In particular, details of the multiple protection group module 240, the data block allocation module 250, the data write module 260, and the data read module 270 will be discussed to further clarify the details of the ERC distributed data storage system and method.
Multiple Protection Group Module
The idea behind forming the protection groups is that there are a plurality of data blocks that can be located on different storage nodes. A key concept is that the erasure chunks are interleaved into each data center or storage node cluster. This alleviates the need to dedicate one data center or machine to erasure coding only.
As shown in
Examples of protection groups for this data are shown by the dashed lines. Protection groups can be formed within storage nodes clusters. In particular, a first protection group 530 is formed within storage node cluster (1). In addition, protection groups can also be formed across storage nodes. As shown
Data Block Allocation Module
The module 250 then interleaves original data blocks and ERC data blocks among the multiple protection groups so that the load is balanced across the storage nodes (box 630). Specifically, in some embodiments the criteria for load balancing is that each storage node performs approximately the same number of read and write operations. In other embodiments, the criteria for load balancing is that each storage node contains a relatively equal number of original data blocks and ERC data blocks.
Recall from above that the original data piece is split into multiple data blocks. An ERC data block has more complicated operations as compared to an original data block. In particular, the ERC data block has four times the read and write operations of an original data blocks. In addition, an input/output (I/O) operation must be performed any time one of the ERC data blocks is touched. Thus, the ERC data blocks are more heavily loaded that the original data blocks. If there were storage nodes that only stored and processed ERC data blocks, then that node would quickly become overloaded. The idea is to interleave the original data blocks and the ERC data blocks on different storage nodes so that on average each machine has the same number of input/output (I/O) operations. Interleaving the ERC data blocks with the original data blocks on the storage nodes serves to balance the load.
The module 250 then uses an index table located on the index server 100 to track the location of the original data blocks and the ERC data blocks on the storage nodes (box 640). Since the original data piece exist on a plurality of different storage nodes, it is necessary to keep track of where the data objects are located. An index table located on the index server 100 is used to keep track of this information. The index table keeps track of how many data blocks each original data piece has, and, for each original data piece, which storage nodes contain the data blocks. In addition, the index table keeps track of whether the data block is an original data block or an ERC data block.
The allocation information for each data block is stored on the index server 100 in the index table, as described above. It should be noted that it is assumed that the index server 100 is reliable. The index server 100 can achieve this reliability by using the ERC distributed data storage system and method or a replication technique. Since the size of the index table typically is not that large, the replication technique may be used. In some embodiments the index server 100 is a structured query language (SQL) server. Finally, the module 250 outputs the original data blocks and the ERC data blocks assigned to their respective storage nodes and protection groups (box 650).
Data Write Module
The module 260 then makes a determination as to whether the node contains a systematic version of the old data. This determination is made because there are two cases for the write operation. In the first case, a node contains the systematic version of the old data, in which case the module 260 then replaces an old data block with the new data block (box 730). In a second case, the node does not contain the systematic version of the old data, in which case two Galois fields are used. In this second case, a first Galois field add operation is performed on the new data block and the old data block (box 740). Galois field arithmetic is well known to those having ordinary skill in the art. This yields a modified data block. A mathematical transform then is performed on the modified data block using erasure resilient coding to generate a transformed data block (box 750). A second Galois field add operation is performed on the transformed data block and the old data block (box 760). The module 260 then writes the new data block (in the first case) or the transformed data block (in the second case) to each of the storage nodes that contained the old data block (box 770).
During the write operation the write needs to be propagated to all storage nodes within the protection groups to which the nodes belong. By way of example, assume a storage node belongs to two protection groups: a first protection group containing 4 protection nodes, and a second protection group containing 1 protection node. During an erasure write, the write operation is applied to 5 protection nodes over two separate protection groups. The write operation basically performs the first Galois field add on new data block with the old data block. The resultant modified data block then is propagated to each of the protection groups. For each of the protection groups a linear transformation is applied to the modified data block to obtain the transformed data block. If the write operation is an append only (meaning that the old data block is zero), then the new data block is append to either end of the existing data.
Data Read Module
The module 270 then makes a determination as to whether the data block is live (or alive) on the storage node (box 810). By “live”, it is meant that there has not been a hardware failure, power failure, shutdown, or some other event that keeps the data block from being accessed. On the other hand, if the data block is “stale” it means that a failure has occurred or the machine is in the process of recovering from a failure. If the data block is live on the storage node, then a single read is performed such that the data block is read directly from the storage node (box 820).
If the data block is not live (or “stale”) on the storage node, then the module 270 makes another determination as to whether one multiple protection group can be found whereby all of the plurality of data blocks are live (box 830). For example, assume that the original data piece was fragmented into k data blocks, where k is a positive integer value. The idea is to find a protection group having all k data blocks that are live.
If a protection group can be found where the plurality of data blocks are live, then the module 270 performs a distributed read from that protection group (box 840). The distributed read operation can succeed if k out of n blocks in the protection group are live. Note that all n blocks of a protection group do not need to be live, only k out of the n blocks. Using the present example, the module 270 would perform a distributed read of all of the k data blocks. Next, an ERC decoding is performed on each of the plurality of live data blocks (box 850). The desired data block then is recovered in this manner (box 860).
If no protection group can be found having all of the live plurality of data blocks, then a decoding using a method other than ERC decoding is performed on the data block (box 870). There is no guarantee that another type of decoding will work to recover the desired data block. If recoverable, however, the module 270 recovers the desired data block (box 880) and outputs the recovered data block (box 890).
III. Exemplary Operating Environment
The erasure resilient coding (ERC) distributed data storage system and method is designed to operate in a computing environment. The following discussion is intended to provide a brief, general description of a suitable computing environment in which the ERC distributed data storage system and method may be implemented.
The ERC distributed data storage system and method is operational with numerous other general purpose or special purpose computing system environments or configurations. Examples of well known computing systems, environments, and/or configurations that may be suitable for use with the ERC distributed data storage system and method include, but are not limited to, personal computers, server computers, hand-held (including smartphones), laptop or mobile computer or communications devices such as cell phones and PDA's, multiprocessor systems, microprocessor-based systems, set top boxes, programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like.
The ERC distributed data storage system and method may be described in the general context of computer-executable instructions, such as program modules, being executed by a computer. Generally, program modules include routines, programs, objects, components, data structures, etc., that perform particular tasks or implement particular abstract data types. The ERC distributed data storage system and method may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote computer storage media including memory storage devices. With reference to
Components of the computer 910 may include, but are not limited to, a processing unit 920 (such as a central processing unit, CPU), a system memory 930, and a system bus 921 that couples various system components including the system memory to the processing unit 920. The system bus 921 may be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. By way of example, and not limitation, such architectures include Industry Standard Architecture (ISA) bus, Micro Channel Architecture (MCA) bus, Enhanced ISA (EISA) bus, Video Electronics Standards Association (VESA) local bus, and Peripheral Component Interconnect (PCI) bus also known as Mezzanine bus.
The computer 910 typically includes a variety of computer readable media. Computer readable media can be any available media that can be accessed by the computer 910 and includes both volatile and nonvolatile media, removable and non-removable media. By way of example, and not limitation, computer readable media may comprise computer storage media and communication media. Computer storage media includes volatile and nonvolatile removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules or other data.
Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by the computer 910. Communication media typically embodies computer readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media.
Note that the term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of any of the above should also be included within the scope of computer readable media.
The system memory 940 includes computer storage media in the form of volatile and/or nonvolatile memory such as read only memory (ROM) 931 and random access memory (RAM) 932. A basic input/output system 933 (BIOS), containing the basic routines that help to transfer information between elements within the computer 910, such as during start-up, is typically stored in ROM 931. RAM 932 typically contains data and/or program modules that are immediately accessible to and/or presently being operated on by processing unit 920. By way of example, and not limitation,
The computer 910 may also include other removable/non-removable, volatile/nonvolatile computer storage media. By way of example only,
Other removable/non-removable, volatile/nonvolatile computer storage media that can be used in the exemplary operating environment include, but are not limited to, magnetic tape cassettes, flash memory cards, digital versatile disks, digital video tape, solid state RAM, solid state ROM, and the like. The hard disk drive 941 is typically connected to the system bus 921 through a non-removable memory interface such as interface 940, and magnetic disk drive 951 and optical disk drive 955 are typically connected to the system bus 921 by a removable memory interface, such as interface 950.
The drives and their associated computer storage media discussed above and illustrated in
Operating system 944, application programs 945, other program modules 946, and program data 947 are given different numbers here to illustrate that, at a minimum, they are different copies. A user may enter commands and information (or data) into the computer 910 through input devices such as a keyboard 962, pointing device 961, commonly referred to as a mouse, trackball or touch pad, and a touch panel or touch screen (not shown).
Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, radio receiver, or a television or broadcast video receiver, or the like. These and other input devices are often connected to the processing unit 920 through a user input interface 960 that is coupled to the system bus 921, but may be connected by other interface and bus structures, such as, for example, a parallel port, game port or a universal serial bus (USB). A monitor 991 or other type of display device is also connected to the system bus 921 via an interface, such as a video interface 990. In addition to the monitor, computers may also include other peripheral output devices such as speakers 997 and printer 996, which may be connected through an output peripheral interface 995.
The computer 910 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 980. The remote computer 980 may be a personal computer, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to the computer 910, although only a memory storage device 981 has been illustrated in
When used in a LAN networking environment, the computer 910 is connected to the LAN 971 through a network interface or adapter 970. When used in a WAN networking environment, the computer 910 typically includes a modem 972 or other means for establishing communications over the WAN 973, such as the Internet. The modem 972, which may be internal or external, may be connected to the system bus 921 via the user input interface 960, or other appropriate mechanism. In a networked environment, program modules depicted relative to the computer 910, or portions thereof, may be stored in the remote memory storage device. By way of example, and not limitation,
The foregoing Detailed Description has been presented for the purposes of illustration and description. Many modifications and variations are possible in light of the above teaching. It is not intended to be exhaustive or to limit the subject matter described herein to the precise form disclosed. Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims appended hereto.
Li, Jin, He, Li-wei, Liang, Jian
Patent | Priority | Assignee | Title |
10007457, | Dec 22 2015 | Pure Storage, Inc.; Pure Storage, Inc | Distributed transactions with token-associated execution |
10082985, | Mar 27 2015 | Pure Storage, Inc. | Data striping across storage nodes that are assigned to multiple logical arrays |
10108355, | Sep 01 2015 | Pure Storage, Inc.; Pure Storage, Inc | Erase block state detection |
10110676, | Aug 22 2014 | NEXENTA BY DDN, INC | Parallel transparent restructuring of immutable content in a distributed object storage system |
10114757, | Jul 02 2014 | Pure Storage, Inc. | Nonrepeating identifiers in an address space of a non-volatile solid-state storage |
10140149, | May 19 2015 | Pure Storage, Inc.; Pure Storage, Inc | Transactional commits with hardware assists in remote memory |
10141050, | Apr 27 2017 | Pure Storage, Inc. | Page writes for triple level cell flash memory |
10178083, | Jun 05 2012 | Pure Storage, Inc | Updating access control information within a dispersed storage unit |
10178169, | Apr 09 2015 | Pure Storage, Inc.; Pure Storage, Inc | Point to point based backend communication layer for storage processing |
10185506, | Jul 03 2014 | Pure Storage, Inc. | Scheduling policy for queues in a non-volatile solid-state storage |
10187083, | Jun 26 2015 | Microsoft Technology Licensing, LLC | Flexible erasure coding with enhanced local protection group structures |
10198380, | Jul 03 2014 | Pure Storage, Inc. | Direct memory access data movement |
10203903, | Jul 26 2016 | Pure Storage, Inc.; Pure Storage, Inc | Geometry based, space aware shelf/writegroup evacuation |
10210926, | Sep 15 2017 | Pure Storage, Inc. | Tracking of optimum read voltage thresholds in nand flash devices |
10211983, | Sep 30 2015 | Pure Storage, Inc. | Resharing of a split secret |
10216411, | Aug 07 2014 | Pure Storage, Inc. | Data rebuild on feedback from a queue in a non-volatile solid-state storage |
10216420, | Jul 24 2016 | Pure Storage, Inc. | Calibration of flash channels in SSD |
10261690, | May 03 2016 | Pure Storage, Inc. | Systems and methods for operating a storage system |
10277408, | Oct 23 2015 | Pure Storage, Inc. | Token based communication |
10303547, | Jun 04 2014 | Pure Storage, Inc. | Rebuilding data across storage nodes |
10324812, | Aug 07 2014 | Pure Storage, Inc. | Error recovery in a storage cluster |
10353635, | Mar 27 2015 | Pure Storage, Inc. | Data control across multiple logical arrays |
10366004, | Jul 26 2016 | Pure Storage, Inc.; Pure Storage, Inc | Storage system with elective garbage collection to reduce flash contention |
10372617, | Jul 02 2014 | Pure Storage, Inc. | Nonrepeating identifiers in an address space of a non-volatile solid-state storage |
10379763, | Jun 04 2014 | Pure Storage, Inc. | Hyperconverged storage system with distributable processing power |
10394484, | Feb 26 2016 | Hitachi, LTD | Storage system |
10430306, | Jun 04 2014 | Pure Storage, Inc. | Mechanism for persisting messages in a storage system |
10454498, | Oct 18 2018 | Pure Storage, Inc. | Fully pipelined hardware engine design for fast and efficient inline lossless data compression |
10467527, | Jan 31 2018 | Pure Storage, Inc. | Method and apparatus for artificial intelligence acceleration |
10496295, | Apr 10 2015 | Pure Storage, Inc. | Representing a storage array as two or more logical arrays with respective virtual local area networks (VLANS) |
10496330, | Oct 31 2017 | Pure Storage, Inc. | Using flash storage devices with different sized erase blocks |
10498580, | Aug 20 2014 | Pure Storage, Inc. | Assigning addresses in a storage system |
10515701, | Oct 31 2017 | Pure Storage, Inc | Overlapping raid groups |
10528419, | Aug 07 2014 | Pure Storage, Inc. | Mapping around defective flash memory of a storage array |
10528488, | Mar 30 2017 | Pure Storage, Inc. | Efficient name coding |
10545687, | Oct 31 2017 | Pure Storage, Inc. | Data rebuild when changing erase block sizes during drive replacement |
10572176, | Jul 02 2014 | Pure Storage, Inc. | Storage cluster operation using erasure coded data |
10574754, | Jun 04 2014 | Pure Storage, Inc.; Pure Storage, Inc | Multi-chassis array with multi-level load balancing |
10579474, | Aug 07 2014 | Pure Storage, Inc. | Die-level monitoring in a storage cluster |
10599348, | Dec 22 2015 | Pure Storage, Inc. | Distributed transactions with token-associated execution |
10649659, | May 03 2016 | Pure Storage, Inc. | Scaleable storage array |
10650902, | Jan 13 2017 | Pure Storage, Inc. | Method for processing blocks of flash memory |
10671480, | Jun 04 2014 | Pure Storage, Inc. | Utilization of erasure codes in a storage system |
10678452, | Sep 15 2016 | Pure Storage, Inc.; Pure Storage, Inc | Distributed deletion of a file and directory hierarchy |
10691567, | Jun 03 2016 | Pure Storage, Inc | Dynamically forming a failure domain in a storage system that includes a plurality of blades |
10691812, | Jul 03 2014 | Pure Storage, Inc. | Secure data replication in a storage grid |
10693964, | Apr 09 2015 | Pure Storage, Inc. | Storage unit communication within a storage system |
10705732, | Dec 08 2017 | Pure Storage, Inc. | Multiple-apartment aware offlining of devices for disruptive and destructive operations |
10712942, | May 27 2015 | Pure Storage, Inc. | Parallel update to maintain coherency |
10719265, | Dec 08 2017 | Pure Storage, Inc. | Centralized, quorum-aware handling of device reservation requests in a storage system |
10733053, | Jan 31 2018 | Pure Storage, Inc. | Disaster recovery for high-bandwidth distributed archives |
10768819, | Jul 22 2016 | Pure Storage, Inc.; Pure Storage, Inc | Hardware support for non-disruptive upgrades |
10776034, | Jul 26 2016 | Pure Storage, Inc. | Adaptive data migration |
10809919, | Jun 04 2014 | Pure Storage, Inc. | Scalable storage capacities |
10817431, | Jul 02 2014 | Pure Storage, Inc. | Distributed storage addressing |
10831594, | Jul 22 2016 | Pure Storage, Inc. | Optimize data protection layouts based on distributed flash wear leveling |
10838633, | Jun 04 2014 | Pure Storage, Inc. | Configurable hyperconverged multi-tenant storage system |
10853146, | Apr 27 2018 | Pure Storage, Inc.; Pure Storage, Inc | Efficient data forwarding in a networked device |
10853243, | Mar 26 2015 | Pure Storage, Inc. | Aggressive data deduplication using lazy garbage collection |
10853266, | Sep 30 2015 | Pure Storage, Inc. | Hardware assisted data lookup methods |
10853285, | Jul 03 2014 | Pure Storage, Inc. | Direct memory access data format |
10860475, | Nov 17 2017 | Pure Storage, Inc. | Hybrid flash translation layer |
10877827, | Sep 15 2017 | Pure Storage, Inc. | Read voltage optimization |
10877861, | Jul 02 2014 | Pure Storage, Inc. | Remote procedure call cache for distributed system |
10884919, | Oct 31 2017 | Pure Storage, Inc. | Memory management in a storage system |
10887099, | Sep 30 2015 | Pure Storage, Inc. | Data encryption in a distributed system |
10915813, | Jan 31 2018 | Pure Storage, Inc. | Search acceleration for artificial intelligence |
10929031, | Dec 21 2017 | Pure Storage, Inc.; Pure Storage, Inc | Maximizing data reduction in a partially encrypted volume |
10929053, | Dec 08 2017 | Pure Storage, Inc. | Safe destructive actions on drives |
10931450, | Apr 27 2018 | Pure Storage, Inc. | Distributed, lock-free 2-phase commit of secret shares using multiple stateless controllers |
10942869, | Mar 30 2017 | Pure Storage, Inc. | Efficient coding in a storage system |
10944671, | Apr 27 2017 | Pure Storage, Inc. | Efficient data forwarding in a networked device |
10976947, | Oct 26 2018 | Pure Storage, Inc. | Dynamically selecting segment heights in a heterogeneous RAID group |
10976948, | Jan 31 2018 | Pure Storage, Inc.; Pure Storage, Inc | Cluster expansion mechanism |
10979223, | Jan 31 2017 | Pure Storage, Inc.; Pure Storage, Inc | Separate encryption for a solid-state drive |
10983732, | Jul 13 2015 | Pure Storage, Inc.; Pure Storage, Inc | Method and system for accessing a file |
10983866, | Aug 07 2014 | Pure Storage, Inc. | Mapping defective memory in a storage system |
10990283, | Aug 07 2014 | Pure Storage, Inc. | Proactive data rebuild based on queue feedback |
10990566, | Nov 20 2017 | Pure Storage, Inc. | Persistent file locks in a storage system |
11016667, | Apr 05 2017 | Pure Storage, Inc. | Efficient mapping for LUNs in storage memory with holes in address space |
11024390, | Oct 31 2017 | Pure Storage, Inc.; Pure Storage, Inc | Overlapping RAID groups |
11030090, | Jul 26 2016 | Pure Storage, Inc. | Adaptive data migration |
11036583, | Jun 04 2014 | Pure Storage, Inc. | Rebuilding data across storage nodes |
11057468, | Jun 04 2014 | Pure Storage, Inc. | Vast data storage system |
11068363, | Jun 04 2014 | Pure Storage, Inc. | Proactively rebuilding data in a storage cluster |
11068389, | Jun 11 2017 | Pure Storage, Inc. | Data resiliency with heterogeneous storage |
11070382, | Oct 23 2015 | Pure Storage, Inc. | Communication in a distributed architecture |
11074016, | Oct 31 2017 | Pure Storage, Inc. | Using flash storage devices with different sized erase blocks |
11079962, | Jul 02 2014 | Pure Storage, Inc. | Addressable non-volatile random access memory |
11080140, | Feb 25 2014 | GOOGLE LLC | Data reconstruction in distributed storage systems |
11080154, | Aug 07 2014 | Pure Storage, Inc. | Recovering error corrected data |
11080155, | Jul 24 2016 | Pure Storage, Inc. | Identifying error types among flash memory |
11086532, | Oct 31 2017 | Pure Storage, Inc. | Data rebuild with changing erase block sizes |
11099749, | Sep 01 2015 | Pure Storage, Inc. | Erase detection logic for a storage system |
11099986, | Apr 12 2019 | Pure Storage, Inc. | Efficient transfer of memory contents |
11138082, | Jun 04 2014 | Pure Storage, Inc. | Action determination based on redundancy level |
11138103, | Jun 11 2017 | Pure Storage, Inc. | Resiliency groups |
11144212, | Apr 10 2015 | Pure Storage, Inc. | Independent partitions within an array |
11188269, | Mar 27 2015 | Pure Storage, Inc. | Configuration for multiple logical storage arrays |
11188432, | Feb 28 2020 | Pure Storage, Inc. | Data resiliency by partially deallocating data blocks of a storage device |
11188476, | Aug 20 2014 | Pure Storage, Inc. | Virtual addressing in a storage system |
11190580, | Jul 03 2017 | Pure Storage, Inc. | Stateful connection resets |
11204701, | Dec 22 2015 | Pure Storage, Inc. | Token based transactions |
11204830, | Aug 07 2014 | Pure Storage, Inc. | Die-level monitoring in a storage cluster |
11231858, | May 19 2016 | Pure Storage, Inc.; Pure Storage, Inc | Dynamically configuring a storage system to facilitate independent scaling of resources |
11231956, | May 19 2015 | Pure Storage, Inc. | Committed transactions in a storage system |
11232079, | Jul 16 2015 | Pure Storage, Inc.; Pure Storage, Inc | Efficient distribution of large directories |
11240307, | Apr 09 2015 | Pure Storage, Inc. | Multiple communication paths in a storage system |
11256587, | Apr 17 2020 | Pure Storage, Inc. | Intelligent access to a storage device |
11275681, | Nov 17 2017 | Pure Storage, Inc. | Segmented write requests |
11281394, | Jun 24 2019 | Pure Storage, Inc. | Replication across partitioning schemes in a distributed storage system |
11289169, | Jan 13 2017 | Pure Storage, Inc. | Cycled background reads |
11294893, | Mar 20 2015 | Pure Storage, Inc. | Aggregation of queries |
11301147, | Sep 15 2016 | Pure Storage, Inc. | Adaptive concurrency for write persistence |
11307998, | Jan 09 2017 | Pure Storage, Inc.; Pure Storage, Inc | Storage efficiency of encrypted host system data |
11310317, | Jun 04 2014 | Pure Storage, Inc. | Efficient load balancing |
11327674, | Jun 05 2012 | Pure Storage, Inc | Storage vault tiering and data migration in a distributed storage network |
11334254, | Mar 29 2019 | Pure Storage, Inc. | Reliability based flash page sizing |
11340821, | Jul 26 2016 | Pure Storage, Inc. | Adjustable migration utilization |
11354058, | Sep 06 2018 | Pure Storage, Inc. | Local relocation of data stored at a storage device of a storage system |
11385799, | Jun 04 2014 | Pure Storage, Inc. | Storage nodes supporting multiple erasure coding schemes |
11385979, | Jul 02 2014 | Pure Storage, Inc. | Mirrored remote procedure call cache |
11392522, | Jul 03 2014 | Pure Storage, Inc. | Transfer of segmented data |
11399063, | Jun 04 2014 | Pure Storage, Inc. | Network authentication for a storage system |
11409437, | Jul 22 2016 | Pure Storage, Inc. | Persisting configuration information |
11416144, | Dec 12 2019 | Pure Storage, Inc. | Dynamic use of segment or zone power loss protection in a flash device |
11416338, | Apr 24 2020 | Pure Storage, Inc.; Pure Storage, Inc | Resiliency scheme to enhance storage performance |
11422719, | Sep 15 2016 | Pure Storage, Inc. | Distributed file deletion and truncation |
11436023, | May 31 2018 | Pure Storage, Inc. | Mechanism for updating host file system and flash translation layer based on underlying NAND technology |
11438279, | Jul 23 2018 | Pure Storage, Inc. | Non-disruptive conversion of a clustered service from single-chassis to multi-chassis |
11442625, | Aug 07 2014 | Pure Storage, Inc. | Multiple read data paths in a storage system |
11442645, | Jan 31 2018 | Pure Storage, Inc. | Distributed storage system expansion mechanism |
11449232, | Jul 22 2016 | Pure Storage, Inc. | Optimal scheduling of flash operations |
11449485, | Mar 30 2017 | Pure Storage, Inc. | Sequence invalidation consolidation in a storage system |
11467913, | Jun 07 2017 | Pure Storage, Inc.; Pure Storage, Inc | Snapshots with crash consistency in a storage system |
11474986, | Apr 24 2020 | Pure Storage, Inc. | Utilizing machine learning to streamline telemetry processing of storage media |
11487455, | Dec 17 2020 | Pure Storage, Inc. | Dynamic block allocation to optimize storage system performance |
11489668, | Sep 30 2015 | Pure Storage, Inc. | Secret regeneration in a storage system |
11494109, | Feb 22 2018 | Pure Storage, Inc | Erase block trimming for heterogenous flash memory storage devices |
11494498, | Jul 03 2014 | Pure Storage, Inc. | Storage data decryption |
11500552, | Jun 04 2014 | Pure Storage, Inc. | Configurable hyperconverged multi-tenant storage system |
11500570, | Sep 06 2018 | Pure Storage, Inc. | Efficient relocation of data utilizing different programming modes |
11507297, | Apr 15 2020 | Pure Storage, Inc | Efficient management of optimal read levels for flash storage systems |
11507597, | Mar 31 2021 | Pure Storage, Inc.; Pure Storage, Inc | Data replication to meet a recovery point objective |
11513974, | Sep 08 2020 | Pure Storage, Inc.; Pure Storage, Inc | Using nonce to control erasure of data blocks of a multi-controller storage system |
11520514, | Sep 06 2018 | Pure Storage, Inc. | Optimized relocation of data based on data characteristics |
11544143, | Aug 07 2014 | Pure Storage, Inc. | Increased data reliability |
11550473, | May 03 2016 | Pure Storage, Inc. | High-availability storage array |
11550752, | Jul 03 2014 | Pure Storage, Inc. | Administrative actions via a reserved filename |
11567917, | Sep 30 2015 | Pure Storage, Inc. | Writing data and metadata into storage |
11581943, | Oct 04 2016 | Pure Storage, Inc. | Queues reserved for direct access via a user application |
11582046, | Oct 23 2015 | Pure Storage, Inc. | Storage system communication |
11592985, | Apr 05 2017 | Pure Storage, Inc. | Mapping LUNs in a storage memory |
11593203, | Jun 04 2014 | Pure Storage, Inc. | Coexisting differing erasure codes |
11604585, | Oct 31 2017 | Pure Storage, Inc. | Data rebuild when changing erase block sizes during drive replacement |
11604598, | Jul 02 2014 | Pure Storage, Inc. | Storage cluster with zoned drives |
11604690, | Jul 24 2016 | Pure Storage, Inc. | Online failure span determination |
11614880, | Dec 31 2020 | Pure Storage, Inc. | Storage system with selectable write paths |
11614893, | Sep 15 2010 | Pure Storage, Inc.; Pure Storage, Inc | Optimizing storage device access based on latency |
11620197, | Aug 07 2014 | Pure Storage, Inc. | Recovering error corrected data |
11630593, | Mar 12 2021 | Pure Storage, Inc.; Pure Storage, Inc | Inline flash memory qualification in a storage system |
11650976, | Oct 14 2011 | Pure Storage, Inc. | Pattern matching using hash tables in storage system |
11652884, | Jun 04 2014 | Pure Storage, Inc.; Pure Storage, Inc | Customized hash algorithms |
11656768, | Sep 15 2016 | Pure Storage, Inc. | File deletion in a distributed system |
11656939, | Aug 07 2014 | Pure Storage, Inc. | Storage cluster memory characterization |
11656961, | Feb 28 2020 | Pure Storage, Inc. | Deallocation within a storage system |
11671496, | Jun 04 2014 | Pure Storage, Inc. | Load balacing for distibuted computing |
11675762, | Jun 26 2015 | Pure Storage, Inc. | Data structures for key management |
11681448, | Sep 08 2020 | Pure Storage, Inc.; Pure Storage, Inc | Multiple device IDs in a multi-fabric module storage system |
11689610, | Jul 03 2017 | Pure Storage, Inc. | Load balancing reset packets |
11704066, | Oct 31 2017 | Pure Storage, Inc. | Heterogeneous erase blocks |
11704073, | Jul 13 2015 | Pure Storage, Inc | Ownership determination for accessing a file |
11704192, | Dec 12 2019 | Pure Storage, Inc. | Budgeting open blocks based on power loss protection |
11706895, | Jul 19 2016 | Pure Storage, Inc. | Independent scaling of compute resources and storage resources in a storage system |
11714572, | Jun 19 2019 | Pure Storage, Inc. | Optimized data resiliency in a modular storage system |
11714708, | Jul 31 2017 | Pure Storage, Inc. | Intra-device redundancy scheme |
11714715, | Jun 04 2014 | Pure Storage, Inc. | Storage system accommodating varying storage capacities |
11722455, | Apr 27 2017 | Pure Storage, Inc. | Storage cluster address resolution |
11722567, | Apr 09 2015 | Pure Storage, Inc. | Communication paths for storage devices having differing capacities |
11734169, | Jul 26 2016 | Pure Storage, Inc. | Optimizing spool and memory space management |
11734186, | Aug 20 2014 | Pure Storage, Inc. | Heterogeneous storage with preserved addressing |
11740802, | Sep 01 2015 | Pure Storage, Inc. | Error correction bypass for erased pages |
11741003, | Nov 17 2017 | Pure Storage, Inc. | Write granularity for storage system |
11748009, | Jun 01 2018 | Microsoft Technology Licensing, LLC | Erasure coding with overlapped local reconstruction codes |
11762781, | Jan 09 2017 | Pure Storage, Inc. | Providing end-to-end encryption for data stored in a storage system |
11768763, | Jul 08 2020 | Pure Storage, Inc. | Flash secure erase |
11775189, | Apr 03 2019 | Pure Storage, Inc. | Segment level heterogeneity |
11775428, | Mar 26 2015 | Pure Storage, Inc. | Deletion immunity for unreferenced data |
11775491, | Apr 24 2020 | Pure Storage, Inc. | Machine learning model for storage system |
11782625, | Jun 11 2017 | Pure Storage, Inc.; Pure Storage, Inc | Heterogeneity supportive resiliency groups |
11789626, | Dec 17 2020 | Pure Storage, Inc. | Optimizing block allocation in a data storage system |
11797211, | Jan 31 2018 | Pure Storage, Inc. | Expanding data structures in a storage system |
11797212, | Jul 26 2016 | Pure Storage, Inc. | Data migration for zoned drives |
11822444, | Jun 04 2014 | Pure Storage, Inc. | Data rebuild independent of error detection |
11822807, | Jun 24 2019 | Pure Storage, Inc. | Data replication in a storage system |
11832410, | Sep 14 2021 | Pure Storage, Inc.; Pure Storage, Inc | Mechanical energy absorbing bracket apparatus |
11836348, | Apr 27 2018 | Pure Storage, Inc. | Upgrade for system with differing capacities |
11838412, | Sep 30 2015 | Pure Storage, Inc. | Secret regeneration from distributed shares |
11842053, | Dec 19 2016 | Pure Storage, Inc. | Zone namespace |
11846968, | Sep 06 2018 | Pure Storage, Inc. | Relocation of data for heterogeneous storage systems |
11847013, | Feb 18 2018 | Pure Storage, Inc. | Readable data determination |
11847320, | May 03 2016 | Pure Storage, Inc. | Reassignment of requests for high availability |
11847324, | Dec 31 2020 | Pure Storage, Inc. | Optimizing resiliency groups for data regions of a storage system |
11847331, | Dec 12 2019 | Pure Storage, Inc. | Budgeting open blocks of a storage unit based on power loss prevention |
11861188, | Jul 19 2016 | Pure Storage, Inc. | System having modular accelerators |
11868309, | Sep 06 2018 | Pure Storage, Inc. | Queue management for data relocation |
11869583, | Apr 27 2017 | Pure Storage, Inc. | Page write requirements for differing types of flash memory |
11886288, | Jul 22 2016 | Pure Storage, Inc. | Optimize data protection layouts based on distributed flash wear leveling |
11886308, | Jul 02 2014 | Pure Storage, Inc. | Dual class of service for unified file and object messaging |
11886334, | Jul 26 2016 | Pure Storage, Inc. | Optimizing spool and memory space management |
11893023, | Sep 04 2015 | Pure Storage, Inc. | Deterministic searching using compressed indexes |
11893126, | Oct 14 2019 | Hyundai Motor Company; Kia Motors Corporation | Data deletion for a multi-tenant environment |
11899582, | Apr 12 2019 | Pure Storage, Inc. | Efficient memory dump |
8473778, | Sep 08 2010 | Microsoft Technology Licensing, LLC | Erasure coding immutable data |
8631269, | May 21 2010 | INDIAN INSTITUTE OF SCIENCE | Methods and system for replacing a failed node in a distributed storage network |
9037564, | Apr 29 2011 | Method and system for electronic content storage and retrieval with galois fields on cloud computing networks | |
9137250, | Apr 29 2011 | Method and system for electronic content storage and retrieval using galois fields and information entropy on cloud computing networks | |
9201600, | Jun 04 2014 | Pure Storage, Inc. | Storage cluster |
9213485, | Jun 04 2014 | Pure Storage, Inc. | Storage system architecture |
9218244, | Jun 04 2014 | Pure Storage, Inc. | Rebuilding data across storage nodes |
9244761, | Jun 25 2013 | Microsoft Technology Licensing, LLC | Erasure coding across multiple zones and sub-zones |
9298386, | Aug 23 2013 | GLOBALFOUNDRIES Inc | System and method for improved placement of blocks in a deduplication-erasure code environment |
9317363, | Nov 06 2013 | International Business Machines Corporation | Management of a secure delete operation in a parity-based system |
9336076, | Aug 23 2013 | GLOBALFOUNDRIES Inc | System and method for controlling a redundancy parity encoding amount based on deduplication indications of activity |
9354991, | Jun 25 2013 | Microsoft Technology Licensing, LLC | Locally generated simple erasure codes |
9357010, | Jun 04 2014 | Pure Storage, Inc. | Storage system architecture |
9361479, | Apr 29 2011 | Method and system for electronic content storage and retrieval using Galois fields and geometric shapes on cloud computing networks | |
9378084, | Jun 25 2013 | Microsoft Technology Licensing, LLC | Erasure coding across multiple zones |
9454309, | Nov 06 2013 | International Business Machines Corporation | Management of a secure delete operation |
9477412, | Dec 09 2014 | DATAROBOT, INC | Systems and methods for automatically aggregating write requests |
9477554, | Jun 04 2014 | Pure Storage, Inc. | Mechanism for persisting messages in a storage system |
9483346, | Aug 07 2014 | Pure Storage, Inc. | Data rebuild on feedback from a queue in a non-volatile solid-state storage |
9495255, | Aug 07 2014 | Pure Storage, Inc. | Error recovery in a storage cluster |
9525738, | Jun 04 2014 | Pure Storage, Inc. | Storage system architecture |
9529622, | Dec 09 2014 | DATAROBOT, INC | Systems and methods for automatic generation of task-splitting code |
9547553, | Mar 10 2014 | DATAROBOT, INC | Data resiliency in a shared memory pool |
9563506, | Jun 04 2014 | Pure Storage, Inc. | Storage cluster |
9569771, | Apr 29 2011 | Method and system for storage and retrieval of blockchain blocks using galois fields | |
9594688, | Dec 09 2014 | DATAROBOT, INC | Systems and methods for executing actions using cached data |
9594696, | Dec 09 2014 | DATAROBOT, INC | Systems and methods for automatic generation of parallel data processing code |
9612952, | Jun 04 2014 | Pure Storage, Inc. | Automatically reconfiguring a storage memory topology |
9632936, | Dec 09 2014 | DATAROBOT, INC | Two-tier distributed memory |
9639407, | Dec 09 2014 | DATAROBOT, INC | Systems and methods for efficiently implementing functional commands in a data processing system |
9639473, | Dec 09 2014 | DATAROBOT, INC | Utilizing a cache mechanism by copying a data set from a cache-disabled memory location to a cache-enabled memory location |
9672125, | Apr 10 2015 | Pure Storage, Inc.; Pure Storage, Inc | Ability to partition an array into two or more logical arrays with independently running software |
9690705, | Dec 09 2014 | DATAROBOT, INC | Systems and methods for processing data sets according to an instructed order |
9690713, | Apr 22 2014 | DATAROBOT, INC | Systems and methods for effectively interacting with a flash memory |
9720826, | Dec 09 2014 | DATAROBOT, INC | Systems and methods to distributively process a plurality of data sets stored on a plurality of memory modules |
9733988, | Dec 09 2014 | DATAROBOT, INC | Systems and methods to achieve load balancing among a plurality of compute elements accessing a shared memory pool |
9747229, | Jul 03 2014 | Pure Storage, Inc. | Self-describing data format for DMA in a non-volatile solid-state storage |
9753873, | Dec 09 2014 | DATAROBOT, INC | Systems and methods for key-value transactions |
9768953, | Sep 30 2015 | Pure Storage, Inc.; Pure Storage, Inc | Resharing of a split secret |
9781027, | Apr 06 2014 | DATAROBOT, INC | Systems and methods to communicate with external destinations via a memory network |
9781225, | Dec 09 2014 | DATAROBOT, INC | Systems and methods for cache streams |
9798477, | Jun 04 2014 | Pure Storage, Inc. | Scalable non-uniform storage sizes |
9804925, | Feb 25 2014 | GOOGLE LLC | Data reconstruction in distributed storage systems |
9817576, | May 27 2015 | Pure Storage, Inc.; Pure Storage, Inc | Parallel update to NVRAM |
9836234, | Jun 04 2014 | Pure Storage, Inc.; Pure Storage, Inc | Storage cluster |
9836245, | Jul 02 2014 | Pure Storage, Inc. | Non-volatile RAM and flash memory in a non-volatile solid-state storage |
9843453, | Oct 23 2015 | Pure Storage, Inc | Authorizing I/O commands with I/O tokens |
9923970, | Aug 22 2014 | NEXENTA BY DDN, INC | Multicast collaborative erasure encoding and distributed parity protection |
9934089, | Jun 04 2014 | Pure Storage, Inc. | Storage cluster |
9940234, | Mar 26 2015 | Pure Storage, Inc.; Pure Storage, Inc | Aggressive data deduplication using lazy garbage collection |
9948615, | Mar 16 2015 | Pure Storage, Inc. | Increased storage unit encryption based on loss of trust |
9967342, | Jun 04 2014 | Pure Storage, Inc. | Storage system architecture |
Patent | Priority | Assignee | Title |
5617541, | Dec 21 1994 | International Computer Science Institute | System for packetizing data encoded corresponding to priority levels where reconstructed data corresponds to fractionalized priority level and received fractionalized packets |
6138125, | Mar 31 1998 | AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED | Block coding method and system for failure recovery in disk arrays |
6553511, | May 17 2000 | NetApp, Inc | Mass storage data integrity-assuring technique utilizing sequence and revision number metadata |
6694479, | May 23 2000 | Hewlett Packard Enterprise Development LP | Multiple drive failure recovery for a computer system having an array of storage drives |
6928584, | Nov 22 2000 | TELECOM HOLDING PARENT LLC | Segmented protection system and method |
7013364, | May 27 2002 | Hitachi Global Storage Technologies Japan, Ltd | Storage subsystem having plural storage systems and storage selector for selecting one of the storage systems to process an access request |
7020823, | Mar 19 2002 | Matsushita Electric Industrial Co., Ltd. | Error resilient coding, storage, and transmission of digital multimedia data |
7073115, | Dec 28 2001 | Network Appliance, Inc | Correcting multiple block data loss in a storage array using a combination of a single diagonal parity group and multiple row parity groups |
7103824, | Jul 29 2002 | Multi-dimensional data protection and mirroring method for micro level data | |
7562253, | Nov 22 2000 | TELECOM HOLDING PARENT LLC | Segmented protection system and method |
7653796, | Feb 20 2003 | Panasonic Corporation | Information recording medium and region management method for a plurality of recording regions each managed by independent file system |
7676723, | Sep 23 2002 | Siemens Aktiengesellschaft | Method for the protected transmission of data, particularly transmission over an air interface |
20050283537, | |||
20050289402, | |||
20060074995, | |||
20060080454, | |||
20060212782, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Jun 13 2007 | LI, JIN | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 019438 | /0106 | |
Jun 13 2007 | HE, LI-WEI | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 019438 | /0106 | |
Jun 14 2007 | LIANG, JIAN | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 019438 | /0106 | |
Jun 15 2007 | Microsoft Corporation | (assignment on the face of the patent) | / | |||
Oct 14 2014 | Microsoft Corporation | Microsoft Technology Licensing, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 034542 | /0001 |
Date | Maintenance Fee Events |
Apr 24 2015 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Apr 18 2019 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Apr 21 2023 | M1553: Payment of Maintenance Fee, 12th Year, Large Entity. |
Date | Maintenance Schedule |
Nov 01 2014 | 4 years fee payment window open |
May 01 2015 | 6 months grace period start (w surcharge) |
Nov 01 2015 | patent expiry (for year 4) |
Nov 01 2017 | 2 years to revive unintentionally abandoned end. (for year 4) |
Nov 01 2018 | 8 years fee payment window open |
May 01 2019 | 6 months grace period start (w surcharge) |
Nov 01 2019 | patent expiry (for year 8) |
Nov 01 2021 | 2 years to revive unintentionally abandoned end. (for year 8) |
Nov 01 2022 | 12 years fee payment window open |
May 01 2023 | 6 months grace period start (w surcharge) |
Nov 01 2023 | patent expiry (for year 12) |
Nov 01 2025 | 2 years to revive unintentionally abandoned end. (for year 12) |