diff --git a/Cargo.lock b/Cargo.lock index ac36c5654..08c017c40 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,15 +29,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - [[package]] name = "android-tzdata" version = "0.1.1" @@ -53,12 +44,6 @@ dependencies = [ "libc", ] -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - [[package]] name = "anstyle" version = "1.0.10" @@ -362,12 +347,6 @@ dependencies = [ "serde", ] -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - [[package]] name = "cc" version = "1.1.31" @@ -401,33 +380,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - [[package]] name = "clap" version = "4.5.20" @@ -526,42 +478,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "criterion" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "criterion-plot", - "is-terminal", - "itertools", - "num-traits", - "once_cell", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools", -] - [[package]] name = "crossbeam" version = "0.8.4" @@ -618,12 +534,6 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - [[package]] name = "crypto-bigint" version = "0.5.5" @@ -673,30 +583,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "cuprate-benchmark" -version = "0.0.0" -dependencies = [ - "cfg-if", - "cuprate-benchmark-example", - "cuprate-benchmark-lib", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "cuprate-benchmark-example" -version = "0.0.0" -dependencies = [ - "cuprate-benchmark-lib", -] - -[[package]] -name = "cuprate-benchmark-lib" -version = "0.0.0" - [[package]] name = "cuprate-blockchain" version = "0.0.0" @@ -799,25 +685,6 @@ dependencies = [ name = "cuprate-constants" version = "0.1.0" -[[package]] -name = "cuprate-criterion-example" -version = "0.0.0" -dependencies = [ - "criterion", - "function_name", - "serde_json", -] - -[[package]] -name = "cuprate-criterion-json-rpc" -version = "0.0.0" -dependencies = [ - "criterion", - "cuprate-json-rpc", - "function_name", - "serde_json", -] - [[package]] name = "cuprate-cryptonight" version = "0.1.0" @@ -1437,21 +1304,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "function_name" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1ab577a896d09940b5fe12ec5ae71f9d8211fff62c919c03a3750a9901e98a7" -dependencies = [ - "function_name-proc-macro", -] - -[[package]] -name = "function_name-proc-macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673464e1e314dd67a0fd9544abc99e8eb28d0c7e3b69b033bcff9b2d00b87333" - [[package]] name = "funty" version = "2.0.0" @@ -1601,16 +1453,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "half" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "cfg-if", - "crunchy", -] - [[package]] name = "hashbrown" version = "0.14.5" @@ -1838,26 +1680,6 @@ dependencies = [ "hashbrown 0.15.0", ] -[[package]] -name = "is-terminal" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.11" @@ -1954,15 +1776,6 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - [[package]] name = "matchit" version = "0.7.3" @@ -2218,12 +2031,6 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" -[[package]] -name = "oorandom" -version = "11.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" - [[package]] name = "openssl-probe" version = "0.1.5" @@ -2361,34 +2168,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "plotters" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" - -[[package]] -name = "plotters-svg" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" -dependencies = [ - "plotters-backend", -] - [[package]] name = "ppv-lite86" version = "0.2.20" @@ -2463,7 +2242,7 @@ dependencies = [ "rand", "rand_chacha", "rand_xorshift", - "regex-syntax 0.8.5", + "regex-syntax", "rusty-fork", "tempfile", "unarray", @@ -2629,44 +2408,6 @@ dependencies = [ "syn", ] -[[package]] -name = "regex" -version = "1.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.8.5" @@ -2794,15 +2535,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "schannel" version = "0.1.26" @@ -3157,16 +2889,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a693d0c8cf16973fac5a93fbe47b8c6452e7097d4fcac49f3d7a18e39c76e62e" -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - [[package]] name = "tinyvec" version = "1.8.0" @@ -3383,14 +3105,10 @@ version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ - "matchers", "nu-ansi-term", - "once_cell", - "regex", "sharded-slab", "smallvec", "thread_local", - "tracing", "tracing-core", "tracing-log", ] @@ -3496,16 +3214,6 @@ dependencies = [ "libc", ] -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -3576,16 +3284,6 @@ version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" -[[package]] -name = "web-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "webpki-roots" version = "0.26.6" @@ -3611,15 +3309,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 3cc3ab18d..fdc1c00ff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,13 +4,6 @@ members = [ # Binaries "binaries/cuprated", - # Benchmarks - "benches/benchmark/bin", - "benches/benchmark/lib", - "benches/benchmark/example", - "benches/criterion/example", - "benches/criterion/cuprate-json-rpc", - # Consensus "consensus", "consensus/context", @@ -74,8 +67,6 @@ opt-level = 3 [workspace.dependencies] # Cuprate members -cuprate-benchmark-lib = { path = "benches/benchmark/lib", default-features = false } -cuprate-benchmark-example = { path = "benches/benchmark/example", default-features = false } cuprate-fast-sync = { path = "consensus/fast-sync", default-features = false } cuprate-consensus-rules = { path = "consensus/rules", default-features = false } cuprate-constants = { path = "constants", default-features = false } @@ -148,8 +139,6 @@ tracing-subscriber = { version = "0.3", default-features = false } tracing = { version = "0.1", default-features = false } ## workspace.dev-dependencies -criterion = { version = "0.5" } -function_name = { version = "0.3" } monero-rpc = { git = "https://github.com/Cuprate/serai.git", rev = "d5205ce" } monero-simple-request-rpc = { git = "https://github.com/Cuprate/serai.git", rev = "d5205ce" } tempfile = { version = "3" } diff --git a/benches/README.md b/benches/README.md deleted file mode 100644 index af6bb932f..000000000 --- a/benches/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Benches -This directory contains Cuprate's benchmarks and benchmarking utilities. - -See the [`Benchmarking` section in the Architecture book](https://architecture.cuprate.org/benchmarking/intro.html) -to see how to create and run these benchmarks. \ No newline at end of file diff --git a/benches/benchmark/bin/Cargo.toml b/benches/benchmark/bin/Cargo.toml deleted file mode 100644 index 36d0b2c74..000000000 --- a/benches/benchmark/bin/Cargo.toml +++ /dev/null @@ -1,43 +0,0 @@ -[package] -name = "cuprate-benchmark" -version = "0.0.0" -edition = "2021" -description = "Cuprate's benchmarking binary" -license = "MIT" -authors = ["hinto-janai"] -repository = "https://github.com/Cuprate/cuprate/tree/main/benches/benchmark/bin" -keywords = ["cuprate", "benchmarking", "binary"] - -[features] -# All new benchmarks should be added here! -all = ["example"] - -# Non-benchmark features. -default = [] -json = [] -trace = [] -debug = [] -warn = [] -info = [] -error = [] - -# Benchmark features. -# New benchmarks should be added here! -example = [ - "dep:cuprate-benchmark-example" -] - -[dependencies] -cuprate-benchmark-lib = { workspace = true } -cuprate-benchmark-example = { workspace = true, optional = true } - -cfg-if = { workspace = true } -serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true, features = ["std"] } -tracing = { workspace = true, features = ["std", "attributes"] } -tracing-subscriber = { workspace = true, features = ["fmt", "std", "env-filter"] } - -[dev-dependencies] - -[lints] -workspace = true \ No newline at end of file diff --git a/benches/benchmark/bin/README.md b/benches/benchmark/bin/README.md deleted file mode 100644 index ad0700fcc..000000000 --- a/benches/benchmark/bin/README.md +++ /dev/null @@ -1,27 +0,0 @@ -## `cuprate-benchmark` -This crate links all benchmarks together into a single binary that can be run as: `cuprate-benchmark`. - -`cuprate-benchmark` will run all enabled benchmarks sequentially and print data at the end. - -## Benchmarks -Benchmarks are opt-in and enabled via features. - -| Feature | Enables which benchmark crate? | -|----------|--------------------------------| -| example | cuprate-benchmark-example | -| database | cuprate-benchmark-database | - -## Features -These are features that aren't for enabling benchmarks, but rather for other things. - -Since `cuprate-benchmark` is built right before it is ran, -these features almost act like command line arguments. - -| Features | Does what | -|----------|-----------| -| json | Prints JSON timings instead of a markdown table -| trace | Use the `trace` log-level -| debug | Use the `debug` log-level -| warn | Use the `warn` log-level -| info | Use the `info` log-level (default) -| error | Use the `error` log-level \ No newline at end of file diff --git a/benches/benchmark/bin/src/log.rs b/benches/benchmark/bin/src/log.rs deleted file mode 100644 index 455f13091..000000000 --- a/benches/benchmark/bin/src/log.rs +++ /dev/null @@ -1,29 +0,0 @@ -use cfg_if::cfg_if; -use tracing::{info, instrument, Level}; -use tracing_subscriber::FmtSubscriber; - -/// Initializes the `tracing` logger. -#[instrument] -pub(crate) fn init_logger() { - const LOG_LEVEL: Level = { - cfg_if! { - if #[cfg(feature = "trace")] { - Level::TRACE - } else if #[cfg(feature = "debug")] { - Level::DEBUG - } else if #[cfg(feature = "warn")] { - Level::WARN - } else if #[cfg(feature = "info")] { - Level::INFO - } else if #[cfg(feature = "error")] { - Level::ERROR - } else { - Level::INFO - } - } - }; - - FmtSubscriber::builder().with_max_level(LOG_LEVEL).init(); - - info!("Log level: {LOG_LEVEL}"); -} diff --git a/benches/benchmark/bin/src/main.rs b/benches/benchmark/bin/src/main.rs deleted file mode 100644 index 02c480a08..000000000 --- a/benches/benchmark/bin/src/main.rs +++ /dev/null @@ -1,49 +0,0 @@ -#![doc = include_str!("../README.md")] -#![allow( - unused_crate_dependencies, - reason = "this crate imports many potentially unused dependencies" -)] - -mod log; -mod print; -mod run; -mod timings; - -use cfg_if::cfg_if; - -/// What `main()` does: -/// 1. Run all enabled benchmarks -/// 2. Record benchmark timings -/// 3. Print timing data -/// -/// To add a new benchmark to be ran here: -/// 1. Copy + paste a `cfg_if` block -/// 2. Change it to your benchmark's feature flag -/// 3. Change it to your benchmark's type -#[allow( - clippy::allow_attributes, - unused_variables, - unused_mut, - unreachable_code, - reason = "clippy does not account for all cfg()s" -)] -fn main() { - log::init_logger(); - - let mut timings = timings::Timings::new(); - - cfg_if! { - if #[cfg(not(any(feature = "example")))] { - println!("No feature specified. Use `--features $BENCHMARK_FEATURE` when building."); - return; - } - } - - cfg_if! { - if #[cfg(feature = "example")] { - run::run_benchmark::(&mut timings); - } - } - - print::print_timings(&timings); -} diff --git a/benches/benchmark/bin/src/print.rs b/benches/benchmark/bin/src/print.rs deleted file mode 100644 index 36a5f05a6..000000000 --- a/benches/benchmark/bin/src/print.rs +++ /dev/null @@ -1,38 +0,0 @@ -#![expect(dead_code, reason = "code hidden behind feature flags")] - -use cfg_if::cfg_if; - -use crate::timings::Timings; - -/// Print the final the final markdown table of benchmark timings. -pub(crate) fn print_timings(timings: &Timings) { - println!("\nFinished all benchmarks, printing results:"); - - cfg_if! { - if #[cfg(feature = "json")] { - print_timings_json(timings); - } else { - print_timings_markdown(timings); - } - } -} - -/// Default timing formatting. -pub(crate) fn print_timings_markdown(timings: &Timings) { - let mut s = String::new(); - s.push_str("| Benchmark | Time (seconds) |\n"); - s.push_str("|------------------------------------|----------------|"); - - #[expect(clippy::iter_over_hash_type)] - for (k, v) in timings { - s += &format!("\n| {k:<34} | {v:<14} |"); - } - - println!("\n{s}"); -} - -/// Enabled via `json` feature. -pub(crate) fn print_timings_json(timings: &Timings) { - let json = serde_json::to_string_pretty(timings).unwrap(); - println!("\n{json}"); -} diff --git a/benches/benchmark/bin/src/run.rs b/benches/benchmark/bin/src/run.rs deleted file mode 100644 index 05a220f93..000000000 --- a/benches/benchmark/bin/src/run.rs +++ /dev/null @@ -1,36 +0,0 @@ -use tracing::{info, instrument, trace}; - -use cuprate_benchmark_lib::Benchmark; - -use crate::timings::Timings; - -/// Run a [`Benchmark`] and record its timing. -#[instrument(skip_all)] -pub(crate) fn run_benchmark(timings: &mut Timings) { - // Get the benchmark name. - let name = B::name(); - trace!("Running benchmark: {name}"); - - // Setup the benchmark input. - let input = B::SETUP(); - - // Sleep before running the benchmark. - trace!("Pre-benchmark, sleeping for: {:?}", B::POST_SLEEP_DURATION); - std::thread::sleep(B::PRE_SLEEP_DURATION); - - // Run/time the benchmark. - let now = std::time::Instant::now(); - B::MAIN(input); - let time = now.elapsed().as_secs_f32(); - - // Print the benchmark timings. - info!("{name:>34} ... {time}"); - assert!( - timings.insert(name, time).is_none(), - "There were 2 benchmarks with the same name - this collides the final output: {name}", - ); - - // Sleep for a cooldown period after the benchmark run. - trace!("Post-benchmark, sleeping for: {:?}", B::POST_SLEEP_DURATION); - std::thread::sleep(B::POST_SLEEP_DURATION); -} diff --git a/benches/benchmark/bin/src/timings.rs b/benches/benchmark/bin/src/timings.rs deleted file mode 100644 index 34a07952b..000000000 --- a/benches/benchmark/bin/src/timings.rs +++ /dev/null @@ -1,5 +0,0 @@ -/// Benchmark timing data. -/// -/// - Key = benchmark name -/// - Value = benchmark time in seconds -pub(crate) type Timings = std::collections::HashMap<&'static str, f32>; diff --git a/benches/benchmark/example/Cargo.toml b/benches/benchmark/example/Cargo.toml deleted file mode 100644 index 5728bcd4b..000000000 --- a/benches/benchmark/example/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "cuprate-benchmark-example" -version = "0.0.0" -edition = "2021" -description = "Example showcasing Cuprate's benchmarking harness" -license = "MIT" -authors = ["hinto-janai"] -repository = "https://github.com/Cuprate/cuprate/tree/main/benches/benchmark/example" -keywords = ["cuprate", "benchmarking", "example"] - -[dependencies] -cuprate-benchmark-lib = { path = "../lib" } - -[dev-dependencies] - -[lints] -workspace = true \ No newline at end of file diff --git a/benches/benchmark/example/README.md b/benches/benchmark/example/README.md deleted file mode 100644 index be6b71679..000000000 --- a/benches/benchmark/example/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## `cuprate-benchmark-example` -This crate contains a short example benchmark that shows how to implement and use -`cuprate-benchmark-lib` so that it can be ran by `cuprate-benchmark`. \ No newline at end of file diff --git a/benches/benchmark/example/src/lib.rs b/benches/benchmark/example/src/lib.rs deleted file mode 100644 index cc704a7f4..000000000 --- a/benches/benchmark/example/src/lib.rs +++ /dev/null @@ -1,42 +0,0 @@ -#![doc = include_str!("../README.md")] - -use std::hint::black_box; - -use cuprate_benchmark_lib::Benchmark; - -/// Marker struct that implements [`Benchmark`] -pub struct Example; - -/// The input to our benchmark function. -pub type ExampleBenchmarkInput = u64; - -/// The setup function that creates the input. -pub const fn example_benchmark_setup() -> ExampleBenchmarkInput { - 1 -} - -/// The main benchmarking function. -#[expect(clippy::unit_arg)] -pub fn example_benchmark_main(input: ExampleBenchmarkInput) { - // In this case, we're simply benchmarking the - // performance of simple arithmetic on the input data. - - fn math(input: ExampleBenchmarkInput, number: u64) { - let x = input; - let x = black_box(x * number); - let x = black_box(x / number); - let x = black_box(x + number); - let _ = black_box(x - number); - } - - for number in 1..100_000_000 { - black_box(math(input, number)); - } -} - -// This implementation will be run by `cuprate-benchmark`. -impl Benchmark for Example { - type Input = ExampleBenchmarkInput; - const SETUP: fn() -> Self::Input = example_benchmark_setup; - const MAIN: fn(Self::Input) = example_benchmark_main; -} diff --git a/benches/benchmark/lib/Cargo.toml b/benches/benchmark/lib/Cargo.toml deleted file mode 100644 index b0771f09f..000000000 --- a/benches/benchmark/lib/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "cuprate-benchmark-lib" -version = "0.0.0" -edition = "2021" -description = "Cuprate's benchmarking library" -license = "MIT" -authors = ["hinto-janai"] -repository = "https://github.com/Cuprate/cuprate/tree/main/benches/benchmark/lib" -keywords = ["cuprate", "benchmarking", "library"] - -[features] - -[dependencies] - -[dev-dependencies] - -[lints] -workspace = true \ No newline at end of file diff --git a/benches/benchmark/lib/README.md b/benches/benchmark/lib/README.md deleted file mode 100644 index 9ea79ae4e..000000000 --- a/benches/benchmark/lib/README.md +++ /dev/null @@ -1,15 +0,0 @@ -## `cuprate-benchmark-lib` -This crate is the glue between -[`cuprate-benchmark`](https://github.com/Cuprate/cuprate/tree/benches/benches/benchmark/bin) -and all the benchmark crates. - -It defines the [`crate::Benchmark`] trait, which is the behavior of all benchmarks. - -See the [`cuprate-benchmark-example`](https://github.com/Cuprate/cuprate/tree/benches/benches/benchmark/example) -crate to see an example implementation of this trait. - -After implementing this trait, a few steps must -be done such that the `cuprate-benchmark` binary -can actually run your benchmark crate; see the -[`Benchmarking` section in the Architecture book](https://architecture.cuprate.org/benchmarking/intro.html) -to see how to do this. \ No newline at end of file diff --git a/benches/benchmark/lib/src/benchmark.rs b/benches/benchmark/lib/src/benchmark.rs deleted file mode 100644 index 4dca55045..000000000 --- a/benches/benchmark/lib/src/benchmark.rs +++ /dev/null @@ -1,45 +0,0 @@ -//! Benchmarking trait. - -use std::time::Duration; - -/// A benchmarking function and its inputs. -pub trait Benchmark { - /// The benchmark's name. - /// - /// This is automatically implemented - /// as the name of the [`Self`] type. - // - // FIXME: use `const` instead of `fn` when stable - // - fn name() -> &'static str { - std::any::type_name::() - } - - /// Input to the main benchmarking function. - /// - /// This is passed to [`Self::MAIN`]. - type Input; - - /// Setup function to generate the input. - /// - /// This function is not timed. - const SETUP: fn() -> Self::Input; - - /// The main function to benchmark. - /// - /// The start of the timer begins right before - /// this function is called and ends after the - /// function returns. - const MAIN: fn(Self::Input); - - /// `cuprate-benchmark` will sleep for this [`Duration`] after - /// creating the [`Self::Input`], but before starting [`Self::MAIN`]. - /// - /// 1 second by default. - const PRE_SLEEP_DURATION: Duration = Duration::from_secs(1); - - /// `cuprate-benchmark` will sleep for this [`Duration`] after [`Self::MAIN`]. - /// - /// 1 second by default. - const POST_SLEEP_DURATION: Duration = Duration::from_secs(1); -} diff --git a/benches/benchmark/lib/src/lib.rs b/benches/benchmark/lib/src/lib.rs deleted file mode 100644 index a6bec8208..000000000 --- a/benches/benchmark/lib/src/lib.rs +++ /dev/null @@ -1,5 +0,0 @@ -#![doc = include_str!("../README.md")] - -mod benchmark; - -pub use benchmark::Benchmark; diff --git a/benches/criterion/cuprate-json-rpc/Cargo.toml b/benches/criterion/cuprate-json-rpc/Cargo.toml deleted file mode 100644 index a0cae64e6..000000000 --- a/benches/criterion/cuprate-json-rpc/Cargo.toml +++ /dev/null @@ -1,23 +0,0 @@ -[package] -name = "cuprate-criterion-json-rpc" -version = "0.0.0" -edition = "2021" -description = "Criterion benchmarking for cuprate-json-rpc" -license = "MIT" -authors = ["hinto-janai"] -repository = "https://github.com/Cuprate/cuprate/tree/main/benches/criterion/cuprate-json-rpc" -keywords = ["cuprate", "json-rpc", "criterion", "benchmark"] - -[dependencies] -cuprate-json-rpc = { workspace = true } - -criterion = { workspace = true } -function_name = { workspace = true } -serde_json = { workspace = true, features = ["default"] } - -[[bench]] -name = "main" -harness = false - -[lints] -workspace = true \ No newline at end of file diff --git a/benches/criterion/cuprate-json-rpc/benches/main.rs b/benches/criterion/cuprate-json-rpc/benches/main.rs deleted file mode 100644 index a72494302..000000000 --- a/benches/criterion/cuprate-json-rpc/benches/main.rs +++ /dev/null @@ -1,8 +0,0 @@ -//! Benchmarks for `cuprate-json-rpc`. -#![allow(unused_crate_dependencies)] - -mod response; - -criterion::criterion_main! { - response::serde, -} diff --git a/benches/criterion/cuprate-json-rpc/benches/response.rs b/benches/criterion/cuprate-json-rpc/benches/response.rs deleted file mode 100644 index 890958ec0..000000000 --- a/benches/criterion/cuprate-json-rpc/benches/response.rs +++ /dev/null @@ -1,110 +0,0 @@ -//! Benchmarks for [`Response`]. -#![allow(unused_attributes, unused_crate_dependencies)] - -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use function_name::named; -use serde_json::{from_str, to_string_pretty}; - -use cuprate_json_rpc::{Id, Response}; - -// `serde` benchmarks on `Response`. -// -// These are benchmarked as `Response` has a custom serde implementation. -criterion_group! { - name = serde; - config = Criterion::default(); - targets = - response_from_str_u8, - response_from_str_u64, - response_from_str_string_5_len, - response_from_str_string_10_len, - response_from_str_string_100_len, - response_from_str_string_500_len, - response_to_string_pretty_u8, - response_to_string_pretty_u64, - response_to_string_pretty_string_5_len, - response_to_string_pretty_string_10_len, - response_to_string_pretty_string_100_len, - response_to_string_pretty_string_500_len, - response_from_str_bad_field_1, - response_from_str_bad_field_5, - response_from_str_bad_field_10, - response_from_str_bad_field_100, - response_from_str_missing_field, -} -criterion_main!(serde); - -/// Generate `from_str` deserialization benchmark functions for [`Response`]. -macro_rules! impl_from_str_benchmark { - ( - $( - $fn_name:ident => $request_type:ty => $request_string:literal, - )* - ) => { - $( - #[named] - fn $fn_name(c: &mut Criterion) { - let request_string = $request_string; - - c.bench_function(function_name!(), |b| { - b.iter(|| { - let _r = from_str::>( - black_box(request_string) - ); - }); - }); - } - )* - }; -} - -impl_from_str_benchmark! { - response_from_str_u8 => u8 => r#"{"jsonrpc":"2.0","id":123,"result":0}"#, - response_from_str_u64 => u64 => r#"{"jsonrpc":"2.0","id":123,"result":0}"#, - response_from_str_string_5_len => String => r#"{"jsonrpc":"2.0","id":123,"result":"hello"}"#, - response_from_str_string_10_len => String => r#"{"jsonrpc":"2.0","id":123,"result":"hellohello"}"#, - response_from_str_string_100_len => String => r#"{"jsonrpc":"2.0","id":123,"result":"helloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworld"}"#, - response_from_str_string_500_len => String => r#"{"jsonrpc":"2.0","id":123,"result":"helloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworld"}"#, - - // The custom serde currently looks at all fields. - // These are for testing the performance if the serde - // has to parse through a bunch of unrelated fields. - response_from_str_bad_field_1 => u8 => r#"{"bad_field":0,"jsonrpc":"2.0","id":123,"result":0}"#, - response_from_str_bad_field_5 => u8 => r#"{"bad_field_1":0,"bad_field_2":0,"bad_field_3":0,"bad_field_4":0,"bad_field_5":0,"jsonrpc":"2.0","id":123,"result":0}"#, - response_from_str_bad_field_10 => u8 => r#"{"bad_field_1":0,"bad_field_2":0,"bad_field_3":0,"bad_field_4":0,"bad_field_5":0,"bad_field_6":0,"bad_field_7":0,"bad_field_8":0,"bad_field_9":0,"bad_field_10":0,"jsonrpc":"2.0","id":123,"result":0}"#, - response_from_str_bad_field_100 => u8 => r#"{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"jsonrpc":"2.0","id":123,"result":0}"#, - - // These are missing the `jsonrpc` field. - response_from_str_missing_field => u8 => r#"{"id":123,"result":0}"#, -} - -/// Generate `to_string_pretty` serialization benchmark functions for [`Response`]. -macro_rules! impl_to_string_pretty_benchmark { - ( - $( - $fn_name:ident => $request_constructor:expr_2021, - )* - ) => { - $( - #[named] - fn $fn_name(c: &mut Criterion) { - let request = $request_constructor; - - c.bench_function(function_name!(), |b| { - b.iter(|| { - let _s = to_string_pretty(black_box(&request)).unwrap(); - }); - }); - } - )* - }; -} - -impl_to_string_pretty_benchmark! { - response_to_string_pretty_u8 => Response::::ok(Id::Null, 0), - response_to_string_pretty_u64 => Response::::ok(Id::Null, 0), - response_to_string_pretty_string_5_len => Response::ok(Id::Null, String::from("hello")), - response_to_string_pretty_string_10_len => Response::ok(Id::Null, String::from("hellohello")), - response_to_string_pretty_string_100_len => Response::ok(Id::Null, String::from("helloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworld")), - response_to_string_pretty_string_500_len => Response::ok(Id::Null, String::from("helloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworld")), -} diff --git a/benches/criterion/cuprate-json-rpc/src/lib.rs b/benches/criterion/cuprate-json-rpc/src/lib.rs deleted file mode 100644 index b29887aa7..000000000 --- a/benches/criterion/cuprate-json-rpc/src/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -//! Benchmark lib for `cuprate-json-rpc`. -#![allow(unused_crate_dependencies, reason = "used in benchmarks")] diff --git a/benches/criterion/example/Cargo.toml b/benches/criterion/example/Cargo.toml deleted file mode 100644 index 43e601191..000000000 --- a/benches/criterion/example/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "cuprate-criterion-example" -version = "0.0.0" -edition = "2021" -description = "Criterion benchmarking example for Cuprate" -license = "MIT" -authors = ["hinto-janai"] -repository = "https://github.com/Cuprate/cuprate/tree/main/benches/criterion/example" -keywords = ["cuprate", "criterion", "benchmark", "example"] - -[dependencies] -criterion = { workspace = true } -function_name = { workspace = true } -serde_json = { workspace = true, features = ["default"] } - -[[bench]] -name = "main" -harness = false - -[lints] -workspace = true \ No newline at end of file diff --git a/benches/criterion/example/README.md b/benches/criterion/example/README.md deleted file mode 100644 index cf1983ffc..000000000 --- a/benches/criterion/example/README.md +++ /dev/null @@ -1,14 +0,0 @@ -## `cuprate-criterion-example` -An example of using Criterion for benchmarking Cuprate crates. - -Consider copy+pasting this crate to use as a base when creating new Criterion benchmark crates. - -## `src/` -Benchmark crates have a `benches/` ran by `cargo bench`, but they are also crates themselves, -as in, they have a `src` folder that `benches/` can pull code from. - -The `src` directories in these benchmarking crates are usually filled with -helper functions, types, etc, that are used repeatedly in the benchmarks. - -## `benches/` -These are the actual benchmarks ran by `cargo bench`. diff --git a/benches/criterion/example/benches/example.rs b/benches/criterion/example/benches/example.rs deleted file mode 100644 index 7ea8e9a1d..000000000 --- a/benches/criterion/example/benches/example.rs +++ /dev/null @@ -1,48 +0,0 @@ -//! Benchmarks. -#![allow(unused_attributes, unused_crate_dependencies)] - -use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion, Throughput}; -use function_name::named; - -use cuprate_criterion_example::SomeHardToCreateObject; - -// This is how you register criterion benchmarks. -criterion_group! { - name = benches; - config = Criterion::default(); - targets = benchmark_1, benchmark_range, -} -criterion_main!(benches); - -/// Benchmark a single input. -/// -/// -#[named] -fn benchmark_1(c: &mut Criterion) { - // It is recommended to use `function_name!()` as a benchmark - // identifier instead of manually re-typing the function name. - c.bench_function(function_name!(), |b| { - b.iter(|| { - black_box(SomeHardToCreateObject::from(1)); - }); - }); -} - -/// Benchmark a range of inputs. -/// -/// -#[named] -fn benchmark_range(c: &mut Criterion) { - let mut group = c.benchmark_group(function_name!()); - - for i in 0..4 { - group.throughput(Throughput::Elements(i)); - group.bench_with_input(BenchmarkId::from_parameter(i), &i, |b, &i| { - b.iter(|| { - black_box(SomeHardToCreateObject::from(i)); - }); - }); - } - - group.finish(); -} diff --git a/benches/criterion/example/benches/main.rs b/benches/criterion/example/benches/main.rs deleted file mode 100644 index d4f0bf80c..000000000 --- a/benches/criterion/example/benches/main.rs +++ /dev/null @@ -1,10 +0,0 @@ -//! Benchmarks examples. -#![allow(unused_crate_dependencies)] - -// All modules within `benches/` are `mod`ed here. -mod example; - -// And all the Criterion benchmarks are registered like so: -criterion::criterion_main! { - example::benches, -} diff --git a/benches/criterion/example/src/lib.rs b/benches/criterion/example/src/lib.rs deleted file mode 100644 index 0f732a47d..000000000 --- a/benches/criterion/example/src/lib.rs +++ /dev/null @@ -1,13 +0,0 @@ -#![doc = include_str!("../README.md")] // See the README for crate documentation. -#![allow(unused_crate_dependencies, reason = "used in benchmarks")] - -/// Shared type that all benchmarks can use. -#[expect(dead_code)] -pub struct SomeHardToCreateObject(u64); - -impl From for SomeHardToCreateObject { - /// Shared function that all benchmarks can use. - fn from(value: u64) -> Self { - Self(value) - } -} diff --git a/books/architecture/src/appendix/crates.md b/books/architecture/src/appendix/crates.md index 5124180fb..bc48497b8 100644 --- a/books/architecture/src/appendix/crates.md +++ b/books/architecture/src/appendix/crates.md @@ -67,12 +67,4 @@ cargo doc --open --package cuprate-blockchain | [`cuprate-pruning`](https://doc.cuprate.org/cuprate_pruning) | [`pruning/`](https://github.com/Cuprate/cuprate/tree/main/pruning) | Monero pruning logic/types | [`cuprate-helper`](https://doc.cuprate.org/cuprate_helper) | [`helper/`](https://github.com/Cuprate/cuprate/tree/main/helper) | Kitchen-sink helper crate for Cuprate | [`cuprate-test-utils`](https://doc.cuprate.org/cuprate_test_utils) | [`test-utils/`](https://github.com/Cuprate/cuprate/tree/main/test-utils) | Testing utilities for Cuprate -| [`cuprate-types`](https://doc.cuprate.org/cuprate_types) | [`types/`](https://github.com/Cuprate/cuprate/tree/main/types) | Shared types across Cuprate - -## Benchmarks -| Crate | In-tree path | Purpose | -|-------|--------------|---------| -| [`cuprate-benchmark`](https://doc.cuprate.org/cuprate_benchmark) | [`benches/benchmark/bin/`](https://github.com/Cuprate/cuprate/tree/main/benches/benchmark/bin) | Cuprate benchmarking binary -| [`cuprate-benchmark-lib`](https://doc.cuprate.org/cuprate_benchmark_lib) | [`benches/benchmark/lib/`](https://github.com/Cuprate/cuprate/tree/main/benches/benchmark/lib) | Cuprate benchmarking library -| `cuprate-benchmark-*` | [`benches/benchmark/cuprate-*`](https://github.com/Cuprate/cuprate/tree/main/benches/benchmark/) | Benchmark for a Cuprate crate that uses `cuprate-benchmark` -| `cuprate-criterion-*` | [`benches/criterion/cuprate-*`](https://github.com/Cuprate/cuprate/tree/main/benches/criterion) | Benchmark for a Cuprate crate that uses [Criterion](https://bheisler.github.io/criterion.rs/book) \ No newline at end of file +| [`cuprate-types`](https://doc.cuprate.org/cuprate_types) | [`types/`](https://github.com/Cuprate/cuprate/tree/main/types) | Shared types across Cuprate \ No newline at end of file diff --git a/books/architecture/src/benchmarking/criterion/creating.md b/books/architecture/src/benchmarking/criterion/creating.md index 010090429..b9888559b 100644 --- a/books/architecture/src/benchmarking/criterion/creating.md +++ b/books/architecture/src/benchmarking/criterion/creating.md @@ -3,19 +3,19 @@ Creating a new Criterion-based benchmarking crate for one of Cuprate's crates is although, it requires knowledge of how to use Criterion first: 1. Read the `Getting Started` section of -2. Copy [`benches/criterion/example`](https://github.com/Cuprate/cuprate/tree/main/benches/criterion/example) as base +2. Copy [`criterion/example`](https://github.com/Cuprate/benches/tree/main/criterion/example) as base 3. Get started ## Naming New benchmark crates using Criterion should: -- Be in [`benches/criterion/`](https://github.com/Cuprate/cuprate/tree/main/benches/criterion/) +- Be in [`criterion/`](https://github.com/Cuprate/benches/tree/main/criterion/) - Be in the `cuprate-criterion-$CRATE_NAME` format For a real example, see: -[`cuprate-criterion-json-rpc`](https://github.com/Cuprate/cuprate/tree/main/benches/criterion/cuprate-json-rpc). +[`cuprate-criterion-json-rpc`](https://github.com/Cuprate/benches/tree/main/criterion/cuprate-json-rpc). ## Workspace Finally, make sure to add the benchmark crate to the workspace -[`Cargo.toml`](https://github.com/Cuprate/cuprate/blob/main/Cargo.toml) file. +[`Cargo.toml`](https://github.com/Cuprate/benches/blob/main/Cargo.toml) file. Your benchmark is now ready to be ran. \ No newline at end of file diff --git a/books/architecture/src/benchmarking/criterion/intro.md b/books/architecture/src/benchmarking/criterion/intro.md index b7a79b21a..fdf834ac9 100644 --- a/books/architecture/src/benchmarking/criterion/intro.md +++ b/books/architecture/src/benchmarking/criterion/intro.md @@ -1,4 +1,4 @@ # Criterion -Each sub-directory in [`benches/criterion/`](https://github.com/Cuprate/cuprate/tree/main/benches/criterion) is a crate that uses [Criterion](https://bheisler.github.io/criterion.rs/book) for timing single functions and/or groups of functions. +Each sub-directory in [`criterion/`](https://github.com/Cuprate/benches/tree/main/criterion) is a crate that uses [Criterion](https://bheisler.github.io/criterion.rs/book) for timing single functions and/or groups of functions. -They are generally be small in scope. \ No newline at end of file +They are generally small in scope. \ No newline at end of file diff --git a/books/architecture/src/benchmarking/cuprate/creating.md b/books/architecture/src/benchmarking/cuprate/creating.md index 76eab7890..b15cb4b45 100644 --- a/books/architecture/src/benchmarking/cuprate/creating.md +++ b/books/architecture/src/benchmarking/cuprate/creating.md @@ -3,23 +3,23 @@ New benchmarks are plugged into `cuprate-benchmark` by: 1. Implementing `cuprate_benchmark_lib::Benchmark` 1. Registering the benchmark in the `cuprate_benchmark` binary -See [`benches/benchmark/example`](https://github.com/Cuprate/cuprate/tree/main/benches/benchmark/example) +See [`benchmark/example`](https://github.com/Cuprate/benches/tree/main/benchmark/example) for an example. ## Creating the benchmark crate Before plugging into `cuprate-benchmark`, your actual benchmark crate must be created: -1. Create a new crate inside `benches/benchmark` (consider copying `benches/benchmark/example` as a base) +1. Create a new crate inside `benchmark` (consider copying `benchmark/example` as a base) 1. Pull in `cuprate_benchmark_lib` as a dependency 1. Create a benchmark 1. Implement `cuprate_benchmark_lib::Benchmark` New benchmark crates using `cuprate-database` should: -- Be in [`benches/benchmark/`](https://github.com/Cuprate/cuprate/tree/main/benches/benchmark/) +- Be in [`benchmark/`](https://github.com/Cuprate/benches/tree/main/benchmark/) - Be in the `cuprate-benchmark-$CRATE_NAME` format For a real example, see: -[`cuprate-benchmark-database`](https://github.com/Cuprate/cuprate/tree/main/benches/benchmark/cuprate-database). +[`cuprate-benchmark-database`](https://github.com/Cuprate/benches/tree/main/benchmark/cuprate-database). ## `cuprate_benchmark_lib::Benchmark` This is the trait that standardizes all benchmarks ran under `cuprate-benchmark`. @@ -32,10 +32,10 @@ See `cuprate-benchmark-lib` crate documentation for a user-guide: