pub struct MultiChannel { /* private fields */ }Expand description
A set of Channels to different peers, sharing a single ProtectionDomain.
Each peer is identified by its index. Operations are routed to the correct channel based on the peer index in the work request.
Use ProtectionDomain::create_multi_channel or MultiChannel::builder to construct one.
Implementations§
Source§impl MultiChannel
impl MultiChannel
pub fn builder<'f1>() -> MultiChannelBuilder<'f1>
Source§impl MultiChannel
impl MultiChannel
Sourcepub fn send<'op>(
&'op mut self,
wr: PeerSendWorkRequest<'op, 'op>,
) -> TransportResult<WorkSuccess>
pub fn send<'op>( &'op mut self, wr: PeerSendWorkRequest<'op, 'op>, ) -> TransportResult<WorkSuccess>
Posts a send to the work request’s target peer and blocks until it completes.
Sourcepub fn receive<'op>(
&'op mut self,
wr: PeerReceiveWorkRequest<'op, 'op>,
) -> TransportResult<WorkSuccess>
pub fn receive<'op>( &'op mut self, wr: PeerReceiveWorkRequest<'op, 'op>, ) -> TransportResult<WorkSuccess>
Posts a receive to the work request’s target peer and blocks until it completes.
Sourcepub fn write<'op>(
&'op mut self,
wr: PeerWriteWorkRequest<'op, 'op>,
) -> TransportResult<WorkSuccess>
pub fn write<'op>( &'op mut self, wr: PeerWriteWorkRequest<'op, 'op>, ) -> TransportResult<WorkSuccess>
Posts an RDMA write to the work request’s target peer and blocks until it completes.
Sourcepub fn read<'op>(
&'op mut self,
wr: PeerReadWorkRequest<'op, 'op>,
) -> TransportResult<WorkSuccess>
pub fn read<'op>( &'op mut self, wr: PeerReadWorkRequest<'op, 'op>, ) -> TransportResult<WorkSuccess>
Posts an RDMA read to the work request’s target peer and blocks until it completes.
Source§impl MultiChannel
impl MultiChannel
Sourcepub unsafe fn send_unpolled<'data>(
&mut self,
wr: PeerSendWorkRequest<'_, 'data>,
) -> IbvResult<PendingWork<'data>>
pub unsafe fn send_unpolled<'data>( &mut self, wr: PeerSendWorkRequest<'_, 'data>, ) -> IbvResult<PendingWork<'data>>
Sourcepub unsafe fn receive_unpolled<'data>(
&mut self,
wr: PeerReceiveWorkRequest<'_, 'data>,
) -> IbvResult<PendingWork<'data>>
pub unsafe fn receive_unpolled<'data>( &mut self, wr: PeerReceiveWorkRequest<'_, 'data>, ) -> IbvResult<PendingWork<'data>>
Posts a receive to the target peer without polling for completion.
§Safety
Sourcepub unsafe fn write_unpolled<'data>(
&mut self,
wr: PeerWriteWorkRequest<'_, 'data>,
) -> IbvResult<PendingWork<'data>>
pub unsafe fn write_unpolled<'data>( &mut self, wr: PeerWriteWorkRequest<'_, 'data>, ) -> IbvResult<PendingWork<'data>>
Posts an RDMA write to the target peer without polling for completion.
§Safety
Sourcepub unsafe fn read_unpolled<'data>(
&mut self,
wr: PeerReadWorkRequest<'_, 'data>,
) -> IbvResult<PendingWork<'data>>
pub unsafe fn read_unpolled<'data>( &mut self, wr: PeerReadWorkRequest<'_, 'data>, ) -> IbvResult<PendingWork<'data>>
Posts an RDMA read to the target peer without polling for completion.
§Safety
Source§impl MultiChannel
impl MultiChannel
Sourcepub fn scatter_send<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerSendWorkRequest<'op, 'op>>,
pub fn scatter_send<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerSendWorkRequest<'op, 'op>>,
Posts sends to multiple peers and blocks until all complete.
Sourcepub fn scatter_write<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerWriteWorkRequest<'op, 'op>>,
pub fn scatter_write<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerWriteWorkRequest<'op, 'op>>,
Posts RDMA writes to multiple peers and blocks until all complete.
Sourcepub fn gather_receive<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerReceiveWorkRequest<'op, 'op>>,
pub fn gather_receive<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerReceiveWorkRequest<'op, 'op>>,
Posts receives from multiple peers and blocks until all complete.
Sourcepub fn gather_read<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerReadWorkRequest<'op, 'op>>,
pub fn gather_read<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerReadWorkRequest<'op, 'op>>,
Posts RDMA reads from multiple peers and blocks until all complete.
Sourcepub fn multicast_send<'op, I>(
&'op mut self,
peers: I,
wr: SendWorkRequest<'op, 'op>,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = usize>,
pub fn multicast_send<'op, I>(
&'op mut self,
peers: I,
wr: SendWorkRequest<'op, 'op>,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = usize>,
Posts the same send to multiple peers and blocks until all complete.
Source§impl MultiChannel
impl MultiChannel
Sourcepub unsafe fn scatter_send_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerSendWorkRequest<'wr, 'data>>,
'data: 'wr,
pub unsafe fn scatter_send_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerSendWorkRequest<'wr, 'data>>,
'data: 'wr,
Sourcepub unsafe fn scatter_write_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerWriteWorkRequest<'wr, 'data>>,
'data: 'wr,
pub unsafe fn scatter_write_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerWriteWorkRequest<'wr, 'data>>,
'data: 'wr,
Posts RDMA writes to multiple peers without polling for completion.
§Safety
Sourcepub unsafe fn gather_receive_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerReceiveWorkRequest<'wr, 'data>>,
'data: 'wr,
pub unsafe fn gather_receive_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerReceiveWorkRequest<'wr, 'data>>,
'data: 'wr,
Posts receives from multiple peers without polling for completion.
§Safety
Sourcepub unsafe fn gather_read_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerReadWorkRequest<'wr, 'data>>,
'data: 'wr,
pub unsafe fn gather_read_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerReadWorkRequest<'wr, 'data>>,
'data: 'wr,
Posts RDMA reads from multiple peers without polling for completion.
§Safety
Sourcepub unsafe fn multicast_send_unpolled<'wr, 'data, I>(
&mut self,
peers: I,
wr: SendWorkRequest<'wr, 'data>,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = usize>,
pub unsafe fn multicast_send_unpolled<'wr, 'data, I>(
&mut self,
peers: I,
wr: SendWorkRequest<'wr, 'data>,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = usize>,
Posts the same send to multiple peers without polling for completion.
§Safety
Source§impl MultiChannel
impl MultiChannel
Sourcepub fn scope<'env, F, T, E>(&'env mut self, f: F) -> Result<T, ScopeError<E>>
pub fn scope<'env, F, T, E>(&'env mut self, f: F) -> Result<T, ScopeError<E>>
Opens a polling scope that automatically polls all outstanding work requests when it ends.
See Channel::scope for details on the scoping mechanism.
Sourcepub fn manual_scope<'env, F, T, E>(&'env mut self, f: F) -> Result<T, E>
pub fn manual_scope<'env, F, T, E>(&'env mut self, f: F) -> Result<T, E>
Opens a polling scope that enforces manual polling of all work requests.
See Channel::manual_scope for details.
Source§impl MultiChannel
impl MultiChannel
Sourcepub fn num_channels(&self) -> usize
pub fn num_channels(&self) -> usize
Returns the number of peer channels.
Sourcepub fn pd(&self) -> &ProtectionDomain
pub fn pd(&self) -> &ProtectionDomain
Returns a reference to the shared ProtectionDomain.