Optimize stakes cache and rewards at epoch boundaries (#20432)
* Optimize stakes cache and rewards at epoch boundaries * Fetch from accounts db * Add cli flag for disabling epoch boundary optimization
This commit is contained in:
@ -43,7 +43,7 @@ use {
|
||||
},
|
||||
solana_runtime::{
|
||||
accounts_background_service::AbsRequestSender, bank::Bank, bank::ExecuteTimings,
|
||||
bank_forks::BankForks, commitment::BlockCommitmentCache,
|
||||
bank::NewBankOptions, bank_forks::BankForks, commitment::BlockCommitmentCache,
|
||||
vote_sender_types::ReplayVoteSender,
|
||||
},
|
||||
solana_sdk::{
|
||||
@ -132,6 +132,7 @@ pub struct ReplayStageConfig {
|
||||
pub wait_for_vote_to_start_leader: bool,
|
||||
pub ancestor_hashes_replay_update_sender: AncestorHashesReplayUpdateSender,
|
||||
pub tower_storage: Arc<dyn TowerStorage>,
|
||||
pub disable_epoch_boundary_optimization: bool,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
@ -341,6 +342,7 @@ impl ReplayStage {
|
||||
wait_for_vote_to_start_leader,
|
||||
ancestor_hashes_replay_update_sender,
|
||||
tower_storage,
|
||||
disable_epoch_boundary_optimization,
|
||||
} = config;
|
||||
|
||||
trace!("replay stage");
|
||||
@ -769,6 +771,7 @@ impl ReplayStage {
|
||||
&retransmit_slots_sender,
|
||||
&mut skipped_slots_info,
|
||||
has_new_vote_been_rooted,
|
||||
disable_epoch_boundary_optimization,
|
||||
);
|
||||
|
||||
let poh_bank = poh_recorder.lock().unwrap().bank();
|
||||
@ -1341,6 +1344,7 @@ impl ReplayStage {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
fn maybe_start_leader(
|
||||
my_pubkey: &Pubkey,
|
||||
bank_forks: &Arc<RwLock<BankForks>>,
|
||||
@ -1351,6 +1355,7 @@ impl ReplayStage {
|
||||
retransmit_slots_sender: &RetransmitSlotsSender,
|
||||
skipped_slots_info: &mut SkippedSlotsInfo,
|
||||
has_new_vote_been_rooted: bool,
|
||||
disable_epoch_boundary_optimization: bool,
|
||||
) {
|
||||
// all the individual calls to poh_recorder.lock() are designed to
|
||||
// increase granularity, decrease contention
|
||||
@ -1468,7 +1473,10 @@ impl ReplayStage {
|
||||
root_slot,
|
||||
my_pubkey,
|
||||
rpc_subscriptions,
|
||||
vote_only_bank,
|
||||
NewBankOptions {
|
||||
vote_only_bank,
|
||||
disable_epoch_boundary_optimization,
|
||||
},
|
||||
);
|
||||
|
||||
let tpu_bank = bank_forks.write().unwrap().insert(tpu_bank);
|
||||
@ -2794,7 +2802,7 @@ impl ReplayStage {
|
||||
forks.root(),
|
||||
&leader,
|
||||
rpc_subscriptions,
|
||||
false,
|
||||
NewBankOptions::default(),
|
||||
);
|
||||
let empty: Vec<Pubkey> = vec![];
|
||||
Self::update_fork_propagated_threshold_from_votes(
|
||||
@ -2821,10 +2829,10 @@ impl ReplayStage {
|
||||
root_slot: u64,
|
||||
leader: &Pubkey,
|
||||
rpc_subscriptions: &Arc<RpcSubscriptions>,
|
||||
vote_only_bank: bool,
|
||||
new_bank_options: NewBankOptions,
|
||||
) -> Bank {
|
||||
rpc_subscriptions.notify_slot(slot, parent.slot(), root_slot);
|
||||
Bank::new_from_parent_with_vote_only(parent, leader, slot, vote_only_bank)
|
||||
Bank::new_from_parent_with_options(parent, leader, slot, new_bank_options)
|
||||
}
|
||||
|
||||
fn record_rewards(bank: &Bank, rewards_recorder_sender: &Option<RewardsRecorderSender>) {
|
||||
|
@ -94,6 +94,7 @@ pub struct TvuConfig {
|
||||
pub rocksdb_max_compaction_jitter: Option<u64>,
|
||||
pub wait_for_vote_to_start_leader: bool,
|
||||
pub accounts_shrink_ratio: AccountShrinkThreshold,
|
||||
pub disable_epoch_boundary_optimization: bool,
|
||||
}
|
||||
|
||||
impl Tvu {
|
||||
@ -282,6 +283,7 @@ impl Tvu {
|
||||
wait_for_vote_to_start_leader: tvu_config.wait_for_vote_to_start_leader,
|
||||
ancestor_hashes_replay_update_sender,
|
||||
tower_storage: tower_storage.clone(),
|
||||
disable_epoch_boundary_optimization: tvu_config.disable_epoch_boundary_optimization,
|
||||
};
|
||||
|
||||
let (voting_sender, voting_receiver) = channel();
|
||||
|
@ -161,6 +161,7 @@ pub struct ValidatorConfig {
|
||||
pub validator_exit: Arc<RwLock<Exit>>,
|
||||
pub no_wait_for_vote_to_start_leader: bool,
|
||||
pub accounts_shrink_ratio: AccountShrinkThreshold,
|
||||
pub disable_epoch_boundary_optimization: bool,
|
||||
}
|
||||
|
||||
impl Default for ValidatorConfig {
|
||||
@ -221,6 +222,7 @@ impl Default for ValidatorConfig {
|
||||
no_wait_for_vote_to_start_leader: true,
|
||||
accounts_shrink_ratio: AccountShrinkThreshold::default(),
|
||||
accounts_db_config: None,
|
||||
disable_epoch_boundary_optimization: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -820,6 +822,7 @@ impl Validator {
|
||||
rocksdb_max_compaction_jitter: config.rocksdb_compaction_interval,
|
||||
wait_for_vote_to_start_leader,
|
||||
accounts_shrink_ratio: config.accounts_shrink_ratio,
|
||||
disable_epoch_boundary_optimization: config.disable_epoch_boundary_optimization,
|
||||
},
|
||||
&max_slots,
|
||||
&cost_model,
|
||||
|
Reference in New Issue
Block a user