pub struct LossController { /* private fields */ }Expand description
Loss-based congestion control, per draft-ietf-rmcat-gcc-02 §5.5.
§Why delay is not enough
A path can drop packets without ever queueing them — a wireless link with interference, or a bottleneck whose buffer is so shallow that it overflows before the delay signal moves. The delay-based half sees nothing there, so without this a sender keeps pushing into a link that is discarding a tenth of what it sends.
Between the two thresholds nothing happens. That band is deliberate: a few per cent loss is normal on a wireless link and reacting to it would give up capacity permanently.
§Divergence from upstream (D4)
This controller may move the target on its own. Upstream’s cannot: its latestBitrate is
only written inside onDelayUpdate (send_side_bwe.go:304), so on a lossy link without
queueing delay its loss estimate is computed and then never applied — exactly the case this
exists for. That is a bug rather than a design choice, and it is not inherited.
Implementations§
Trait Implementations§
Source§impl Clone for LossController
impl Clone for LossController
Source§fn clone(&self) -> LossController
fn clone(&self) -> LossController
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more