| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The ECN marks were the only source of congestion information, and
going into congestion collapse (dropping a lot of ECN packets and
causing loss of signal) was unrecoverable.
The sender's slow-start ramp clock now tracks a measured RTT to avoid
overshooting into congestion collapse on the previously fixed (14ms)
doubling on long-delay (e.g. 100ms) links.
The flow allocator now carries a periodic heartbeat/ack to keep RTT
estimates up-to-date. The heartbeat also serves as a congestion
collapse detector: consecutive heartbeat losses will go into loss
recovery, halving the window and pausing Additive Increase until the
path is clear. The DT component now has a max_rtt config parameter that
serves as a hint for the layer RTT to optimize slow-start for
low-latency networks.
These two mechanisms follow TCP, however only during slow start up to
the first ECN signal and to recover from a total collapse until the
ECN signal returns. MB-ECN is still fully RTT-independent in the AI/PD
region. A shorter RTT path will just reach its equal fair share faster
than a longer RTT path.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
|
|
|
Cover the shared per-aggregate contexts, the mb-ecn policy and the
link capacity estimator.
The controller tests pin the invariants of the algorithm: the first
mark is reported immediately, the receiver's congestion mean is
independent of packet rate and its window adapts to hold a fixed
sample count, increase and decrease are invariant under control
cadence, a starved sender still cuts and later recovers, signals age
out on rate-relative horizons, capacity feedback derives the rate
floor and recovery slope with clamps and a staleness fallback, and
the pacer bounds the burst after idle.
The estimator tests drive synthetic arrival traces: the capacity code
survives a round trip within its resolution, hops combine by MIN,
busy-period drain measures the link rate, windows extend on slow
links, sparse idle observations are tolerated where unsaturated
windows are rejected, shaped links measure at the shaped rate, stale
windows are discarded, and windows bordering an empty queue can only
lower the estimate.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
|