solana/runtime/src/bank/metrics.rs

166 lines
5.4 KiB
Rust

use {
solana_sdk::clock::{Epoch, Slot},
std::sync::atomic::{AtomicU64, Ordering::Relaxed},
};
pub(crate) struct NewEpochTimings {
pub(crate) thread_pool_time_us: u64,
pub(crate) apply_feature_activations_time_us: u64,
pub(crate) activate_epoch_time_us: u64,
pub(crate) update_epoch_stakes_time_us: u64,
pub(crate) update_rewards_with_thread_pool_time_us: u64,
}
#[derive(Debug, Default)]
pub(crate) struct RewardsMetrics {
pub(crate) load_vote_and_stake_accounts_us: AtomicU64,
pub(crate) calculate_points_us: AtomicU64,
pub(crate) redeem_rewards_us: u64,
pub(crate) store_stake_accounts_us: AtomicU64,
pub(crate) store_vote_accounts_us: AtomicU64,
pub(crate) invalid_cached_vote_accounts: usize,
pub(crate) invalid_cached_stake_accounts: usize,
pub(crate) invalid_cached_stake_accounts_rent_epoch: usize,
pub(crate) vote_accounts_cache_miss_count: usize,
}
pub(crate) struct NewBankTimings {
pub(crate) bank_rc_creation_time_us: u64,
pub(crate) total_elapsed_time_us: u64,
pub(crate) status_cache_time_us: u64,
pub(crate) fee_components_time_us: u64,
pub(crate) blockhash_queue_time_us: u64,
pub(crate) stakes_cache_time_us: u64,
pub(crate) epoch_stakes_time_us: u64,
pub(crate) builtin_programs_time_us: u64,
pub(crate) rewards_pool_pubkeys_time_us: u64,
pub(crate) executor_cache_time_us: u64,
pub(crate) transaction_debug_keys_time_us: u64,
pub(crate) transaction_log_collector_config_time_us: u64,
pub(crate) feature_set_time_us: u64,
pub(crate) ancestors_time_us: u64,
pub(crate) update_epoch_time_us: u64,
pub(crate) update_sysvars_time_us: u64,
pub(crate) fill_sysvar_cache_time_us: u64,
}
pub(crate) fn report_new_epoch_metrics(
epoch: Epoch,
slot: Slot,
parent_slot: Slot,
timings: NewEpochTimings,
metrics: RewardsMetrics,
) {
datapoint_info!(
"bank-new_from_parent-new_epoch_timings",
("epoch", epoch, i64),
("slot", slot, i64),
("parent_slot", parent_slot, i64),
("thread_pool_creation_us", timings.thread_pool_time_us, i64),
(
"apply_feature_activations",
timings.apply_feature_activations_time_us,
i64
),
("activate_epoch_us", timings.activate_epoch_time_us, i64),
(
"update_epoch_stakes_us",
timings.update_epoch_stakes_time_us,
i64
),
(
"update_rewards_with_thread_pool_us",
timings.update_rewards_with_thread_pool_time_us,
i64
),
(
"load_vote_and_stake_accounts_us",
metrics.load_vote_and_stake_accounts_us.load(Relaxed),
i64
),
(
"calculate_points_us",
metrics.calculate_points_us.load(Relaxed),
i64
),
("redeem_rewards_us", metrics.redeem_rewards_us, i64),
(
"store_stake_accounts_us",
metrics.store_stake_accounts_us.load(Relaxed),
i64
),
(
"store_vote_accounts_us",
metrics.store_vote_accounts_us.load(Relaxed),
i64
),
(
"invalid_cached_vote_accounts",
metrics.invalid_cached_vote_accounts,
i64
),
(
"invalid_cached_stake_accounts",
metrics.invalid_cached_stake_accounts,
i64
),
(
"invalid_cached_stake_accounts_rent_epoch",
metrics.invalid_cached_stake_accounts_rent_epoch,
i64
),
(
"vote_accounts_cache_miss_count",
metrics.vote_accounts_cache_miss_count,
i64
),
);
}
pub(crate) fn report_new_bank_metrics(
slot: Slot,
parent_slot: Slot,
block_height: u64,
timings: NewBankTimings,
) {
datapoint_info!(
"bank-new_from_parent-heights",
("slot", slot, i64),
("block_height", block_height, i64),
("parent_slot", parent_slot, i64),
("bank_rc_creation_us", timings.bank_rc_creation_time_us, i64),
("total_elapsed_us", timings.total_elapsed_time_us, i64),
("status_cache_us", timings.status_cache_time_us, i64),
("fee_components_us", timings.fee_components_time_us, i64),
("blockhash_queue_us", timings.blockhash_queue_time_us, i64),
("stakes_cache_us", timings.stakes_cache_time_us, i64),
("epoch_stakes_time_us", timings.epoch_stakes_time_us, i64),
("builtin_programs_us", timings.builtin_programs_time_us, i64),
(
"rewards_pool_pubkeys_us",
timings.rewards_pool_pubkeys_time_us,
i64
),
("executor_cache_us", timings.executor_cache_time_us, i64),
(
"transaction_debug_keys_us",
timings.transaction_debug_keys_time_us,
i64
),
(
"transaction_log_collector_config_us",
timings.transaction_log_collector_config_time_us,
i64
),
("feature_set_us", timings.feature_set_time_us, i64),
("ancestors_us", timings.ancestors_time_us, i64),
("update_epoch_us", timings.update_epoch_time_us, i64),
("update_sysvars_us", timings.update_sysvars_time_us, i64),
(
"fill_sysvar_cache_us",
timings.fill_sysvar_cache_time_us,
i64
),
);
}