pub enum IoMode {
UringDirect,
Uring,
UringMultiAsync,
UringShared,
UringBlocking,
StdBlocking,
TokioIO,
StdSpawnBlocking,
}Expand description
Mode in which Disk IO is done (direct IO or page cache)
Variants§
UringDirect
Uses io_uring and bypass the page cache (uses direct IO), only available on Linux
Uring
Uses io_uring and uses OS’s page cache, only available on Linux
UringMultiAsync
Uses multiple async io_uring instances leased per future, only available on Linux
Uses io_uring with a single shared ring on the runtime thread, only available on Linux
UringBlocking
Uses io_uring on the calling thread and blocks until completion.
StdBlocking
Uses rust’s std::fs::File, this is blocking IO.
On Linux, this is essentially pread/pwrite
This is the default on non-Linux platforms.
TokioIO
Uses tokio’s async IO, this is non-blocking IO, but quite slow: https://github.com/tokio-rs/tokio/issues/3664
StdSpawnBlocking
Use rust’s std::fs::File, but will try to spawn_blocking, just like object_store does:
https://github.com/apache/arrow-rs-object-store/blob/28b2fc563feb44bb3d15718cf58036772334a704/src/datafusion-local.rs#L440-L448
Trait Implementations§
impl Copy for IoMode
impl StructuralPartialEq for IoMode
Auto Trait Implementations§
impl Freeze for IoMode
impl RefUnwindSafe for IoMode
impl Send for IoMode
impl Sync for IoMode
impl Unpin for IoMode
impl UnsafeUnpin for IoMode
impl UnwindSafe for IoMode
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,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request