pub struct ProactorBuilder { /* private fields */ }Expand description
Builder for Proactor.
Implementations§
Source§impl ProactorBuilder
impl ProactorBuilder
Sourcepub fn capacity(&mut self, capacity: u32) -> &mut Self
pub fn capacity(&mut self, capacity: u32) -> &mut Self
Set the capacity of the inner event queue or submission queue, if exists. The default value is 1024.
Sourcepub fn cqsize(&mut self, cqsize: u32) -> &mut Self
pub fn cqsize(&mut self, cqsize: u32) -> &mut Self
Set the completion queue size of io-uring driver. The value should be
greater than capacity.
Sourcepub fn thread_pool_limit(&mut self, value: usize) -> &mut Self
pub fn thread_pool_limit(&mut self, value: usize) -> &mut Self
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.
Sourcepub fn thread_pool_recv_timeout(&mut self, timeout: Duration) -> &mut Self
pub fn thread_pool_recv_timeout(&mut self, timeout: Duration) -> &mut Self
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.
Sourcepub fn reuse_thread_pool(&mut self, pool: AsyncifyPool) -> &mut Self
pub fn reuse_thread_pool(&mut self, pool: AsyncifyPool) -> &mut Self
Set to reuse an existing AsyncifyPool in this proactor.
Sourcepub fn force_reuse_thread_pool(&mut self) -> &mut Self
pub fn force_reuse_thread_pool(&mut self) -> &mut Self
Force reuse the thread pool for each proactor created by this builder,
even reuse_thread_pool is not set.
Sourcepub 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.
Sourcepub fn sqpoll_idle(&mut self, idle: Duration) -> &mut Self
pub fn sqpoll_idle(&mut self, idle: Duration) -> &mut Self
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
Sourcepub fn coop_taskrun(&mut self, enable: bool) -> &mut Self
pub fn coop_taskrun(&mut self, enable: bool) -> &mut Self
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
Sourcepub fn taskrun_flag(&mut self, enable: bool) -> &mut Self
pub fn taskrun_flag(&mut self, enable: bool) -> &mut Self
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
Sourcepub fn register_eventfd(&mut self, fd: RawFd) -> &mut Self
pub fn register_eventfd(&mut self, fd: RawFd) -> &mut Self
Sourcepub fn detect_opcode_support(&mut self, flags: OpCodeFlag) -> &mut Self
pub fn detect_opcode_support(&mut self, flags: OpCodeFlag) -> &mut Self
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.
Sourcepub fn driver_type(&mut self, t: DriverType) -> &mut Self
pub fn driver_type(&mut self, t: DriverType) -> &mut Self
Force a driver type to use.
It is ignored if the fusion driver is disabled.
Sourcepub fn buffer_pool_size(&mut self, size: NonZero<u16>) -> &mut Self
pub fn buffer_pool_size(&mut self, size: NonZero<u16>) -> &mut Self
Number of buffers in the buffer pool.
size will be rounded up if it’s not power of 2.
Default to be 8.
Sourcepub fn buffer_pool_flag(&mut self, flag: u16) -> &mut Self
pub fn buffer_pool_flag(&mut self, flag: u16) -> &mut Self
Flag to be used to initialize buffer pool.
This is only supported on io-uring driver.
Default to be 0.
Sourcepub fn buffer_pool_buffer_len(&mut self, size: usize) -> &mut Self
pub fn buffer_pool_buffer_len(&mut self, size: usize) -> &mut Self
Length of each buffer pool’s buffer.
Default to be 8192.
Sourcepub fn buffer_pool_allocator<A: BufferAllocator>(&mut self) -> &mut Self
pub fn buffer_pool_allocator<A: BufferAllocator>(&mut self) -> &mut Self
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§
Source§impl Clone for ProactorBuilder
impl Clone for ProactorBuilder
Source§fn clone(&self) -> ProactorBuilder
fn clone(&self) -> ProactorBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more