Skip to content

Commit 35cf6f5

Browse files
authored
Merge pull request #224 from subspace/archiving-optimizations
Archiving optimizations
2 parents 734c6b7 + 77a8246 commit 35cf6f5

File tree

11 files changed

+338
-75
lines changed

11 files changed

+338
-75
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ sha3 = { opt-level = 3 }
7272
sloth256-189 = { opt-level = 3 }
7373
smallvec = { opt-level = 3 }
7474
snow = { opt-level = 3 }
75+
subspace-core-primitives = { opt-level = 3 }
76+
subspace-archiving = { opt-level = 3 }
7577
twox-hash = { opt-level = 3 }
7678
uint = { opt-level = 3 }
7779
wasmi = { opt-level = 3 }

crates/sc-consensus-subspace/src/tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ use std::sync::Arc;
6767
use std::{cell::RefCell, task::Poll, time::Duration};
6868
use subspace_archiving::archiver::Archiver;
6969
use subspace_core_primitives::objects::BlockObjectMapping;
70-
use subspace_core_primitives::{FlatPieces, LocalChallenge, Piece, Signature, Tag, PIECE_SIZE};
70+
use subspace_core_primitives::{FlatPieces, LocalChallenge, Piece, Signature, Tag};
7171
use subspace_solving::{SubspaceCodec, SOLUTION_SIGNING_CONTEXT};
7272
use substrate_test_runtime::{Block as TestBlock, Hash};
7373

@@ -538,7 +538,7 @@ fn run_one_test(mutator: impl Fn(&mut TestHeader, Stage) + Send + Sync + 'static
538538
.await
539539
.unwrap()
540540
.iter()
541-
.flat_map(|flat_pieces| flat_pieces.chunks_exact(PIECE_SIZE))
541+
.flat_map(|flat_pieces| flat_pieces.as_pieces())
542542
.enumerate()
543543
.choose(&mut rand::thread_rng())
544544
.map(|(piece_index, piece)| (piece_index as u64, Piece::try_from(piece).unwrap()))

crates/subspace-archiving/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ version = "0.1.0"
66
authors = ["Nazar Mokrynskyi <[email protected]>"]
77
edition = "2021"
88
include = [
9+
"/benches",
910
"/src",
1011
"/Cargo.toml",
1112
"/README.md",
@@ -32,6 +33,7 @@ default-features = false
3233
version = "0.10.0"
3334

3435
[dev-dependencies]
36+
criterion = "0.3.5"
3537
rand = { version = "0.8.4", features = ["min_const_gen"] }
3638

3739
[features]
@@ -44,3 +46,7 @@ std = [
4446
"subspace-core-primitives/std",
4547
"thiserror",
4648
]
49+
50+
[[bench]]
51+
name = "archiving"
52+
harness = false
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#![feature(int_log)]
2+
3+
use criterion::{criterion_group, criterion_main, Criterion};
4+
use subspace_archiving::archiver::Archiver;
5+
use subspace_core_primitives::{PIECE_SIZE, SHA256_HASH_SIZE};
6+
7+
const MERKLE_NUM_LEAVES: u32 = 256;
8+
const WITNESS_SIZE: u32 = SHA256_HASH_SIZE as u32 * MERKLE_NUM_LEAVES.log2();
9+
pub const RECORD_SIZE: u32 = PIECE_SIZE as u32 - WITNESS_SIZE;
10+
pub const RECORDED_HISTORY_SEGMENT_SIZE: u32 = RECORD_SIZE * MERKLE_NUM_LEAVES / 2;
11+
12+
pub fn criterion_benchmark(c: &mut Criterion) {
13+
let mut input = Vec::<u8>::with_capacity(RECORDED_HISTORY_SEGMENT_SIZE.try_into().unwrap());
14+
input.resize(input.capacity(), 1);
15+
16+
c.bench_function("archiving-2-blocks", |b| {
17+
b.iter(|| {
18+
let mut archiver = Archiver::new(
19+
RECORD_SIZE.try_into().unwrap(),
20+
RECORDED_HISTORY_SEGMENT_SIZE.try_into().unwrap(),
21+
)
22+
.unwrap();
23+
for _ in 0..2 {
24+
archiver.add_block(input.clone(), Default::default());
25+
}
26+
})
27+
});
28+
}
29+
30+
criterion_group!(benches, criterion_benchmark);
31+
criterion_main!(benches);

0 commit comments

Comments
 (0)