Subject: [quicwg/base-drafts] Spurious RTO detection (#1966)

From: janaiyengar <[email-masked]>
Date: Mon, 05 Nov 2018 00:40:19 -0800

The spurious RTO detection calls an RTO spurious if any unacked packets sent prior to the RTO are acked after the RTO. The implication here is that _any_ packet that was received but not acked can cause the RTO to be labeled spurious, even if there were more packets that were in fact lost.

This is not always right.  Consider the following example:
- Packets 5, 6, 7 are sent
- Packet 5 is received, but 6 and 7 are dropped
- Ack of 5 is dropped
- TLPs (packets 8 and 9) are sent and dropped
- RTO (packet 10) is sent and received
- ACK acks 10 and 5
- Since 5 was sent prior to RTO, RTO is marked spurious.

A crisp definition of spurious RTO may be useful to continue. Here's what I think is sensible: A spurious RTO is an unnecessary RTO. If the RTO timer had not gone off, things would have been fine.

Based on this definition, clearly the RTO was necessary in the example, and therefore not spurious.

We need to change the mechanism for detecting spurious RTOs, and I'll propose the following. An RTO is spurious if an ack is received after the RTO fires that acks only packets sent prior to the RTO. In other words, RTO is spurious if ack is received after the RTO, and `largest_newly_acked <= largest_sent_before_rto` (instead of `smallest_newly_acked > largest_sent_before_rto`, as the draft currently states). 

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1966

---

From: ianswett <[email-masked]>
Date: Mon, 05 Nov 2018 00:51:32 -0800

This was recently changed because Lars ran into an issue(#1774) where the RTO'd packet was acknowledged for the first time in the same ACK as the pre-RTO packets.  In that case, I think it was due to an overly aggressive MinRTO and some pretty coarse grained timers, but I think we want to declare that RTO spurious, since everything would have been fine if it hadn't been sent?

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1966#issuecomment-435797637

---

From: janaiyengar <[email-masked]>
Date: Mon, 05 Nov 2018 20:05:09 -0800

@ianswett : #1774 does not change the semantics substantively of what was in the draft. The intent was always to declare spurious RTO if (packet prior to RTO was newly acked). I'm proposing that we change that to (no packet sent after RTO was newly acked).

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1966#issuecomment-436124365