diff options
author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2022-03-19 21:47:01 +0100 |
---|---|---|
committer | Sander Vrijders <sander@ouroboros.rocks> | 2022-03-30 14:55:13 +0200 |
commit | b248af5ee14b6910c6b21a29fb8ebe2126a8f68e (patch) | |
tree | 1d20f78ca078c36362f8178b0da501a479f9d268 /src/ipcpd/ipcp.h | |
parent | da6d63bd3a17e681c6f62c74ffe09abe74595c1e (diff) | |
download | ouroboros-b248af5ee14b6910c6b21a29fb8ebe2126a8f68e.tar.gz ouroboros-b248af5ee14b6910c6b21a29fb8ebe2126a8f68e.zip |
lib: Non-configurable delayed acks in FRCP
It doesn't really make sense to manually and one-sidedly configure the
timeout of delayed acknowledgements, as setting it too high upsets the
peer's sRTT estimates. Even worse, it also causes a lot of spurious
retransmissions if it exceeds the sRTT mean deviation calculated by
the receiver. Compensating on bare acknowledgment for the ack delay
could improve the RTT estimate deviation, but not the spurious
retransmissions if it was set too high. This sets the delayed ack to
wait for a single RTT mean deviation. Probably needs more tweaking to
further reduce differences between the RTT estimates at the sender and
receiver, e.g. compensate the RTT estimate for delayed acks, or
increase the RTO to add 8 mdevs to sRTT instead of 4. However, it
looks like the mdev estimate is the trickiest one to get to sync, not
the RTT average. Linux reduces the sample weight for mdev from 1/4 to
1/32 in some cases, will give that a shot some day too to see if that
further align sRTT estimates. In any case, this patch already improves
things a lot.
Also fixes a bug where the sender was sending acknowlegments on the
first packets in flight for the 0 sequence number. The receiver
activity was measured in seconds but compared to a timeout value in
nanoseconds.
There's still a lot of spurious retransmissions that start after
actual packet loss occurs, I'm still investigating what causes it.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/ipcpd/ipcp.h')
0 files changed, 0 insertions, 0 deletions