Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

Commit

Permalink
add execute detail timings
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffwashington committed Mar 2, 2021
1 parent a2c47db commit 07c728a
Show file tree
Hide file tree
Showing 9 changed files with 118 additions and 12 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions core/src/banking_stage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -701,6 +701,8 @@ impl BankingStage {
txs.len(),
);

debug!("process_and_record_transactions_locked: {:?}", execute_timings);

(Ok(num_to_commit), retryable_txs)
}

Expand Down
1 change: 1 addition & 0 deletions core/src/replay_stage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1417,6 +1417,7 @@ impl ReplayStage {
}
}
inc_new_counter_info!("replay_stage-replay_transactions", tx_count);
debug!("replay_active_banks: {:?}", bank_progress.replay_progress.execute_timings);
did_complete_bank
}

Expand Down
12 changes: 9 additions & 3 deletions ledger/src/blockstore_processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -214,15 +214,19 @@ pub fn process_entries(
transaction_status_sender: Option<TransactionStatusSender>,
replay_vote_sender: Option<&ReplayVoteSender>,
) -> Result<()> {
process_entries_with_callback(
let mut timings = ExecuteTimings::default();
let result = process_entries_with_callback(
bank,
entries,
randomize,
None,
transaction_status_sender,
replay_vote_sender,
&mut ExecuteTimings::default(),
)
&mut timings,
);

debug!("process_entries: {:?}", timings);
result
}

fn process_entries_with_callback(
Expand Down Expand Up @@ -602,6 +606,8 @@ fn confirm_full_slot(
opts.allow_dead_slots,
)?;

debug!("confirm_full_slot: {:?}", timing.execute_timings);

if !bank.is_complete() {
Err(BlockstoreProcessorError::InvalidBlock(
BlockError::Incomplete,
Expand Down
1 change: 1 addition & 0 deletions programs/bpf_loader/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ log = "0.4.11"
num-derive = "0.3"
num-traits = "0.2"
rand_core = "0.6.2"
solana-measure = { path = "../../measure", version = "1.6.0" }
solana-runtime = { path = "../../runtime", version = "1.6.0" }
solana-sdk = { path = "../../sdk", version = "1.6.0" }
solana_rbpf = "=0.2.5"
Expand Down
11 changes: 11 additions & 0 deletions programs/bpf_loader/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ use crate::{
syscalls::SyscallError,
};
use log::{log_enabled, trace, Level::Trace};
use solana_measure::measure::Measure;
use solana_rbpf::{
ebpf::MM_HEAP_START,
error::{EbpfError, UserDefinedError},
Expand Down Expand Up @@ -770,8 +771,12 @@ impl Executor for BpfExecutor {
let mut keyed_accounts_iter = keyed_accounts.iter();
let _ = next_keyed_account(&mut keyed_accounts_iter)?;
let parameter_accounts = keyed_accounts_iter.as_slice();
let mut serialize_time = Measure::start("serialize");
let mut parameter_bytes =
serialize_parameters(loader_id, program_id, parameter_accounts, &instruction_data)?;
serialize_time.stop();
let mut create_vm_time = Measure::start("create_vm");
let mut execute_time;
{
let compute_meter = invoke_context.get_compute_meter();
let mut vm = match create_vm(
Expand All @@ -787,7 +792,9 @@ impl Executor for BpfExecutor {
return Err(InstructionError::ProgramEnvironmentSetupFailure);
}
};
create_vm_time.stop();

execute_time = Measure::start("execute");
stable_log::program_invoke(&logger, program_id, invoke_depth);
let mut instruction_meter = ThisInstructionMeter::new(compute_meter.clone());
let before = compute_meter.borrow().get_remaining();
Expand Down Expand Up @@ -833,8 +840,12 @@ impl Executor for BpfExecutor {
return Err(error);
}
}
execute_time.stop();
}
let mut deserialize_time = Measure::start("deserialize");
deserialize_parameters(loader_id, parameter_accounts, &parameter_bytes)?;
deserialize_time.stop();
invoke_context.update_timing(serialize_time.as_us(), create_vm_time.as_us(), execute_time.as_us(), deserialize_time.as_us());
stable_log::program_success(&logger, program_id);
Ok(())
}
Expand Down
13 changes: 10 additions & 3 deletions runtime/src/bank.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use crate::{
inline_spl_token_v2_0,
instruction_recorder::InstructionRecorder,
log_collector::LogCollector,
message_processor::{Executors, MessageProcessor},
message_processor::{ExecuteDetailsTimings, Executors, MessageProcessor},
rent_collector::RentCollector,
stakes::Stakes,
status_cache::{SlotDelta, StatusCache},
Expand Down Expand Up @@ -93,18 +93,20 @@ pub const SECONDS_PER_YEAR: f64 = 365.25 * 24.0 * 60.0 * 60.0;

pub const MAX_LEADER_SCHEDULE_STAKES: Epoch = 5;

#[derive(Default)]
#[derive(Default, Debug)]
pub struct ExecuteTimings {
pub load_us: u64,
pub execute_us: u64,
pub store_us: u64,
pub details: ExecuteDetailsTimings,
}

impl ExecuteTimings {
pub fn accumulate(&mut self, other: &ExecuteTimings) {
self.load_us += other.load_us;
self.execute_us += other.execute_us;
self.store_us += other.store_us;
self.details.accumulate(&other.details);
}
}

Expand Down Expand Up @@ -2415,6 +2417,8 @@ impl Bank {
let txs = &[transaction];
let batch = self.prepare_simulation_batch(txs);

let mut timings = ExecuteTimings::default();

let (
_loaded_accounts,
executed,
Expand All @@ -2431,14 +2435,16 @@ impl Bank {
MAX_PROCESSING_AGE - MAX_TRANSACTION_FORWARDING_DELAY,
false,
true,
&mut ExecuteTimings::default(),
&mut timings,
);

let transaction_result = executed[0].0.clone().map(|_| ());
let log_messages = log_messages
.get(0)
.map_or(vec![], |messages| messages.to_vec());

debug!("simulate_transaction: {:?}", timings);

(transaction_result, log_messages)
}

Expand Down Expand Up @@ -2923,6 +2929,7 @@ impl Bank {
instruction_recorders.as_deref(),
self.feature_set.clone(),
bpf_compute_budget,
&mut timings.details,
);

if enable_log_recording {
Expand Down
Loading

0 comments on commit 07c728a

Please sign in to comment.