Add execute metrics

This commit is contained in:
Carl Lin
2021-12-20 23:03:20 -05:00
committed by Trent Nelson
parent 7d32909e17
commit b25e4a200b
12 changed files with 225 additions and 38 deletions

View File

@ -78,7 +78,7 @@ use {
BuiltinProgram, Executor, Executors, ProcessInstructionWithContext, TransactionExecutor,
},
log_collector::LogCollector,
timings::{ExecuteDetailsTimings, ExecuteTimings},
timings::ExecuteTimings,
},
solana_sdk::{
account::{
@ -3541,7 +3541,7 @@ impl Bank {
durable_nonce_fee: Option<DurableNonceFee>,
enable_cpi_recording: bool,
enable_log_recording: bool,
execute_details_timings: &mut ExecuteDetailsTimings,
timings: &mut ExecuteTimings,
error_counters: &mut ErrorCounters,
) -> TransactionExecutionResult {
let legacy_message = match tx.message().legacy_message() {
@ -3554,11 +3554,14 @@ impl Bank {
}
};
let mut get_executors_time = Measure::start("get_executors_time");
let executors = self.get_executors(
tx.message(),
&loaded_transaction.accounts,
&loaded_transaction.program_indices,
);
get_executors_time.stop();
timings.execute_accessories.get_executors_us += get_executors_time.as_us();
let mut transaction_accounts = Vec::new();
std::mem::swap(&mut loaded_transaction.accounts, &mut transaction_accounts);
@ -3582,6 +3585,8 @@ impl Bank {
};
let (blockhash, lamports_per_signature) = self.last_blockhash_and_lamports_per_signature();
let mut process_message_time = Measure::start("process_message_time");
let process_result = MessageProcessor::process_message(
&self.builtin_programs.vec,
legacy_message,
@ -3593,14 +3598,19 @@ impl Bank {
instruction_recorder.clone(),
self.feature_set.clone(),
compute_budget,
execute_details_timings,
timings,
&*self.sysvar_cache.read().unwrap(),
blockhash,
lamports_per_signature,
self.load_accounts_data_len(),
);
process_message_time.stop();
timings.execute_accessories.process_message_us += process_message_time.as_us();
let mut update_executors_time = Measure::start("update_executors_time");
self.update_executors(process_result.is_ok(), executors);
update_executors_time.stop();
timings.execute_accessories.update_executors_us += update_executors_time.as_us();
let status = process_result
.map(|info| {
@ -3693,19 +3703,32 @@ impl Bank {
let mut execution_time = Measure::start("execution_time");
let mut signature_count: u64 = 0;
let execute_details_timings = &mut timings.details;
let execution_results: Vec<TransactionExecutionResult> = loaded_txs
.iter_mut()
.zip(sanitized_txs.iter())
.map(|(accs, tx)| match accs {
(Err(e), _nonce) => TransactionExecutionResult::NotExecuted(e.clone()),
(Ok(loaded_transaction), nonce) => {
let mut feature_set_clone_time = Measure::start("feature_set_clone");
let feature_set = self.feature_set.clone();
feature_set_clone_time.stop();
timings.execute_accessories.feature_set_clone_us +=
feature_set_clone_time.as_us();
signature_count += u64::from(tx.message().header().num_required_signatures);
let mut compute_budget = self.compute_budget.unwrap_or_else(ComputeBudget::new);
if feature_set.is_active(&tx_wide_compute_cap::id()) {
if let Err(err) = compute_budget.process_transaction(tx, feature_set) {
let mut compute_budget_process_transaction_time =
Measure::start("compute_budget_process_transaction_time");
let process_transaction_result =
compute_budget.process_transaction(tx, feature_set);
compute_budget_process_transaction_time.stop();
timings
.execute_accessories
.compute_budget_process_transaction_us +=
compute_budget_process_transaction_time.as_us();
if let Err(err) = process_transaction_result {
return TransactionExecutionResult::NotExecuted(err);
}
}
@ -3719,7 +3742,7 @@ impl Bank {
durable_nonce_fee,
enable_cpi_recording,
enable_log_recording,
execute_details_timings,
timings,
&mut error_counters,
)
}

View File

@ -5,7 +5,7 @@ use {
instruction_recorder::InstructionRecorder,
invoke_context::{BuiltinProgram, Executors, InvokeContext},
log_collector::LogCollector,
timings::ExecuteDetailsTimings,
timings::ExecuteTimings,
},
solana_sdk::{
account::WritableAccount,
@ -60,7 +60,7 @@ impl MessageProcessor {
instruction_recorder: Option<Rc<RefCell<InstructionRecorder>>>,
feature_set: Arc<FeatureSet>,
compute_budget: ComputeBudget,
timings: &mut ExecuteDetailsTimings,
timings: &mut ExecuteTimings,
sysvars: &[(Pubkey, Vec<u8>)],
blockhash: Hash,
lamports_per_signature: u64,
@ -134,15 +134,17 @@ impl MessageProcessor {
&instruction_accounts,
program_indices,
&mut compute_units_consumed,
timings,
);
time.stop();
timings.accumulate_program(
timings.details.accumulate_program(
instruction.program_id(&message.account_keys),
time.as_us(),
compute_units_consumed,
result.is_err(),
);
timings.accumulate(&invoke_context.timings);
timings.details.accumulate(&invoke_context.timings);
timings.execute_accessories.process_instructions_us += time.as_us();
result
.map_err(|err| TransactionError::InstructionError(instruction_index as u8, err))?;
}
@ -264,7 +266,7 @@ mod tests {
None,
Arc::new(FeatureSet::all_enabled()),
ComputeBudget::new(),
&mut ExecuteDetailsTimings::default(),
&mut ExecuteTimings::default(),
&[],
Hash::default(),
0,
@ -305,7 +307,7 @@ mod tests {
None,
Arc::new(FeatureSet::all_enabled()),
ComputeBudget::new(),
&mut ExecuteDetailsTimings::default(),
&mut ExecuteTimings::default(),
&[],
Hash::default(),
0,
@ -338,7 +340,7 @@ mod tests {
None,
Arc::new(FeatureSet::all_enabled()),
ComputeBudget::new(),
&mut ExecuteDetailsTimings::default(),
&mut ExecuteTimings::default(),
&[],
Hash::default(),
0,
@ -464,7 +466,7 @@ mod tests {
None,
Arc::new(FeatureSet::all_enabled()),
ComputeBudget::new(),
&mut ExecuteDetailsTimings::default(),
&mut ExecuteTimings::default(),
&[],
Hash::default(),
0,
@ -498,7 +500,7 @@ mod tests {
None,
Arc::new(FeatureSet::all_enabled()),
ComputeBudget::new(),
&mut ExecuteDetailsTimings::default(),
&mut ExecuteTimings::default(),
&[],
Hash::default(),
0,
@ -529,7 +531,7 @@ mod tests {
None,
Arc::new(FeatureSet::all_enabled()),
ComputeBudget::new(),
&mut ExecuteDetailsTimings::default(),
&mut ExecuteTimings::default(),
&[],
Hash::default(),
0,
@ -602,7 +604,7 @@ mod tests {
None,
Arc::new(FeatureSet::all_enabled()),
ComputeBudget::new(),
&mut ExecuteDetailsTimings::default(),
&mut ExecuteTimings::default(),
&[],
Hash::default(),
0,