diff --git a/core/src/system_monitor_service.rs b/core/src/system_monitor_service.rs index d310aba208..3b6b07c284 100644 --- a/core/src/system_monitor_service.rs +++ b/core/src/system_monitor_service.rs @@ -95,12 +95,12 @@ pub fn verify_udp_stats_access() -> Result<(), String> { } impl SystemMonitorService { - pub fn new(exit: Arc) -> Self { + pub fn new(exit: Arc, report_os_network_stats: bool) -> Self { info!("Starting SystemMonitorService"); let thread_hdl = Builder::new() .name("system-monitor".to_string()) .spawn(move || { - Self::run(exit); + Self::run(exit, report_os_network_stats); }) .unwrap(); @@ -173,21 +173,19 @@ impl SystemMonitorService { ); } - pub fn run(exit: Arc) { + pub fn run(exit: Arc, report_os_network_stats: bool) { let mut udp_stats = None; - let mut now = Instant::now(); loop { if exit.load(Ordering::Relaxed) { break; } - if now.elapsed() >= SAMPLE_INTERVAL { now = Instant::now(); - - SystemMonitorService::process_udp_stats(&mut udp_stats); + if report_os_network_stats { + SystemMonitorService::process_udp_stats(&mut udp_stats); + } } - sleep(SLEEP_INTERVAL); } } diff --git a/core/src/validator.rs b/core/src/validator.rs index 535bfbc057..5238e51df5 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -141,6 +141,7 @@ pub struct ValidatorConfig { pub bpf_jit: bool, pub send_transaction_service_config: send_transaction_service::Config, pub no_poh_speed_test: bool, + pub no_os_network_stats_reporting: bool, pub poh_pinned_cpu_core: usize, pub poh_hashes_per_batch: u64, pub account_indexes: AccountSecondaryIndexes, @@ -199,6 +200,7 @@ impl Default for ValidatorConfig { bpf_jit: false, send_transaction_service_config: send_transaction_service::Config::default(), no_poh_speed_test: true, + no_os_network_stats_reporting: true, poh_pinned_cpu_core: poh_service::DEFAULT_PINNED_CPU_CORE, poh_hashes_per_batch: poh_service::DEFAULT_HASHES_PER_BATCH, account_indexes: AccountSecondaryIndexes::default(), @@ -431,11 +433,16 @@ impl Validator { *start_progress.write().unwrap() = ValidatorStartProgress::StartingServices; - verify_udp_stats_access().unwrap_or_else(|err| { - error!("Failed to access UDP stats: {}", err); - abort(); - }); - let system_monitor_service = Some(SystemMonitorService::new(Arc::clone(&exit))); + if !config.no_os_network_stats_reporting { + verify_udp_stats_access().unwrap_or_else(|err| { + error!("Failed to access UDP stats: {}. Bypass check with --no-os-network-stats-reporting.", err); + abort(); + }); + } + let system_monitor_service = Some(SystemMonitorService::new( + Arc::clone(&exit), + !config.no_os_network_stats_reporting, + )); let leader_schedule_cache = Arc::new(leader_schedule_cache); let bank = bank_forks.working_bank(); diff --git a/local-cluster/src/validator_configs.rs b/local-cluster/src/validator_configs.rs index d2ad59074e..df943536d6 100644 --- a/local-cluster/src/validator_configs.rs +++ b/local-cluster/src/validator_configs.rs @@ -45,6 +45,7 @@ pub fn safe_clone_config(config: &ValidatorConfig) -> ValidatorConfig { bpf_jit: config.bpf_jit, send_transaction_service_config: config.send_transaction_service_config.clone(), no_poh_speed_test: config.no_poh_speed_test, + no_os_network_stats_reporting: config.no_os_network_stats_reporting, poh_pinned_cpu_core: config.poh_pinned_cpu_core, account_indexes: config.account_indexes.clone(), accounts_db_caching_enabled: config.accounts_db_caching_enabled, diff --git a/validator/src/main.rs b/validator/src/main.rs index 01023ff44a..ded5ebeab4 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -1430,6 +1430,11 @@ pub fn main() { .default_value("100") .help("Number of slots between generating accounts hash."), ) + .arg( + Arg::with_name("no_os_network_stats_reporting") + .long("no-os-network-stats-reporting") + .help("Disable reporting of OS network statistics.") + ) .arg( Arg::with_name("snapshot_version") .long("snapshot-version") @@ -2503,6 +2508,7 @@ pub fn main() { ), }, no_poh_speed_test: matches.is_present("no_poh_speed_test"), + no_os_network_stats_reporting: matches.is_present("no_os_network_stats_reporting"), poh_pinned_cpu_core: value_of(&matches, "poh_pinned_cpu_core") .unwrap_or(poh_service::DEFAULT_PINNED_CPU_CORE), poh_hashes_per_batch: value_of(&matches, "poh_hashes_per_batch")