From a385aa04b2fa289f2686132c8f79370e1ad398a1 Mon Sep 17 00:00:00 2001 From: Matthias Wright Date: Fri, 20 Mar 2026 03:01:21 +0800 Subject: [PATCH 1/2] chore: default number of threads to number of cores --- node/src/args.rs | 10 +++++++--- node/src/bin/protocol_params.rs | 2 +- node/src/bin/stake_and_checkpoint.rs | 2 +- node/src/bin/stake_and_join_with_outdated_ckpt.rs | 2 +- node/src/bin/sync_from_genesis.rs | 2 +- node/src/bin/testnet.rs | 2 +- node/src/bin/verify_consensus_state_proof.rs | 2 +- node/src/bin/withdraw_and_exit.rs | 2 +- 8 files changed, 14 insertions(+), 10 deletions(-) diff --git a/node/src/args.rs b/node/src/args.rs index 31207e5d..355176a2 100644 --- a/node/src/args.rs +++ b/node/src/args.rs @@ -107,8 +107,9 @@ pub struct RunFlags { #[arg(long, default_value_t = 3030)] pub rpc_port: u16, - #[arg(long, default_value_t = 4)] - pub worker_threads: usize, + /// Number of tokio worker threads (defaults to number of logical CPUs) + #[arg(long)] + pub worker_threads: Option, /// level for logs (error,warn,info,debug,trace) #[arg( @@ -205,9 +206,12 @@ impl Command { let signer = key_store.node_key.clone(); // Initialize runtime + let worker_threads = flags + .worker_threads + .unwrap_or_else(|| std::thread::available_parallelism().map_or(4, |n| n.get())); let cfg = tokio::Config::default() .with_tcp_nodelay(Some(true)) - .with_worker_threads(flags.worker_threads) + .with_worker_threads(worker_threads) .with_storage_directory(store_path) .with_catch_panics(false); let executor = tokio::Runner::new(cfg); diff --git a/node/src/bin/protocol_params.rs b/node/src/bin/protocol_params.rs index e3a52d84..10303f60 100644 --- a/node/src/bin/protocol_params.rs +++ b/node/src/bin/protocol_params.rs @@ -400,7 +400,7 @@ fn get_node_flags(node: usize, genesis_path: &str) -> RunFlags { prom_port: (28600 + (node * 10)) as u16, prom_ip: "0.0.0.0".into(), rpc_port: (3030 + (node * 10)) as u16, - worker_threads: 2, + worker_threads: Some(2), log_level: "debug".into(), db_prefix: format!("{node}"), genesis_path: genesis_path.into(), diff --git a/node/src/bin/stake_and_checkpoint.rs b/node/src/bin/stake_and_checkpoint.rs index 371289fd..74d8bebd 100644 --- a/node/src/bin/stake_and_checkpoint.rs +++ b/node/src/bin/stake_and_checkpoint.rs @@ -687,7 +687,7 @@ fn get_node_flags(node: usize, genesis_path: &str) -> RunFlags { prom_port: (28600 + (node * 10)) as u16, prom_ip: "0.0.0.0".into(), rpc_port: (3030 + (node * 10)) as u16, - worker_threads: 2, + worker_threads: Some(2), log_level: "debug".into(), db_prefix: format!("{node}"), genesis_path: genesis_path.into(), diff --git a/node/src/bin/stake_and_join_with_outdated_ckpt.rs b/node/src/bin/stake_and_join_with_outdated_ckpt.rs index 42b6c63a..f6cbea66 100644 --- a/node/src/bin/stake_and_join_with_outdated_ckpt.rs +++ b/node/src/bin/stake_and_join_with_outdated_ckpt.rs @@ -805,7 +805,7 @@ fn get_node_flags(node: usize, genesis_path: &str) -> RunFlags { prom_port: (28600 + (node * 10)) as u16, prom_ip: "0.0.0.0".into(), rpc_port: (3030 + (node * 10)) as u16, - worker_threads: 2, + worker_threads: Some(2), log_level: "debug".into(), db_prefix: format!("{node}"), genesis_path: genesis_path.into(), diff --git a/node/src/bin/sync_from_genesis.rs b/node/src/bin/sync_from_genesis.rs index 676e9fe1..40149cc4 100644 --- a/node/src/bin/sync_from_genesis.rs +++ b/node/src/bin/sync_from_genesis.rs @@ -670,7 +670,7 @@ fn get_node_flags(node: usize, genesis_path: &str) -> RunFlags { prom_port: (28600 + (node * 10)) as u16, prom_ip: "0.0.0.0".into(), rpc_port: (3030 + (node * 10)) as u16, - worker_threads: 2, + worker_threads: Some(2), log_level: "debug".into(), db_prefix: format!("{node}"), genesis_path: genesis_path.into(), diff --git a/node/src/bin/testnet.rs b/node/src/bin/testnet.rs index 10f255b8..367bd538 100644 --- a/node/src/bin/testnet.rs +++ b/node/src/bin/testnet.rs @@ -187,7 +187,7 @@ fn get_node_flags(node: usize) -> RunFlags { prom_port: (28600 + (node * 10)) as u16, prom_ip: "0.0.0.0".into(), rpc_port: (3030 + (node * 10)) as u16, - worker_threads: 2, + worker_threads: Some(2), log_level: "debug".into(), db_prefix: format!("{node}"), genesis_path: "./example_genesis.toml".into(), diff --git a/node/src/bin/verify_consensus_state_proof.rs b/node/src/bin/verify_consensus_state_proof.rs index 7e5945b3..3194fc85 100644 --- a/node/src/bin/verify_consensus_state_proof.rs +++ b/node/src/bin/verify_consensus_state_proof.rs @@ -547,7 +547,7 @@ fn get_node_flags(node: usize, genesis_path: &str) -> RunFlags { prom_port: (28600 + (node * 10)) as u16, prom_ip: "0.0.0.0".into(), rpc_port: (3030 + (node * 10)) as u16, - worker_threads: 2, + worker_threads: Some(2), log_level: "debug".into(), db_prefix: format!("{node}"), genesis_path: genesis_path.into(), diff --git a/node/src/bin/withdraw_and_exit.rs b/node/src/bin/withdraw_and_exit.rs index deac55c2..d61c1f2f 100644 --- a/node/src/bin/withdraw_and_exit.rs +++ b/node/src/bin/withdraw_and_exit.rs @@ -395,7 +395,7 @@ fn get_node_flags(node: usize, genesis_path: &str) -> RunFlags { prom_port: (28600 + (node * 10)) as u16, prom_ip: "0.0.0.0".into(), rpc_port: (3030 + (node * 10)) as u16, - worker_threads: 2, + worker_threads: Some(2), log_level: "debug".into(), db_prefix: format!("{node}"), genesis_path: genesis_path.into(), From f2ce6506f3e0f800fd39f418fc9ea628e274af13 Mon Sep 17 00:00:00 2001 From: Matthias Wright Date: Fri, 20 Mar 2026 22:22:44 +0800 Subject: [PATCH 2/2] fix: start p2p network after engine --- node/src/args.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/node/src/args.rs b/node/src/args.rs index 355176a2..bbdee54c 100644 --- a/node/src/args.rs +++ b/node/src/args.rs @@ -406,8 +406,6 @@ impl Command { let backfiller = network.register(BACKFILLER_CHANNEL, config.backfill_quota, MESSAGE_BACKLOG); - // Create network - let p2p = network.start(); // create engine let engine: Engine<_, _, _, _> = Engine::new(context.with_label("engine"), config).await; @@ -417,6 +415,9 @@ impl Command { // Start engine let engine = engine.start(pending, recovered, resolver, broadcaster, backfiller); + // Create network + let p2p = network.start(); + // Start RPC server let key_store_path = flags.key_store_path.clone(); let rpc_port = flags.rpc_port; @@ -589,8 +590,6 @@ pub fn run_node_local( let backfiller = network.register(BACKFILLER_CHANNEL, config.backfill_quota, MESSAGE_BACKLOG); - // Create network - let p2p = network.start(); // create engine let engine: Engine<_, _, _, _> = Engine::new(context.with_label("engine"), config).await; @@ -598,6 +597,9 @@ pub fn run_node_local( // Start engine let engine = engine.start(pending, recovered, resolver, broadcaster, backfiller); + // Create network + let p2p = network.start(); + // Start prometheus endpoint #[cfg(feature = "prom")] {