webrtc/net/dcsctp/tx
Victor Boivie 28d07ddbfd dcsctp: Compute RTO with higher precision
Since the code measuring the RTT has been converted to using TimeDelta
which internally stores the duration in microseconds, from DurationMs
which uses milliseconds, the RTO calculation can use the higher
precision to calculate lower non-zero durations on really fast networks
such within a data center.

Before this CL, which is from the initial drop of dcSCTP, the RTO
calculation was done using the algorithm from the paper "V. Jacobson:
Congestion avoidance and control", but now we're using the original
algorith from https://tools.ietf.org/html/rfc4960#section-6.3.1, which
comes from https://datatracker.ietf.org/doc/html/rfc6298#section-2.

Two issues were found and corrected:
 1. The min RTT variance that is specified in the config file was
    previously incorrectly divided by 8. That was not its intention,
    but we're keeping that behaviour as other clients have actually
    measured a good value to put there. This represents "G" in
    the "basic algorithm" above, and since that is multiplied with K,
    which is four, the default value of 220 wouldn't make sense if it
    wasn't scaled down, as that would make the RTO easily saturate to
    the RTO_max (800ms).
 2. The previous algorithm had large round-off errors (probably because
    the code used milliseconds), which makes fairly big changes to the
    calculated RTO in some situations.

Bug: webrtc:15593
Change-Id: I95a3e137c2bbbe7bf8b99c016381e9e63fd01d87
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/349000
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42170}
2024-04-25 07:53:24 +00:00
..
BUILD.gn Move StrJoin to rtc_base/strings 2023-11-15 12:10:28 +00:00
mock_send_queue.h dcsctp: Convert use of TimeMs to webrtc::Timestamp 2023-11-12 21:12:29 +00:00
outstanding_data.cc dcsctp: Fix not using iteraters after NackItem 2023-12-13 14:21:12 +00:00
outstanding_data.h dcsctp: Fix not using iteraters after NackItem 2023-12-13 14:21:12 +00:00
outstanding_data_test.cc dcsctp: Rename outstanding bytes to unacked bytes 2023-12-04 19:10:17 +00:00
retransmission_error_counter.cc dcsctp: Support unlimited max_retransmissions 2021-08-31 10:57:48 +00:00
retransmission_error_counter.h dcsctp: Make use of log_prefix consistent 2023-03-15 22:15:05 +00:00
retransmission_error_counter_test.cc dcsctp: Support unlimited max_retransmissions 2021-08-31 10:57:48 +00:00
retransmission_queue.cc dcsctp: Rename outstanding bytes to unacked bytes 2023-12-04 19:10:17 +00:00
retransmission_queue.h dcsctp: Rename outstanding bytes to unacked bytes 2023-12-04 19:10:17 +00:00
retransmission_queue_test.cc dcsctp: Rename outstanding bytes to unacked bytes 2023-12-04 19:10:17 +00:00
retransmission_timeout.cc dcsctp: Compute RTO with higher precision 2024-04-25 07:53:24 +00:00
retransmission_timeout.h dcsctp: Compute RTO with higher precision 2024-04-25 07:53:24 +00:00
retransmission_timeout_test.cc dcsctp: Compute RTO with higher precision 2024-04-25 07:53:24 +00:00
rr_send_queue.cc Reapply "dcsctp: Add per-stream-limit, refactor limits." 2024-03-15 13:27:37 +00:00
rr_send_queue.h Reapply "dcsctp: Add per-stream-limit, refactor limits." 2024-03-15 13:27:37 +00:00
rr_send_queue_test.cc Reapply "dcsctp: Add per-stream-limit, refactor limits." 2024-03-15 13:27:37 +00:00
send_queue.h dcsctp: Convert use of TimeMs to webrtc::Timestamp 2023-11-12 21:12:29 +00:00
stream_scheduler.cc Move StrJoin to rtc_base/strings 2023-11-15 12:10:28 +00:00
stream_scheduler.h dcsctp: Convert use of TimeMs to webrtc::Timestamp 2023-11-12 21:12:29 +00:00
stream_scheduler_test.cc dcsctp: Convert use of TimeMs to webrtc::Timestamp 2023-11-12 21:12:29 +00:00