diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 32c9973c2eb946..64f9dbc48d03de 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -789,6 +789,10 @@ pub mod deprecate_unused_legacy_vote_plumbing { solana_sdk::declare_id!("6Uf8S75PVh91MYgPQSHnjRAPQq6an5BDv9vomrCwDqLe"); } +pub mod enable_turbine_extended_fanout_experiments { + solana_sdk::declare_id!("BZn14Liea52wtBwrXUxTv6vojuTTmfc7XGEDTXrvMD7b"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -981,6 +985,7 @@ lazy_static! { (enable_chained_merkle_shreds::id(), "Enable chained Merkle shreds #34916"), (deprecate_unused_legacy_vote_plumbing::id(), "Deprecate unused legacy vote tx plumbing"), (chained_merkle_conflict_duplicate_proofs::id(), "generate duplicate proofs for chained merkle root conflicts"), + (enable_turbine_extended_fanout_experiments::id(), "enable turbine extended fanout experiments #2373"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() diff --git a/turbine/src/cluster_nodes.rs b/turbine/src/cluster_nodes.rs index bebbda5af8b1e0..d2e3da68a4b7af 100644 --- a/turbine/src/cluster_nodes.rs +++ b/turbine/src/cluster_nodes.rs @@ -584,8 +584,31 @@ pub fn make_test_cluster( } pub(crate) fn get_data_plane_fanout(shred_slot: Slot, root_bank: &Bank) -> usize { - if enable_turbine_fanout_experiments(shred_slot, root_bank) { + if check_feature_activation( + &feature_set::disable_turbine_fanout_experiments::id(), + shred_slot, + root_bank, + ) { + DATA_PLANE_FANOUT + } else if check_feature_activation( + &feature_set::enable_turbine_extended_fanout_experiments::id(), + shred_slot, + root_bank, + ) { // Allocate ~2% of slots to turbine fanout experiments. + match shred_slot % 359 { + 11 => 1152, + 61 => 1280, + 111 => 1024, + 161 => 1408, + 211 => 896, + 261 => 1536, + 311 => 768, + _ => DATA_PLANE_FANOUT, + } + } else { + // feature_set::enable_turbine_fanout_experiments + // is already activated on all clusters. match shred_slot % 359 { 11 => 64, 61 => 768, @@ -596,23 +619,9 @@ pub(crate) fn get_data_plane_fanout(shred_slot: Slot, root_bank: &Bank) -> usize 311 => 384, _ => DATA_PLANE_FANOUT, } - } else { - DATA_PLANE_FANOUT } } -fn enable_turbine_fanout_experiments(shred_slot: Slot, root_bank: &Bank) -> bool { - check_feature_activation( - &feature_set::enable_turbine_fanout_experiments::id(), - shred_slot, - root_bank, - ) && !check_feature_activation( - &feature_set::disable_turbine_fanout_experiments::id(), - shred_slot, - root_bank, - ) -} - // Returns true if the feature is effective for the shred slot. #[must_use] pub fn check_feature_activation(feature: &Pubkey, shred_slot: Slot, root_bank: &Bank) -> bool {