lighthouse/beacon_node/beacon_chain/test_harness/benches/state_transition.rs

81 lines
2.3 KiB
Rust
Raw Normal View History

2019-01-27 04:45:29 +00:00
use criterion::Criterion;
use criterion::{black_box, criterion_group, criterion_main, Benchmark};
use env_logger::{Builder, Env};
2019-01-27 04:45:29 +00:00
use test_harness::BeaconChainHarness;
use types::{ChainSpec, Hash256};
2019-01-27 04:45:29 +00:00
fn mid_epoch_state_transition(c: &mut Criterion) {
Builder::from_env(Env::default().default_filter_or("debug")).init();
let validator_count = 1000;
2019-01-27 04:45:29 +00:00
let mut rig = BeaconChainHarness::new(ChainSpec::foundation(), validator_count);
let epoch_depth = (rig.spec.epoch_length * 2) + (rig.spec.epoch_length / 2);
2019-01-27 04:45:29 +00:00
for _ in 0..epoch_depth {
2019-01-27 04:45:29 +00:00
rig.advance_chain_with_block();
}
let state = rig.beacon_chain.state.read().clone();
assert!((state.slot + 1) % rig.spec.epoch_length != 0);
2019-01-27 04:45:29 +00:00
c.bench_function("mid-epoch state transition 10k validators", move |b| {
let state = state.clone();
b.iter(|| {
let mut state = state.clone();
black_box(state.per_slot_processing(Hash256::zero(), &rig.spec))
2019-01-27 04:45:29 +00:00
})
});
}
fn epoch_boundary_state_transition(c: &mut Criterion) {
// Builder::from_env(Env::default().default_filter_or("debug")).init();
let validator_count = 10000;
2019-01-27 04:45:29 +00:00
let mut rig = BeaconChainHarness::new(ChainSpec::foundation(), validator_count);
let epoch_depth = rig.spec.epoch_length * 2;
2019-01-27 04:45:29 +00:00
for _ in 0..(epoch_depth - 1) {
2019-01-27 04:45:29 +00:00
rig.advance_chain_with_block();
}
let state = rig.beacon_chain.state.read().clone();
assert_eq!((state.slot + 1) % rig.spec.epoch_length, 0);
c.bench(
"routines",
Benchmark::new("routine_1", move |b| {
let state = state.clone();
b.iter(|| {
let mut state = state.clone();
black_box(black_box(
state.per_slot_processing(Hash256::zero(), &rig.spec),
))
})
})
.sample_size(5),
2019-01-27 04:45:29 +00:00
);
/*
c.bench_function("mid-epoch state transition 10k validators", move |b| {
2019-01-27 04:45:29 +00:00
let state = state.clone();
b.iter(|| {
let mut state = state.clone();
black_box(black_box(
state.per_slot_processing(Hash256::zero(), &rig.spec),
))
2019-01-27 04:45:29 +00:00
})
});
*/
2019-01-27 04:45:29 +00:00
}
criterion_group!(
benches,
// mid_epoch_state_transition,
2019-01-27 04:45:29 +00:00
epoch_boundary_state_transition
);
criterion_main!(benches);