From 88a24967c6cbb08adb52aa3e6b8ea515d7d7cd35 Mon Sep 17 00:00:00 2001 From: Ben Kimock Date: Mon, 27 May 2024 18:38:39 -0400 Subject: [PATCH] Add a benchmark for creating large uninit allocations --- bench-cargo-miri/big-allocs/Cargo.lock | 7 +++++++ bench-cargo-miri/big-allocs/Cargo.toml | 8 ++++++++ bench-cargo-miri/big-allocs/src/main.rs | 13 +++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 bench-cargo-miri/big-allocs/Cargo.lock create mode 100644 bench-cargo-miri/big-allocs/Cargo.toml create mode 100644 bench-cargo-miri/big-allocs/src/main.rs diff --git a/bench-cargo-miri/big-allocs/Cargo.lock b/bench-cargo-miri/big-allocs/Cargo.lock new file mode 100644 index 0000000000..da0db7f47e --- /dev/null +++ b/bench-cargo-miri/big-allocs/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "big-allocs" +version = "0.1.0" diff --git a/bench-cargo-miri/big-allocs/Cargo.toml b/bench-cargo-miri/big-allocs/Cargo.toml new file mode 100644 index 0000000000..7234c9371c --- /dev/null +++ b/bench-cargo-miri/big-allocs/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "big-allocs" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/bench-cargo-miri/big-allocs/src/main.rs b/bench-cargo-miri/big-allocs/src/main.rs new file mode 100644 index 0000000000..a1c1708cf3 --- /dev/null +++ b/bench-cargo-miri/big-allocs/src/main.rs @@ -0,0 +1,13 @@ +//! This is a regression test for https://github.com/rust-lang/miri/issues/3637. +//! `Allocation`s are backed by a `Box<[u8]>`, which we create using `alloc_zeroed`, which should +//! make very large allocations cheap. But then we also need to not clone those `Allocation`s, or +//! we end up slow anyway. + +fn main() { + // We can't use too big of an allocation or this code will encounter an allocation failure in + // CI. Since the allocation can't be huge, we need to do a few iterations so that the effect + // we're trying to measure is clearly visible above the interpreter's startup time. + for _ in 0..10 { + drop(Vec::::with_capacity(512 * 1024 * 1024)); + } +}