diff --git a/core/src/bank_forks.rs b/core/src/bank_forks.rs index 4590d39f57..c15625b9d8 100644 --- a/core/src/bank_forks.rs +++ b/core/src/bank_forks.rs @@ -1,9 +1,12 @@ //! The `bank_forks` module implments BankForks a DAG of checkpointed Banks use hashbrown::{HashMap, HashSet}; +use solana_metrics::counter::Counter; use solana_runtime::bank::Bank; +use solana_sdk::timing; use std::ops::Index; use std::sync::Arc; +use std::time::Instant; pub struct BankForks { banks: HashMap>, @@ -99,12 +102,17 @@ impl BankForks { } pub fn set_root(&mut self, root: u64) { + let set_root_start = Instant::now(); let root_bank = self .banks .get(&root) .expect("root bank didn't exist in bank_forks"); root_bank.squash(); self.prune_non_root(root); + inc_new_counter_info!( + "bank-forks_set_root_ms", + timing::duration_as_ms(&set_root_start.elapsed()) as usize + ); } fn prune_non_root(&mut self, root: u64) { diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index b28827b481..39805c5ec7 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -11,6 +11,7 @@ use bincode::serialize; use hashbrown::HashMap; use log::*; use solana_metrics::counter::Counter; +use solana_metrics::influxdb; use solana_sdk::account::Account; use solana_sdk::fee_calculator::FeeCalculator; use solana_sdk::genesis_block::GenesisBlock; @@ -19,7 +20,7 @@ use solana_sdk::native_loader; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, Signature}; use solana_sdk::system_transaction::SystemTransaction; -use solana_sdk::timing::{duration_as_us, MAX_RECENT_BLOCKHASHES}; +use solana_sdk::timing::{duration_as_ms, duration_as_us, MAX_RECENT_BLOCKHASHES}; use solana_sdk::transaction::{Transaction, TransactionError}; use solana_vote_api::vote_instruction::Vote; use solana_vote_api::vote_state::{Lockout, VoteState}; @@ -260,11 +261,28 @@ impl Bank { let parents = self.parents(); *self.parent.write().unwrap() = None; + let squash_accounts_start = Instant::now(); self.accounts.squash(self.accounts_id); + let squash_accounts_ms = duration_as_ms(&squash_accounts_start.elapsed()); + let squash_cache_start = Instant::now(); parents .iter() .for_each(|p| self.status_cache.write().unwrap().add_root(p.slot())); + let squash_cache_ms = duration_as_ms(&squash_cache_start.elapsed()); + + solana_metrics::submit( + influxdb::Point::new("counter-locktower-observed") + .add_field( + "squash_accounts_ms", + influxdb::Value::Integer(squash_accounts_ms as i64), + ) + .add_field( + "squash_cache_ms", + influxdb::Value::Integer(squash_cache_ms as i64), + ) + .to_owned(), + ); } /// Return the more recent checkpoint of this bank instance.