mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-18 04:21:22 +00:00
refactor(swarm)!: don't share event buffer for established connections (#3188)
Currently, we only have a single channel for all established connections. This requires us to construct the channel ahead of time, before we even have a connection. As it turns out, sharing this buffer across all connections actually has downsides. In particular, this means a single, very busy connection can starve others by filling up this buffer, forcing other connections to wait until they can emit an event.
This commit is contained in:
@ -1489,31 +1489,19 @@ where
|
||||
self
|
||||
}
|
||||
|
||||
/// Configures the number of extra events from the [`ConnectionHandler`] in
|
||||
/// destination to the [`NetworkBehaviour`] that can be buffered before
|
||||
/// the [`ConnectionHandler`] has to go to sleep.
|
||||
/// Configures the size of the buffer for events sent by a [`ConnectionHandler`] to the
|
||||
/// [`NetworkBehaviour`].
|
||||
///
|
||||
/// There exists a buffer of events received from [`ConnectionHandler`]s
|
||||
/// that the [`NetworkBehaviour`] has yet to process. This buffer is
|
||||
/// shared between all instances of [`ConnectionHandler`]. Each instance of
|
||||
/// [`ConnectionHandler`] is guaranteed one slot in this buffer, meaning
|
||||
/// that delivering an event for the first time is guaranteed to be
|
||||
/// instantaneous. Any extra event delivery, however, must wait for that
|
||||
/// first event to be delivered or for an "extra slot" to be available.
|
||||
/// Each connection has its own buffer.
|
||||
///
|
||||
/// This option configures the number of such "extra slots" in this
|
||||
/// shared buffer. These extra slots are assigned in a first-come,
|
||||
/// first-served basis.
|
||||
///
|
||||
/// The ideal value depends on the executor used, the CPU speed, the
|
||||
/// average number of connections, and the volume of events. If this value
|
||||
/// is too low, then the [`ConnectionHandler`]s will be sleeping more often
|
||||
/// The ideal value depends on the executor used, the CPU speed and the volume of events.
|
||||
/// If this value is too low, then the [`ConnectionHandler`]s will be sleeping more often
|
||||
/// than necessary. Increasing this value increases the overall memory
|
||||
/// usage, and more importantly the latency between the moment when an
|
||||
/// event is emitted and the moment when it is received by the
|
||||
/// [`NetworkBehaviour`].
|
||||
pub fn connection_event_buffer_size(mut self, n: usize) -> Self {
|
||||
self.pool_config = self.pool_config.with_connection_event_buffer_size(n);
|
||||
pub fn per_connection_event_buffer_size(mut self, n: usize) -> Self {
|
||||
self.pool_config = self.pool_config.with_per_connection_event_buffer_size(n);
|
||||
self
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user