$μ$OpTime: Statically Reducing the Execution Time of Microbenchmark Suites Using Stability Metrics
Nils Japke, Martin Grambow, Christoph Laaber, David Bermbach
TL;DR
µOpTime tackles the practicality gap of microbenchmarking in CI/CD by statically computing a per-microbenchmark minimal repetition configuration from a full-suite run, balancing accuracy and execution time with stability metrics. Operating offline, it simulates all smaller configurations and selects the shortest one that preserves result quality, yielding substantial time savings (Go up to 95.83%; Java datasets up to 71.74%) while maintaining the ability to detect regressions. The approach relies on RMIT-style multi-level repetition, stability metrics (CV, RMAD, RCIW variants), and bootstrap-based confidence intervals to quantify stability. Empirical evaluation across 14 projects in Go and Java demonstrates both strong time reductions and generally reliable regression detection, with caveats related to JVM variability and dataset-specific metric behavior, underscoring practical integration in CI/CD pipelines with careful metric selection.
Abstract
Performance regressions have a tremendous impact on the quality of software. One way to catch regressions before they reach production is executing performance tests before deployment, e.g., using microbenchmarks, which measure performance at subroutine level. In projects with many microbenchmarks, this may take several hours due to repeated execution to get accurate results, disqualifying them from frequent use in CI/CD pipelines. We propose $μ$OpTime, a static approach to reduce the execution time of microbenchmark suites by configuring the number of repetitions for each microbenchmark. Based on the results of a full, previous microbenchmark suite run, $μ$OpTime determines the minimal number of (measurement) repetitions with statistical stability metrics that still lead to accurate results. We evaluate $μ$OpTime with an experimental study on 14 open-source projects written in two programming languages and five stability metrics. Our results show that (i) $μ$OpTime reduces the total suite execution time (measurement phase) by up to 95.83% (Go) and 94.17% (Java), (ii) the choice of stability metric depends on the project and programming language, (iii) microbenchmark warmup phases have to be considered for Java projects (potentially leading to higher reductions), and (iv) $μ$OpTime can be used to reliably detect performance regressions in CI/CD pipelines.
