From aefc4b4e69e17bac99b8608a5c02fbcfd66c8f78 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 19 Dec 2024 09:42:28 +0000 Subject: [PATCH] add more program options for tokio Signed-off-by: Jason Volk --- src/main/clap.rs | 19 ++++++++++++++++++- src/main/runtime.rs | 11 +++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/main/clap.rs b/src/main/clap.rs index c447deae..ad5c815a 100644 --- a/src/main/clap.rs +++ b/src/main/clap.rs @@ -36,9 +36,26 @@ pub(crate) struct Args { pub(crate) test: Vec, /// Override the tokio worker_thread count. - #[arg(long, hide(true), env = "TOKIO_WORKER_THREADS", default_value = available_parallelism().to_string())] + #[arg( + long, + hide(true), + env = "TOKIO_WORKER_THREADS", + default_value = available_parallelism().to_string(), + )] pub(crate) worker_threads: usize, + /// Override the tokio global_queue_interval. + #[arg(long, hide(true), env = "TOKIO_GLOBAL_QUEUE_INTERVAL", default_value = "192")] + pub(crate) global_event_interval: u32, + + /// Override the tokio event_interval. + #[arg(long, hide(true), env = "TOKIO_EVENT_INTERVAL", default_value = "512")] + pub(crate) kernel_event_interval: u32, + + /// Override the tokio max_io_events_per_tick. + #[arg(long, hide(true), env = "TOKIO_MAX_IO_EVENTS_PER_TICK", default_value = "512")] + pub(crate) kernel_events_per_tick: usize, + /// Set the histogram bucket size, in microseconds (tokio_unstable). Default /// is 25 microseconds. If the values of the histogram don't approach zero /// with the exception of the last bucket, try increasing this value to e.g. diff --git a/src/main/runtime.rs b/src/main/runtime.rs index ff8ab322..e98e73d6 100644 --- a/src/main/runtime.rs +++ b/src/main/runtime.rs @@ -8,9 +8,7 @@ use crate::clap::Args; const WORKER_NAME: &str = "conduwuit:worker"; const WORKER_MIN: usize = 2; const WORKER_KEEPALIVE: u64 = 36; -const GLOBAL_QUEUE_INTERVAL: u32 = 192; -const KERNEL_QUEUE_INTERVAL: u32 = 256; -const KERNEL_EVENTS_PER_TICK: usize = 512; +const MAX_BLOCKING_THREADS: usize = 1024; static WORKER_AFFINITY: OnceLock = OnceLock::new(); @@ -25,10 +23,11 @@ pub(super) fn new(args: &Args) -> Result { .enable_time() .thread_name(WORKER_NAME) .worker_threads(args.worker_threads.max(WORKER_MIN)) + .max_blocking_threads(MAX_BLOCKING_THREADS) .thread_keep_alive(Duration::from_secs(WORKER_KEEPALIVE)) - .max_io_events_per_tick(KERNEL_EVENTS_PER_TICK) - .event_interval(KERNEL_QUEUE_INTERVAL) - .global_queue_interval(GLOBAL_QUEUE_INTERVAL) + .global_queue_interval(args.global_event_interval) + .event_interval(args.kernel_event_interval) + .max_io_events_per_tick(args.kernel_events_per_tick) .on_thread_start(thread_start) .on_thread_stop(thread_stop) .on_thread_unpark(thread_unpark)