000223699 001__ 223699
000223699 005__ 20180913064048.0
000223699 037__ $$aREP_WORK 000223699 245__$$aOn Verifying Causal Consistency
000223699 269__ $$a2016 000223699 260__$$c2016
000223699 336__ $$aReports 000223699 520__$$aCausal consistency is one of the most adopted consistency criteria for distributed implementations of data structures.  It ensures that operations are executed at all sites according to their causal precedence. We address the issue of verifying automatically whether the executions of an implementation of a data structure are causally consistent. We consider two problems: (1) checking whether one single execution is causally consistent, which is relevant for developing testing and bug finding algorithms, and (2) verifying whether all the executions of an implementation are causally consistent.    We show that the first problem is NP-complete. This holds even for the read-write memory abstraction, which is a building block of many modern distributed systems. Indeed, such systems often store data in key-value stores, which are instances of the read-write memory abstraction. Moreover, we prove that, surprisingly, the second problem is undecidable, and again this holds even for the read-write memory abstraction.  However, we show that for the read-write memory abstraction, these negative results can be circumvented if the implementations are data independent, i.e., their behaviors do not depend on the data values that are written or read at each moment, which is a realistic assumption.  We prove that for data independent implementations, the problem of checking the correctness of a single execution w.r.t. the read-write memory abstraction is polynomial time. Furthermore, we show that for such implementations the set of non-causally consistent executions can be represented by means of a finite number of register automata. Using these  machines as observers (in parallel with the implementation) allows to reduce polynomially the problem of checking causal consistency to a state reachability problem. This reduction holds regardless of the class of programs used for the implementation, of the number of read-write variables, and of the used data domain. It allows leveraging existing techniques for assertion/reachability checking to causal consistency verification. Moreover, for a significant class of implementations, we derive from this reduction the decidability of verifying causal consistency w.r.t. the read-write memory abstraction.
000223699 700__ $$aBouajjani, Ahmed 000223699 700__$$aEnea, Constantin
000223699 700__ $$0240335$$aGuerraoui, Rachid$$g105326 000223699 700__$$0249522$$aHamza, Jad$$g201293
000223699 8564_ $$s532149$$uhttps://infoscience.epfl.ch/record/223699/files/draft.pdf$$yPreprint$$zPreprint
000223699 909C0 $$0252019$$pLARA$$xU11739 000223699 909C0$$0252114$$pDCL$$xU10407
000223699 909CO $$ooai:infoscience.tind.io:223699$$pIC$$preport 000223699 917Z8$$x201293
000223699 937__ $$aEPFL-REPORT-223699 000223699 973__$$aEPFL
000223699 980__ aREPORT