More detailed voting timings in replay stage (#18229)

This commit is contained in:
sakridge 2021-06-26 17:32:08 +02:00 committed by GitHub
parent e98a7504f2
commit 5d08bf9aa3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 34 additions and 0 deletions

View File

@ -138,6 +138,10 @@ pub struct ReplayTiming {
start_leader_elapsed: u64, start_leader_elapsed: u64,
reset_bank_elapsed: u64, reset_bank_elapsed: u64,
voting_elapsed: u64, voting_elapsed: u64,
vote_push_us: u64,
vote_send_us: u64,
generate_vote_us: u64,
update_commitment_cache_us: u64,
select_forks_elapsed: u64, select_forks_elapsed: u64,
compute_slot_stats_elapsed: u64, compute_slot_stats_elapsed: u64,
generate_new_bank_forks_elapsed: u64, generate_new_bank_forks_elapsed: u64,
@ -191,6 +195,17 @@ impl ReplayTiming {
let now = timestamp(); let now = timestamp();
let elapsed_ms = now - self.last_print; let elapsed_ms = now - self.last_print;
if elapsed_ms > 1000 { if elapsed_ms > 1000 {
datapoint_info!(
"replay-loop-voting-stats",
("vote_push_us", self.vote_push_us, i64),
("vote_send_us", self.vote_send_us, i64),
("generate_vote_us", self.generate_vote_us, i64),
(
"update_commitment_cache_us",
self.update_commitment_cache_us,
i64
),
);
datapoint_info!( datapoint_info!(
"replay-loop-timing-stats", "replay-loop-timing-stats",
("total_elapsed_us", elapsed_ms * 1000, i64), ("total_elapsed_us", elapsed_ms * 1000, i64),
@ -585,6 +600,7 @@ impl ReplayStage {
&mut unfrozen_gossip_verified_vote_hashes, &mut unfrozen_gossip_verified_vote_hashes,
&mut voted_signatures, &mut voted_signatures,
&mut has_new_vote_been_rooted, &mut has_new_vote_been_rooted,
&mut replay_timing,
); );
}; };
voting_time.stop(); voting_time.stop();
@ -1293,6 +1309,7 @@ impl ReplayStage {
unfrozen_gossip_verified_vote_hashes: &mut UnfrozenGossipVerifiedVoteHashes, unfrozen_gossip_verified_vote_hashes: &mut UnfrozenGossipVerifiedVoteHashes,
vote_signatures: &mut Vec<Signature>, vote_signatures: &mut Vec<Signature>,
has_new_vote_been_rooted: &mut bool, has_new_vote_been_rooted: &mut bool,
replay_timing: &mut ReplayTiming,
) { ) {
if bank.is_empty() { if bank.is_empty() {
inc_new_counter_info!("replay_stage-voted_empty_bank", 1); inc_new_counter_info!("replay_stage-voted_empty_bank", 1);
@ -1357,12 +1374,16 @@ impl ReplayStage {
info!("new root {}", new_root); info!("new root {}", new_root);
} }
let mut update_commitment_cache_time = Measure::start("update_commitment_cache");
Self::update_commitment_cache( Self::update_commitment_cache(
bank.clone(), bank.clone(),
bank_forks.read().unwrap().root(), bank_forks.read().unwrap().root(),
progress.get_fork_stats(bank.slot()).unwrap().total_stake, progress.get_fork_stats(bank.slot()).unwrap().total_stake,
lockouts_sender, lockouts_sender,
); );
update_commitment_cache_time.stop();
replay_timing.update_commitment_cache_us += update_commitment_cache_time.as_us();
Self::push_vote( Self::push_vote(
cluster_info, cluster_info,
bank, bank,
@ -1373,6 +1394,7 @@ impl ReplayStage {
switch_fork_decision, switch_fork_decision,
vote_signatures, vote_signatures,
*has_new_vote_been_rooted, *has_new_vote_been_rooted,
replay_timing,
); );
} }
@ -1538,6 +1560,7 @@ impl ReplayStage {
} }
} }
#[allow(clippy::too_many_arguments)]
fn push_vote( fn push_vote(
cluster_info: &ClusterInfo, cluster_info: &ClusterInfo,
bank: &Bank, bank: &Bank,
@ -1548,7 +1571,9 @@ impl ReplayStage {
switch_fork_decision: &SwitchForkDecision, switch_fork_decision: &SwitchForkDecision,
vote_signatures: &mut Vec<Signature>, vote_signatures: &mut Vec<Signature>,
has_new_vote_been_rooted: bool, has_new_vote_been_rooted: bool,
replay_timing: &mut ReplayTiming,
) { ) {
let mut generate_time = Measure::start("generate_vote");
let vote_tx = Self::generate_vote_tx( let vote_tx = Self::generate_vote_tx(
&cluster_info.keypair, &cluster_info.keypair,
bank, bank,
@ -1559,13 +1584,20 @@ impl ReplayStage {
vote_signatures, vote_signatures,
has_new_vote_been_rooted, has_new_vote_been_rooted,
); );
generate_time.stop();
replay_timing.generate_vote_us += generate_time.as_us();
if let Some(vote_tx) = vote_tx { if let Some(vote_tx) = vote_tx {
tower.refresh_last_vote_tx_blockhash(vote_tx.message.recent_blockhash); tower.refresh_last_vote_tx_blockhash(vote_tx.message.recent_blockhash);
let mut send_time = Measure::start("send_vote");
let _ = cluster_info.send_vote( let _ = cluster_info.send_vote(
&vote_tx, &vote_tx,
crate::banking_stage::next_leader_tpu(cluster_info, poh_recorder), crate::banking_stage::next_leader_tpu(cluster_info, poh_recorder),
); );
send_time.stop();
let mut push_time = Measure::start("push_vote");
cluster_info.push_vote(&tower.tower_slots(), vote_tx); cluster_info.push_vote(&tower.tower_slots(), vote_tx);
push_time.stop();
replay_timing.vote_push_us += push_time.as_us();
} }
} }
@ -4710,6 +4742,7 @@ mod tests {
&SwitchForkDecision::SameFork, &SwitchForkDecision::SameFork,
&mut voted_signatures, &mut voted_signatures,
has_new_vote_been_rooted, has_new_vote_been_rooted,
&mut ReplayTiming::default(),
); );
let mut cursor = Cursor::default(); let mut cursor = Cursor::default();
let (_, votes) = cluster_info.get_votes(&mut cursor); let (_, votes) = cluster_info.get_votes(&mut cursor);
@ -4761,6 +4794,7 @@ mod tests {
&SwitchForkDecision::SameFork, &SwitchForkDecision::SameFork,
&mut voted_signatures, &mut voted_signatures,
has_new_vote_been_rooted, has_new_vote_been_rooted,
&mut ReplayTiming::default(),
); );
let (_, votes) = cluster_info.get_votes(&mut cursor); let (_, votes) = cluster_info.get_votes(&mut cursor);
assert_eq!(votes.len(), 1); assert_eq!(votes.len(), 1);