Skip to content

Commit 7bd77dd

Browse files
committed
starknet_committer,apollo_committer: add timers for fetch patricia paths
1 parent 5ac5933 commit 7bd77dd

7 files changed

Lines changed: 108 additions & 35 deletions

File tree

crates/apollo_committer/src/committer.rs

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -535,11 +535,15 @@ where
535535
// 4. Merge the two sets of patricia paths and write the result to the storage.
536536
// 5. Update the commitment offset and return the global root and the patricia proofs.
537537
CommitBlockHeightPlan::CommitTip { state_diff_commitment } => {
538+
let mut block_measurements = SingleBlockMeasurements::default();
539+
block_measurements.start_measurement(Action::EndToEnd);
540+
538541
let pre_roots = self
539542
.forest_storage
540543
.read_roots(ForestDB::InitialReadContext::create_empty())
541544
.await
542545
.map_err(|e| self.map_internal_error(e))?;
546+
block_measurements.start_measurement(Action::FetchWitnessesFirstPass);
543547
let mut patricia_proofs = self
544548
.forest_storage
545549
.fetch_patricia_witnesses(
@@ -555,16 +559,21 @@ where
555559
height,
556560
message: format!("pre-commit witness paths: {e:?}"),
557561
})?;
562+
block_measurements
563+
.attempt_to_stop_measurement(
564+
Action::FetchWitnessesFirstPass,
565+
patricia_proofs.len(),
566+
)
567+
.ok();
558568

559-
let mut block_measurements = SingleBlockMeasurements::default();
560-
block_measurements.start_measurement(Action::EndToEnd);
561569
let CommitStateDiffOutput { filled_forest, global_root, deleted_nodes } =
562570
self.commit_state_diff(state_diff, &mut block_measurements).await?;
563571
let post_roots = filled_forest.state_roots();
564572

565573
let forest_updates = ForestDB::serialize_forest(&filled_forest)
566574
.map_err(|e| self.map_internal_error(e))?;
567575

576+
block_measurements.start_measurement(Action::FetchWitnessesSecondPass);
568577
let proof_after = self
569578
.forest_storage
570579
.fetch_patricia_witnesses(
@@ -580,23 +589,24 @@ where
580589
height,
581590
message: format!("post-commit witness paths: {e:?}"),
582591
})?;
592+
block_measurements
593+
.attempt_to_stop_measurement(
594+
Action::FetchWitnessesSecondPass,
595+
proof_after.len(),
596+
)
597+
.ok();
583598

584599
patricia_proofs.extend(proof_after);
585600

586601
let (metadata, next_offset) =
587602
commit_tip_metadata_bundle(height, global_root, state_diff_commitment);
588-
let witness_node_count = patricia_proofs.classes_trie_proof.len()
589-
+ patricia_proofs.contracts_trie_proof.nodes.len()
590-
+ patricia_proofs.contracts_trie_proof.leaves.len()
591-
+ patricia_proofs
592-
.contracts_trie_storage_proofs
593-
.values()
594-
.map(|proof| proof.len())
595-
.sum::<usize>();
603+
596604
info!(
597-
"For block number {height}, writing filled forest and {witness_node_count} \
598-
witness nodes to storage with metadata: {metadata:?}, delete {} nodes",
599-
deleted_nodes.len()
605+
"For block number {height}, writing filled forest and {witness_count} \
606+
witnesses to storage with metadata: {metadata:?}, delete \
607+
{deleted_nodes_count} nodes",
608+
witness_count = patricia_proofs.len(),
609+
deleted_nodes_count = deleted_nodes.len(),
600610
);
601611
block_measurements.start_measurement(Action::Write);
602612
let n_write_entries = self
@@ -655,6 +665,7 @@ impl ComponentStarter for ApolloCommitter {
655665
}
656666

