BulletTime: Time Dilation for High-Fidelity Tracing
Much of computer systems and architecture research depends on accurate, high-fidelity program tracing for simulation, profiling, and debugging. Unfortunately, with significant improvements in compute and memory instruction execution speeds, tracing frameworks incur frequent I/O to persist traced events to disk. We find that such delays can be bursty and asymmetric across application threads, resulting in an inadvertent reordering of application and system operations relative to untraced execution. In our analysis, such reordering often leads to significant changes in the behavior of the studied application, thereby contaminating insights from simulation and profiling studies of the corresponding captured traces. In this work, we formalize the application behavior under study to establish correctness requirements for traced application execution in the presence of tracing-induced delays. We propose a novel time dilation approach that strategically slows execution for application and system threads while meeting correctness requirements. We implement the time-dilation approach in Bul-letTime, a tracing framework built atop Pin, the de facto binary instrumentation tool. We evaluate BulletTime for memorycontiguity and synchronization studies on real-world applications and workloads. Our results show that while existing tracing approaches can cause application behavior to deviate by as much as $20 \times$ compared to untraced execution, BulletTime's deviations are < 10% even in extreme cases of asymmetric tracing delays.