Skip to main content

Module path_model_sensor

Module path_model_sensor 

Source
Expand description

BBR-style passive path model: bottleneck bandwidth, round-trip propagation delay, and the bandwidth-delay product, all recovered from the ACK stream the reliable-UDP sender already drives - no probe traffic.

The model follows the two-filter structure of BBR (Cardwell, Cheng, Gunn, Yeganeh, Jacobson, BBR: Congestion-Based Congestion Control, ACM Queue 2016) and its delivery-rate estimator (Cheng, Cardwell, Yeganeh, Jacobson, Delivery Rate Estimation, draft-cheng-iccrg-delivery-rate-estimation):

  • BtlBw is a windowed maximum of the delivery rate. A bottleneck queue can delay delivery but cannot make data arrive faster than the link carries it, so the peak delivery rate over a window of round-trips is the true bottleneck capacity. The max filter rejects the under-estimates a filling or draining queue injects.
  • RTprop is a windowed minimum of the round-trip time. A queue inflates RTT, so the minimum over a long window is the queue-free propagation delay.

Because a queue moves the two estimates in opposite directions (it lifts RTT but never lifts the delivery rate), the max-rate / min-RTT pair separates capacity from delay from a single passive ACK stream. Their product is the bandwidth-delay product BDP = BtlBw * RTprop, the in-flight window that keeps the bottleneck busy without standing queue.

The estimator is fed connection-level samples: each ACK reports the cumulative delivered count and the time, and the rate sample is the delivered delta over the time delta (the ack_elapsed rate of the delivery-rate draft). The window for BtlBw tracks ~10 round-trips of the current RTprop, BBR’s round-counted bandwidth window, clamped to a sane range so a brief idle does not discard the estimate.

It is a pure model: PathModel::on_ack takes the cumulative delivered count, a timestamp, and an RTT, so a synthetic ACK trace exercises it deterministically and the live sender feeds it from real feedback.

Structs§

PathModel
Passive BBR path model. Holds the windowed BtlBw / RTprop estimates and exposes them plus the derived BDP. Sized in blocks of block_bytes so the sender can read the BDP directly as a flow-window target.