add execute detail timings (#15638)

This commit is contained in:
Jeff Washington (jwash)
2021-03-03 17:07:45 -06:00
committed by GitHub
parent 9bbe015a05
commit be35c1c1b7
10 changed files with 169 additions and 18 deletions

View File

@ -2598,6 +2598,7 @@ dependencies = [
"num-derive 0.3.0",
"num-traits",
"rand_core 0.6.2",
"solana-measure",
"solana-runtime",
"solana-sdk",
"solana_rbpf",

View File

@ -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"

View File

@ -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},
@ -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(
@ -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();
@ -833,8 +840,17 @@ 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(())
}