pub struct MmpMetrics {
pub srtt: SrttEstimator,
pub rtt_trend: DualEwma,
pub loss_trend: DualEwma,
pub goodput_trend: DualEwma,
pub jitter_trend: DualEwma,
pub etx_trend: DualEwma,
pub delivery_ratio_forward: f64,
pub delivery_ratio_reverse: f64,
pub etx: f64,
pub goodput_bps: f64,
/* private fields */
}Expand description
Derived MMP metrics, updated from incoming ReceiverReports.
This lives on the sender side: when we receive a ReceiverReport from our peer describing what they observed about our traffic, we process it here to compute RTT, loss, goodput, and trend indicators.
Fields§
§srtt: SrttEstimatorSmoothed RTT from timestamp echo.
rtt_trend: DualEwmaDual EWMA trend detectors.
loss_trend: DualEwma§goodput_trend: DualEwma§jitter_trend: DualEwma§etx_trend: DualEwma§delivery_ratio_forward: f64Forward delivery ratio (what fraction of our frames the peer received).
delivery_ratio_reverse: f64Reverse delivery ratio (set when we compute from our own receiver state).
etx: f64ETX computed from bidirectional delivery ratios.
goodput_bps: f64Smoothed goodput in bytes/sec (forward direction: what the peer received from us).
Implementations§
Source§impl MmpMetrics
impl MmpMetrics
Sourcepub fn reset_for_rekey(&mut self)
pub fn reset_for_rekey(&mut self)
Reset state derived from ReceiverReport counters for rekey cutover.
The new session starts with counter 0, so the prev_rr deltas must be reset to avoid computing bogus loss/goodput from the counter discontinuity. RTT (SRTT) is preserved since it remains valid.
pub fn new() -> Self
Sourcepub fn process_receiver_report(
&mut self,
rr: &ReceiverReport,
our_timestamp_ms: u32,
now: Instant,
) -> bool
pub fn process_receiver_report( &mut self, rr: &ReceiverReport, our_timestamp_ms: u32, now: Instant, ) -> bool
Process an incoming ReceiverReport (from the peer about our traffic).
our_timestamp_ms is the current session-relative time in ms (for RTT).
now is the current monotonic time (for goodput rate computation).
Returns true if this report produced the first SRTT measurement
(transition from uninitialized to initialized).
Sourcepub fn update_reverse_delivery(
&mut self,
our_recv_packets: u64,
peer_highest: u64,
)
pub fn update_reverse_delivery( &mut self, our_recv_packets: u64, peer_highest: u64, )
Update the reverse delivery ratio from our own receiver state.
Computes a per-interval delta (same as forward ratio) rather than a lifetime cumulative ratio, so ETX responds to recent conditions.
Sourcepub fn srtt_ms(&self) -> Option<f64>
pub fn srtt_ms(&self) -> Option<f64>
Current smoothed RTT in milliseconds, or None if not yet measured.
Sourcepub fn srtt_age_ms(&self, now: Instant) -> Option<u64>
pub fn srtt_age_ms(&self, now: Instant) -> Option<u64>
Age of the current SRTT sample in milliseconds.
Sourcepub fn smoothed_loss(&self) -> Option<f64>
pub fn smoothed_loss(&self) -> Option<f64>
Smoothed loss rate (long-term EWMA), or None if not yet initialized.
Sourcepub fn last_forward_loss_sample(&self) -> Option<(u64, f64)>
pub fn last_forward_loss_sample(&self) -> Option<(u64, f64)>
Most recent forward-loss sample from a ReceiverReport delta.
Sourcepub fn take_forward_loss_evidence(
&mut self,
min_span: u64,
) -> Option<(u64, f64)>
pub fn take_forward_loss_evidence( &mut self, min_span: u64, ) -> Option<(u64, f64)>
Return route-quality loss evidence once enough packets have been observed. High-rate reports are emitted as-is; low-rate reports, such as interactive pings, accumulate until they have the same weight.
Sourcepub fn smoothed_etx(&self) -> Option<f64>
pub fn smoothed_etx(&self) -> Option<f64>
Smoothed ETX (long-term EWMA), or None if not yet initialized.
Sourcepub fn goodput_bps(&self) -> f64
pub fn goodput_bps(&self) -> f64
Current smoothed goodput in bytes/sec, or 0 if not yet measured.
Sourcepub fn last_ecn_ce_count(&self) -> u32
pub fn last_ecn_ce_count(&self) -> u32
Cumulative ECN CE count from the most recent ReceiverReport.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for MmpMetrics
impl RefUnwindSafe for MmpMetrics
impl Send for MmpMetrics
impl Sync for MmpMetrics
impl Unpin for MmpMetrics
impl UnsafeUnpin for MmpMetrics
impl UnwindSafe for MmpMetrics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more