Replication is a data backup or mirroring technique in which identical data is saved to two or more arrays. A host, such as a server, writes the data to a first storage system. The data is then written from the first storage system to a second storage system.
The replication of transactions from a source array to a destination array is often performed synchronously, with each transaction acknowledged before another transaction is sent. As used herein, transactions will generally refer to write transactions from a host to a source array or from a source array to a destination array, which may also be termed IOs (input-outputs).
However, in synchronous replication, individual transactions may need to have cross reference dependencies supplied by a central source on each distributed system. Synchronous replication requires an acknowledgement from the destination array which means that the host IO is exposed to the latency of the link between the source and destination arrays. This adds significant overhead that may slow the number of transactions that can be completed in a time period and may limit the number of different arrays that may be used.
Methods and systems described herein use an asynchronous streaming process to replication transactions from a source array to a destination array. However, asynchronous operations may be vulnerable to issues such as scrambled data from link latency, overwriting of data in collisions, and lost transactions due to link or node failures. Further, asynchronous streaming replication should avoid write ordering issues whereby transactions are applied in different orders on the source and destination arrays. If the stream is interrupted the data on the destination should be in a time consistent state, in other words that the transactions are applied in the same order on both source and target arrays.
The techniques described herein may help mitigate these issues by associating the transactions using a common property. This allows the creation of a set of transactions that may be transferred between systems and processed with a significantly lower overhead than attempting to manage each independent transaction. The design of the solution has a number of components operating on each origination node of the source array which combine to create a set. Transactions are tagged using a cluster wide correlator and added into a subset using the same correlator.
A set is defined as a number of transactions which share a common property for processing purposes, for example, the interval of time in which the transaction were received. The problem becomes more complex when applied to a distributed system with a number of nodes all operating independently. To solve this problem in clustered processing environment, each origination node in the source array will create a subset using the same common property. The subset will be tagged with an origination node identifier and a target node identifier such that all transactions in the subset relate to a single node, the origination node, and may be processed by a single node, the target node. Therefore, each set will comprise of a number of subsets, one for each origination node in the source array.
When a new cluster wide correlator is provided, the subsets relating to the preceding cluster wide correlator are considered complete, and each origination node will report the number of transactions in its subset to a central control point which will accumulate this meta-data from all origination nodes. The central control point will then respond to the origination nodes with a total number of transactions for the complete set along with any dependency data to ensure sets are applied in a strict sequence. Each origination node will then generate a subset manifest which contains the number of transactions in the local subset, the number of transactions in the complete set and the previous set that must be processed before this set can be processed.
The distributed manifest management design keeps track of a sequence of transactions on a distributed system by providing a mechanism for associating independent transactions with a common property across a distributed platform. Further, by sequencing sets of transactions rather than each individual transaction solutions can be scaled much larger. These transaction sets can be used for the purposes of transmission and processing across a number of distributed platforms.
The use of the distributed set management also allows a number of transactions to be in progress at the same time, and for all transactions to be recovered in the correct order. Signals are sent between the origination nodes in the source array related to the sequence of transactions both on creation of sets and subsets and also when replication operations are completed. As transactions are completed on all origination nodes of the source array, the last completed transaction is circulated to all origination nodes in the source array which then ratchet to that particular transaction number.
In the event of a node failure in the cluster the data required to generate this meta-data for the subset accountancy may be spread across the surviving origination nodes in the cluster. Other origination nodes in the cluster may recover the failed transactions and continue the sequence from the last completed transaction seamlessly. The sequence of transactions may be replayed from the oldest transaction found on all remaining origination nodes in the source array. This allows for the tracking a sequence of transactions across a distributed cluster of nodes and recovering the sequence in the event of a node failure in the distributed system.
A partial manifest recovery mechanism allows the recovery of data sets from across a distributed system after a node failure during asynchronous streaming replication. Each surviving origination node may generate a partial manifest for the recovered subset meta-data which will be forwarded to the target node along with a unique sender node identifier which represents the origination node which recovered that part of the subset.
The logged transactions and partial subset manifests are transferred to the target node which determines if the subset is complete by comparing the number of unique transactions received with the contents of the manifest. The partial manifest design allows each origination node to account only for transactions it has tracked and send a partial manifest for the transactions recovered by that origination node. The target node should have received, or be in the process of receiving, all of the transactions. The target node will then receive a number of unique partial manifests for this subset, which it can then accumulate to complete the set. When the target node has received all of the transactions for this subset as indicated by the accumulated partial manifests then the subset is complete and can be processed when the dependent set is complete.
During synchronous replication any write transactions are replicated to the destination array while retaining exclusive access to the region of the storage volume. Only when the destination array has responded will the next write transaction to that region of the storage volume be permitted.
During asynchronous replication write transactions are written to the source array and acknowledged back to the connected host server before being replicated to the remote storage array. To maintain data integrity, the order of write transactions that are applied on the source array is retained on the target array, therefore the previous data cannot be overwritten until it has been replicated to the destination array. However access to the local volume must be permitted.
In the event of a collision, e.g., wherein a connected host server attempts to write to a region of the storage volume before the previous data in that region has been replicated, techniques described herein preserve this data without resorting to logging the data to a journal. To perform this function, all write transactions that are being replicated are tracking during asynchronous streaming replication using a revision request that tracks pages in a page cache memory. In the event of a collision the revision request detects this collision and may create a duplicate of the affected pages on two nodes of the cluster for redundancy purposes.
A log entry that describes the revision page may be created between the origination node and the target node to protect against node failure. The advantage of using revision pages is to hold collisions without resorting to a journal to track every transaction.
In a journal based design, host write transactions are written to the source array and logged to a transaction journal, which is used to hold these transactions until they can be replicated to the destination array. A large journal may be used to hold many minutes of backlog data, making the system resistant to failures. However, the use of a journal to store write ordered transactions across a cluster of nodes may become very complex as the number of arrays increases and the backlog introduces some latency into the system, which may slow the replication process.
The techniques described herein, use a page cache memory to enhance the speed and scalability of the replication process. In a cache memory design, host write transactions are written to the source array and held in cache memory for replication to the destination array. The speed of the cache memory provides fast access to the transaction data being held in cache memory. Further, in comparison to a journal based design, a smaller number of transactions are backlogged waiting for a response from a journal.
A chip set 104 may provide interconnects 106 between the processors 102 and other units in the node 100. The interconnects 106 may include Peripheral Component Interconnect Express (PCIe), Fibre Channel, Quick Path interconnect (QPI) from Intel, Hypertransport® from AMD, Ethernet, and the like. In some examples, a bus may be used instead of, or in addition to, the interconnects 106.
The interconnects 106 may couple input/output chips 108 to the chip set 104. The input/output (I/O) chips 108 may control communications with other nodes 100 in a cluster, for example, through a router or switch 110. The I/O chips 108 may include, for example, an I/O controller hub (ICH) from Intel or a fusion controller hub (FCH) from AMD, among others. The switch 110 may provide PCIe, or other links, between the node and every other node in an array. The switch 110 may be combined with other chips, such as the I/O chip 108. In some examples, the switch 110 may be an independent chip, such as a PCIe switch from Integrated Device Technology.
Cache memory 112 may be coupled to the processors 102 through the chip set 104. Other cache memory 114 may be used by the I/O chips 108 to provide buffers during data transfer. The cache memory 112 or 114 may include paged cache memory, for example, storing data in blocks. The cache memory 112 or 114 may be integrated with the processors 102 or the I/O chips 108, respectively, or may be separate RAM that is coupled to the processors 102 or the I/O chips 108 through interconnects 106.
The interconnects 106 may couple to a number of interface slots 116. The interface slots 116 may provide an interface to additional units, such as hosts, drives, solid state drives, nodes 100 on other arrays, and the like. In some examples, solid state drives may be directly plugged into the interface slots 116 to provide storage volumes. In other examples, external disk arrays may interface to the node 100 through cards seated in the interface slots 116.
A storage device 118, functioning as a non-transitory, machine readable medium, may be used to hold code modules to instruct the processors 102 to perform the functions described herein. The storage device 118 may include memory closely coupled to the processors, as indicated in
Sets may be managed by a subset manager 124 and a set manager 126. The subset manager 124 may group the transactions into sets, based in part on a time interval in which the transaction occurred, and then build a subset manifest for transactions to the node 100, based on a total count of transactions received from the set manager 126. The set manager 126 may receive the transaction count from the subset manager on each of a number of nodes and create a total count of all transactions that occurred within the time interval. While the set manager 126 may be present on every node 100 in an array, it may only be active on one on the nodes at any one time.
A remote copy ticket dispenser 128 may provide a replication ticket for a transaction to be replicated to a destination array. A detector 130 may identify link failures and determine reasons for the link failure, for example, if a communications link has failed or if a node has failed. A failure handler 132 may determine actions needed to communicate transactions to a target node. A replayer 134 may play back logged, or mirrored, transactions for a failed origination node so that the accounting for the transactions may be performed to create the manifests. A collision detector 136 may detect when a host is attempting to overwrite a cache memory page that has not been completely replicated. A revision page tagger 138 may mark a cache memory page as protected. A page merger 140 may combine pages that have detected collisions and have the same sequence number. A snapshot system 142 may capture a snapshot of the source array at a point in time to enable resynching of the source array and destination array. A synching system 144 may use the snapshot to resynchronize the source array and the target array, for example, after a restart.
The items shown in
This example in
The hosts 306 may provide write transactions to source nodes 302A-302H in the source array 302 to be saved to a volume. The transactions may be copied to the destination array 304 for replication. A transaction provided to an origination node 302A-302H in the source array 302, such as node 302A, may be replicated in a target node 304A-304H in the destination array 304. Specific nodes, such as 302A and 304A may be paired, but this may not be present in every example.
The host application uses read and write transactions to the storage array to access data. Although many different transactions may be issued concurrently, dependent ordering is protected as the transaction will be issued serially from the host application. The transactions are ordered correctly as they are synchronous, and, thus, the host will not receive an acknowledgement until the transaction is complete. Further, any dependent requests will be delayed until the current transaction is complete. Accordingly, using synchronous replication the order of the write transactions is naturally preserved.
In contrast to synchronous replication, asynchronous replication does not necessarily maintain the order of the write transactions. In asynchronous replication, the host application will receive a write acknowledgement before the transaction has been replicated. This may allow a new write transaction to be applied to the source volume before the old transaction has been replicated to the target volume. Thus, the transactions may be reordered on the target array, scrambling the data.
This problem may be compounded by the clustered architecture of the storage array. Attempting to provide dependencies between individual transactions across the nodes of the storage array would be difficult or impossible. To simplify the problem transactions are grouped into sets of transactions and applied in blocks on the target array. Until a complete set is applied the group will not be in a consistent state. If the set cannot be fully applied then the replication group will be inconsistent. This is further discussed with respect to
As for the example of
The sequence number may be combined with other identification to generate a replication ticket, for example, in a remote copy ticket dispenser. Transactions that require synchronous or asynchronous periodic replication each request a ticket from the remote copy ticket dispenser. The ticket is used to track the replication transactions and may provide a simple level of collision handling when multiple transactions wish to access the same region of a volume concurrently. In asynchronous streaming, the tickets are associated into sets, which may be used to provide dependencies between each set to ensure that the sets of IOs are applied in the correct sequence.
A set is cluster wide, e.g., across a source array, and includes a number of subsets, one subset per replication group per node. A set is a collection of transactions that have replication tickets that are created by cluster sequence number and replication group id:
A subset is a subcomponent of a set which covers only those transactions local to a single origination node, for example, 0 to 7:
For example, the sequence number may represent sequential 100 ms intervals during which the associated transactions arrived. The replication group identification may represent all of the transactions for writing an object, such as a particular command, directory, or file. As host write transactions are received they request a replication ticket which is associated with a set and subset. During subset creation a target node is selected to which all transactions within this subset will be transmitted.
The replication ticket is logged to mirror memory for node down handling, e.g., to protect from node failures. The subset count of the number of transactions is incremented to include this transaction. The replication transaction is transmitted to the remote array with a subset tag containing the set details, e.g., a subset manifest.
When the cluster sequencer increments each of the origination nodes 706-712 will be interrogated for their subset totals 714 for the previous cluster sequence number by the set manager 702. Each subset manager 704 will send 716 the subset totals 714 for each asynchronous streaming replication group to the set manager 702. The set manager 702 combines the subset totals 714 into a set total and inform each of the subset managers 704 of this total which the subset managers 704 will use to create a subset manifest 718 that includes at least these totals. It will also resolve the dependency between this set and any predecessors. Each subset manager 704 will then transmit a manifest message to the destination array which contains both the set and subset totals and the dependent sequence number.
Each of the origination nodes 706-712 may send a subset manifest 718 to a corresponding target node 802-808. The subset manager 810 sends acknowledgements to the source array as it receives and protects the transactions prior to being processed by the set manager. The subset manager 810 in each target node 802-808 may confirm to a set manager 720 when all transactions are received in each subset.
As described with respect to
The set manager 918 returns a message 920 instructing the subset manager 906 to apply the subset, e.g., send them to a volume 922 for storage. The subset manager 906 then applies the transactions 924 to the volume 922, which returns acknowledgements 926 indicating that the subset has been applied. The subset manager 906 then sends a message 928 to the set manager 918 to inform it that the subset has been applied. The set manager 918 replies with a set complete message 930. Once all subsets in a set are completed, the set manager 918 may send a message to the set manager of the source array informing it that the set is completed.
As transactions 1004 are added to the subset 1002 they are issued with an IO index (ioidx) 1010 which is used to correlate transactions 1002 within the subset 1002. When the cluster seqno increments, the subset 1002 is complete and a subset manifest 1010 is generated which contains the subset and set totals. The set manager receives the subset totals and returns the sum of these values to each subset manager to be included in the subset manifest 1012, for example, in place of X.
At block 1110, the transaction is added to a subset by the origination node. At block 1112, a collision check is performed by the origination node to determine if the transaction will overwrite data that is still being replicated. At block 1114, if a collision has been detected, for example, between data with different sequence numbers, a revision page may be created by copying the data to a free cache memory page, as described further with respect to
At block 1124, the target node on the remote array receives the transaction from the origination node of the source array. At block 1126, the target node adds the transaction to a local subset, and, at block 1128, returns an acknowledgement to the origination node.
The origination node receives the acknowledgement at block 1122 and proceeds to block 1130 to determine if the subset is complete. A number of transactions may be sent following the method 1100 from block 1102 to block 1130. Further, it may be noted that a number of other origination nodes in the source array are also following this procedure to send transactions in the set to various target nodes on the destination array.
At block 1132, the cluster sequence number 1108 is updated, for example, when the time interval ends and a new interval begins. At this point, the origination node sends a count of the transactions in the subset to the set manager, which returns the total count of transactions to the origination node. The origination node creates the subset manifest at block 1134, which is added to the subset 1136 and, at block 1138, transferred to the target node, for example, by the procedure of steps 1124-1130. At this point, the origination node determines that the subset is complete, and releases the replication ticket at block 1140.
At block 1142, the target node confirms that the subset is received, for example, by comparing the subset manifest received to the manifest it has created as transactions were received. As noted with respect to
The method 1100 provides an overview of the steps taking place, but not every step needs to be present in every example. Further, steps may be included in more detailed views of particular parts of the method. Examples of these are described further with respect to
The method 1500 begins at block 1502, when a first write transaction is received in an origination node from a host. At block 1504, the transaction is saved to a cache memory page. At block 1506, a replication of the transaction to a target node in a destination array is initiated. At block 1508, the storage of the transaction on a volume coupled to the node is completed and, at block 1510, the transaction is acknowledged to the host. At block 1512, a second write transaction is received from the host that overlaps the first write transaction. At block 1514, a collision between the first write transaction and the second write transaction is detected. At block 1516, the second write transaction is prevented from overwriting the first write transaction. This may be performed by merging transactions onto a single page, for example, if a collision happens in a single sequence number, or by creating revision pages, for example, if a collision happens between sequence numbers. This is discussed further with respect to
In this example, the data in the cache memory page 1602 is in cluster sequence number 1606 when it is first received. The cache memory page 1602 is transferred to a cache memory page 1608 that is a named page 1610, for example, using the cluster sequence number 101. As there are no other pages that are attempting to be stored in the same place as a named page 1610, there are no collisions, and no need to create cache memory pages that are revision pages 1612.
As there are no collisions, the cache memory page 1608 in the named page 1610 is provided a ticket number 1614 to form a transport page 1616. The transport page 1616 is then sent to the remote cache memory, for example, in the target node. The remote page 1618 can then be added to the remote subset and processed.
If two pages arrive in the named page 1610, for example, with a single cluster sequence number, the transactions for the second page may overwrite the first page. This can be handled by merging the transactions into a single page before transferring the merged page under a single ticket number.
However, the cache memory page 1802 may still be in the process of transferring. In this case, a potential collision is detected. To protect the data, and free the named page 1610, the cache memory page 1802 is copied to a free page, creating a revision page 1810. The duplicate of the cache memory page 1802 may be made on a different node with a log entry created between these nodes to indicate the details of the revision page 1810. The instantiation of the revision page 1810 in a new location allows the named page 1610 to be released for the host to update as usual.
The revision page 1810 may be given a ticket number, forming a first transport page 1812, which is copied to a remote page 1818 and processed by the target array. The second page 1820 may then be given a subsequent ticket number to form another transport page 1822, before being sent on to a remote page 1824 for processing by the target node.
When the remote copy group is in sync, sets 1902 will be flowing between the arrays. As sets are applied, the RPO 1904 moves forward with the sets. The RPO 1904 denotes the amount of data loss that an enterprise can withstand in the event of a disaster without any significant impact to their business operations. Asynchronous streaming replication will provide an RPO 1904 of 30 seconds or less without the host latency impact of synchronous replication.
However, it may not be possible to track each set for group restart purposes. Further, there is no set mechanism that allows a consistency point to be determined, for example, to restart the process in case of failure. For this consistency point a snapshot is required. Periodically a coordinated snapshot (CSS) 1906 may be taken on both the source and destination volumes. The snapshot request will be inserted into the data stream 1908. The CSS 1906 may provide a group consistent restart point between source and target arrays.
Fault tolerance may also be an issue for asynchronous streaming replication. The main concerns for fault tolerance are a failed link and a failed node. Link failures may cause the system to become unbalanced with respect to replication link capacity, which may lead to some or all replication groups to stop. A group policy can be defined which will allow the user to prioritize which groups to stop if the solution become unsustainable. This policy monitors the utilization of source array cache and may be triggered when the acceptable usage limits are breached. Failed nodes may also cause problems for the replication solution, and may be handled using the same policy. Techniques for providing fault tolerance for link failures and node failures are described with respect to
In this example, the succeeding transactions 2010 are transferred to a second origination node 2014 that has an operational link 2016 to a second target node 2018. From the second origination node 2014, the transactions are transferred to the second target node 2018 over the operational link 2016. Once at the second target node 2018, the transactions may be transferred to the target node 2004.
This technique assumes sufficient bandwidth exists in the remaining operational links between the source array 2002 and the destination array 2020 to handle the normal traffic in addition to the traffic that had been carried by the failed link 2006. As noted, a policy may be defined to prioritize transfers of transactions between the arrays if overload conditions may lead to replication failures.
If origination node 1 2102 fails, the transactions may be recovered and sent by the mirror nodes 2104, 2106, and 2108. The transactions may also be replayed and relogged by the mirror nodes 2104, 2106, and 2108. However, the subset for origination node 1 2102 will have become fragmented across the source array 2110.
Accordingly, each mirror node 2104, 2106, and 2108 may replay the transactions it has recovered, and create a partial subset to log the details for the transaction counts. The set manager for the source array may request set totals for any inflight sets. Each mirror node will respond with subset totals for the failed node.
The set manager will reconstruct the total transaction count for the failed node, e.g., origination node 1 2102, from the partial counts from each mirror node 2104, 2106, and 2108 and return a set total to each mirror node 2104, 2106, and 2108. Once the mirror nodes 2104, 2106, and 2108 have the set totals, they can rebuild a partial subset manifest 2112 for the transaction they have recovered. The partial manifests may each be sent to the target node by operational links between the mirror nodes and other target nodes, for example, as discussed with respect to
At the target node 2114, the partial set manifests are accumulated to create a set manifest for the failed node. This can be used to confirm that the set is complete. As for a link failure, a node failure may lead to replication failure due to the extra loading. Accordingly, as for the link failure, policies may be defined to prioritize the transactions for replication.
While the present techniques may be susceptible to various modifications and alternative forms, the exemplary examples discussed above have been shown only by way of example. It is to be understood that the technique is not intended to be limited to the particular examples disclosed herein. Indeed, the present techniques include all alternatives, modifications, and equivalents falling within the scope of the present techniques.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/US2015/047391 | 8/28/2015 | WO | 00 |
Publishing Document | Publishing Date | Country | Kind |
---|---|---|---|
WO2017/039580 | 3/9/2017 | WO | A |
Number | Name | Date | Kind |
---|---|---|---|
5666514 | Cheriton | Sep 1997 | A |
5734818 | Kern et al. | Mar 1998 | A |
5806074 | Souder | Sep 1998 | A |
6230246 | Lee et al. | May 2001 | B1 |
6247023 | Hsiao et al. | Jun 2001 | B1 |
6317755 | Rakers | Nov 2001 | B1 |
6658540 | Sicola et al. | Dec 2003 | B1 |
7103586 | Holenstein et al. | Sep 2006 | B2 |
7188223 | Haase | Mar 2007 | B1 |
7519633 | Wolfgang | Apr 2009 | B2 |
7624109 | Testardi | Nov 2009 | B2 |
8086569 | Jasrasaria | Dec 2011 | B2 |
8301593 | Hoffmann et al. | Oct 2012 | B2 |
8396937 | O'Krafka et al. | Mar 2013 | B1 |
8458650 | Andrade et al. | Jun 2013 | B2 |
8533404 | Condit et al. | Sep 2013 | B2 |
8620862 | Holenstein et al. | Dec 2013 | B2 |
8639818 | Vladimirov et al. | Jan 2014 | B1 |
8676773 | Kumar et al. | Mar 2014 | B2 |
8700563 | Thomson et al. | Apr 2014 | B1 |
8799746 | Baker et al. | Aug 2014 | B2 |
8806274 | Chatterjee et al. | Aug 2014 | B1 |
8838539 | Ashcraft et al. | Sep 2014 | B1 |
8898277 | Chen et al. | Nov 2014 | B2 |
8949801 | Andrade et al. | Feb 2015 | B2 |
8977596 | Montulli et al. | Mar 2015 | B2 |
10152398 | Ramakrishnan et al. | Dec 2018 | B2 |
20040024807 | Cabrera et al. | Feb 2004 | A1 |
20040158588 | Pruet | Aug 2004 | A1 |
20050050115 | Kekre | Mar 2005 | A1 |
20050102554 | Zohar et al. | May 2005 | A1 |
20050256972 | Cochran et al. | Nov 2005 | A1 |
20060047713 | Gornshtein et al. | Mar 2006 | A1 |
20060155770 | Asher et al. | Jul 2006 | A1 |
20060182050 | Dohm | Aug 2006 | A1 |
20070011213 | Burton et al. | Jan 2007 | A1 |
20070156788 | Wray | Jul 2007 | A1 |
20070250672 | Stroberger et al. | Oct 2007 | A1 |
20080005507 | Madnani et al. | Jan 2008 | A1 |
20080016300 | Yim et al. | Jan 2008 | A1 |
20080022059 | Zimmerer et al. | Jan 2008 | A1 |
20090049054 | Wong et al. | Feb 2009 | A1 |
20090157766 | Shen et al. | Jun 2009 | A1 |
20090313311 | Hoffmann | Dec 2009 | A1 |
20100023715 | Jibbe et al. | Jan 2010 | A1 |
20100082540 | Isaacson | Apr 2010 | A1 |
20100191884 | Holenstein | Jul 2010 | A1 |
20100306256 | Blackman | Dec 2010 | A1 |
20110010498 | Lay et al. | Jan 2011 | A1 |
20110099342 | Ozdemir | Apr 2011 | A1 |
20120254120 | Fang et al. | Oct 2012 | A1 |
20120310880 | Giampaolo | Dec 2012 | A1 |
20130145105 | Sawicki | Jun 2013 | A1 |
20130290249 | Merriman et al. | Oct 2013 | A1 |
20130325804 | Bachar | Dec 2013 | A1 |
20130326055 | Chatterjee et al. | Dec 2013 | A1 |
20130346713 | Beeken | Dec 2013 | A1 |
20140059311 | Oberhofer | Feb 2014 | A1 |
20140207850 | Bestler et al. | Jul 2014 | A1 |
20140258226 | Noteboom | Sep 2014 | A1 |
20140258777 | Cheriton | Sep 2014 | A1 |
20140280871 | Brown | Sep 2014 | A1 |
20140281131 | Joshi | Sep 2014 | A1 |
20150106549 | Brown et al. | Apr 2015 | A1 |
20150154262 | Yang et al. | Jun 2015 | A1 |
20150169361 | Busaba | Jun 2015 | A1 |
20150193346 | Yamamura | Jul 2015 | A1 |
20150227536 | Montulli et al. | Aug 2015 | A1 |
20150248237 | Tsirkin | Sep 2015 | A1 |
20150341237 | Cuni et al. | Nov 2015 | A1 |
20160077927 | Bhargava et al. | Mar 2016 | A1 |
20160171002 | Bendel | Jun 2016 | A1 |
20170083250 | Beeken | Mar 2017 | A1 |
20180210781 | McBride et al. | Jul 2018 | A1 |
20180260146 | Zhou | Sep 2018 | A1 |
20190339872 | Kucherov | Nov 2019 | A1 |
Number | Date | Country |
---|---|---|
103473252 | Dec 2013 | CN |
2860912 | Apr 2015 | EP |
WO-2005045606 | May 2005 | WO |
WO-2017039577 | Mar 2017 | WO |
Entry |
---|
International Search Report & Written Opinion received in PCT Application No. PCT/US2015/047391, dated May 30, 2016, 12 pages. |
Maruthachalam D. et al., “A Distributed System Design for Next Generation Storage and Remote Replication,” The Fifth International Conference on the Applications of Digital Information and Web Technologies (ICADIWT 2014), Feb. 17-19, 2014, pp. 22-27. |
Arany Péter et al., “SSD Wear_Leveling_Count = 17,” Mar. 20, 2018, <https://serverfault.comiquestions/901435issd-wearaleveling-count--17>. |
European Search Report and Search Opinion Received for EP Application No. 15903168.1, dated Nov. 7, 2018, 18 pages. |
European Search Report and Search Opinion Received for EP Application No. 15903169.9, dated Oct. 17, 2018, 10 pages. |
International Search Report & Written Opinion received in PCT Application No. PCT/US2015/047381, dated May 30, 2016, 13 pages. |
International Search Report & Written Opinion received in PCT Application No. PCT/US2015/047384, dated May 25, 2016, 10 pages. |
International Search Report & Written Opinion received in PCT Application No. PCT/US2015/047388, dated May 30, 2016, 13 pages. |
Marty et al., “How Do I interpret Hdd S.M.A.R.T Results?,” Aug. 27, 2017, <https:flaskubuntu.corniguestions120393/how-do-i-interpret-hdd-s-m-a-r-t-results/20439#20439>,. |
Microsoft, “The Model for Distributed Systems,” (Research Paper), Windows Dev Center, Apr. 1, 2002, 1 page, https:firrisdn,microsoft.cornien-usilibrarylwinclowsidesktoplaa378717(v=vs,85).aspx. ,. |
Nick et al., “Samsung SSD 'Wear_Leveling_count' meaning,” Oct. 19, 2018, <https://superuser.comlquestions/1037644/samsung-ssd-wear-leveling-count-meaning>. |
Oracle, “Database Design Techniques for Real Application Clusters,” (Research Paper), Oracle9i Real Application Clusters Deployment and Performance, Release 1 (9.0.1), Feb. 1, 2002, 17 pages, httplidocs.oracle.com/cd/A91202_01/901_doc/rac.901/a89870/clesign.htm. |
Zaharia M. et al., “Resilient. Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing,” Mar. 14, 2012, 14 pages, https://www.cs.berkeley.edu/—mateilpapers/2012/nsdi_spark.pdf. |
Number | Date | Country | |
---|---|---|---|
20180011914 A1 | Jan 2018 | US |