一句话:基于线程局部确定性与汇总读值的读写交错记录,实现多线程程序的高效确定性重放。
确定性重放多线程程序常面临高内存与运行时开销:已有方法往往需要多次重放迭代才能复现程序输出,或可能向外部源产生非确定性的输出序列。本文提出 AggrePlay,一种基于读写交错记录的确定性重放技术,利用线程局部确定性和汇总读值来降低记录负担。在记录阶段,AggrePlay 为每个线程在每个内存位置上记录一个读计数向量时钟;在重放阶段,每个线程在写事件前将记录的向量时钟与当前读计数进行比对,以此决定是否允许该写事件发生。作者在 Splash2x 基准套件和两个真实应用上开展实验,结果表明:平均而言,AggrePlay 在压缩日志大小上取得更好的缩减,记录阶段运行时减速改善 56%,重放阶段的成功概率比现有工作高 41.58%。
Deterministic replay presents challenges and often results in high memory and runtime overheads. Previous studies deterministically reproduce program outputs often only after several replay iterations or may produce a non-deterministic sequence of output to external sources. In this paper, we propose AggrePlay, a deterministic replay technique which is based on recording read-write interleavings leveraging thread-local determinism and summarized read values. During the record phase, AggrePlay records a read count vector clock for each thread on each memory location. Each thread checks the logged vector clock against the current read count in the replay phase before a write event. We present an experiment and analyze the results using the Splash2x benchmark suite as well as two real-world applications. The experimental results show that on average, AggrePlay experiences a better reduction in compressed log size, and 56% better runtime slowdown during the record phase, as well as a 41.58% higher probability in the replay phase than existing work.
DOI 原文 ·
@inproceedings{paperbot5103,
title = {AggrePlay: efficient record and replay of multi-threaded programs},
author = {Ernest Pobee and W. K. Chan},
booktitle = {FSE},
year = {2019},
doi = {10.1145/3338906.3338959}
}