re-calibrate limit based on mainnet data, see issue #21917

This commit is contained in:
Tao Zhu
2021-12-17 17:54:17 -06:00
committed by Tao Zhu
parent 0b1b36f088
commit d743c2917c

View File

@ -11,22 +11,22 @@ use {
/// Static configurations: /// Static configurations:
/// ///
/// Number of microseconds replaying a block should take, 400 millisecond block times /// Number of microseconds replaying a block should take, 400 millisecond block times
/// is curerntly publicly communicated on solana.com /// is currently publicly communicated on solana.com
pub const MAX_BLOCK_REPLAY_TIME_US: u64 = 400_000; pub const MAX_BLOCK_REPLAY_TIME_US: u64 = 400_000;
/// number of concurrent processes, /// number of concurrent processes,
pub const MAX_CONCURRENCY: u64 = 10; pub const MAX_CONCURRENCY: u64 = 4;
/// Cluster data, method of collecting at https://github.com/solana-labs/solana/issues/19627 /// Cluster data, method of collecting at https://github.com/solana-labs/solana/issues/19627
/// Dashboard: https://metrics.solana.com:8889/sources/0/dashboards/10?refresh=Paused&lower=now%28%29%20-%2012h /// Dashboard: https://metrics.solana.com:8889/sources/0/dashboards/10?refresh=Paused&lower=now%28%29%20-%2012h
/// ///
/// cluster avergaed compute unit to microsec conversion rate /// cluster averaged compute unit to micro-sec conversion rate
pub const COMPUTE_UNIT_TO_US_RATIO: u64 = 40; pub const COMPUTE_UNIT_TO_US_RATIO: u64 = 30;
/// Number of compute units for one signature verification. /// Number of compute units for one signature verification.
pub const SIGNATURE_COST: u64 = COMPUTE_UNIT_TO_US_RATIO * 130; pub const SIGNATURE_COST: u64 = COMPUTE_UNIT_TO_US_RATIO * 24;
/// Number of compute units for one write lock /// Number of compute units for one write lock
pub const WRITE_LOCK_UNITS: u64 = COMPUTE_UNIT_TO_US_RATIO * 10; pub const WRITE_LOCK_UNITS: u64 = COMPUTE_UNIT_TO_US_RATIO * 10;
/// Number of data bytes per compute units /// Number of data bytes per compute units
pub const DATA_BYTES_UNITS: u64 = 220 /*bytes per us*/ / COMPUTE_UNIT_TO_US_RATIO; pub const DATA_BYTES_UNITS: u64 = 550 /*bytes per us*/ / COMPUTE_UNIT_TO_US_RATIO;
// Number of compute units for each built-in programs // Number of compute units for each built-in programs
lazy_static! { lazy_static! {
/// Number of compute units for each built-in programs /// Number of compute units for each built-in programs
@ -37,9 +37,9 @@ lazy_static! {
(solana_sdk::stake::config::id(), COMPUTE_UNIT_TO_US_RATIO * 2), (solana_sdk::stake::config::id(), COMPUTE_UNIT_TO_US_RATIO * 2),
(solana_sdk::stake::program::id(), COMPUTE_UNIT_TO_US_RATIO * 25), (solana_sdk::stake::program::id(), COMPUTE_UNIT_TO_US_RATIO * 25),
(solana_config_program::id(), COMPUTE_UNIT_TO_US_RATIO * 15), (solana_config_program::id(), COMPUTE_UNIT_TO_US_RATIO * 15),
(solana_vote_program::id(), COMPUTE_UNIT_TO_US_RATIO * 85), (solana_vote_program::id(), COMPUTE_UNIT_TO_US_RATIO * 70),
(secp256k1_program::id(), COMPUTE_UNIT_TO_US_RATIO * 4), (secp256k1_program::id(), COMPUTE_UNIT_TO_US_RATIO * 2),
(system_program::id(), COMPUTE_UNIT_TO_US_RATIO * 10), (system_program::id(), COMPUTE_UNIT_TO_US_RATIO * 5),
] ]
.iter() .iter()
.cloned() .cloned()
@ -49,15 +49,15 @@ lazy_static! {
/// Statically computed data: /// Statically computed data:
/// ///
/// Number of compute units that a block is allowed. A block's compute units are /// Number of compute units that a block is allowed. A block's compute units are
/// accumualted by Transactions added to it; A transaction's compute units are /// accumulated by Transactions added to it; A transaction's compute units are
/// calculated by cost_model, based on transaction's signarures, write locks, /// calculated by cost_model, based on transaction's signatures, write locks,
/// data size and built-in and BPF instructinos. /// data size and built-in and BPF instructions.
pub const MAX_BLOCK_UNITS: u64 = pub const MAX_BLOCK_UNITS: u64 =
MAX_BLOCK_REPLAY_TIME_US * COMPUTE_UNIT_TO_US_RATIO * MAX_CONCURRENCY; MAX_BLOCK_REPLAY_TIME_US * COMPUTE_UNIT_TO_US_RATIO * MAX_CONCURRENCY;
/// Number of compute units that a writable account in a block is allowed. The /// Number of compute units that a writable account in a block is allowed. The
/// limit is to prevent too many transactions write to same account, threrefore /// limit is to prevent too many transactions write to same account, therefore
/// reduce block's paralellism. /// reduce block's parallelism.
pub const MAX_WRITABLE_ACCOUNT_UNITS: u64 = MAX_BLOCK_REPLAY_TIME_US * COMPUTE_UNIT_TO_US_RATIO; pub const MAX_WRITABLE_ACCOUNT_UNITS: u64 = MAX_BLOCK_REPLAY_TIME_US * COMPUTE_UNIT_TO_US_RATIO;
/// max len of account data in a slot (bytes) /// max length of account data in a slot (bytes)
pub const MAX_ACCOUNT_DATA_LEN: u64 = 100_000_000; pub const MAX_ACCOUNT_DATA_LEN: u64 = 100_000_000;