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§
Sourcetype TransportInfo
type TransportInfo
Backend-specific transport details (e.g., a cffi struct with raw ibverbs handles for GPU-initiated RDMA).
Required Methods§
Sourcefn 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 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).
Sourcefn transport_level(&self) -> RdmaTransportLevel
fn transport_level(&self) -> RdmaTransportLevel
The transport level provided by this backend.
Sourcefn transport_info(&self) -> Option<Self::TransportInfo>
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>
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,
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.
type TransportInfo = ()
fn transport_level(&self) -> RdmaTransportLevel
fn transport_info(&self) -> Option<Self::TransportInfo>
Source§impl RdmaBackend for ActorHandle<TcpManagerActor>
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,
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.