Skip to content

Commit 3937de1

Browse files
v4.1: reduce vote batch size (backport of #12963) (#13102)
reduce vote batch size (#12963) (cherry picked from commit 749cd74) Co-authored-by: Tao Zhu <82401714+tao-stones@users.noreply.github.com>
1 parent 19e19df commit 3937de1

1 file changed

Lines changed: 14 additions & 18 deletions

File tree

core/src/banking_stage/vote_worker.rs

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ mod transaction {
5050
pub use solana_transaction_error::TransactionResult as Result;
5151
}
5252

53-
// This vote batch size was selected to balance the following two things:
54-
// 1. Amortize execution overhead (Larger is better)
55-
// 2. Constrain max entry size for FEC set packing (Smaller is better)
56-
pub const UNPROCESSED_BUFFER_STEP_SIZE: usize = 16;
53+
// Process vote packets one at a time to avoid over reserving block CUs during packing,
54+
// also keep each recorded vote batch as small as possible, which favors entry/FEC-set
55+
// packing.
56+
pub const UNPROCESSED_BUFFER_STEP_SIZE: usize = 1;
5757

5858
pub struct VoteWorker {
5959
exit: Arc<AtomicBool>,
@@ -501,8 +501,8 @@ impl VoteWorker {
501501
.collect()
502502
}
503503

504-
fn extract_retryable(
505-
vote_packets: &mut ArrayVec<RuntimeTransactionView, 16>,
504+
fn extract_retryable<const N: usize>(
505+
vote_packets: &mut ArrayVec<RuntimeTransactionView, N>,
506506
retryable_vote_indices: Vec<usize>,
507507
) -> impl Iterator<Item = RuntimeTransactionView> + '_ {
508508
debug_assert!(retryable_vote_indices.is_sorted());
@@ -659,11 +659,9 @@ mod tests {
659659
#[test]
660660
fn extract_retryable_one_all_retryable() {
661661
let keypair_a = ValidatorVoteKeypairs::new_rand();
662-
let mut packets = ArrayVec::from_iter([to_runtime_transaction_view(packet_from_slots(
663-
vec![(1, 1)],
664-
&keypair_a,
665-
None,
666-
))]);
662+
let mut packets: ArrayVec<_, 1> = ArrayVec::from_iter([to_runtime_transaction_view(
663+
packet_from_slots(vec![(1, 1)], &keypair_a, None),
664+
)]);
667665
let retryable_indices = vec![0];
668666

669667
// Assert - Able to extract exactly one packet.
@@ -676,11 +674,9 @@ mod tests {
676674
#[test]
677675
fn extract_retryable_one_none_retryable() {
678676
let keypair_a = ValidatorVoteKeypairs::new_rand();
679-
let mut packets = ArrayVec::from_iter([to_runtime_transaction_view(packet_from_slots(
680-
vec![(1, 1)],
681-
&keypair_a,
682-
None,
683-
))]);
677+
let mut packets: ArrayVec<_, 1> = ArrayVec::from_iter([to_runtime_transaction_view(
678+
packet_from_slots(vec![(1, 1)], &keypair_a, None),
679+
)]);
684680
let retryable_indices = vec![];
685681

686682
// Assert - Able to extract exactly zero packets.
@@ -691,7 +687,7 @@ mod tests {
691687
#[test]
692688
fn extract_retryable_three_last_retryable() {
693689
let keypair_a = ValidatorVoteKeypairs::new_rand();
694-
let mut packets = ArrayVec::from_iter(
690+
let mut packets: ArrayVec<_, 3> = ArrayVec::from_iter(
695691
[
696692
packet_from_slots(vec![(5, 3)], &keypair_a, None),
697693
packet_from_slots(vec![(6, 2)], &keypair_a, None),
@@ -712,7 +708,7 @@ mod tests {
712708
#[test]
713709
fn extract_retryable_three_first_last_retryable() {
714710
let keypair_a = ValidatorVoteKeypairs::new_rand();
715-
let mut packets = ArrayVec::from_iter(
711+
let mut packets: ArrayVec<_, 3> = ArrayVec::from_iter(
716712
[
717713
packet_from_slots(vec![(5, 3)], &keypair_a, None),
718714
packet_from_slots(vec![(6, 2)], &keypair_a, None),

0 commit comments

Comments
 (0)