Skip to content

Commit 4e4ea93

Browse files
committed
feat(dursto): benchmark ERC-20 transactions
Benchmarks the `Database` layer of durable storage using a sequence of operations taken from an Etherlink transaction.
1 parent 0d683b7 commit 4e4ea93

File tree

9 files changed

+998
-74
lines changed

9 files changed

+998
-74
lines changed

Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

durable-storage/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ cfg-if.workspace = true
1414
log.workspace = true
1515
hex.workspace = true
1616
octez-riscv-data.workspace = true
17+
rand.workspace = true
1718
rocksdb.workspace = true
19+
serde = { workspace = true, features = ["derive"] }
20+
serde_json.workspace = true
1821
tempfile.workspace = true
1922
thiserror.workspace = true
2023
tokio.workspace = true
@@ -31,3 +34,8 @@ bench = []
3134
name = "avl_tree"
3235
harness = false
3336
required-features = ["bench"]
37+
38+
[[bench]]
39+
name = "database"
40+
harness = false
41+
required-features = ["bench"]

durable-storage/benches/avl_tree.rs

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22
// SPDX-License-Identifier: MIT
33

44
use std::collections::BTreeMap;
5-
use std::collections::HashSet;
65
use std::time::Duration;
76

87
use bytes::Bytes;
98
use criterion::Criterion;
109
use criterion::criterion_group;
1110
use criterion::criterion_main;
12-
use octez_riscv_durable_storage::merkle_layer::KEY_MAX_SIZE;
1311
use octez_riscv_durable_storage::merkle_layer::Key;
1412
use octez_riscv_durable_storage::merkle_layer::tree::Avl;
13+
use octez_riscv_durable_storage::random::generate_keys;
14+
use octez_riscv_durable_storage::random::generate_random_bytes_in_range;
1515
use rand::prelude::*;
1616

1717
const KEY_COUNT: usize = 10_000_000;
@@ -24,31 +24,7 @@ pub enum Operation {
2424
Delete(Key),
2525
}
2626

27-
fn generate_byte_vector(rng: &mut impl Rng, length: usize) -> Vec<u8> {
28-
let mut ret = vec![0u8; length];
29-
rng.fill(ret.as_mut_slice());
30-
ret
31-
}
32-
33-
fn generate_keys(rng: &mut impl Rng, length: usize) -> Vec<Key> {
34-
let mut tmp: HashSet<Key> = HashSet::new();
35-
while tmp.len() < length {
36-
let key_length = rng.random_range(1..KEY_MAX_SIZE);
37-
tmp.insert(
38-
Key::new(generate_byte_vector(rng, key_length).as_slice())
39-
.expect("The key should be created"),
40-
);
41-
}
42-
tmp.into_iter().collect()
43-
}
44-
45-
fn get_random_data(rng: &mut impl Rng) -> Bytes {
46-
let length: usize = rng.random_range(1..20);
47-
let bytes = generate_byte_vector(rng, length);
48-
Bytes::from(bytes)
49-
}
50-
51-
fn get_operations_batch(rng: &mut impl Rng, keys: &[Key], batch_size: usize) -> Vec<Operation> {
27+
fn get_operations_batch(mut rng: &mut impl Rng, keys: &[Key], batch_size: usize) -> Vec<Operation> {
5228
(0..batch_size)
5329
.map(|_| {
5430
let key: Key = keys
@@ -57,7 +33,7 @@ fn get_operations_batch(rng: &mut impl Rng, keys: &[Key], batch_size: usize) ->
5733
.clone();
5834
match rng.random_range(0..3) {
5935
0 => Operation::Get(key),
60-
1 => Operation::Upsert(key, get_random_data(rng)),
36+
1 => Operation::Upsert(key, generate_random_bytes_in_range(&mut rng, 1..20).into()),
6137
_ => Operation::Delete(key),
6238
}
6339
})
@@ -75,7 +51,7 @@ fn bench_avl_tree_operations(c: &mut Criterion) {
7551
// Setting up the tree
7652
let mut tree = Avl::default();
7753
for key in &keys[..keys.len() / 2] {
78-
tree.set(key, get_random_data(&mut rng));
54+
tree.set(key, generate_random_bytes_in_range(&mut rng, 1..20).into());
7955
}
8056

8157
c.bench_function("Bench AVL tree with operations", |b| {
@@ -111,7 +87,10 @@ fn reference(c: &mut Criterion) {
11187

11288
let mut tree = BTreeMap::<Key, Bytes>::new();
11389
for key in &keys[..keys.len() / 2] {
114-
tree.insert(key.clone(), get_random_data(&mut rng));
90+
tree.insert(
91+
key.clone(),
92+
generate_random_bytes_in_range(&mut rng, 1..20).into(),
93+
);
11594
}
11695

11796
c.bench_function("BTreeMap reference", |b| {

0 commit comments

Comments
 (0)