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, and we record wall time as the mean of three iterations after a "warm-up" run.

We compile crates under BorrowSanitizer using our Cargo plugin. This plugin configures libtest as if it were being built for Miri, which disables parsing information about the user's terminal. This process is slow under both Miri and BorrowSanitizer.