CSSTs: A Dynamic Data Structure for Partial Orders in Concurrent Execution Analysis
Abstract
Dynamic analyses are a standard approach to analyzing and testing concurrent programs. Such techniques observe program traces and analyze them to infer the presence or absence of bugs. At its core, each analysis maintains a partial order that represents order dependencies between events of the analyzed trace . Naturally, the scalability of the analysis largely depends on how efficiently it maintains . The standard data structure for this task has thus far been vector clocks. These, however, are slow for analyses that follow a non-streaming style, costing for inserting (and propagating) each new ordering in , where is the size of , while they cannot handle the deletion of existing orderings. In this paper we develop collective sparse segment trees (CSSTs), a simple but elegant data structure for generically maintaining a partial order . CSSTs thrive when the width of is much smaller than the size of its domain, allowing inserting, deleting, and querying for orderings in to run in time. For a concurrent trace, is bounded by the number of its threads, and is normally orders of magnitude smaller than its size , making CSSTs fitting for this setting. Our experimental results confirm that CSSTs are the best data structure currently to handle a range of dynamic analyses from existing literature.
Cite
@article{arxiv.2403.17818,
title = {CSSTs: A Dynamic Data Structure for Partial Orders in Concurrent Execution Analysis},
author = {Hünkar Can Tunç and Ameya Prashant Deshmukh and Berk Çirisci and Constantin Enea and Andreas Pavlogiannis},
journal= {arXiv preprint arXiv:2403.17818},
year = {2024}
}