RdmaBackend

Trait RdmaBackend 

Source
pub trait RdmaBackend: Send + Debug {
    type TransportInfo;

    // Required methods
    fn submit<'life0, 'life1, 'async_trait>(
        &'life0 mut self,
        cx: &'life1 (impl 'async_trait + Actor + Send + Sync),
        ops: Vec<RdmaOp>,
        timeout: Duration,
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn transport_level(&self) -> RdmaTransportLevel;
    fn transport_info(&self) -> Option<Self::TransportInfo>;
}
Expand description

Backend for executing RDMA operations over a specific transport.

Each backend manages the transport-specific details of connection management and data movement. The backend decides internally how to batch and schedule submitted operations.

Current implementations:

  • [ibverbs::IbvManagerActor] – ibverbs NIC transport
  • [tcp::TcpManagerActor] – TCP fallback transport

Required Associated Types§

Source

type TransportInfo

Backend-specific transport details (e.g., a cffi struct with raw ibverbs handles for GPU-initiated RDMA).

Required Methods§

Source

fn submit<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 (impl 'async_trait + Actor + Send + Sync), ops: Vec<RdmaOp>, timeout: Duration, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Submit a batch of RDMA operations.

The backend decides internally how to batch, schedule, and execute the operations (e.g., managing QPs and connections as needed).

Source

fn transport_level(&self) -> RdmaTransportLevel

The transport level provided by this backend.

Source

fn transport_info(&self) -> Option<Self::TransportInfo>

Low-level backend-specific transport details for direct control over RDMA operations (e.g., from a GPU kernel).

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl RdmaBackend for ActorHandle<IbvManagerActor>

Source§

fn submit<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 (impl 'async_trait + Actor + Send + Sync), ops: Vec<RdmaOp>, timeout: Duration, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Submit a batch of RDMA operations.

Delegates to the IbvManagerActor, which manages QPs and connections internally. Each op is routed based on its type (read/write). Registers local memory on the fly; remote buffers are lazily resolved via IbvManagerMessageClient::request_buffer.

Source§

type TransportInfo = ()

Source§

fn transport_level(&self) -> RdmaTransportLevel

Source§

fn transport_info(&self) -> Option<Self::TransportInfo>

Source§

impl RdmaBackend for ActorHandle<TcpManagerActor>

Source§

fn submit<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 (impl 'async_trait + Actor + Send + Sync), ops: Vec<RdmaOp>, timeout: Duration, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Submit a batch of RDMA operations over TCP.

Each operation’s remote buffer is resolved to its TCP backend context, then the batch is delegated to the local TcpManagerActor via TcpSubmit.

Source§

type TransportInfo = ()

Source§

fn transport_level(&self) -> RdmaTransportLevel

Source§

fn transport_info(&self) -> Option<Self::TransportInfo>

Implementors§