An Optimal Vector Clock Algorithm for Multithreaded Systems
Abstract
Tracking causality (or happened-before relation) between events is useful for many applications such as debugging and recovery from failures. Consider a concurrent system with threads and objects. For such systems, either a vector clock of size is used with one component per thread or a vector clock of size is used with one component per object. A natural question is whether one can use a vector clock of size strictly less than the minimum of and to timestamp events. We give an algorithm in this paper that uses a hybrid of thread and object components. Our algorithm is guaranteed to return the minimum number of components necessary for vector clocks. We first consider the case when the interaction between objects and threads is statically known. This interaction is modeled by a thread-object bipartite graph. Our algorithm is based on finding the maximum bipartite matching of such a graph and then applying K\"{o}nig-Egerv\'{a}ry Theorem to compute the minimum vertex cover to determine the optimal number of components necessary for the vector clock. We also propose two mechanisms to compute such an vector clock when computation is revealed in an online fashion. Evaluation on different types of graphs indicates that our offline algorithm generates a size vector clock which is significantly less than the minimum of and . These mechanisms are more effective when the underlying bipartite graph is not dense.
Cite
@article{arxiv.1901.06545,
title = {An Optimal Vector Clock Algorithm for Multithreaded Systems},
author = {Xiong Zheng and Vijay Garg},
journal= {arXiv preprint arXiv:1901.06545},
year = {2019}
}