Overview

We measure performance as a multiple of the execution time of a baseline configuration. There are three baselines:

We disable all other forms of run-time checking for each of the Miri baselines, and we intercept invocations of Miri's interpreter to avoid including its Cargo plugin in our timing measurements. This ensures that we are only measuring the time when Miri is actually interpreting a program.

BorrowSanitizer has two configurations that we can compare against these baselines:

To summarize the performance of a crate, we calculate relative execution time for every unit test and report the mean value. We use hyperfine to measure individual tests, recording wall time as the mean of three iterations after a "warm-up" run.

We also use a fork of the Rust compiler. This includes a change to Rust's test harness that lets us disable parsing information about the user's terminal. Miri already disables this feature using its own conditional compilation directive. We use this configuration for both the "native" baseline and each of BorrowSanitizer's configurations.