From b510474dcbba32b3455bd55e602b96d6b4fe77bf Mon Sep 17 00:00:00 2001 From: Jack May Date: Thu, 15 Oct 2020 15:55:37 -0700 Subject: [PATCH] Report compute budget usage (#12931) --- programs/bpf_loader/src/lib.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index c5bca6ca3f..b44130cdcf 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -194,6 +194,11 @@ pub fn process_instruction( struct ThisInstructionMeter { compute_meter: Rc>, } +impl ThisInstructionMeter { + fn new(compute_meter: Rc>) -> Self { + Self { compute_meter } + } +} impl InstructionMeter for ThisInstructionMeter { fn consume(&mut self, amount: u64) { // 1 to 1 instruction to compute unit mapping @@ -245,13 +250,22 @@ impl Executor for BPFExecutor { }; log!(logger, "Call BPF program {}", program.unsigned_key()); - let instruction_meter = ThisInstructionMeter { compute_meter }; - match vm.execute_program_metered( + let instruction_meter = ThisInstructionMeter::new(compute_meter.clone()); + let before = compute_meter.borrow().get_remaining(); + let result = vm.execute_program_metered( parameter_bytes.as_slice(), &[], &[heap_region], instruction_meter, - ) { + ); + let after = compute_meter.borrow().get_remaining(); + log!( + logger, + "BPF program consumed {} of {} units", + before - after, + before + ); + match result { Ok(status) => { if status != SUCCESS { let error: InstructionError = status.into();