Skip to content

Commit 1645f47

Browse files
committed
add more metrics
1 parent f6932fe commit 1645f47

File tree

7 files changed

+159
-66
lines changed

7 files changed

+159
-66
lines changed

crates/bin/src/utils.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ pub fn verify<T: Block + Clone>(
99
l2_trace: T,
1010
fork_config: &HardforkConfig,
1111
) -> Result<(), VerificationError> {
12-
measure_duration_histogram!(
13-
total_block_verification_duration_microseconds,
12+
measure_duration_millis!(
13+
total_block_verification_duration_milliseconds,
1414
verify_inner(l2_trace, fork_config)
1515
)
1616
}
@@ -40,8 +40,8 @@ fn verify_inner<T: Block + Clone>(
4040
let zktrie_db = cycle_track!(
4141
{
4242
let mut zktrie_db = HashMapDb::default();
43-
measure_duration_histogram!(
44-
build_zktrie_db_duration_microseconds,
43+
measure_duration_millis!(
44+
build_zktrie_db_duration_milliseconds,
4545
l2_trace.build_zktrie_db(&mut zktrie_db).unwrap()
4646
);
4747
Rc::new(RefCell::new(zktrie_db))

crates/core/src/chunk.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ impl ChunkInfo {
4242

4343
let mut zktrie_db = HashMapDb::default();
4444
for trace in traces.iter() {
45-
measure_duration_histogram!(
46-
build_zktrie_db_duration_microseconds,
45+
measure_duration_millis!(
46+
build_zktrie_db_duration_milliseconds,
4747
trace.build_zktrie_db(&mut zktrie_db).unwrap()
4848
);
4949
}

crates/core/src/database.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ impl<CodeDb: KVDatabase, ZkDb: KVDatabase + Clone + 'static> EvmDatabase<CodeDb,
111111

112112
/// Update the database with a new block trace.
113113
pub fn update<T: Block>(&mut self, l2_trace: T) -> Result<()> {
114-
measure_duration_histogram!(update_db_duration_microseconds, self.update_inner(l2_trace))
114+
measure_duration_millis!(update_db_duration_milliseconds, self.update_inner(l2_trace))
115115
}
116116

117117
fn update_inner<T: Block>(&mut self, l2_trace: T) -> Result<()> {
@@ -155,10 +155,11 @@ impl<CodeDb: KVDatabase, ZkDb: KVDatabase + Clone + 'static> DatabaseRef
155155

156156
/// Get basic account information.
157157
fn basic_ref(&self, address: Address) -> Result<Option<AccountInfo>> {
158-
let Some(account) = self
159-
.zktrie
160-
.get::<Account, _>(address)
161-
.map_err(DatabaseError::zk_trie)?
158+
let Some(account) = measure_duration_micros!(
159+
zktrie_get_duration_microseconds,
160+
self.zktrie.get::<Account, _>(address)
161+
)
162+
.map_err(DatabaseError::zk_trie)?
162163
else {
163164
return Ok(None);
164165
};
@@ -214,12 +215,13 @@ impl<CodeDb: KVDatabase, ZkDb: KVDatabase + Clone + 'static> DatabaseRef
214215
let trie = storage_trie_refs
215216
.entry(address)
216217
.or_insert_with_key(|address| {
217-
let storage_root = self
218-
.zktrie
219-
.get::<Account, _>(address)
220-
.expect("unexpected zktrie error")
221-
.map(|acc| acc.storage_root)
222-
.unwrap_or_default();
218+
let storage_root = measure_duration_micros!(
219+
zktrie_get_duration_microseconds,
220+
self.zktrie.get::<Account, _>(address)
221+
)
222+
.expect("unexpected zktrie error")
223+
.map(|acc| acc.storage_root)
224+
.unwrap_or_default();
223225
dev_debug!("storage root of {:?} is {:?}", address, storage_root);
224226

225227
let zktrie_db = self.zktrie_db.clone();

crates/core/src/executor/mod.rs

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ impl<CodeDb: KVDatabase, ZkDb: KVDatabase + Clone + 'static> EvmExecutor<'_, Cod
5555

5656
/// Handle a block.
5757
pub fn handle_block<T: Block>(&mut self, l2_trace: &T) -> Result<(), VerificationError> {
58-
measure_duration_histogram!(
59-
handle_block_duration_microseconds,
58+
measure_duration_millis!(
59+
handle_block_duration_milliseconds,
6060
self.handle_block_inner(l2_trace)
6161
)?;
6262

@@ -151,13 +151,15 @@ impl<CodeDb: KVDatabase, ZkDb: KVDatabase + Clone + 'static> EvmExecutor<'_, Cod
151151

152152
dev_trace!("handler cfg: {:?}", revm.handler.cfg);
153153

154-
let _result =
154+
let _result = measure_duration_millis!(
155+
transact_commit_duration_milliseconds,
155156
cycle_track!(revm.transact_commit(), "transact_commit").map_err(|e| {
156157
VerificationError::EvmExecution {
157158
tx_hash: *tx.tx_hash(),
158159
source: e,
159160
}
160-
})?;
161+
})?
162+
);
161163

162164
dev_trace!("{_result:#?}");
163165
}
@@ -171,8 +173,8 @@ impl<CodeDb: KVDatabase, ZkDb: KVDatabase + Clone + 'static> EvmExecutor<'_, Cod
171173

172174
/// Commit pending changes in cache db to zktrie
173175
pub fn commit_changes(&mut self, zktrie_db: ZkDb) -> Result<B256, DatabaseError> {
174-
measure_duration_histogram!(
175-
commit_changes_duration_microseconds,
176+
measure_duration_millis!(
177+
commit_changes_duration_milliseconds,
176178
cycle_track!(
177179
self.commit_changes_inner(zktrie_db)
178180
.map_err(DatabaseError::zk_trie),
@@ -225,22 +227,31 @@ impl<CodeDb: KVDatabase, ZkDb: KVDatabase + Clone + 'static> EvmExecutor<'_, Cod
225227
.expect("unable to get storage trie");
226228
for (key, value) in db_acc.storage.iter() {
227229
if !value.is_zero() {
228-
cycle_track!(
229-
storage_trie.update(key.to_be_bytes::<32>(), value)?,
230-
"Zktrie::update_store"
230+
measure_duration_micros!(
231+
zktrie_update_duration_microseconds,
232+
cycle_track!(
233+
storage_trie.update(key.to_be_bytes::<32>(), value)?,
234+
"Zktrie::update_store"
235+
)
231236
);
232237
} else {
233-
cycle_track!(
234-
storage_trie.delete(key.to_be_bytes::<32>())?,
235-
"Zktrie::delete"
238+
measure_duration_micros!(
239+
zktrie_delete_duration_microseconds,
240+
cycle_track!(
241+
storage_trie.delete(key.to_be_bytes::<32>())?,
242+
"Zktrie::delete"
243+
)
236244
);
237245
}
238246

239247
#[cfg(feature = "debug-storage")]
240248
debug_recorder.record_storage(*addr, *key, *value);
241249
}
242250

243-
storage_trie.commit()?;
251+
measure_duration_micros!(
252+
zktrie_commit_duration_microseconds,
253+
storage_trie.commit()?
254+
);
244255

245256
cycle_tracker_end!("update storage_tire");
246257
storage_root = *storage_trie.root().unwrap_ref();
@@ -272,17 +283,20 @@ impl<CodeDb: KVDatabase, ZkDb: KVDatabase + Clone + 'static> EvmExecutor<'_, Cod
272283
debug_recorder.record_account(*addr, info.clone(), storage_root);
273284

274285
let acc_data = Account::from_revm_account_with_storage_root(info, storage_root);
275-
cycle_track!(
276-
zktrie
277-
.update(addr, acc_data)
278-
.expect("failed to update account"),
279-
"Zktrie::update_account"
286+
measure_duration_micros!(
287+
zktrie_update_duration_microseconds,
288+
cycle_track!(
289+
zktrie
290+
.update(addr, acc_data)
291+
.expect("failed to update account"),
292+
"Zktrie::update_account"
293+
)
280294
);
281295

282296
cycle_tracker_end!("commit account {}", addr);
283297
}
284298

285-
zktrie.commit()?;
299+
measure_duration_micros!(zktrie_commit_duration_microseconds, zktrie.commit()?);
286300

287301
let root_after = *zktrie.root().unwrap_ref();
288302

crates/sbv/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ pub use sbv_utils as utils;
66

77
pub use sbv_utils::{
88
cycle_track, cycle_tracker_end, cycle_tracker_start, dev_debug, dev_error, dev_info, dev_trace,
9-
dev_warn, measure_duration_histogram, update_metrics_counter, update_metrics_gauge,
9+
dev_warn, measure_duration_millis, update_metrics_counter, update_metrics_gauge,
1010
};

crates/utils/src/macros.rs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,35 @@ macro_rules! dev_warn {
9292

9393
/// This macro is for measuring duration to metrics
9494
#[macro_export]
95-
macro_rules! measure_duration_histogram {
95+
macro_rules! measure_duration_millis {
96+
($label:ident, $e:expr) => {{
97+
#[cfg(feature = "metrics")]
98+
let __measure_duration_histogram_start = std::time::Instant::now();
99+
100+
#[allow(clippy::let_and_return)]
101+
let __measure_duration_histogram_result = $e;
102+
103+
let __measure_duration_histogram_elasped = __measure_duration_histogram_start.elapsed();
104+
let __duration_millis = __measure_duration_histogram_elasped.as_secs() as f64 * 1_000.0
105+
+ __measure_duration_histogram_elasped.subsec_nanos() as f64 / 1_000_000.0;
106+
107+
#[cfg(feature = "metrics")]
108+
$crate::metrics::REGISTRY.$label.observe(__duration_millis);
109+
110+
#[cfg(feature = "metrics")]
111+
dev_debug!(
112+
"measured duration {} = {:?}ms",
113+
stringify!($label),
114+
__duration_millis,
115+
);
116+
117+
__measure_duration_histogram_result
118+
}};
119+
}
120+
121+
/// This macro is for measuring duration to metrics
122+
#[macro_export]
123+
macro_rules! measure_duration_micros {
96124
($label:ident, $e:expr) => {{
97125
#[cfg(feature = "metrics")]
98126
let __measure_duration_histogram_start = std::time::Instant::now();
@@ -103,13 +131,13 @@ macro_rules! measure_duration_histogram {
103131
#[cfg(feature = "metrics")]
104132
$crate::metrics::REGISTRY
105133
.$label
106-
.observe(__measure_duration_histogram_start.elapsed().as_millis() as f64);
134+
.observe(__measure_duration_histogram_start.elapsed().as_micros() as f64);
107135

108136
#[cfg(feature = "metrics")]
109137
dev_debug!(
110-
"measured duration {} = {:?}",
138+
"measured duration {} = {:?}us",
111139
stringify!($label),
112-
__measure_duration_histogram_start.elapsed(),
140+
__measure_duration_histogram_start.elapsed().as_micros() as f64,
113141
);
114142

115143
__measure_duration_histogram_result

crates/utils/src/metrics/registry.rs

Lines changed: 74 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,19 @@ pub struct Registry {
1717

1818
pub verification_error: Counter,
1919

20-
pub build_zktrie_db_duration_microseconds: Histogram,
21-
pub update_db_duration_microseconds: Histogram,
22-
pub handle_block_duration_microseconds: Histogram,
23-
pub commit_changes_duration_microseconds: Histogram,
24-
pub total_block_verification_duration_microseconds: Histogram,
20+
// database metrics
21+
pub build_zktrie_db_duration_milliseconds: Histogram,
22+
pub update_db_duration_milliseconds: Histogram,
23+
pub zktrie_get_duration_microseconds: Histogram,
24+
pub zktrie_update_duration_microseconds: Histogram,
25+
pub zktrie_delete_duration_microseconds: Histogram,
26+
pub zktrie_commit_duration_microseconds: Histogram,
27+
28+
// executor metrics
29+
pub transact_commit_duration_milliseconds: Histogram,
30+
pub handle_block_duration_milliseconds: Histogram,
31+
pub commit_changes_duration_milliseconds: Histogram,
32+
pub total_block_verification_duration_milliseconds: Histogram,
2533
}
2634

2735
pub(super) fn init() -> Registry {
@@ -55,40 +63,75 @@ pub(super) fn init() -> Registry {
5563
verification_error.clone(),
5664
);
5765

58-
let build_zktrie_db_duration_microseconds = Histogram::new(linear_buckets(50.0, 50.0, 10));
66+
let build_zktrie_db_duration_milliseconds = Histogram::new(linear_buckets(50.0, 50.0, 10));
5967
registry.register(
6068
"build_zktrie_db_duration",
61-
"Duration of build_zktrie_db_duration in microseconds",
62-
build_zktrie_db_duration_microseconds.clone(),
69+
"Duration of build_zktrie_db_duration in milliseconds",
70+
build_zktrie_db_duration_milliseconds.clone(),
6371
);
6472

65-
let update_db_duration_microseconds = Histogram::new(linear_buckets(2.0, 4.0, 10));
73+
let update_db_duration_milliseconds = Histogram::new(linear_buckets(2.0, 4.0, 10));
6674
registry.register(
6775
"update_db_duration",
68-
"Duration of update_db in microseconds",
69-
update_db_duration_microseconds.clone(),
76+
"Duration of update_db in milliseconds",
77+
update_db_duration_milliseconds.clone(),
7078
);
7179

72-
let handle_block_duration_microseconds = Histogram::new(linear_buckets(1.0, 5.0, 10));
80+
let zktrie_get_duration_microseconds = Histogram::new(linear_buckets(0.1, 1.0, 10));
81+
registry.register(
82+
"zktrie_get_duration",
83+
"Duration of zktrie_get in microseconds",
84+
zktrie_get_duration_microseconds.clone(),
85+
);
86+
87+
let zktrie_update_duration_microseconds = Histogram::new(linear_buckets(50.0, 500.0, 10));
88+
registry.register(
89+
"zktrie_update_duration",
90+
"Duration of zktrie_update in microseconds",
91+
zktrie_update_duration_microseconds.clone(),
92+
);
93+
94+
let zktrie_delete_duration_microseconds = Histogram::new(linear_buckets(50.0, 500.0, 10));
95+
registry.register(
96+
"zktrie_delete_duration",
97+
"Duration of zktrie_delete in microseconds",
98+
zktrie_delete_duration_microseconds.clone(),
99+
);
100+
101+
let zktrie_commit_duration_microseconds = Histogram::new(linear_buckets(100.0, 2000.0, 10));
102+
registry.register(
103+
"zktrie_commit_duration",
104+
"Duration of zktrie_commit in microseconds",
105+
zktrie_commit_duration_microseconds.clone(),
106+
);
107+
108+
let transact_commit_duration_milliseconds = Histogram::new(linear_buckets(0.1, 15.0, 10));
109+
registry.register(
110+
"transact_commit_duration",
111+
"Duration of transact_commit in milliseconds",
112+
transact_commit_duration_milliseconds.clone(),
113+
);
114+
115+
let handle_block_duration_milliseconds = Histogram::new(linear_buckets(1.0, 5.0, 10));
73116
registry.register(
74117
"handle_block_duration",
75-
"Duration of handle_block in microseconds",
76-
handle_block_duration_microseconds.clone(),
118+
"Duration of handle_block in milliseconds",
119+
handle_block_duration_milliseconds.clone(),
77120
);
78121

79-
let commit_changes_duration_microseconds = Histogram::new(linear_buckets(25.0, 50.0, 10));
122+
let commit_changes_duration_milliseconds = Histogram::new(linear_buckets(25.0, 50.0, 10));
80123
registry.register(
81124
"commit_changes_duration",
82-
"Duration of commit_changes in microseconds",
83-
commit_changes_duration_microseconds.clone(),
125+
"Duration of commit_changes in milliseconds",
126+
commit_changes_duration_milliseconds.clone(),
84127
);
85128

86-
let total_block_verification_duration_microseconds =
129+
let total_block_verification_duration_milliseconds =
87130
Histogram::new(linear_buckets(50.0, 50.0, 15));
88131
registry.register(
89132
"total_block_verification_duration",
90-
"Total block verification duration in microseconds",
91-
total_block_verification_duration_microseconds.clone(),
133+
"Total block verification duration in milliseconds",
134+
total_block_verification_duration_milliseconds.clone(),
92135
);
93136

94137
Registry {
@@ -100,10 +143,16 @@ pub(super) fn init() -> Registry {
100143

101144
verification_error,
102145

103-
build_zktrie_db_duration_microseconds,
104-
update_db_duration_microseconds,
105-
handle_block_duration_microseconds,
106-
commit_changes_duration_microseconds,
107-
total_block_verification_duration_microseconds,
146+
build_zktrie_db_duration_milliseconds,
147+
update_db_duration_milliseconds,
148+
zktrie_get_duration_microseconds,
149+
zktrie_update_duration_microseconds,
150+
zktrie_delete_duration_microseconds,
151+
zktrie_commit_duration_microseconds,
152+
153+
handle_block_duration_milliseconds,
154+
transact_commit_duration_milliseconds,
155+
commit_changes_duration_milliseconds,
156+
total_block_verification_duration_milliseconds,
108157
}
109158
}

0 commit comments

Comments
 (0)