Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

When/how often to send ACK frames #230

Closed
mirjak opened this issue Jan 25, 2017 · 20 comments
Closed

When/how often to send ACK frames #230

mirjak opened this issue Jan 25, 2017 · 20 comments
Assignees
Labels
-recovery design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list.

Comments

@mirjak
Copy link
Contributor

mirjak commented Jan 25, 2017

The spec just doesn't say anything about this so far. You at least want to put in some minumum requirement (like MUST send at least X ACKs per RTT).

Also related but might be a separate issue that I'm not sure about yet: Is there a value in having a mechanism for the sender to tell the receiver how often it would like to receive ACKs?

@martinthomson
Copy link
Member

@ianswett, @janaiyengar, do you want to take this with the loss recovery draft?

@mirjak
Copy link
Contributor Author

mirjak commented Jan 25, 2017

I think this bit should be in the transport draft (mainly because it's the receiver behavior that is rather independent of the recovery and congestion control at the sender)

@ianswett
Copy link
Contributor

I tend to think this should be in the transport draft as well.

@mnot mnot added the design An issue that affects the design of the protocol; resolution requires consensus. label Feb 3, 2017
@acmacm
Copy link

acmacm commented Mar 2, 2017

I suggest to make any requirement on ACK reduction simple (1 ACK : N Packets Received). For reasons I'm sorting-through (and may have to wait till Chicago), I suspect that 1:1 should be allowed because feedback helps understand performance. (acmacm is Al Morton)

@martinthomson
Copy link
Member

@acmacm, you can edit your GitHub profile here and put your name in. It won't show on the UI for reasons I don't fully understand, but we'll all eventually make the connection.

@acmacm
Copy link

acmacm commented Mar 2, 2017 via email

@martinthomson
Copy link
Member

It would be good if someone could provide N. I hear that GQUIC uses N=2. I agree that 1:1 should be fine. I also think that having an ACK on every (live) RTT is valuable as well, especially if you aren't sending anything else (as sometimes happens in HTTP).

@ianswett
Copy link
Contributor

ianswett commented Mar 2, 2017

1:1 acking is ok as long as that excludes acks. Acks must be acked at a rate much less than 1:1, I would advise at most 1 ack for every two acks.

GQUIC follows TCP's approach of N=2 with a delayed ack timer, but we use a delayed ack timer of 25ms. TCP delayed ack timers vary substantially by platform in practice, but tend to default to ~200ms in internet environments.

I think we should recommend a default, for which I'd suggest as TCP/GQUIC's default, as well as the ability to negotiate other values of N and the delayed ack timer. If we don't want to allow negotiation, we should at least allow the peer to inform the sender of their ack algorithm.

@martinthomson
Copy link
Member

I would have been happy with ANY rationale, but that rationale is excellent Ian, thanks!

@mnot mnot added this to Reliability in QUIC Apr 28, 2017
@mnot mnot changed the title Given recommendations on when/how often to send ACK frames When/how often to send ACK frames Jun 21, 2017
This was referenced Jun 21, 2017
@ianswett ianswett self-assigned this Aug 3, 2017
@martinthomson
Copy link
Member

@ianswett, I forgot to ask something.

Say you make the configurable parameters (the ratio of ACK-only packets to acknowledgments, the delayed acknowledgment timer) known. And say you define two new transport parameters, one for each. What does the recipient of that information do with this newly acquired knowledge?

@mirjak
Copy link
Contributor Author

mirjak commented Aug 14, 2017

In TCP this is would be useful to do a more appropriate RTT and RTO estimation. However, in QUIC you have more fine grained timing information in the ACK frame itself, so maybe that's actually not that useful anymore. However, there is a trade-off between overhead and responsiveness (of †he congestion control). I think it would actually be useful to some kind of negotiation, where the data sender/ack receiver can specify a min and may ack rate, because that peer a) might know something about any access link restrictions (-> don't send more ACK than this because otherwise it will overload my link), and b) know the congestion control use (my cc scheme needs at least an ack every x packets to function correctly).

@acmacm
Copy link

acmacm commented Aug 14, 2017

Adding to @mirjak point on negotiation: c) peer might know about their access link loss conditions, and potentially improve responsiveness by preferring an ACK ratio approaching 1:1.

@martinthomson
Copy link
Member

@acmacm, @mirjak, were you talking about ACK ratios for regular packets? Because the discussion was originally about ACK ratios for packets that only contain ACK frames (and padding).

@acmacm
Copy link

acmacm commented Aug 15, 2017

Hi @martinthomson, Sorry for the noise, I see now that you narrowed your question to a part of @ianswett 's Mar 2 statement on ACK of ACKs ratio.

@mirjak
Copy link
Contributor Author

mirjak commented Aug 15, 2017

I actually didn't distinguish this. However, you are right that if you only send an ACK there might be scenarios were you'd like to maintain a low rate, e.g. to not wake up the radio to often... on the other hand if you receive data you can also send out an ACK that is queued to be send out...

@ianswett
Copy link
Contributor

Knowing the delayed ack timer allows you to set timers for TLP and RTO without creating spurious retransmits, because the ack timer can be incorporated into the min timeout when there's only one packet outstanding. See the recovery doc(https://tools.ietf.org/html/draft-tsvwg-quic-loss-recovery-00), section 3.1.

Currently most TCP implementations have to use a very conservative min TLP timeout and RTO because they assume the peer likely uses a 100 or 200ms delayed ack timer.

I don't think knowing the ratio tells you much of interest, and it's fairly easy to just observe, but Mirja's right that some congestion control schemes deal better with stretch acks than others. That being said, ideally congestion controls should deal with them anyway, since they are created by other network elements, so I don't see a large need to communicate this to the peer.

For related info, see https://tools.ietf.org/html/draft-wang-tcpm-low-latency-opt-00

@ianswett
Copy link
Contributor

The text was improved with #907 The intent is to add detailed considerations and recommendations in the recovery doc.

@pravb
Copy link

pravb commented Nov 16, 2017

Knowing the max stretch ACK does help the ABC computation on the sender for ACK clocked congestion control. It would be useful to document some recommended values for delayed ACK frequency and timeout to avoid the mess with TCP implementations with each one doing something different.

@martinthomson
Copy link
Member

This issue seems a little open-ended now. Can we recast this more narrowly so that it has some hope of being resolved? I note that we have a lot better advice in the transport doc about this. If we want to have explicit signaling for ACK delays, we should open new issues for that.

@ianswett
Copy link
Contributor

ianswett commented Mar 5, 2018

Agreed, #1139 adds a first version of the extra text I thought was necessary in the recovery doc. There's already an issue for explicit ack delay, so I'm closing this.

@ianswett ianswett closed this as completed Mar 5, 2018
@mnot mnot removed this from Reliability in QUIC Mar 6, 2018
@mnot mnot added the has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list. label Mar 5, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-recovery design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list.
Projects
None yet
Development

No branches or pull requests

7 participants