diff --git a/Cargo.lock b/Cargo.lock index af779429e..a5958f557 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1464,16 +1464,15 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.1.2" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest", "fiat-crypto", - "platforms", "rustc_version", "subtle", "zeroize", @@ -3429,12 +3428,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" -[[package]] -name = "platforms" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" - [[package]] name = "plotters" version = "0.3.6" diff --git a/shotover/benches/benches/chain.rs b/shotover/benches/benches/chain.rs index 161c2648a..194a317c4 100644 --- a/shotover/benches/benches/chain.rs +++ b/shotover/benches/benches/chain.rs @@ -39,10 +39,7 @@ fn criterion_benchmark(c: &mut Criterion) { group.bench_function("loopback", |b| { b.to_async(&rt).iter_batched( - || BenchInput { - chain: chain.build(TransformContextBuilder::new_test()), - wrapper: wrapper.clone(), - }, + || BenchInput::new_pre_used(&chain, &wrapper), BenchInput::bench, BatchSize::SmallInput, ) @@ -58,10 +55,7 @@ fn criterion_benchmark(c: &mut Criterion) { group.bench_function("nullsink", |b| { b.to_async(&rt).iter_batched( - || BenchInput { - chain: chain.build(TransformContextBuilder::new_test()), - wrapper: wrapper.clone(), - }, + || BenchInput::new_pre_used(&chain, &wrapper), BenchInput::bench, BatchSize::SmallInput, ) @@ -96,10 +90,7 @@ fn criterion_benchmark(c: &mut Criterion) { group.bench_function("redis_filter", |b| { b.to_async(&rt).iter_batched( - || BenchInput { - chain: chain.build(TransformContextBuilder::new_test()), - wrapper: wrapper.clone(), - }, + || BenchInput::new_pre_used(&chain, &wrapper), BenchInput::bench, BatchSize::SmallInput, ) @@ -125,10 +116,7 @@ fn criterion_benchmark(c: &mut Criterion) { group.bench_function("redis_cluster_ports_rewrite", |b| { b.to_async(&rt).iter_batched( - || BenchInput { - chain: chain.build(TransformContextBuilder::new_test()), - wrapper: wrapper.clone(), - }, + || BenchInput::new_pre_used(&chain, &wrapper), BenchInput::bench, BatchSize::SmallInput, ) @@ -172,10 +160,7 @@ fn criterion_benchmark(c: &mut Criterion) { group.bench_function("cassandra_request_throttling_unparsed", |b| { b.to_async(&rt).iter_batched( - || BenchInput { - chain: chain.build(TransformContextBuilder::new_test()), - wrapper: wrapper.clone(), - }, + || BenchInput::new_pre_used(&chain, &wrapper), BenchInput::bench, BatchSize::SmallInput, ) @@ -226,10 +211,7 @@ fn criterion_benchmark(c: &mut Criterion) { group.bench_function("cassandra_rewrite_peers_passthrough", |b| { b.to_async(&rt).iter_batched( - || BenchInput { - chain: chain.build(TransformContextBuilder::new_test()), - wrapper: wrapper.clone(), - }, + || BenchInput::new_pre_used(&chain, &wrapper), BenchInput::bench, BatchSize::SmallInput, ) @@ -272,10 +254,7 @@ fn criterion_benchmark(c: &mut Criterion) { group.bench_function("cassandra_protect_unprotected", |b| { b.to_async(&rt).iter_batched( - || BenchInput { - chain: chain.build(TransformContextBuilder::new_test()), - wrapper: wrapper.clone(), - }, + || BenchInput::new_pre_used(&chain, &wrapper), BenchInput::bench, BatchSize::SmallInput, ) @@ -287,10 +266,7 @@ fn criterion_benchmark(c: &mut Criterion) { group.bench_function("cassandra_protect_protected", |b| { b.to_async(&rt).iter_batched( - || BenchInput { - chain: chain.build(TransformContextBuilder::new_test()), - wrapper: wrapper.clone(), - }, + || BenchInput::new_pre_used(&chain, &wrapper), BenchInput::bench, BatchSize::SmallInput, ) @@ -320,12 +296,17 @@ fn criterion_benchmark(c: &mut Criterion) { "127.0.0.1:6379".parse().unwrap(), ); - group.bench_function("query_counter", |b| { + group.bench_function("query_counter_fresh", |b| { b.to_async(&rt).iter_batched( - || BenchInput { - chain: chain.build(TransformContextBuilder::new_test()), - wrapper: wrapper.clone(), - }, + || BenchInput::new_fresh(&chain, &wrapper), + BenchInput::bench, + BatchSize::SmallInput, + ) + }); + + group.bench_function("query_counter_pre_used", |b| { + b.to_async(&rt).iter_batched( + || BenchInput::new_pre_used(&chain, &wrapper), BenchInput::bench, BatchSize::SmallInput, ) @@ -366,6 +347,29 @@ struct BenchInput<'a> { } impl<'a> BenchInput<'a> { + // Setup the bench such that the chain is completely fresh + fn new_fresh(chain: &TransformChainBuilder, wrapper: &Wrapper<'a>) -> Self { + BenchInput { + chain: chain.build(TransformContextBuilder::new_test()), + wrapper: wrapper.clone(), + } + } + + // Setup the bench such that the chain has already had the test wrapper passed through it. + // This ensures that any adhoc setup for that message type has been performed. + // This is a more realistic bench for typical usage. + fn new_pre_used(chain: &TransformChainBuilder, wrapper: &Wrapper<'a>) -> Self { + let mut chain = chain.build(TransformContextBuilder::new_test()); + + // Run the chain once so we are measuring the chain once each transform has been fully initialized + futures::executor::block_on(chain.process_request(wrapper.clone())).unwrap(); + + BenchInput { + chain, + wrapper: wrapper.clone(), + } + } + async fn bench(mut self) -> (Vec, TransformChain) { // Return both the chain itself and the response to avoid measuring the time to drop the values in the benchmark (