Systems and Methods for Constructing Composable Persistent Data Structures
First Claim
1. A method, comprising:
- performing by one or more computing nodes in a system that supports multithreading;
beginning execution of a multithreaded application that comprises a plurality of operations targeting a concurrent data structure implemented in persistent memory, wherein the concurrent data structure is accessible by a plurality of threads of the multithreaded application;
performing, on behalf of one or more threads of the application, one or more operations that target the concurrent data structure, wherein, for at least some of the one or more operations, said performing comprises;
creating an entry in a signal log, wherein the entry represents an invocation of the operation and a state of its response;
persisting the entry in the signal log;
persisting the operation on the concurrent data structure in the persistent memory; and
returning an indication of the state of its response to the thread on whose behalf the operation was performed;
performing, in response to a failure of a computing node on which the multithreaded application is executing, the persistent memory, or a connection between a computing node on which the multithreaded application is executing and the persistent memory, a recovery operation that returns a respective response for each of at least one other operation that targets the concurrent data structure and for which an entry was created in the signal log;
wherein the returned responses of each of the one or more operations and the returned respective responses for each of the at least one other operation collectively represent a consistent state of the data structure.
1 Assignment
0 Petitions
Accused Products
Abstract
A technique referred to as “data structure chronicles” is described that may be used to build strictly failure resilient persistent concurrent data structures. A “chronicle” maintains a persistent history of operations invoked on a persistent data structure that can be replayed to recover the current consistent state of the data structure after a failure. The chronicle technique may also enable composability of data structure operations with the enclosing application. In addition, the chronicle technique is non-blocking, a desirable progress condition for concurrent data structures. A lock free, non-blocking chronicle stack algorithm is described that may outperform a lock-based implementation in the presence of high contention. In addition, a lock free, non-blocking chronicle queue algorithm is described.
-
Citations
20 Claims
-
1. A method, comprising:
performing by one or more computing nodes in a system that supports multithreading; beginning execution of a multithreaded application that comprises a plurality of operations targeting a concurrent data structure implemented in persistent memory, wherein the concurrent data structure is accessible by a plurality of threads of the multithreaded application; performing, on behalf of one or more threads of the application, one or more operations that target the concurrent data structure, wherein, for at least some of the one or more operations, said performing comprises; creating an entry in a signal log, wherein the entry represents an invocation of the operation and a state of its response; persisting the entry in the signal log; persisting the operation on the concurrent data structure in the persistent memory; and returning an indication of the state of its response to the thread on whose behalf the operation was performed; performing, in response to a failure of a computing node on which the multithreaded application is executing, the persistent memory, or a connection between a computing node on which the multithreaded application is executing and the persistent memory, a recovery operation that returns a respective response for each of at least one other operation that targets the concurrent data structure and for which an entry was created in the signal log; wherein the returned responses of each of the one or more operations and the returned respective responses for each of the at least one other operation collectively represent a consistent state of the data structure. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10)
-
11. A system, comprising:
-
one or more processor cores; a volatile memory coupled to the one or more processor cores; and a byte-addressable persistent memory coupled to the one or more processor cores; wherein the persistent memory stores a concurrent data structure; wherein the volatile memory stores; program instructions that when executed on the one or more processor cores cause the one or more processor cores to implement a multithreaded application that invokes a plurality of operations targeting the concurrent data structure; and program instructions that when executed on the one or more processor cores cause the one or more processor cores to implement a persistent data structure support module; wherein in response to invocation by a thread of the multithreaded application of an operation targeting the concurrent data structure, the persistent data structure support module is configured to attempt to perform and persist the operation targeting the concurrent data structure and to return a response for the operation to the thread; and wherein in response to failing to successfully perform and persist the operation targeting the concurrent data structure and to return the response for the operation prior to a failure in the system, the persistent data structure support module is configured to perform a recovery operation that returns a consistent state of the concurrent data structure to the thread. - View Dependent Claims (12, 13, 14, 15)
-
-
16. A non-transitory, computer-readable storage medium storing program instructions that when executed on one or more computers cause the one or more computers to perform:
-
beginning execution of a multithreaded application that comprises a plurality of operations targeting a concurrent data structure implemented in persistent memory, wherein the concurrent data structure is accessible by a plurality of threads of the multithreaded application; initiating, by a given thread of the application, an operation targeting the concurrent data structure, wherein said initiating comprises storing, in the concurrent data structure, an entry comprising a thread identifier, an operation identifier, and a return field; and receiving, by the given thread, a response for the operation that represents a consistent view of the concurrent data structure. - View Dependent Claims (17, 18, 19, 20)
-
Specification