From 37f6777ceb0b55f851ba0f0f9adf44b3cd40d68a Mon Sep 17 00:00:00 2001 From: carllin Date: Wed, 22 Dec 2021 15:07:07 -0500 Subject: [PATCH] Increment execution timings on errors as well (#22053) --- programs/bpf_loader/src/lib.rs | 51 +++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index 2ab48e249d..c41153ba1e 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -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(), @@ -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 { @@ -1058,23 +1056,29 @@ 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()); @@ -1082,8 +1086,11 @@ impl Executor for BpfExecutor { 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 } }