TransactionScheduler: Pipe BlockProductionMethod (#33217)
This commit is contained in:
parent
27caf4d1d2
commit
e860019687
|
@ -450,7 +450,7 @@ fn main() {
|
||||||
DEFAULT_TPU_CONNECTION_POOL_SIZE,
|
DEFAULT_TPU_CONNECTION_POOL_SIZE,
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
let banking_stage = BankingStage::new_num_threads(
|
let banking_stage = BankingStage::new_thread_local_multi_iterator(
|
||||||
&cluster_info,
|
&cluster_info,
|
||||||
&poh_recorder,
|
&poh_recorder,
|
||||||
non_vote_receiver,
|
non_vote_receiver,
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#![allow(clippy::arithmetic_side_effects)]
|
#![allow(clippy::arithmetic_side_effects)]
|
||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
|
|
||||||
|
use solana_core::validator::BlockProductionMethod;
|
||||||
|
|
||||||
extern crate test;
|
extern crate test;
|
||||||
|
|
||||||
use {
|
use {
|
||||||
|
@ -291,6 +293,7 @@ fn bench_banking(bencher: &mut Bencher, tx_type: TransactionType) {
|
||||||
let cluster_info = Arc::new(cluster_info);
|
let cluster_info = Arc::new(cluster_info);
|
||||||
let (s, _r) = unbounded();
|
let (s, _r) = unbounded();
|
||||||
let _banking_stage = BankingStage::new(
|
let _banking_stage = BankingStage::new(
|
||||||
|
BlockProductionMethod::ThreadLocalMultiIterator,
|
||||||
&cluster_info,
|
&cluster_info,
|
||||||
&poh_recorder,
|
&poh_recorder,
|
||||||
non_vote_receiver,
|
non_vote_receiver,
|
||||||
|
|
|
@ -15,7 +15,10 @@ use {
|
||||||
unprocessed_packet_batches::*,
|
unprocessed_packet_batches::*,
|
||||||
unprocessed_transaction_storage::{ThreadType, UnprocessedTransactionStorage},
|
unprocessed_transaction_storage::{ThreadType, UnprocessedTransactionStorage},
|
||||||
},
|
},
|
||||||
crate::{banking_trace::BankingPacketReceiver, tracer_packet_stats::TracerPacketStats},
|
crate::{
|
||||||
|
banking_trace::BankingPacketReceiver, tracer_packet_stats::TracerPacketStats,
|
||||||
|
validator::BlockProductionMethod,
|
||||||
|
},
|
||||||
crossbeam_channel::RecvTimeoutError,
|
crossbeam_channel::RecvTimeoutError,
|
||||||
histogram::Histogram,
|
histogram::Histogram,
|
||||||
solana_client::connection_cache::ConnectionCache,
|
solana_client::connection_cache::ConnectionCache,
|
||||||
|
@ -307,6 +310,7 @@ impl BankingStage {
|
||||||
/// Create the stage using `bank`. Exit when `verified_receiver` is dropped.
|
/// Create the stage using `bank`. Exit when `verified_receiver` is dropped.
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
|
block_production_method: BlockProductionMethod,
|
||||||
cluster_info: &Arc<ClusterInfo>,
|
cluster_info: &Arc<ClusterInfo>,
|
||||||
poh_recorder: &Arc<RwLock<PohRecorder>>,
|
poh_recorder: &Arc<RwLock<PohRecorder>>,
|
||||||
non_vote_receiver: BankingPacketReceiver,
|
non_vote_receiver: BankingPacketReceiver,
|
||||||
|
@ -320,6 +324,7 @@ impl BankingStage {
|
||||||
prioritization_fee_cache: &Arc<PrioritizationFeeCache>,
|
prioritization_fee_cache: &Arc<PrioritizationFeeCache>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self::new_num_threads(
|
Self::new_num_threads(
|
||||||
|
block_production_method,
|
||||||
cluster_info,
|
cluster_info,
|
||||||
poh_recorder,
|
poh_recorder,
|
||||||
non_vote_receiver,
|
non_vote_receiver,
|
||||||
|
@ -337,6 +342,42 @@ impl BankingStage {
|
||||||
|
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new_num_threads(
|
pub fn new_num_threads(
|
||||||
|
block_production_method: BlockProductionMethod,
|
||||||
|
cluster_info: &Arc<ClusterInfo>,
|
||||||
|
poh_recorder: &Arc<RwLock<PohRecorder>>,
|
||||||
|
non_vote_receiver: BankingPacketReceiver,
|
||||||
|
tpu_vote_receiver: BankingPacketReceiver,
|
||||||
|
gossip_vote_receiver: BankingPacketReceiver,
|
||||||
|
num_threads: u32,
|
||||||
|
transaction_status_sender: Option<TransactionStatusSender>,
|
||||||
|
replay_vote_sender: ReplayVoteSender,
|
||||||
|
log_messages_bytes_limit: Option<usize>,
|
||||||
|
connection_cache: Arc<ConnectionCache>,
|
||||||
|
bank_forks: Arc<RwLock<BankForks>>,
|
||||||
|
prioritization_fee_cache: &Arc<PrioritizationFeeCache>,
|
||||||
|
) -> Self {
|
||||||
|
match block_production_method {
|
||||||
|
BlockProductionMethod::ThreadLocalMultiIterator => {
|
||||||
|
Self::new_thread_local_multi_iterator(
|
||||||
|
cluster_info,
|
||||||
|
poh_recorder,
|
||||||
|
non_vote_receiver,
|
||||||
|
tpu_vote_receiver,
|
||||||
|
gossip_vote_receiver,
|
||||||
|
num_threads,
|
||||||
|
transaction_status_sender,
|
||||||
|
replay_vote_sender,
|
||||||
|
log_messages_bytes_limit,
|
||||||
|
connection_cache,
|
||||||
|
bank_forks,
|
||||||
|
prioritization_fee_cache,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
|
pub fn new_thread_local_multi_iterator(
|
||||||
cluster_info: &Arc<ClusterInfo>,
|
cluster_info: &Arc<ClusterInfo>,
|
||||||
poh_recorder: &Arc<RwLock<PohRecorder>>,
|
poh_recorder: &Arc<RwLock<PohRecorder>>,
|
||||||
non_vote_receiver: BankingPacketReceiver,
|
non_vote_receiver: BankingPacketReceiver,
|
||||||
|
@ -644,6 +685,7 @@ mod tests {
|
||||||
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
|
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
|
||||||
|
|
||||||
let banking_stage = BankingStage::new(
|
let banking_stage = BankingStage::new(
|
||||||
|
BlockProductionMethod::ThreadLocalMultiIterator,
|
||||||
&cluster_info,
|
&cluster_info,
|
||||||
&poh_recorder,
|
&poh_recorder,
|
||||||
non_vote_receiver,
|
non_vote_receiver,
|
||||||
|
@ -700,6 +742,7 @@ mod tests {
|
||||||
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
|
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
|
||||||
|
|
||||||
let banking_stage = BankingStage::new(
|
let banking_stage = BankingStage::new(
|
||||||
|
BlockProductionMethod::ThreadLocalMultiIterator,
|
||||||
&cluster_info,
|
&cluster_info,
|
||||||
&poh_recorder,
|
&poh_recorder,
|
||||||
non_vote_receiver,
|
non_vote_receiver,
|
||||||
|
@ -781,6 +824,7 @@ mod tests {
|
||||||
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
|
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
|
||||||
|
|
||||||
let banking_stage = BankingStage::new(
|
let banking_stage = BankingStage::new(
|
||||||
|
BlockProductionMethod::ThreadLocalMultiIterator,
|
||||||
&cluster_info,
|
&cluster_info,
|
||||||
&poh_recorder,
|
&poh_recorder,
|
||||||
non_vote_receiver,
|
non_vote_receiver,
|
||||||
|
@ -941,7 +985,7 @@ mod tests {
|
||||||
create_test_recorder(bank.clone(), blockstore, Some(poh_config), None);
|
create_test_recorder(bank.clone(), blockstore, Some(poh_config), None);
|
||||||
let (_, cluster_info) = new_test_cluster_info(/*keypair:*/ None);
|
let (_, cluster_info) = new_test_cluster_info(/*keypair:*/ None);
|
||||||
let cluster_info = Arc::new(cluster_info);
|
let cluster_info = Arc::new(cluster_info);
|
||||||
let _banking_stage = BankingStage::new_num_threads(
|
let _banking_stage = BankingStage::new_thread_local_multi_iterator(
|
||||||
&cluster_info,
|
&cluster_info,
|
||||||
&poh_recorder,
|
&poh_recorder,
|
||||||
non_vote_receiver,
|
non_vote_receiver,
|
||||||
|
@ -1133,6 +1177,7 @@ mod tests {
|
||||||
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
|
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
|
||||||
|
|
||||||
let banking_stage = BankingStage::new(
|
let banking_stage = BankingStage::new(
|
||||||
|
BlockProductionMethod::ThreadLocalMultiIterator,
|
||||||
&cluster_info,
|
&cluster_info,
|
||||||
&poh_recorder,
|
&poh_recorder,
|
||||||
non_vote_receiver,
|
non_vote_receiver,
|
||||||
|
|
|
@ -15,7 +15,7 @@ use {
|
||||||
sigverify_stage::SigVerifyStage,
|
sigverify_stage::SigVerifyStage,
|
||||||
staked_nodes_updater_service::StakedNodesUpdaterService,
|
staked_nodes_updater_service::StakedNodesUpdaterService,
|
||||||
tpu_entry_notifier::TpuEntryNotifier,
|
tpu_entry_notifier::TpuEntryNotifier,
|
||||||
validator::GeneratorConfig,
|
validator::{BlockProductionMethod, GeneratorConfig},
|
||||||
},
|
},
|
||||||
bytes::Bytes,
|
bytes::Bytes,
|
||||||
crossbeam_channel::{unbounded, Receiver},
|
crossbeam_channel::{unbounded, Receiver},
|
||||||
|
@ -112,6 +112,7 @@ impl Tpu {
|
||||||
tracer_thread_hdl: TracerThread,
|
tracer_thread_hdl: TracerThread,
|
||||||
tpu_enable_udp: bool,
|
tpu_enable_udp: bool,
|
||||||
prioritization_fee_cache: &Arc<PrioritizationFeeCache>,
|
prioritization_fee_cache: &Arc<PrioritizationFeeCache>,
|
||||||
|
block_production_method: BlockProductionMethod,
|
||||||
_generator_config: Option<GeneratorConfig>, /* vestigial code for replay invalidator */
|
_generator_config: Option<GeneratorConfig>, /* vestigial code for replay invalidator */
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let TpuSockets {
|
let TpuSockets {
|
||||||
|
@ -221,6 +222,7 @@ impl Tpu {
|
||||||
);
|
);
|
||||||
|
|
||||||
let banking_stage = BankingStage::new(
|
let banking_stage = BankingStage::new(
|
||||||
|
block_production_method,
|
||||||
cluster_info,
|
cluster_info,
|
||||||
poh_recorder,
|
poh_recorder,
|
||||||
non_vote_receiver,
|
non_vote_receiver,
|
||||||
|
|
|
@ -1296,6 +1296,7 @@ impl Validator {
|
||||||
tracer_thread,
|
tracer_thread,
|
||||||
tpu_enable_udp,
|
tpu_enable_udp,
|
||||||
&prioritization_fee_cache,
|
&prioritization_fee_cache,
|
||||||
|
config.block_production_method.clone(),
|
||||||
config.generator_config.clone(),
|
config.generator_config.clone(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue