Skip to content

Commit

Permalink
Increment execution timings on errors as well (solana-labs#22053)
Browse files Browse the repository at this point in the history
  • Loading branch information
carllin authored Dec 22, 2021
1 parent f67ecd5 commit 37f6777
Showing 1 changed file with 29 additions and 22 deletions.
51 changes: 29 additions & 22 deletions programs/bpf_loader/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -995,7 +995,7 @@ impl Executor for BpfExecutor {
serialize_time.stop();
let mut create_vm_time = Measure::start("create_vm");
let mut execute_time;
{
let execution_result = {
let mut vm = match create_vm(
&self.executable,
parameter_bytes.as_slice_mut(),
Expand Down Expand Up @@ -1040,12 +1040,10 @@ impl Executor for BpfExecutor {
stable_log::program_return(&log_collector, &program_id, return_data);
}
match result {
Ok(status) => {
if status != SUCCESS {
let error: InstructionError = status.into();
stable_log::program_failure(&log_collector, &program_id, &error);
return Err(error);
}
Ok(status) if status != SUCCESS => {
let error: InstructionError = status.into();
stable_log::program_failure(&log_collector, &program_id, &error);
Err(error)
}
Err(error) => {
let error = match error {
Expand All @@ -1058,32 +1056,41 @@ impl Executor for BpfExecutor {
}
};
stable_log::program_failure(&log_collector, &program_id, &error);
return Err(error);
Err(error)
}
_ => Ok(()),
}
execute_time.stop();
}
};
execute_time.stop();

let mut deserialize_time = Measure::start("deserialize");
let keyed_accounts = invoke_context.get_keyed_accounts()?;
deserialize_parameters(
&loader_id,
&keyed_accounts[first_instruction_account + 1..],
parameter_bytes.as_slice(),
&account_lengths,
invoke_context
.feature_set
.is_active(&do_support_realloc::id()),
)?;
let execute_or_deserialize_result = execution_result.and_then(|_| {
let keyed_accounts = invoke_context.get_keyed_accounts()?;
deserialize_parameters(
&loader_id,
&keyed_accounts[first_instruction_account + 1..],
parameter_bytes.as_slice(),
&account_lengths,
invoke_context
.feature_set
.is_active(&do_support_realloc::id()),
)
});
deserialize_time.stop();

// Update the timings
let timings = &mut invoke_context.timings;
timings.serialize_us = timings.serialize_us.saturating_add(serialize_time.as_us());
timings.create_vm_us = timings.create_vm_us.saturating_add(create_vm_time.as_us());
timings.execute_us = timings.execute_us.saturating_add(execute_time.as_us());
timings.deserialize_us = timings
.deserialize_us
.saturating_add(deserialize_time.as_us());
stable_log::program_success(&log_collector, &program_id);
Ok(())

if execute_or_deserialize_result.is_ok() {
stable_log::program_success(&log_collector, &program_id);
}
execute_or_deserialize_result
}
}

Expand Down

0 comments on commit 37f6777

Please sign in to comment.