From e52e48076ed4be48b4afb0966b45040235aa13bc Mon Sep 17 00:00:00 2001 From: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> Date: Mon, 7 Feb 2022 20:28:28 -0600 Subject: [PATCH] bench should update leader schedule cache (#22991) --- banking-bench/src/main.rs | 11 +++++++++-- core/benches/banking_stage.rs | 4 ++-- core/src/banking_stage.rs | 12 ++++++------ core/src/tvu.rs | 2 +- poh/src/poh_recorder.rs | 7 ++++++- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/banking-bench/src/main.rs b/banking-bench/src/main.rs index 2ba1fe46d6..4a231dc7c9 100644 --- a/banking-bench/src/main.rs +++ b/banking-bench/src/main.rs @@ -11,6 +11,7 @@ use { blockstore::Blockstore, genesis_utils::{create_genesis_config, GenesisConfigInfo}, get_tmp_ledger_path, + leader_schedule_cache::LeaderScheduleCache, }, solana_measure::measure::Measure, solana_perf::packet::to_packet_batches, @@ -218,8 +219,13 @@ fn main() { let blockstore = Arc::new( Blockstore::open(&ledger_path).expect("Expected to be able to open database ledger"), ); - let (exit, poh_recorder, poh_service, signal_receiver) = - create_test_recorder(&bank, &blockstore, None); + let leader_schedule_cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank)); + let (exit, poh_recorder, poh_service, signal_receiver) = create_test_recorder( + &bank, + &blockstore, + None, + Some(leader_schedule_cache.clone()), + ); let cluster_info = ClusterInfo::new( Node::new_localhost().info, Arc::new(Keypair::new()), @@ -332,6 +338,7 @@ fn main() { poh_recorder.lock().unwrap().set_bank(&bank); assert!(poh_recorder.lock().unwrap().bank().is_some()); if bank.slot() > 32 { + leader_schedule_cache.set_root(&bank); bank_forks.set_root(root, &AbsRequestSender::default(), None); root += 1; } diff --git a/core/benches/banking_stage.rs b/core/benches/banking_stage.rs index 50ec5cbef2..0c4cee9787 100644 --- a/core/benches/banking_stage.rs +++ b/core/benches/banking_stage.rs @@ -70,7 +70,7 @@ fn bench_consume_buffered(bencher: &mut Bencher) { Blockstore::open(&ledger_path).expect("Expected to be able to open database ledger"), ); let (exit, poh_recorder, poh_service, _signal_receiver) = - create_test_recorder(&bank, &blockstore, None); + create_test_recorder(&bank, &blockstore, None, None); let recorder = poh_recorder.lock().unwrap().recorder(); @@ -213,7 +213,7 @@ fn bench_banking(bencher: &mut Bencher, tx_type: TransactionType) { Blockstore::open(&ledger_path).expect("Expected to be able to open database ledger"), ); let (exit, poh_recorder, poh_service, signal_receiver) = - create_test_recorder(&bank, &blockstore, None); + create_test_recorder(&bank, &blockstore, None, None); let cluster_info = ClusterInfo::new( Node::new_localhost().info, Arc::new(Keypair::new()), diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index 80a2fbcd06..151da3e39e 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -1830,7 +1830,7 @@ mod tests { .expect("Expected to be able to open database ledger"), ); let (exit, poh_recorder, poh_service, _entry_receiever) = - create_test_recorder(&bank, &blockstore, None); + create_test_recorder(&bank, &blockstore, None, None); let cluster_info = new_test_cluster_info(Node::new_localhost().info); let cluster_info = Arc::new(cluster_info); let (gossip_vote_sender, _gossip_vote_receiver) = unbounded(); @@ -1878,7 +1878,7 @@ mod tests { ..PohConfig::default() }; let (exit, poh_recorder, poh_service, entry_receiver) = - create_test_recorder(&bank, &blockstore, Some(poh_config)); + create_test_recorder(&bank, &blockstore, Some(poh_config), None); let cluster_info = new_test_cluster_info(Node::new_localhost().info); let cluster_info = Arc::new(cluster_info); let (verified_gossip_vote_sender, verified_gossip_vote_receiver) = unbounded(); @@ -1954,7 +1954,7 @@ mod tests { ..PohConfig::default() }; let (exit, poh_recorder, poh_service, entry_receiver) = - create_test_recorder(&bank, &blockstore, Some(poh_config)); + create_test_recorder(&bank, &blockstore, Some(poh_config), None); let cluster_info = new_test_cluster_info(Node::new_localhost().info); let cluster_info = Arc::new(cluster_info); let (gossip_vote_sender, _gossip_vote_receiver) = unbounded(); @@ -2106,7 +2106,7 @@ mod tests { ..PohConfig::default() }; let (exit, poh_recorder, poh_service, entry_receiver) = - create_test_recorder(&bank, &blockstore, Some(poh_config)); + create_test_recorder(&bank, &blockstore, Some(poh_config), None); let cluster_info = new_test_cluster_info(Node::new_localhost().info); let cluster_info = Arc::new(cluster_info); let _banking_stage = BankingStage::new_num_threads( @@ -3456,7 +3456,7 @@ mod tests { }; let (exit, poh_recorder, poh_service, _entry_receiver) = - create_test_recorder(&bank, &blockstore, Some(poh_config)); + create_test_recorder(&bank, &blockstore, Some(poh_config), None); let local_node = Node::new_localhost_with_pubkey(validator_pubkey); let cluster_info = new_test_cluster_info(local_node.info); @@ -3539,7 +3539,7 @@ mod tests { }; let (exit, poh_recorder, poh_service, _entry_receiver) = - create_test_recorder(&bank, &blockstore, Some(poh_config)); + create_test_recorder(&bank, &blockstore, Some(poh_config), None); let local_node = Node::new_localhost_with_pubkey(validator_pubkey); let cluster_info = new_test_cluster_info(local_node.info); diff --git a/core/src/tvu.rs b/core/src/tvu.rs index 68293152dc..8e6069ea0f 100644 --- a/core/src/tvu.rs +++ b/core/src/tvu.rs @@ -456,7 +456,7 @@ pub mod tests { let blockstore = Arc::new(blockstore); let bank = bank_forks.working_bank(); let (exit, poh_recorder, poh_service, _entry_receiver) = - create_test_recorder(&bank, &blockstore, None); + create_test_recorder(&bank, &blockstore, None, None); let vote_keypair = Keypair::new(); let leader_schedule_cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank)); let block_commitment_cache = Arc::new(RwLock::new(BlockCommitmentCache::default())); diff --git a/poh/src/poh_recorder.rs b/poh/src/poh_recorder.rs index 76177d5b1c..514f757703 100644 --- a/poh/src/poh_recorder.rs +++ b/poh/src/poh_recorder.rs @@ -822,12 +822,17 @@ pub fn create_test_recorder( bank: &Arc, blockstore: &Arc, poh_config: Option, + leader_schedule_cache: Option>, ) -> ( Arc, Arc>, PohService, Receiver, ) { + let leader_schedule_cache = match leader_schedule_cache { + Some(provided_cache) => provided_cache, + None => Arc::new(LeaderScheduleCache::new_from_bank(bank)), + }; let exit = Arc::new(AtomicBool::new(false)); let poh_config = Arc::new(poh_config.unwrap_or_default()); let (mut poh_recorder, entry_receiver, record_receiver) = PohRecorder::new( @@ -838,7 +843,7 @@ pub fn create_test_recorder( bank.ticks_per_slot(), &Pubkey::default(), blockstore, - &Arc::new(LeaderScheduleCache::new_from_bank(bank)), + &leader_schedule_cache, &poh_config, exit.clone(), );