diff --git a/Cargo.lock b/Cargo.lock index d7bdaa3c..c44350fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -730,6 +730,7 @@ dependencies = [ "log", "memmap2", "memtrack", + "mimalloc", "nestify", "nix 0.31.3", "object", @@ -3660,6 +3661,7 @@ dependencies = [ "linux-perf-event-reader 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", "log", "memmap2", + "mimalloc", "rand 0.8.6", "rayon", "rmp", diff --git a/Cargo.toml b/Cargo.toml index f85f895d..c8df261f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,6 +60,7 @@ linux-perf-data = { git = "https://github.com/mstange/linux-perf-data.git", rev ] } # unreleased main as of 2026-03-19 debugid = "0.8.0" memmap2 = "0.9.10" +mimalloc = { workspace = true } nix = { version = "0.31.3", features = ["fs", "time", "user"] } futures = "0.3.32" runner-shared = { path = "crates/runner-shared" } @@ -113,6 +114,7 @@ libc = "0.2" log = "0.4.28" serde_json = "1.0" serde = { version = "1.0.228", features = ["derive"] } +mimalloc = "0.1" ipc-channel = "0.20" itertools = "0.14.0" rayon = "1.12" diff --git a/crates/memtrack/Cargo.toml b/crates/memtrack/Cargo.toml index 20bf77fe..6e9279b1 100644 --- a/crates/memtrack/Cargo.toml +++ b/crates/memtrack/Cargo.toml @@ -40,7 +40,7 @@ byteorder = "1.5" rayon = "1.12" parking_lot = "0.12" typed-builder = "0.23.2" -mimalloc = { version = "0.1", optional = true } +mimalloc = { workspace = true, optional = true } [build-dependencies] libbpf-cargo = { version = "0.26", optional = true } diff --git a/crates/runner-shared/Cargo.toml b/crates/runner-shared/Cargo.toml index 594d9cab..83d3d16a 100644 --- a/crates/runner-shared/Cargo.toml +++ b/crates/runner-shared/Cargo.toml @@ -28,6 +28,7 @@ zstd = "0.13.3" [dev-dependencies] divan = { version = "4.2.0", package = "codspeed-divan-compat" } memmap2 = "0.9.10" +mimalloc = { workspace = true } rand = "0.8" tempfile = { workspace = true } diff --git a/crates/runner-shared/benches/memtrack_reader.rs b/crates/runner-shared/benches/memtrack_reader.rs index 2215eb64..87a1d0e6 100644 --- a/crates/runner-shared/benches/memtrack_reader.rs +++ b/crates/runner-shared/benches/memtrack_reader.rs @@ -15,6 +15,9 @@ use runner_shared::measurement_mode::MeasurementMode; use runner_shared::runtime_env::RUNNER_MODE_ENV; use std::io::Write; +#[global_allocator] +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; + fn main() { divan::main(); } diff --git a/crates/runner-shared/benches/memtrack_writer.rs b/crates/runner-shared/benches/memtrack_writer.rs index 580424a1..2e5eec1f 100644 --- a/crates/runner-shared/benches/memtrack_writer.rs +++ b/crates/runner-shared/benches/memtrack_writer.rs @@ -16,7 +16,8 @@ use runner_shared::artifacts::{ /// there anyway. #[cfg(not(codspeed))] #[global_allocator] -static ALLOC: divan::AllocProfiler = divan::AllocProfiler::system(); +static ALLOC: divan::AllocProfiler = + divan::AllocProfiler::new(mimalloc::MiMalloc); fn main() { divan::main(); diff --git a/src/main.rs b/src/main.rs index 518b8d3e..446d01bb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,7 @@ +// musl's allocator is slow on the many small allocations made when decoding memtrack artifacts. +#[global_allocator] +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; + use codspeed_runner::{clean_logger, cli}; use console::style; use log::log_enabled;