657667
#[allow(clippy::as_conversions)]
668+
// TODO: Consider adding fetch witnesses measurements.
658669
fn update_metrics(
659670
height: BlockNumber,
660671
BlockMeasurement { n_reads, n_writes, durations, modifications_counts }: &BlockMeasurement,

crates/starknet_committer/src/block_committer/commit.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ use crate::block_committer::input::{
1212
StarknetStorageValue,
1313
StateDiff,
1414
};
15-
use crate::block_committer::measurements_util::{
16-
Action,
17-
BlockModificationsCounts,
18-
MeasurementsTrait,
19-
};
15+
use crate::block_committer::measurements_util::{Action, MeasurementsTrait};
2016
use crate::db::forest_trait::ForestReader;
2117
use crate::forest::deleted_nodes::{find_deleted_nodes, DeletedNodes};
2218
use crate::forest::filled_forest::FilledForest;
@@ -186,10 +182,10 @@ fn measure_number_of_modifications(
186182
.values()
187183
.map(|storage_entry| storage_entry.values().filter(|value| value.0 == Felt::ZERO).count())
188184
.sum::<usize>();
189-
measurements.set_number_of_modifications(BlockModificationsCounts {
185+
measurements.set_number_of_modifications(
190186
storage_tries,
191-
contracts_trie: n_contracts_trie_modifications,
192-
classes_trie: n_classes_trie_modifications,
187+
n_contracts_trie_modifications,
188+
n_classes_trie_modifications,
193189
emptied_storage_leaves,
194-
});
190+
);
195191
}

crates/starknet_committer/src/block_committer/measurements_util.rs

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ pub enum Action {
1111
Read,
1212
Compute,
1313
Write,
14+
#[cfg(feature = "os_input")]
15+
FetchWitnessesFirstPass,
16+
#[cfg(feature = "os_input")]
17+
FetchWitnessesSecondPass,
1418
}
1519

1620
#[derive(Default)]
@@ -19,6 +23,10 @@ pub struct BlockTimers {
1923
pub read_timer: Option<Instant>,
2024
pub compute_timer: Option<Instant>,
2125
pub writer_timer: Option<Instant>,
26+
#[cfg(feature = "os_input")]
27+
pub fetch_witnesses_first_pass_timer: Option<Instant>,
28+
#[cfg(feature = "os_input")]
29+
pub fetch_witnesses_second_pass_timer: Option<Instant>,
2230
}
2331

2432
impl BlockTimers {
@@ -28,6 +36,10 @@ impl BlockTimers {
2836
Action::Read => &mut self.read_timer,
2937
Action::Compute => &mut self.compute_timer,
3038
Action::Write => &mut self.writer_timer,
39+
#[cfg(feature = "os_input")]
40+
Action::FetchWitnessesFirstPass => &mut self.fetch_witnesses_first_pass_timer,
41+
#[cfg(feature = "os_input")]
42+
Action::FetchWitnessesSecondPass => &mut self.fetch_witnesses_second_pass_timer,
3143
}
3244
}
3345

@@ -62,7 +74,13 @@ pub trait MeasurementsTrait {
6274
entries_count: usize,
6375
) -> Result<f64, MeasurementNotStartedError>;
6476

65-
fn set_number_of_modifications(&mut self, block_modifications_counts: BlockModificationsCounts);
77+
fn set_number_of_modifications(
78+
&mut self,
79+
storage_tries: usize,
80+
contracts_trie: usize,
81+
classes_trie: usize,
82+
emptied_storage_leaves: usize,
83+
);
6684
}
6785

6886
pub struct NoMeasurements;
@@ -80,7 +98,10 @@ impl MeasurementsTrait for NoMeasurements {
8098

8199
fn set_number_of_modifications(
82100
&mut self,
83-
_block_modifications_counts: BlockModificationsCounts,
101+
_storage_tries: usize,
102+
_contracts_trie: usize,
103+
_classes_trie: usize,
104+
_emptied_storage_leaves: usize,
84105
) {
85106
}
86107
}
@@ -91,6 +112,12 @@ pub struct BlockDurations {
91112
pub read: f64, // Duration of a read phase (seconds).
92113
pub compute: f64, // Duration of a computation phase (seconds).
93114
pub write: f64, // Duration of a write phase (seconds).
115+
#[cfg(feature = "os_input")]
116+
// Duration of fetching witnesses w.r.t the old root (seconds).
117+
pub fetch_witnesses_first_pass: f64,
118+
#[cfg(feature = "os_input")]
119+
// Duration of fetching witnesses w.r.t the new root (seconds).
120+
pub fetch_witnesses_second_pass: f64,
94121
}
95122

96123
#[derive(Default, Clone, Debug, PartialEq, Eq)]
@@ -99,6 +126,9 @@ pub struct BlockModificationsCounts {
99126
pub contracts_trie: usize,
100127
pub classes_trie: usize,
101128
pub emptied_storage_leaves: usize,
129+
#[cfg(feature = "os_input")]
130+
// Number of witnesses fetched in the first pass (pre-commit).
131+
pub witnesses: usize,
102132
}
103133

