diff --git a/Cargo.lock b/Cargo.lock index 75fca5de6..997936aa4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5134,6 +5134,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-perf", + "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", "solana-sdk", diff --git a/core/Cargo.toml b/core/Cargo.toml index cf34c3903..5096db4b9 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -43,6 +43,7 @@ solana-metrics = { path = "../metrics", version = "=1.10.0" } solana-net-utils = { path = "../net-utils", version = "=1.10.0" } solana-perf = { path = "../perf", version = "=1.10.0" } solana-poh = { path = "../poh", version = "=1.10.0" } +solana-program-runtime = { path = "../program-runtime", version = "=1.10.0" } solana-rpc = { path = "../rpc", version = "=1.10.0" } solana-replica-lib = { path = "../replica-lib", version = "=1.10.0" } solana-runtime = { path = "../runtime", version = "=1.10.0" } diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index c6740d445..e91b18627 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -18,12 +18,10 @@ use { perf_libs, }, solana_poh::poh_recorder::{BankStart, PohRecorder, PohRecorderError, TransactionRecorder}, + solana_program_runtime::timings::ExecuteTimings, solana_runtime::{ accounts_db::ErrorCounters, - bank::{ - Bank, ExecuteTimings, TransactionBalancesSet, TransactionCheckResult, - TransactionExecutionResult, - }, + bank::{Bank, TransactionBalancesSet, TransactionCheckResult, TransactionExecutionResult}, bank_utils, cost_model::CostModel, transaction_batch::TransactionBatch, diff --git a/core/src/cost_update_service.rs b/core/src/cost_update_service.rs index c21c78869..b6f3eb60d 100644 --- a/core/src/cost_update_service.rs +++ b/core/src/cost_update_service.rs @@ -6,10 +6,8 @@ use { solana_ledger::blockstore::Blockstore, solana_measure::measure::Measure, - solana_runtime::{ - bank::{Bank, ExecuteTimings}, - cost_model::CostModel, - }, + solana_program_runtime::timings::ExecuteTimings, + solana_runtime::{bank::Bank, cost_model::CostModel}, solana_sdk::timing::timestamp, std::{ sync::{ diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 6e75a9490..238ae0ba3 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -40,13 +40,14 @@ use { solana_measure::measure::Measure, solana_metrics::inc_new_counter_info, solana_poh::poh_recorder::{PohRecorder, GRACE_TICKS_FACTOR, MAX_GRACE_SLOTS}, + solana_program_runtime::timings::ExecuteTimings, solana_rpc::{ optimistically_confirmed_bank_tracker::{BankNotification, BankNotificationSender}, rpc_subscriptions::RpcSubscriptions, }, solana_runtime::{ accounts_background_service::AbsRequestSender, - bank::{Bank, ExecuteTimings, NewBankOptions}, + bank::{Bank, NewBankOptions}, bank_forks::BankForks, commitment::BlockCommitmentCache, vote_sender_types::ReplayVoteSender, diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 370f73765..bd83b9260 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -38,6 +38,7 @@ solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.0" } solana-transaction-status = { path = "../transaction-status", version = "=1.10.0" } solana-measure = { path = "../measure", version = "=1.10.0" } solana-metrics = { path = "../metrics", version = "=1.10.0" } +solana-program-runtime = { path = "../program-runtime", version = "=1.10.0" } solana-perf = { path = "../perf", version = "=1.10.0" } solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.0" } solana-runtime = { path = "../runtime", version = "=1.10.0" } diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index e16053d15..e27d96ef6 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -14,13 +14,14 @@ use { }, solana_measure::measure::Measure, solana_metrics::{datapoint_error, inc_new_counter_debug}, + solana_program_runtime::timings::ExecuteTimings, solana_rayon_threadlimit::get_thread_count, solana_runtime::{ accounts_db::{AccountShrinkThreshold, AccountsDbConfig}, accounts_index::AccountSecondaryIndexes, accounts_update_notifier_interface::AccountsUpdateNotifier, bank::{ - Bank, ExecuteTimings, RentDebits, TransactionBalancesSet, TransactionExecutionResult, + Bank, RentDebits, TransactionBalancesSet, TransactionExecutionResult, TransactionResults, }, bank_forks::BankForks, diff --git a/program-runtime/src/timings.rs b/program-runtime/src/timings.rs index ec47835da..35ff7323c 100644 --- a/program-runtime/src/timings.rs +++ b/program-runtime/src/timings.rs @@ -35,6 +35,39 @@ impl ProgramTiming { } } +#[derive(Default, Debug)] +pub struct ExecuteTimings { + pub check_us: u64, + pub load_us: u64, + pub execute_us: u64, + pub store_us: u64, + pub update_stakes_cache_us: u64, + pub total_batches_len: usize, + pub num_execute_batches: u64, + pub collect_logs_us: u64, + pub details: ExecuteDetailsTimings, +} + +impl ExecuteTimings { + pub fn accumulate(&mut self, other: &ExecuteTimings) { + self.check_us = self.check_us.saturating_add(other.check_us); + self.load_us = self.load_us.saturating_add(other.load_us); + self.execute_us = self.execute_us.saturating_add(other.execute_us); + self.store_us = self.store_us.saturating_add(other.store_us); + self.update_stakes_cache_us = self + .update_stakes_cache_us + .saturating_add(other.update_stakes_cache_us); + self.total_batches_len = self + .total_batches_len + .saturating_add(other.total_batches_len); + self.num_execute_batches = self + .num_execute_batches + .saturating_add(other.num_execute_batches); + self.collect_logs_us = self.collect_logs_us.saturating_add(other.collect_logs_us); + self.details.accumulate(&other.details); + } +} + #[derive(Default, Debug, PartialEq)] pub struct ExecuteDetailsTimings { pub serialize_us: u64, diff --git a/program-test/src/lib.rs b/program-test/src/lib.rs index 9eb38503e..ad6e87a63 100644 --- a/program-test/src/lib.rs +++ b/program-test/src/lib.rs @@ -11,9 +11,11 @@ use { log::*, solana_banks_client::start_client, solana_banks_server::banks_server::start_local_server, - solana_program_runtime::{ic_msg, invoke_context::ProcessInstructionWithContext, stable_log}, + solana_program_runtime::{ + ic_msg, invoke_context::ProcessInstructionWithContext, stable_log, timings::ExecuteTimings, + }, solana_runtime::{ - bank::{Bank, ExecuteTimings}, + bank::Bank, bank_forks::BankForks, builtins::Builtin, commitment::BlockCommitmentCache, diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 7ffda3a92..f6a063df6 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -3375,6 +3375,7 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", + "solana-measure", "solana-sdk", "thiserror", ] diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index e658dbbdc..55f661570 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -17,7 +17,7 @@ use solana_bpf_loader_program::{ use solana_bpf_rust_invoke::instructions::*; use solana_bpf_rust_realloc::instructions::*; use solana_bpf_rust_realloc_invoke::instructions::*; -use solana_program_runtime::invoke_context::with_mock_invoke_context; +use solana_program_runtime::{invoke_context::with_mock_invoke_context, timings::ExecuteTimings}; use solana_rbpf::{ elf::Executable, static_analysis::Analysis, @@ -25,7 +25,7 @@ use solana_rbpf::{ }; use solana_runtime::{ bank::{ - Bank, DurableNonceFee, ExecuteTimings, TransactionBalancesSet, TransactionExecutionDetails, + Bank, DurableNonceFee, TransactionBalancesSet, TransactionExecutionDetails, TransactionExecutionResult, TransactionResults, }, bank_client::BankClient, diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index d0efd6f4b..d223091b1 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -78,7 +78,7 @@ use { BuiltinProgram, Executor, Executors, ProcessInstructionWithContext, TransactionExecutor, }, log_collector::LogCollector, - timings::ExecuteDetailsTimings, + timings::{ExecuteDetailsTimings, ExecuteTimings}, }, solana_sdk::{ account::{ @@ -209,36 +209,6 @@ impl RentDebits { } } -#[derive(Default, Debug)] -pub struct ExecuteTimings { - pub check_us: u64, - pub load_us: u64, - pub execute_us: u64, - pub store_us: u64, - pub update_stakes_cache_us: u64, - pub total_batches_len: usize, - pub num_execute_batches: u64, - pub details: ExecuteDetailsTimings, -} -impl ExecuteTimings { - pub fn accumulate(&mut self, other: &ExecuteTimings) { - self.check_us = self.check_us.saturating_add(other.check_us); - self.load_us = self.load_us.saturating_add(other.load_us); - self.execute_us = self.execute_us.saturating_add(other.execute_us); - self.store_us = self.store_us.saturating_add(other.store_us); - self.update_stakes_cache_us = self - .update_stakes_cache_us - .saturating_add(other.update_stakes_cache_us); - self.total_batches_len = self - .total_batches_len - .saturating_add(other.total_batches_len); - self.num_execute_batches = self - .num_execute_batches - .saturating_add(other.num_execute_batches); - self.details.accumulate(&other.details); - } -} - type BankStatusCache = StatusCache>; #[frozen_abi(digest = "6XG6H1FChrDdY39K62KFWj5XfDao4dd24WZgcJkdMu1E")] pub type BankSlotDelta = SlotDelta>;