Block storage by decoupling ordering from durability
First Claim
Patent Images
1. A method performed by a computing device, the method comprising:
- receiving multiple logical write commands from client code, the multiple logical write commands comprising write data for writing to a physical storage device;
buffering the write data of the multiple logical write commands in a buffer;
receiving flush commands from the client code to flush the write data to the physical storage device, the flush commands identifying at least a first flush epoch and a second flush epoch that is subsequent to the first flush epoch;
acknowledging the flush commands received from the client code by returning to the client code before the physical storage device acknowledges that the write data has been committed;
issuing first device write commands to send first write data of the first flush epoch to the physical storage device;
continuing to buffer second write data of the second flush epoch until an acknowledgement is received from the physical storage device that the first write data of the first flush epoch has been committed; and
responsive to the acknowledgement from the physical storage device that the first write data of the first flush epoch is committed, issuing second device write commands to send the second write data of the second flush epoch to the physical storage device.
2 Assignments
0 Petitions
Accused Products
Abstract
This document relates to data storage techniques. One example can buffer write commands and cause the write commands to be committed to storage in flush epoch order. Another example can maintain a persistent log of write commands that are arranged in the persistent log in flush epoch order. Both examples may provide a prefix consistent state in the event of a crash.
-
Citations
20 Claims
-
1. A method performed by a computing device, the method comprising:
-
receiving multiple logical write commands from client code, the multiple logical write commands comprising write data for writing to a physical storage device; buffering the write data of the multiple logical write commands in a buffer; receiving flush commands from the client code to flush the write data to the physical storage device, the flush commands identifying at least a first flush epoch and a second flush epoch that is subsequent to the first flush epoch; acknowledging the flush commands received from the client code by returning to the client code before the physical storage device acknowledges that the write data has been committed; issuing first device write commands to send first write data of the first flush epoch to the physical storage device; continuing to buffer second write data of the second flush epoch until an acknowledgement is received from the physical storage device that the first write data of the first flush epoch has been committed; and responsive to the acknowledgement from the physical storage device that the first write data of the first flush epoch is committed, issuing second device write commands to send the second write data of the second flush epoch to the physical storage device. - View Dependent Claims (2, 3, 4, 5, 6, 7)
-
-
8. A system comprising:
-
a physical storage device; a hardware processing resource; and computer-readable instructions that, when executed by the hardware processing resource, cause the hardware processing resource to; receive write commands from client code, the write commands comprising write data for writing to the physical storage device; store the write data of the write commands in a buffer; receive flush commands from the client code to flush the write data to the physical storage device, the write commands having corresponding flush epochs designated by the flush commands and the flush commands including at least a first flush command designating a first flush epoch and a second flush command designating a second flush epoch, the second flush command being received subsequent to the first flush command; send first write data for the first flush epoch to the physical storage device for storage thereon; return to the first flush command received from the client code before the physical storage device acknowledges that the first write data has been committed; defer sending second write commands for the second flush epoch to the physical storage device until receipt of confirmation that the first write data for the first flush epoch has been committed to the physical storage device; and after receipt of the confirmation that the first write data has been committed to the physical storage device, send the second write commands to the physical storage device. - View Dependent Claims (9, 10, 11, 12, 13, 14, 15)
-
-
16. A system comprising:
-
a physical storage device; and an asynchronous flushing driver configured to; receive write commands from client code, the write commands comprising write data for writing to the physical storage device; store the write data of the write commands in a buffer; receive flush commands from the client code to flush the write data to the physical storage device, the flush commands designating corresponding flush epochs of the write commands; send the write data to the physical storage device for storage thereon while maintaining the physical storage device in a prefix-consistent state; and acknowledge the flush command and return to the client code before the physical storage device acknowledges that the write data has been committed. - View Dependent Claims (17, 18, 19, 20)
-
Specification