compute_budget heap_size does not have to be optional (#33313)

This commit is contained in:
Tao Zhu 2023-09-21 09:24:47 -05:00 committed by GitHub
parent 1fc4264a1c
commit a2ad820309
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 20 deletions

View File

@ -101,8 +101,8 @@ pub struct ComputeBudget {
/// Number of compute units consumed for a multiscalar multiplication (msm) of ristretto points.
/// The total cost is calculated as `msm_base_cost + (length - 1) * msm_incremental_cost`.
pub curve25519_ristretto_msm_incremental_cost: u64,
/// Optional program heap region size, if `None` then loader default
pub heap_size: Option<usize>,
/// program heap region size, default: solana_sdk::entrypoint::HEAP_LENGTH
pub heap_size: usize,
/// Number of compute units per additional 32k heap above the default (~.5
/// us per 32k at 15 units/us rounded up)
pub heap_cost: u64,
@ -171,7 +171,7 @@ impl ComputeBudget {
curve25519_ristretto_multiply_cost: 2_208,
curve25519_ristretto_msm_base_cost: 2303,
curve25519_ristretto_msm_incremental_cost: 788,
heap_size: None,
heap_size: solana_sdk::entrypoint::HEAP_LENGTH,
heap_cost: 8,
mem_op_base_cost: 10,
alt_bn128_addition_cost: 334,
@ -267,7 +267,7 @@ impl ComputeBudget {
InstructionError::InvalidInstructionData,
));
}
self.heap_size = Some(bytes as usize);
self.heap_size = bytes as usize;
}
let compute_unit_limit = updated_compute_unit_limit
@ -467,7 +467,7 @@ mod tests {
Ok(PrioritizationFeeDetails::default()),
ComputeBudget {
compute_unit_limit: DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64,
heap_size: Some(40 * 1024),
heap_size: 40 * 1024,
..ComputeBudget::default()
}
);
@ -512,7 +512,7 @@ mod tests {
Ok(PrioritizationFeeDetails::default()),
ComputeBudget {
compute_unit_limit: DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64,
heap_size: Some(MAX_HEAP_FRAME_BYTES as usize),
heap_size: MAX_HEAP_FRAME_BYTES as usize,
..ComputeBudget::default()
}
);
@ -562,7 +562,7 @@ mod tests {
)),
ComputeBudget {
compute_unit_limit: MAX_COMPUTE_UNIT_LIMIT as u64,
heap_size: Some(MAX_HEAP_FRAME_BYTES as usize),
heap_size: MAX_HEAP_FRAME_BYTES as usize,
..ComputeBudget::default()
}
);
@ -580,7 +580,7 @@ mod tests {
)),
ComputeBudget {
compute_unit_limit: 1,
heap_size: Some(MAX_HEAP_FRAME_BYTES as usize),
heap_size: MAX_HEAP_FRAME_BYTES as usize,
..ComputeBudget::default()
}
);

View File

@ -262,10 +262,7 @@ macro_rules! create_vm {
($vm:ident, $program:expr, $regions:expr, $accounts_metadata:expr, $invoke_context:expr $(,)?) => {
let invoke_context = &*$invoke_context;
let stack_size = $program.get_config().stack_size();
let heap_size = invoke_context
.get_compute_budget()
.heap_size
.unwrap_or(solana_sdk::entrypoint::HEAP_LENGTH);
let heap_size = invoke_context.get_compute_budget().heap_size;
let round_up_heap_size = invoke_context
.feature_set
.is_active(&solana_sdk::feature_set::round_up_heap_size::id());

View File

@ -18,7 +18,7 @@ use {
vm::{BuiltinProgram, Config, ContextObject, EbpfVm, ProgramResult},
},
solana_sdk::{
entrypoint::{HEAP_LENGTH, SUCCESS},
entrypoint::SUCCESS,
feature_set,
instruction::InstructionError,
loader_v4::{self, LoaderV4State, LoaderV4Status, DEPLOYMENT_COOLDOWN_IN_SLOTS},
@ -113,15 +113,13 @@ pub fn create_vm<'a, 'b>(
let config = program.get_config();
let sbpf_version = program.get_sbpf_version();
let compute_budget = invoke_context.get_compute_budget();
let heap_size = compute_budget.heap_size.unwrap_or(HEAP_LENGTH);
let heap_size = compute_budget.heap_size;
invoke_context.consume_checked(calculate_heap_cost(
heap_size as u64,
compute_budget.heap_cost,
))?;
let mut stack = AlignedMemory::<{ ebpf::HOST_ALIGN }>::zero_filled(config.stack_size());
let mut heap = AlignedMemory::<{ ebpf::HOST_ALIGN }>::zero_filled(
compute_budget.heap_size.unwrap_or(HEAP_LENGTH),
);
let mut heap = AlignedMemory::<{ ebpf::HOST_ALIGN }>::zero_filled(compute_budget.heap_size);
let stack_len = stack.len();
let regions: Vec<MemoryRegion> = vec![
program.get_ro_region(),

View File

@ -9750,7 +9750,7 @@ fn test_compute_budget_program_noop() {
*compute_budget,
ComputeBudget {
compute_unit_limit: compute_budget::DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64,
heap_size: Some(48 * 1024),
heap_size: 48 * 1024,
..ComputeBudget::default()
}
);
@ -9793,7 +9793,7 @@ fn test_compute_request_instruction() {
*compute_budget,
ComputeBudget {
compute_unit_limit: compute_budget::DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64,
heap_size: Some(48 * 1024),
heap_size: 48 * 1024,
..ComputeBudget::default()
}
);
@ -9843,7 +9843,7 @@ fn test_failed_compute_request_instruction() {
*compute_budget,
ComputeBudget {
compute_unit_limit: compute_budget::DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64,
heap_size: Some(48 * 1024),
heap_size: 48 * 1024,
..ComputeBudget::default()
}
);