From b7aafa98a1ab04094ecce17e47fa7908d845ce15 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Fri, 11 Nov 2022 19:06:58 +0530 Subject: [PATCH 1/6] io: allow configuring events capacity --- tokio/src/runtime/builder.rs | 8 ++++++++ tokio/src/runtime/driver.rs | 9 +++++---- tokio/src/runtime/io/mod.rs | 4 ++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/tokio/src/runtime/builder.rs b/tokio/src/runtime/builder.rs index 4a85d0ddfb2..5112d3610a6 100644 --- a/tokio/src/runtime/builder.rs +++ b/tokio/src/runtime/builder.rs @@ -44,6 +44,7 @@ pub struct Builder { /// Whether or not to enable the I/O driver enable_io: bool, + nevents: usize, /// Whether or not to enable the time driver enable_time: bool, @@ -228,6 +229,7 @@ impl Builder { // I/O defaults to "off" enable_io: false, + nevents: 1024, // Time defaults to "off" enable_time: false, @@ -647,6 +649,7 @@ impl Builder { enable_io: self.enable_io, enable_time: self.enable_time, start_paused: self.start_paused, + nevents: self.nevents, } } @@ -938,6 +941,11 @@ cfg_io_driver! { self.enable_io = true; self } + + pub fn set_events_capacity(&mut self, capacity: usize) -> &mut Self { + self.nevents = capacity; + self + } } } diff --git a/tokio/src/runtime/driver.rs b/tokio/src/runtime/driver.rs index 8f9c5122b85..4fb6b8783f4 100644 --- a/tokio/src/runtime/driver.rs +++ b/tokio/src/runtime/driver.rs @@ -36,11 +36,12 @@ pub(crate) struct Cfg { pub(crate) enable_time: bool, pub(crate) enable_pause_time: bool, pub(crate) start_paused: bool, + pub(crate) nevents: usize, } impl Driver { pub(crate) fn new(cfg: Cfg) -> io::Result<(Self, Handle)> { - let (io_stack, io_handle, signal_handle) = create_io_stack(cfg.enable_io)?; + let (io_stack, io_handle, signal_handle) = create_io_stack(cfg.enable_io, cfg.nevents)?; let clock = create_clock(cfg.enable_pause_time, cfg.start_paused); @@ -135,12 +136,12 @@ cfg_io_driver! { Disabled(UnparkThread), } - fn create_io_stack(enabled: bool) -> io::Result<(IoStack, IoHandle, SignalHandle)> { + fn create_io_stack(enabled: bool, nevents: usize) -> io::Result<(IoStack, IoHandle, SignalHandle)> { #[cfg(loom)] assert!(!enabled); let ret = if enabled { - let (io_driver, io_handle) = crate::runtime::io::Driver::new()?; + let (io_driver, io_handle) = crate::runtime::io::Driver::new(nevents)?; let (signal_driver, signal_handle) = create_signal_driver(io_driver, &io_handle)?; let process_driver = create_process_driver(signal_driver); @@ -201,7 +202,7 @@ cfg_not_io_driver! { #[derive(Debug)] pub(crate) struct IoStack(ParkThread); - fn create_io_stack(_enabled: bool) -> io::Result<(IoStack, IoHandle, SignalHandle)> { + fn create_io_stack(_enabled: bool, _nevents: usize) -> io::Result<(IoStack, IoHandle, SignalHandle)> { let park_thread = ParkThread::new(); let unpark_thread = park_thread.unpark(); Ok((IoStack(park_thread), unpark_thread, Default::default())) diff --git a/tokio/src/runtime/io/mod.rs b/tokio/src/runtime/io/mod.rs index 02039f2a49c..1ddf920f3bb 100644 --- a/tokio/src/runtime/io/mod.rs +++ b/tokio/src/runtime/io/mod.rs @@ -104,7 +104,7 @@ fn _assert_kinds() { impl Driver { /// Creates a new event loop, returning any error that happened during the /// creation. - pub(crate) fn new() -> io::Result<(Driver, Handle)> { + pub(crate) fn new(nevents: usize) -> io::Result<(Driver, Handle)> { let poll = mio::Poll::new()?; #[cfg(not(tokio_wasi))] let waker = mio::Waker::new(poll.registry(), TOKEN_WAKEUP)?; @@ -116,7 +116,7 @@ impl Driver { let driver = Driver { tick: 0, signal_ready: false, - events: mio::Events::with_capacity(1024), + events: mio::Events::with_capacity(nevents), poll, resources: slab, }; From b87fb53e6e80ffe4bcced762c2cb54f5a2e0d568 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Fri, 11 Nov 2022 19:41:13 +0530 Subject: [PATCH 2/6] add docs --- tokio/src/process/unix/orphan.rs | 2 +- tokio/src/runtime/builder.rs | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/tokio/src/process/unix/orphan.rs b/tokio/src/process/unix/orphan.rs index 66572ef7c41..340719603be 100644 --- a/tokio/src/process/unix/orphan.rs +++ b/tokio/src/process/unix/orphan.rs @@ -294,7 +294,7 @@ pub(crate) mod test { #[cfg_attr(miri, ignore)] // Miri does not support epoll. #[test] fn does_not_register_signal_if_queue_empty() { - let (io_driver, io_handle) = IoDriver::new().unwrap(); + let (io_driver, io_handle) = IoDriver::new(1024).unwrap(); let signal_driver = SignalDriver::new(io_driver, &io_handle).unwrap(); let handle = signal_driver.handle(); diff --git a/tokio/src/runtime/builder.rs b/tokio/src/runtime/builder.rs index 5112d3610a6..98db865511d 100644 --- a/tokio/src/runtime/builder.rs +++ b/tokio/src/runtime/builder.rs @@ -942,7 +942,21 @@ cfg_io_driver! { self } - pub fn set_events_capacity(&mut self, capacity: usize) -> &mut Self { + /// Enables the I/O driver and configures the capacity of events to be + /// processed per tick. + /// + /// # Examples + /// + /// ``` + /// use tokio::runtime; + /// + /// let rt = runtime::Builder::new_current_thread() + /// .enable_io() + /// .with_events_capacity(1024) + /// .build() + /// .unwrap(); + /// ``` + pub fn with_events_capacity(&mut self, capacity: usize) -> &mut Self { self.nevents = capacity; self } From 22f243f86d06a0766dc63e1fb21f6dac2757bb70 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Fri, 11 Nov 2022 23:23:24 +0530 Subject: [PATCH 3/6] remove with prefix --- tokio/src/runtime/builder.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tokio/src/runtime/builder.rs b/tokio/src/runtime/builder.rs index 98db865511d..e59126866be 100644 --- a/tokio/src/runtime/builder.rs +++ b/tokio/src/runtime/builder.rs @@ -952,11 +952,11 @@ cfg_io_driver! { /// /// let rt = runtime::Builder::new_current_thread() /// .enable_io() - /// .with_events_capacity(1024) + /// .events_capacity(1024) /// .build() /// .unwrap(); /// ``` - pub fn with_events_capacity(&mut self, capacity: usize) -> &mut Self { + pub fn events_capacity(&mut self, capacity: usize) -> &mut Self { self.nevents = capacity; self } From 2363e098d084e08aabd426fa731e7792ef43b64f Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Fri, 11 Nov 2022 23:24:42 +0530 Subject: [PATCH 4/6] Rename to `max_io_events_per_tick` --- tokio/src/runtime/builder.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tokio/src/runtime/builder.rs b/tokio/src/runtime/builder.rs index e59126866be..cc933b2e1ca 100644 --- a/tokio/src/runtime/builder.rs +++ b/tokio/src/runtime/builder.rs @@ -952,11 +952,11 @@ cfg_io_driver! { /// /// let rt = runtime::Builder::new_current_thread() /// .enable_io() - /// .events_capacity(1024) + /// .max_io_events_per_tick(1024) /// .build() /// .unwrap(); /// ``` - pub fn events_capacity(&mut self, capacity: usize) -> &mut Self { + pub fn max_io_events_per_tick(&mut self, capacity: usize) -> &mut Self { self.nevents = capacity; self } From 3761cdc421c10c0d74d4ab575017715a356031f3 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Sat, 12 Nov 2022 09:18:22 +0530 Subject: [PATCH 5/6] x --- tokio/src/runtime/builder.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tokio/src/runtime/builder.rs b/tokio/src/runtime/builder.rs index cc933b2e1ca..9365be51988 100644 --- a/tokio/src/runtime/builder.rs +++ b/tokio/src/runtime/builder.rs @@ -942,7 +942,7 @@ cfg_io_driver! { self } - /// Enables the I/O driver and configures the capacity of events to be + /// Enables the I/O driver and configures the capacity of events to be /// processed per tick. /// /// # Examples From 8bfef778c691da5a6390f9a903274c68f0b3241d Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Tue, 22 Nov 2022 23:19:21 +0530 Subject: [PATCH 6/6] review --- tokio/src/runtime/builder.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tokio/src/runtime/builder.rs b/tokio/src/runtime/builder.rs index 9365be51988..735389eb5e2 100644 --- a/tokio/src/runtime/builder.rs +++ b/tokio/src/runtime/builder.rs @@ -942,7 +942,7 @@ cfg_io_driver! { self } - /// Enables the I/O driver and configures the capacity of events to be + /// Enables the I/O driver and configures the max number of events to be /// processed per tick. /// /// # Examples