chore: add pprof profiler/flamegraphs to all criterion benchmarks (#1425)

This commit is contained in:
joshieDo
2023-02-17 17:08:32 +08:00
committed by GitHub
parent fad9c04b07
commit 495db6e30d
11 changed files with 43 additions and 6 deletions

4
Cargo.lock generated
View File

@ -4320,6 +4320,7 @@ dependencies = [
"parity-scale-codec", "parity-scale-codec",
"paste", "paste",
"postcard", "postcard",
"pprof",
"proptest", "proptest",
"proptest-derive", "proptest-derive",
"rand 0.8.5", "rand 0.8.5",
@ -4552,6 +4553,7 @@ dependencies = [
"libc", "libc",
"lifetimed-bytes", "lifetimed-bytes",
"parking_lot 0.12.1", "parking_lot 0.12.1",
"pprof",
"rand 0.8.5", "rand 0.8.5",
"rand_xorshift", "rand_xorshift",
"reth-mdbx-sys", "reth-mdbx-sys",
@ -4696,6 +4698,7 @@ dependencies = [
"once_cell", "once_cell",
"parity-scale-codec", "parity-scale-codec",
"plain_hasher", "plain_hasher",
"pprof",
"proptest", "proptest",
"proptest-derive", "proptest-derive",
"rand 0.8.5", "rand 0.8.5",
@ -4756,6 +4759,7 @@ dependencies = [
"ethereum-types", "ethereum-types",
"ethnum", "ethnum",
"hex-literal", "hex-literal",
"pprof",
"rand 0.8.5", "rand 0.8.5",
"reth-rlp", "reth-rlp",
"reth-rlp-derive", "reth-rlp-derive",

View File

@ -80,6 +80,7 @@ proptest-derive = "0.3"
# https://github.com/paradigmxyz/reth/pull/177#discussion_r1021172198 # https://github.com/paradigmxyz/reth/pull/177#discussion_r1021172198
secp256k1 = "0.24.2" secp256k1 = "0.24.2"
criterion = "0.4.0" criterion = "0.4.0"
pprof = { version = "0.11", features = ["flamegraph", "frame-pointer", "criterion"] }
[features] [features]
default = [] default = []

View File

@ -1,5 +1,6 @@
use criterion::{criterion_group, criterion_main, Criterion}; use criterion::{criterion_group, criterion_main, Criterion};
use hex_literal::hex; use hex_literal::hex;
use pprof::criterion::{Output, PProfProfiler};
use reth_primitives::TransactionSigned; use reth_primitives::TransactionSigned;
use reth_rlp::Decodable; use reth_rlp::Decodable;
@ -16,5 +17,9 @@ pub fn criterion_benchmark(c: &mut Criterion) {
}); });
} }
criterion_group!(benches, criterion_benchmark); criterion_group! {
name = benches;
config = Criterion::default().with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
targets = criterion_benchmark
}
criterion_main!(benches); criterion_main!(benches);

View File

@ -33,6 +33,7 @@ rand = "0.8"
secp256k1 = { version = "0.24", features = [ secp256k1 = { version = "0.24", features = [
"rand-std", "rand-std",
] } ] }
pprof = { version = "0.11", features = ["flamegraph", "frame-pointer", "criterion"] }
[features] [features]
alloc = [] alloc = []

View File

@ -12,6 +12,7 @@ use bytes::BytesMut;
use criterion::{criterion_group, criterion_main, Criterion}; use criterion::{criterion_group, criterion_main, Criterion};
use ethnum::*; use ethnum::*;
use hex_literal::hex; use hex_literal::hex;
use pprof::criterion::{Output, PProfProfiler};
use reth_rlp::*; use reth_rlp::*;
fn bench_encode(c: &mut Criterion) { fn bench_encode(c: &mut Criterion) {
@ -65,5 +66,9 @@ fn bench_decode(c: &mut Criterion) {
}); });
} }
criterion_group!(benches, bench_encode, bench_decode); criterion_group! {
name = benches;
config = Criterion::default().with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
targets = bench_encode, bench_decode
}
criterion_main!(benches); criterion_main!(benches);

View File

