From db603624a3fa6f54b918fc0cf5b86e3fdaa5d4c9 Mon Sep 17 00:00:00 2001 From: konstin Date: Mon, 6 Oct 2025 17:39:04 +0200 Subject: [PATCH 1/3] Update codspeed to v4 Simplifies the codspeed setup --- .github/workflows/ci.yml | 10 ++- Cargo.lock | 151 ++++++++++++++++++++-------------- crates/uv-bench/Cargo.toml | 6 +- crates/uv-bench/benches/uv.rs | 2 +- crates/uv-bench/src/lib.rs | 9 -- 5 files changed, 98 insertions(+), 80 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b9ec976feaeb5..4b4a9f8689be0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2853,12 +2853,13 @@ jobs: cargo run --bin uv -- pip compile scripts/requirements/airflow.in --universal --exclude-newer 2024-08-08 --cache-dir .cache - name: "Build benchmarks" - run: cargo codspeed build --profile profiling --features codspeed -p uv-bench + run: cargo codspeed build --profile profiling -p uv-bench - name: "Run benchmarks" - uses: CodSpeedHQ/action@0b6e7a3d96c9d2a6057e7bcea6b45aaf2f7ce60b # v3.8.0 + uses: CodSpeedHQ/action@6b43a0cd438f6ca5ad26f9ed03ed159ed2df7da9 # v4.1.1 with: run: cargo codspeed run + mode: instrumentation token: ${{ secrets.CODSPEED_TOKEN }} benchmarks-instrumented: @@ -2892,10 +2893,11 @@ jobs: cargo run --bin uv -- pip compile scripts/requirements/airflow.in --universal --exclude-newer 2024-08-08 --cache-dir .cache - name: "Build benchmarks" - run: cargo codspeed build --profile profiling --features codspeed -p uv-bench + run: cargo codspeed build --profile profiling -p uv-bench - name: "Run benchmarks" - uses: CodSpeedHQ/action@0b6e7a3d96c9d2a6057e7bcea6b45aaf2f7ce60b # v3.8.0 + uses: CodSpeedHQ/action@6b43a0cd438f6ca5ad26f9ed03ed159ed2df7da9 # v4.1.1 with: run: cargo codspeed run + mode: instrumentation token: ${{ secrets.CODSPEED_TOKEN }} diff --git a/Cargo.lock b/Cargo.lock index 3afbe040f325e..50d317fcc7e43 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -431,12 +431,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "bincode" -version = "1.3.3" +name = "bindgen" +version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "serde", + "bitflags 2.9.4", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", ] [[package]] @@ -631,6 +642,15 @@ dependencies = [ "shlex", ] +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.1" @@ -703,6 +723,17 @@ dependencies = [ "inout", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "4.5.48" @@ -776,16 +807,17 @@ checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "codspeed" -version = "3.0.5" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35584c5fcba8059780748866387fb97c5a203bcfc563fc3d0790af406727a117" +checksum = "b520a5f5816577235477565f6fac8e986f490cddfb20e9ecec9eeaed6b97e479" dependencies = [ "anyhow", - "bincode", + "bindgen", + "cc", "colored", "glob", "libc", - "nix 0.29.0", + "nix", "serde", "serde_json", "statrs", @@ -794,27 +826,32 @@ dependencies = [ [[package]] name = "codspeed-criterion-compat" -version = "3.0.5" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78f6c1c6bed5fd84d319e8b0889da051daa361c79b7709c9394dfe1a882bba67" +checksum = "44f068691ba0ff77f43f22565671f5203d836ebf9d5787d583c0763e7167eeac" dependencies = [ + "clap", "codspeed", "codspeed-criterion-compat-walltime", "colored", + "futures", + "regex", + "tokio", ] [[package]] name = "codspeed-criterion-compat-walltime" -version = "3.0.5" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c989289ce6b1cbde72ed560496cb8fbf5aa14d5ef5666f168e7f87751038352e" +checksum = "d1be3cac3cb256492c091dc6cf7b7f165689247dbf6f1d162b0730d30e7550c2" dependencies = [ "anes", "cast", "ciborium", "clap", "codspeed", - "criterion-plot 0.5.0", + "criterion-plot", + "futures", "is-terminal", "itertools 0.10.5", "num-traits", @@ -825,6 +862,7 @@ dependencies = [ "serde_derive", "serde_json", "tinytemplate", + "tokio", "walkdir", ] @@ -975,28 +1013,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "criterion" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1c047a62b0cc3e145fa84415a3191f628e980b194c2755aa12300a4e6cbd928" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "criterion-plot 0.6.0", - "itertools 0.13.0", - "num-traits", - "oorandom", - "regex", - "serde", - "serde_json", - "tinytemplate", - "tokio", - "walkdir", -] - [[package]] name = "criterion-plot" version = "0.5.0" @@ -1007,16 +1023,6 @@ dependencies = [ "itertools 0.10.5", ] -[[package]] -name = "criterion-plot" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1bcc0dc7dfae599d84ad0b1a55f80cde8af3725da8313b528da95ef783e338" -dependencies = [ - "cast", - "itertools 0.13.0", -] - [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -1086,7 +1092,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3" dependencies = [ "dispatch", - "nix 0.30.1", + "nix", "windows-sys 0.61.0", ] @@ -1828,7 +1834,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68df315d2857b2d8d2898be54a85e1d001bbbe0dbb5f8ef847b48dd3a23c4527" dependencies = [ "cfg-if", - "nix 0.30.1", + "nix", "widestring", "windows 0.61.3", ] @@ -2389,6 +2395,16 @@ version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link 0.2.0", +] + [[package]] name = "libmimalloc-sys" version = "0.1.43" @@ -2605,6 +2621,12 @@ dependencies = [ "unicase", ] +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -2666,27 +2688,25 @@ dependencies = [ [[package]] name = "nix" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ "bitflags 2.9.4", "cfg-if", "cfg_aliases", "libc", + "memoffset", ] [[package]] -name = "nix" -version = "0.30.1" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", + "memchr", + "minimal-lexical", ] [[package]] @@ -3126,6 +3146,16 @@ dependencies = [ "yansi", ] +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "priority-queue" version = "2.5.0" @@ -5305,7 +5335,7 @@ dependencies = [ "insta", "itertools 0.14.0", "miette", - "nix 0.30.1", + "nix", "open", "owo-colors", "petgraph", @@ -5442,7 +5472,6 @@ version = "0.0.0" dependencies = [ "anyhow", "codspeed-criterion-compat", - "criterion", "jiff", "tokio", "uv-cache", @@ -6654,7 +6683,7 @@ dependencies = [ "anyhow", "fs-err", "home", - "nix 0.30.1", + "nix", "same-file", "tempfile", "tracing", @@ -7567,7 +7596,7 @@ dependencies = [ "futures-core", "futures-lite", "hex", - "nix 0.30.1", + "nix", "ordered-stream", "serde", "serde_repr", diff --git a/crates/uv-bench/Cargo.toml b/crates/uv-bench/Cargo.toml index 05d06b96045a1..5f1db82ae724f 100644 --- a/crates/uv-bench/Cargo.toml +++ b/crates/uv-bench/Cargo.toml @@ -43,10 +43,7 @@ uv-types = { workspace = true } uv-workspace = { workspace = true } anyhow = { workspace = true } -codspeed-criterion-compat = { version = "3.0.2", default-features = false, optional = true } -criterion = { version = "0.7.0", default-features = false, features = [ - "async_tokio", -] } +criterion = { version = "4.0.2", default-features = false, package = "codspeed-criterion-compat", features = ["async_tokio"] } jiff = { workspace = true } tokio = { workspace = true } @@ -54,5 +51,4 @@ tokio = { workspace = true } ignored = ["uv-extract"] [features] -codspeed = ["codspeed-criterion-compat"] static = ["uv-extract/static"] diff --git a/crates/uv-bench/benches/uv.rs b/crates/uv-bench/benches/uv.rs index 3e9fc9b3df9cc..2dd1a21ccc8d6 100644 --- a/crates/uv-bench/benches/uv.rs +++ b/crates/uv-bench/benches/uv.rs @@ -1,7 +1,7 @@ use std::hint::black_box; use std::str::FromStr; -use uv_bench::criterion::{Criterion, criterion_group, criterion_main, measurement::WallTime}; +use criterion::{Criterion, criterion_group, criterion_main, measurement::WallTime}; use uv_cache::Cache; use uv_client::{BaseClientBuilder, RegistryClientBuilder}; use uv_distribution_types::Requirement; diff --git a/crates/uv-bench/src/lib.rs b/crates/uv-bench/src/lib.rs index be2bb72bf91f8..8b137891791fe 100644 --- a/crates/uv-bench/src/lib.rs +++ b/crates/uv-bench/src/lib.rs @@ -1,10 +1 @@ -pub mod criterion { - //! This module re-exports the criterion API but picks the right backend depending on whether - //! the benchmarks are built to run locally or with codspeed - #[cfg(not(feature = "codspeed"))] - pub use criterion::*; - - #[cfg(feature = "codspeed")] - pub use codspeed_criterion_compat::*; -} From ce732958951eeda9b14809753958d465bfe5f984 Mon Sep 17 00:00:00 2001 From: konstin Date: Mon, 6 Oct 2025 18:55:58 +0200 Subject: [PATCH 2/3] Review --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b4a9f8689be0..10266c85408a8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2859,7 +2859,7 @@ jobs: uses: CodSpeedHQ/action@6b43a0cd438f6ca5ad26f9ed03ed159ed2df7da9 # v4.1.1 with: run: cargo codspeed run - mode: instrumentation + mode: walltime token: ${{ secrets.CODSPEED_TOKEN }} benchmarks-instrumented: From a8cd8a9a2098b6938689d8ee12ed01c593ff1183 Mon Sep 17 00:00:00 2001 From: konstin Date: Wed, 8 Oct 2025 08:36:34 +0200 Subject: [PATCH 3/3] Use 4.0.3 --- Cargo.lock | 12 ++++++------ crates/uv-bench/Cargo.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 50d317fcc7e43..2b1471fa87c67 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -807,9 +807,9 @@ checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "codspeed" -version = "4.0.2" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b520a5f5816577235477565f6fac8e986f490cddfb20e9ecec9eeaed6b97e479" +checksum = "e7b36534e9bb9623ea6070ec939a6bc52b5faea0c02f05e412545ea38d01fe93" dependencies = [ "anyhow", "bindgen", @@ -826,9 +826,9 @@ dependencies = [ [[package]] name = "codspeed-criterion-compat" -version = "4.0.2" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f068691ba0ff77f43f22565671f5203d836ebf9d5787d583c0763e7167eeac" +checksum = "918f6027e7cd5f3603bad6db773f6dfcfb387c557f29a7e7a335346e0ac78e7b" dependencies = [ "clap", "codspeed", @@ -841,9 +841,9 @@ dependencies = [ [[package]] name = "codspeed-criterion-compat-walltime" -version = "4.0.2" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1be3cac3cb256492c091dc6cf7b7f165689247dbf6f1d162b0730d30e7550c2" +checksum = "fdc1f0b784c181c0a37ac523aa600452bc8a43f42064321c5143eb3832828f2e" dependencies = [ "anes", "cast", diff --git a/crates/uv-bench/Cargo.toml b/crates/uv-bench/Cargo.toml index 5f1db82ae724f..010aa1c4d3efc 100644 --- a/crates/uv-bench/Cargo.toml +++ b/crates/uv-bench/Cargo.toml @@ -43,7 +43,7 @@ uv-types = { workspace = true } uv-workspace = { workspace = true } anyhow = { workspace = true } -criterion = { version = "4.0.2", default-features = false, package = "codspeed-criterion-compat", features = ["async_tokio"] } +criterion = { version = "4.0.3", default-features = false, package = "codspeed-criterion-compat", features = ["async_tokio"] } jiff = { workspace = true } tokio = { workspace = true }