Writing Benchmarks in Rust
Supported Benchmarking Crates
CodSpeed offers compatibility layers for several popular benchmarking crates:
divan (recommended)
criterion.rs
libtest (bencher)
We recommend using the divan
plugin due to its
extensive features, such as running type-generic
benchmarks. Its popularity is growing rapidly within the Rust ecosystem.
If you
are already using criterion
or bencher
, consider their respective plugins,
as they will require minimal adjustments to work with CodSpeed
How does CodSpeed work with Rust benchmarks?
Rust, being a compiled language, has CodSpeed integrations that differ from those for interpreted languages. The CodSpeed benchmarking process for Rust occurs at both build time and runtime.
To facilitate this, CodSpeed provides:
- A
cargo-codspeed
cargo subcommand: used regardless of the benchmarking crate. - Compatibility layers for popular benchmarking crates: chose the appropriate one based on your project’s needs.
cargo-codspeed
To integrate CodSpeed with your Rust codebase, use the cargo
subcommand:
cargo-codspeed. This tool allows you
to run CodSpeed benchmarks without modifying the behavior of the standard
cargo bench
command.
Creating benchmarks with cargo-codspeed
is the same as with the supported APIs.
So if you already have benchmarks written with one of these, only a minor import change is required.
Installation
To check your benchmarks with CodSpeed, you first need to install th
cargo-codspeed
CLI tool:
This tool can then be used directly within cargo:
Usage
No matter which benchmarking crate you’re using, the cargo-codspeed
command is
used to help you build and run the benchmark in a CodSpeed environment.
Cargo Workspaces
If you’re using CodSpeed within a workspace you can use the -p
flag to specify
the crate to run the build command on:
Build only specific benchmarks
By default, build
will build and run all the benchmarks in your project.
Sometimes you may want to build and run only a subset of your benchmarks. With the following folder structure:
To build only bench1
, you can pass its name as an argument to the build
and
commands:
Feature flags
If you’re using feature flags in your benchmark suite, you can use the
--features
flag to specify the features to enable:
Run the built benchmarks
By default, cargo codspeed run
will run all the built benchmarks (of the
latest cargo codspeed build ...
command you ran).
To run only a subset of the built benchmarks, you can do the following: