Struct ProactorBuilder
pub struct ProactorBuilder { /* private fields */ }Expand description
Builder for Proactor.
Implementations§
§impl ProactorBuilder
impl ProactorBuilder
pub fn new() -> ProactorBuilder
pub fn new() -> ProactorBuilder
Create the builder with default config.
pub fn capacity(&mut self, capacity: u32) -> &mut ProactorBuilder
pub fn capacity(&mut self, capacity: u32) -> &mut ProactorBuilder
Set the capacity of the inner event queue or submission queue, if exists. The default value is 1024.
pub fn cqsize(&mut self, cqsize: u32) -> &mut ProactorBuilder
pub fn cqsize(&mut self, cqsize: u32) -> &mut ProactorBuilder
Set the completion queue size of io-uring driver. The value should be
greater than capacity.
pub fn thread_pool_limit(&mut self, value: usize) -> &mut ProactorBuilder
pub fn thread_pool_limit(&mut self, value: usize) -> &mut ProactorBuilder
Set the thread number limit of the inner thread pool, if exists. The default value is 256.
It will be ignored if reuse_thread_pool is set.
Warning: some operations don’t work if the limit is set to zero:
Asyncifyneeds thread pool.- Operations except
Recv*,Send*,Connect,Acceptmay need thread pool.
pub fn thread_pool_recv_timeout(
&mut self,
timeout: Duration,
) -> &mut ProactorBuilder
pub fn thread_pool_recv_timeout( &mut self, timeout: Duration, ) -> &mut ProactorBuilder
Set the waiting timeout of the inner thread, if exists. The default is 60 seconds.
It will be ignored if reuse_thread_pool is set.
pub fn reuse_thread_pool(&mut self, pool: AsyncifyPool) -> &mut ProactorBuilder
pub fn reuse_thread_pool(&mut self, pool: AsyncifyPool) -> &mut ProactorBuilder
Set to reuse an existing AsyncifyPool in this proactor.
pub fn force_reuse_thread_pool(&mut self) -> &mut ProactorBuilder
pub fn force_reuse_thread_pool(&mut self) -> &mut ProactorBuilder
Force reuse the thread pool for each proactor created by this builder,
even reuse_thread_pool is not set.
pub fn create_or_get_thread_pool(&self) -> AsyncifyPool
pub fn create_or_get_thread_pool(&self) -> AsyncifyPool
Create or reuse the thread pool from the config.
pub fn sqpoll_idle(&mut self, idle: Duration) -> &mut ProactorBuilder
pub fn sqpoll_idle(&mut self, idle: Duration) -> &mut ProactorBuilder
Set io-uring sqpoll idle duration,
This will also enable io-uring’s sqpoll feature.
§Notes
- Only effective when the
io-uringfeature is enabled idlemust be >= 1ms, otherwise sqpoll idle will be set to 0 msidlewill be rounded down
pub fn sqpoll_cpu(&mut self, cpu: u32) -> &mut ProactorBuilder
pub fn sqpoll_cpu(&mut self, cpu: u32) -> &mut ProactorBuilder
Set CPU affinity for the io-uring SQPOLL thread when SQPOLL is
enabled.
This is only applied when SQPOLL is enabled with
sqpoll_idle.
§Notes
- Only effective when the
io-uringfeature is enabled cpumust be less than the number of cpus in the system, otherwise it will return an error when building the proactor.
pub fn single_issuer(&mut self, enable: bool) -> &mut ProactorBuilder
pub fn single_issuer(&mut self, enable: bool) -> &mut ProactorBuilder
Set the io-uring single issuer hint.
§Notes
- Available since Linux Kernel 6.0.
- Only effective when the
io-uringfeature is enabled
pub fn coop_taskrun(&mut self, enable: bool) -> &mut ProactorBuilder
pub fn coop_taskrun(&mut self, enable: bool) -> &mut ProactorBuilder
Optimize performance for most cases, especially compio is a single thread runtime.
However, it can’t run with sqpoll feature.
§Notes
- Available since Linux Kernel 5.19.
- Only effective when the
io-uringfeature is enabled
pub fn taskrun_flag(&mut self, enable: bool) -> &mut ProactorBuilder
pub fn taskrun_flag(&mut self, enable: bool) -> &mut ProactorBuilder
Allows io-uring driver to know if any cqe’s are available when try to push an sqe to the submission queue.
This should be enabled with coop_taskrun
§Notes
- Available since Linux Kernel 5.19.
- Only effective when the
io-uringfeature is enabled
pub fn defer_taskrun(&mut self, enable: bool) -> &mut ProactorBuilder
pub fn defer_taskrun(&mut self, enable: bool) -> &mut ProactorBuilder
Defer io-uring task work until the driver enters the kernel to wait for completions.
This is only applied when single_issuer is
enabled. The kernel requires IORING_SETUP_SINGLE_ISSUER for
IORING_SETUP_DEFER_TASKRUN.
§Notes
- Available since Linux Kernel 6.1.
- Only effective when the
io-uringfeature is enabled
pub fn register_eventfd(&mut self, fd: i32) -> &mut ProactorBuilder
pub fn register_eventfd(&mut self, fd: i32) -> &mut ProactorBuilder
pub fn detect_opcode_support(
&mut self,
flags: OpCodeFlag,
) -> &mut ProactorBuilder
pub fn detect_opcode_support( &mut self, flags: OpCodeFlag, ) -> &mut ProactorBuilder
Set which io-uring OpCode must be supported by the driver.
Support for io-uring opcodes varies by kernel version. Setting this will force the driver to check for support of the specified opcodes, and when any of them are not supported:
- Fallback to
pollingdriver if it is enabled, or - Return an
Unsupportederror when building the proactor otherwise.
§Notes
- Only effective when the
io-uringfeature is enabled OpCodeFlagis a bitflag struct, you can combine multiple opcodes with bitwise OR or useOpCodeFlag::allto require all opcodes to be supported.
pub fn driver_type(&mut self, t: DriverType) -> &mut ProactorBuilder
pub fn driver_type(&mut self, t: DriverType) -> &mut ProactorBuilder
Force a driver type to use.
It is ignored if the fusion driver is disabled.
pub fn buffer_pool_size(&mut self, size: NonZero<u16>) -> &mut ProactorBuilder
pub fn buffer_pool_size(&mut self, size: NonZero<u16>) -> &mut ProactorBuilder
Number of buffers in the buffer pool.
size will be rounded up if it’s not power of 2.
Default to be 8.
pub fn buffer_pool_flag(&mut self, flag: u16) -> &mut ProactorBuilder
pub fn buffer_pool_flag(&mut self, flag: u16) -> &mut ProactorBuilder
Flag to be used to initialize buffer pool.
This is only supported on io-uring driver.
Default to be 0.
pub fn buffer_pool_buffer_len(&mut self, size: usize) -> &mut ProactorBuilder
pub fn buffer_pool_buffer_len(&mut self, size: usize) -> &mut ProactorBuilder
Length of each buffer pool’s buffer.
Default to be 8192.
pub fn buffer_pool_allocator<A>(&mut self) -> &mut ProactorBuilderwhere
A: BufferAllocator,
pub fn buffer_pool_allocator<A>(&mut self) -> &mut ProactorBuilderwhere
A: BufferAllocator,
Set the allocator for buffer pool.
This is different from the std’s unstable Allocator trait: it’s purely
static and doesn’t take an instance at all. This means implementation
should be global (e.g., Global, malloc or mmap).
Default to BoxAllocator.
§Note
Default allocator performs very poor when using managed i/o on Zen 3, possibly due to a bug related to FSRM. If you observe such a problem, try swap the allocator to a mmap-based one may solve it.
Trait Implementations§
§impl Clone for ProactorBuilder
impl Clone for ProactorBuilder
§fn clone(&self) -> ProactorBuilder
fn clone(&self) -> ProactorBuilder
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for ProactorBuilder
impl Debug for ProactorBuilder
§impl Default for ProactorBuilder
impl Default for ProactorBuilder
§fn default() -> ProactorBuilder
fn default() -> ProactorBuilder
impl Send for ProactorBuilder
impl Sync for ProactorBuilder
Auto Trait Implementations§
impl Freeze for ProactorBuilder
impl RefUnwindSafe for ProactorBuilder
impl Unpin for ProactorBuilder
impl UnsafeUnpin for ProactorBuilder
impl UnwindSafe for ProactorBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more