Reproducible User-Level Simulation of Multi-Threaded Workloads