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() -> ProactorBuilder

Create the builder with default config.

Source

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.

Source

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.

Source

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:

  • 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 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.

Source

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

Set to reuse an existing AsyncifyPool in this proactor.

Source

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.

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 ProactorBuilder

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 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-uring feature is enabled
  • cpu must be less than the number of cpus in the system, otherwise it will return an error when building the proactor.
Source

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

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

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

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

pub fn register_eventfd(&mut self, fd: i32) -> &mut ProactorBuilder

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 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 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 ProactorBuilder

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 ProactorBuilder

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 ProactorBuilder

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 ProactorBuilder

Length of each buffer pool’s buffer.

Default to be 8192.

Source

pub fn buffer_pool_allocator<A>(&mut self) -> &mut ProactorBuilder
where 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.

Source

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

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 (const: unstable) · 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<(), Error>

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

impl Default for ProactorBuilder

Source§

fn default() -> ProactorBuilder

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.

§

impl<T> Instrument for T

§

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

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

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> Ungil for T
where T: Send,