Skip to main content

ProactorBuilder

Struct ProactorBuilder 

Source
pub struct ProactorBuilder { /* private fields */ }
Expand description

Builder for Proactor.

Implementations§

Source§

impl ProactorBuilder

Source

pub fn new() -> Self

Create the builder with default config.

Source

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.

Source

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.

Source

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:

  • Asyncify needs thread pool.
  • Operations except Recv*, Send*, Connect, Accept may need thread pool.
Source

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.

Source

pub fn reuse_thread_pool(&mut self, pool: AsyncifyPool) -> &mut Self

Set to reuse an existing AsyncifyPool in this proactor.

Source

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.

Source

pub fn create_or_get_thread_pool(&self) -> AsyncifyPool

Create or reuse the thread pool from the config.

Source

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-uring feature is enabled
  • idle must be >= 1ms, otherwise sqpoll idle will be set to 0 ms
  • idle will be rounded down
Source

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-uring feature is enabled
Source

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-uring feature is enabled
Source

pub fn register_eventfd(&mut self, fd: RawFd) -> &mut Self

Register an eventfd to io-uring.

§Notes
  • Only effective when the io-uring feature is enabled
Source

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 polling driver if it is enabled, or
  • Return an Unsupported error when building the proactor otherwise.
§Notes
  • Only effective when the io-uring feature is enabled
  • OpCodeFlag is a bitflag struct, you can combine multiple opcodes with bitwise OR or use OpCodeFlag::all to require all opcodes to be supported.
Source

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.

Source

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.

Source

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.

Source

pub fn buffer_pool_buffer_len(&mut self, size: usize) -> &mut Self

Length of each buffer pool’s buffer.

Default to be 8192.

Source

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.

Source

pub fn build(&self) -> Result<Proactor>

Build the Proactor.

Trait Implementations§

Source§

impl Clone for ProactorBuilder

Source§

fn clone(&self) -> ProactorBuilder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ProactorBuilder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ProactorBuilder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Send for ProactorBuilder

Source§

impl Sync for ProactorBuilder

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more