@ -52,6 +52,7 @@ reth-interfaces = { path = "../../interfaces", features = ["bench"] }
tempfile = "3.3.0" tempfile = "3.3.0"
test-fuzz = "3.0.4" test-fuzz = "3.0.4"
pprof = { version = "0.11", features = ["flamegraph", "frame-pointer", "criterion"] }
criterion = "0.4.0" criterion = "0.4.0"
iai = "0.1.1" iai = "0.1.1"
tokio = { version = "1.21.2", features = ["full"] } tokio = { version = "1.21.2", features = ["full"] }

View File

@ -3,10 +3,15 @@
use criterion::{ use criterion::{
black_box, criterion_group, criterion_main, measurement::WallTime, BenchmarkGroup, Criterion, black_box, criterion_group, criterion_main, measurement::WallTime, BenchmarkGroup, Criterion,
}; };
use pprof::criterion::{Output, PProfProfiler};
use reth_db::cursor::{DbDupCursorRO, DbDupCursorRW}; use reth_db::cursor::{DbDupCursorRO, DbDupCursorRW};
use std::time::Instant; use std::time::Instant;
criterion_group!(benches, db, serialization); criterion_group! {
name = benches;
config = Criterion::default().with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
targets = db, serialization
}
criterion_main!(benches); criterion_main!(benches);
pub fn db(c: &mut Criterion) { pub fn db(c: &mut Criterion) {

View File

@ -3,6 +3,7 @@
use criterion::{ use criterion::{
black_box, criterion_group, criterion_main, measurement::WallTime, BenchmarkGroup, Criterion, black_box, criterion_group, criterion_main, measurement::WallTime, BenchmarkGroup, Criterion,
}; };
use pprof::criterion::{Output, PProfProfiler};
use proptest::{ use proptest::{
arbitrary::Arbitrary, arbitrary::Arbitrary,
prelude::{any_with, ProptestConfig}, prelude::{any_with, ProptestConfig},
@ -16,7 +17,11 @@ use reth_db::{
use std::{collections::HashSet, time::Instant}; use std::{collections::HashSet, time::Instant};
use test_fuzz::runtime::num_traits::Zero; use test_fuzz::runtime::num_traits::Zero;
criterion_group!(benches, hash_keys); criterion_group! {
name = benches;
config = Criterion::default().with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
targets = hash_keys
}
criterion_main!(benches); criterion_main!(benches);
/// It benchmarks the insertion of rows into a table where `Keys` are hashes. /// It benchmarks the insertion of rows into a table where `Keys` are hashes.

View File

@ -24,6 +24,7 @@ ffi = { package = "reth-mdbx-sys", path = "./mdbx-sys" }
lifetimed-bytes = { version = "0.1", optional = true } lifetimed-bytes = { version = "0.1", optional = true }
[dev-dependencies] [dev-dependencies]
pprof = { version = "0.11", features = ["flamegraph", "frame-pointer", "criterion"] }
criterion = "0.4" criterion = "0.4"
rand = "0.8" rand = "0.8"
rand_xorshift = "0.3" rand_xorshift = "0.3"

View File

@ -2,6 +2,7 @@ mod utils;
use criterion::{black_box, criterion_group, criterion_main, Criterion}; use criterion::{black_box, criterion_group, criterion_main, Criterion};
use ffi::*; use ffi::*;
use pprof::criterion::{Output, PProfProfiler};
use reth_libmdbx::*; use reth_libmdbx::*;
use std::ptr; use std::ptr;
use utils::*; use utils::*;
@ -101,5 +102,9 @@ fn bench_get_seq_raw(c: &mut Criterion) {
}); });
} }
criterion_group!(benches, bench_get_seq_iter, bench_get_seq_cursor, bench_get_seq_raw); criterion_group! {
name = benches;
config = Criterion::default().with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
targets = bench_get_seq_iter, bench_get_seq_cursor, bench_get_seq_raw
}
criterion_main!(benches); criterion_main!(benches);

View File

@ -115,5 +115,9 @@ fn bench_put_rand_raw(c: &mut Criterion) {
}); });
} }
criterion_group!(benches, bench_get_rand, bench_get_rand_raw, bench_put_rand, bench_put_rand_raw); criterion_group! {
name = benches;
config = Criterion::default().with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
targets = bench_get_rand, bench_get_rand_raw, bench_put_rand, bench_put_rand_raw
}
criterion_main!(benches); criterion_main!(benches);