Skip to content

Commit f69c528

Browse files
authored
Merge pull request #3361 from ProvableHQ/fix/benchmark-libclang
Install libclang deps for RocksDB benchmark CI
2 parents bf1f3e2 + 5b2f803 commit f69c528

4 files changed

Lines changed: 23 additions & 27 deletions

File tree

.github/workflows/benchmarks.yml

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@ jobs:
2626
- name: Install Rust
2727
uses: dtolnay/rust-toolchain@stable
2828

29-
- name: Install required Debian pacakges
30-
run: sudo apt install -y lld
29+
# RocksDB benches need libclang (via bindgen); match CircleCI rocks deps.
30+
- name: Install required Debian packages
31+
run: |
32+
DEBIAN_FRONTEND=noninteractive sudo apt-get update
33+
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --no-install-recommends \
34+
clang libclang-dev llvm-dev llvm lld pkg-config xz-utils make libssl-dev
3135
3236
- uses: actions/cache@v4
3337
with:
@@ -73,7 +77,7 @@ jobs:
7377
run: |
7478
set -o pipefail
7579
cd console/collections
76-
cargo bench --locked --bench merkle_tree -- --output-format bencher | tee -a ../../output.txt
80+
cargo bench --locked --bench merkle_tree -- --output-format bencher --sample-size 10 --measurement-time 2 | tee -a ../../output.txt
7781
cd ../..
7882
7983
- name: Benchmark console/types
@@ -93,7 +97,7 @@ jobs:
9397
- name: Benchmark ledger (block)
9498
run: |
9599
set -o pipefail
96-
cargo bench --package=snarkvm-ledger --bench block --features=rocks,test-helpers,test -- --output-format bencher | tee -a output.txt
100+
cargo bench --package=snarkvm-ledger --bench block --features=rocks,test-helpers,test -- --output-format bencher --sample-size 10 --measurement-time 2 | tee -a output.txt
97101
98102
- name: Benchmark ledger (dag)
99103
run: |
@@ -105,10 +109,8 @@ jobs:
105109
set -o pipefail
106110
cargo bench --package=snarkvm-ledger --bench transaction -- --output-format bencher | tee -a output.txt
107111
108-
- name: Benchmark ledger (store)
109-
run: |
110-
set -o pipefail
111-
cargo bench --package=snarkvm-ledger --bench store --features=rocks,test-helpers -- --output-format bencher | tee -a output.txt
112+
# Skip store/advance: require a pre-generated `test-ledger/` fixture
113+
# (see `snarkvm-testchain-generator --no-ledger`).
112114

113115
- name: Benchmark ledger/puzzle
114116
run: |
@@ -134,7 +136,7 @@ jobs:
134136
tool: 'cargo'
135137
output-file-path: output.txt
136138
github-token: ${{ secrets.GITHUB_TOKEN }}
137-
alert-threshold: '150%'
139+
alert-threshold: '200%'
138140
comment-on-alert: true
139141
fail-on-alert: true
140142
alert-comment-cc-users: '@vicsn'

console/collections/benches/merkle_tree.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ use std::{collections::BTreeMap, time::Duration};
3434
const DEPTH: u8 = 32;
3535
const MAX_INSTANTIATED_DEPTH: u8 = 8;
3636

37-
const NUM_LEAVES: &[usize] = &[1, 100, 10_000];
38-
const APPEND_SIZES: &[usize] = &[1, 100, 10_000];
39-
const UPDATE_SIZES: &[usize] = &[1, 100, 1_000];
37+
const NUM_LEAVES: &[usize] = &[1, 100];
38+
const APPEND_SIZES: &[usize] = &[1, 100];
39+
const UPDATE_SIZES: &[usize] = &[1, 100];
4040

4141
/// The tree sizes used by the `MerkleTreeState` benchmarks; these reach further
4242
/// than `NUM_LEAVES`, as caching a tree is most interesting for large trees.
@@ -290,4 +290,8 @@ criterion_group! {
290290
config = Criterion::default().sample_size(10).warm_up_time(Duration::from_secs(1));
291291
targets = legacy_state
292292
}
293-
criterion_main!(merkle_tree, merkle_tree_state, legacy_merkle_tree_cache);
293+
// MerkleTreeState and LegacyMerkleTreeCache are opt-in: they include multi-million-leaf
294+
// trees and legacy hasher deserialization that each take minutes per sample.
295+
// Run with: cargo bench --bench merkle_tree -- MerkleTreeState
296+
// Run with: cargo bench --bench merkle_tree -- LegacyMerkleTreeCache
297+
criterion_main!(merkle_tree);

ledger/benches/block.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ extern crate criterion;
1919
use snarkvm_console::{account::PrivateKey, network::MainnetV0, prelude::*};
2020
use snarkvm_ledger::test_helpers::sample_genesis_block;
2121

22-
use criterion::Criterion;
22+
use criterion::{Criterion, measurement::WallTime};
23+
use std::time::Duration;
2324

2425
type CurrentNetwork = MainnetV0;
2526

@@ -39,11 +40,6 @@ fn bench_serialization<T: Serialize + DeserializeOwned + ToBytes + FromBytes + C
3940
// bincode::serialize
4041
c.bench_function(&format!("{name}::serialize (bincode)"), |b| b.iter(|| bincode::serialize(&object).unwrap()));
4142

42-
// serde_json::to_string
43-
c.bench_function(&format!("{name}::to_string (serde_json)"), |b| {
44-
b.iter(|| serde_json::to_string(&object).unwrap())
45-
});
46-
4743
/////////////////
4844
// Deserialize //
4945
/////////////////
@@ -65,13 +61,6 @@ fn bench_serialization<T: Serialize + DeserializeOwned + ToBytes + FromBytes + C
6561
b.iter(|| bincode::deserialize::<T>(&buffer).unwrap())
6662
});
6763
}
68-
// serde_json::from_str
69-
{
70-
let object = serde_json::to_string(&object).unwrap();
71-
c.bench_function(&format!("{name}::from_str (serde_json)"), move |b| {
72-
b.iter(|| serde_json::from_str::<T>(&object).unwrap())
73-
});
74-
}
7564
}
7665

7766
/// Serialization benches for one sampled genesis block and derived header, transactions, transaction, and transition.
@@ -103,7 +92,7 @@ fn signature_serialization(c: &mut Criterion) {
10392

10493
criterion_group! {
10594
name = block;
106-
config = Criterion::default().sample_size(10);
95+
config = Criterion::<WallTime>::default().sample_size(10).measurement_time(Duration::from_secs(2));
10796
targets = block_and_nested_serialization, signature_serialization,
10897
}
10998

ledger/puzzle/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,4 @@ workspace = true
9898

9999
[dev-dependencies.snarkvm-ledger-puzzle-epoch]
100100
path = "epoch"
101+
features = [ "merkle" ]

0 commit comments

Comments
 (0)