ConsumeWorker: collect and report bank waiting times (#477)

This commit is contained in:
Andrew Fitzgerald 2024-04-03 11:01:31 -05:00 committed by GitHub
parent ce1f41e547
commit 7b204e7d01
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 33 additions and 2 deletions

View File

@ -5,6 +5,7 @@ use {
scheduler_messages::{ConsumeWork, FinishedConsumeWork},
},
crossbeam_channel::{Receiver, RecvError, SendError, Sender},
solana_measure::measure_us,
solana_poh::leader_bank_notifier::LeaderBankNotifier,
solana_runtime::bank::Bank,
solana_sdk::timing::AtomicInterval,
@ -65,15 +66,33 @@ impl ConsumeWorker {
}
fn consume_loop(&self, work: ConsumeWork) -> Result<(), ConsumeWorkerError> {
let Some(mut bank) = self.get_consume_bank() else {
let (maybe_consume_bank, get_bank_us) = measure_us!(self.get_consume_bank());
let Some(mut bank) = maybe_consume_bank else {
self.metrics
.timing_metrics
.wait_for_bank_failure_us
.fetch_add(get_bank_us, Ordering::Relaxed);
return self.retry_drain(work);
};
self.metrics
.timing_metrics
.wait_for_bank_success_us
.fetch_add(get_bank_us, Ordering::Relaxed);
for work in try_drain_iter(work, &self.consume_receiver) {
if bank.is_complete() {
if let Some(new_bank) = self.get_consume_bank() {
let (maybe_new_bank, get_bank_us) = measure_us!(self.get_consume_bank());
if let Some(new_bank) = maybe_new_bank {
self.metrics
.timing_metrics
.wait_for_bank_success_us
.fetch_add(get_bank_us, Ordering::Relaxed);
bank = new_bank;
} else {
self.metrics
.timing_metrics
.wait_for_bank_failure_us
.fetch_add(get_bank_us, Ordering::Relaxed);
return self.retry_drain(work);
}
}
@ -471,6 +490,8 @@ struct ConsumeWorkerTimingMetrics {
record_us: AtomicU64,
commit_us: AtomicU64,
find_and_send_votes_us: AtomicU64,
wait_for_bank_success_us: AtomicU64,
wait_for_bank_failure_us: AtomicU64,
}
impl ConsumeWorkerTimingMetrics {
@ -510,6 +531,16 @@ impl ConsumeWorkerTimingMetrics {
self.find_and_send_votes_us.swap(0, Ordering::Relaxed),
i64
),
(
"wait_for_bank_success_us",
self.wait_for_bank_success_us.swap(0, Ordering::Relaxed),
i64
),
(
"wait_for_bank_failure_us",
self.wait_for_bank_failure_us.swap(0, Ordering::Relaxed),
i64
),
);
}
}