104134
impl BlockModificationsCounts {
@@ -137,6 +167,15 @@ impl BlockMeasurement {
137167
Action::EndToEnd => {
138168
self.durations.block = duration_in_seconds;
139169
}
170+
#[cfg(feature = "os_input")]
171+
Action::FetchWitnessesFirstPass => {
172+
self.durations.fetch_witnesses_first_pass = duration_in_seconds;
173+
self.modifications_counts.witnesses = entries_count;
174+
}
175+
#[cfg(feature = "os_input")]
176+
Action::FetchWitnessesSecondPass => {
177+
self.durations.fetch_witnesses_second_pass = duration_in_seconds;
178+
}
140179
}
141180
}
142181
}
@@ -164,8 +203,14 @@ impl MeasurementsTrait for SingleBlockMeasurements {
164203

165204
fn set_number_of_modifications(
166205
&mut self,
167-
block_modifications_counts: BlockModificationsCounts,
206+
storage_tries: usize,
207+
contracts_trie: usize,
208+
classes_trie: usize,
209+
emptied_storage_leaves: usize,
168210
) {
169-
self.block_measurement.modifications_counts = block_modifications_counts;
211+
self.block_measurement.modifications_counts.storage_tries = storage_tries;
212+
self.block_measurement.modifications_counts.contracts_trie = contracts_trie;
213+
self.block_measurement.modifications_counts.classes_trie = classes_trie;
214+
self.block_measurement.modifications_counts.emptied_storage_leaves = emptied_storage_leaves;
170215
}
171216
}

crates/starknet_committer/src/patricia_merkle_tree/types.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ impl StarknetForestProofs {
5858
self.contracts_trie_storage_proofs.entry(address).or_default().extend(proof);
5959
}
6060
}
61+
62+
pub fn len(&self) -> usize {
63+
self.classes_trie_proof.len()
64+
+ self.contracts_trie_proof.nodes.len()
65+
+ self
66+
.contracts_trie_storage_proofs
67+
.values()
68+
.fold(0, |count, proofs| count + proofs.len())
69+
}
6170
}
6271

6372
pub struct RootHashes {

crates/starknet_committer_cli/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,6 @@ starknet_patricia_storage = { workspace = true, features = [
3131
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
3232
tracing.workspace = true
3333
tracing-subscriber.workspace = true
34+
35+
[features]
36+
os_input = ["starknet_committer/os_input"]

crates/starknet_committer_cli/src/utils.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use starknet_api::hash::HashOutput;
88
use starknet_committer::block_committer::measurements_util::{
99
Action,
1010
BlockMeasurement,
11-
BlockModificationsCounts,
1211
MeasurementNotStartedError,
1312
MeasurementsTrait,
1413
SingleBlockMeasurements,
@@ -79,9 +78,17 @@ impl MeasurementsTrait for BenchmarkMeasurements {
7978

8079
fn set_number_of_modifications(
8180
&mut self,
82-
block_modifications_counts: BlockModificationsCounts,
81+
storage_tries: usize,
82+
contracts_trie: usize,
83+
classes_trie: usize,
84+
emptied_storage_leaves: usize,
8385
) {
84-
self.current_measurement.set_number_of_modifications(block_modifications_counts);
86+
self.current_measurement.set_number_of_modifications(
87+
storage_tries,
88+
contracts_trie,
89+
classes_trie,
90+
emptied_storage_leaves,
91+
);
8592
}
8693
}
8794

crates/starknet_committer_cli/src/utils_test.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ const N_MODIFICATIONS: usize = 100;
1818
const N_EMPTY_LEAVES: usize = 10;
1919

2020
async fn measure_block(measurements: &mut BenchmarkMeasurements) {
21-
measurements.set_number_of_modifications(BlockModificationsCounts {
22-
storage_tries: N_MODIFICATIONS,
23-
contracts_trie: N_MODIFICATIONS,
24-
classes_trie: N_MODIFICATIONS,
25-
emptied_storage_leaves: N_EMPTY_LEAVES,
26-
});
21+
measurements.set_number_of_modifications(
22+
N_MODIFICATIONS,
23+
N_MODIFICATIONS,
24+
N_MODIFICATIONS,
25+
N_EMPTY_LEAVES,
26+
);
2727
measurements.start_measurement(Action::EndToEnd);
2828
measurements.start_measurement(Action::Read);
2929
sleep(Duration::from_secs_f64(READ_DURATION)).await;
@@ -70,6 +70,8 @@ fn assert_block_measurement(measurements: &BenchmarkMeasurements, number_of_bloc
7070
contracts_trie: N_MODIFICATIONS,
7171
classes_trie: N_MODIFICATIONS,
7272
emptied_storage_leaves: N_EMPTY_LEAVES,
73+
#[cfg(feature = "os_input")]
74+
witnesses: 0,
7375
}
7476
);
7577
}

0 commit comments

Comments
 (0)