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

Add a section on flow control performance #3793

Merged
merged 6 commits into from
Jul 14, 2020
Merged

Conversation

martinthomson
Copy link
Member

QUIC doesn't really address the question of tuning flow control very
well. This just admits that fact.

It also indicates why: which essentially boils down to "RAM is cheap".

Closes #3722.

QUIC doesn't really address the question of tuning flow control very
well.  This just admits that fact.

It also indicates why: which essentially boils down to "RAM is cheap".

Closes #3722.
@martinthomson martinthomson added editorial An issue that does not affect the design of the protocol; does not require consensus. -transport labels Jun 26, 2020
how limits are increased and when new limits are advertised. An endpoint can
use flow control to constrain resource commitments without an optimized
algorithm by allocating buffers for receiving data that are significantly larger
than the bandwidth-delay product (BDP). That is, by a factor of 2 or more.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That will still hurt you if you wait until the window has completely filled up before issuing a flow control update. If you do this and you have a window of 2 BDP, you'll decrease the usable bandwidth by 33%.

Copy link

@evolodina evolodina Jun 26, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It probably works for FC_threshold equal to FC_limit/2, but not for every FC_threshold

order of the current BDP will have receive throughput limited by flow control
and not other limiting factors like congestion control. Timely sending of
updates to flow control limits can improve performance, however an excessive
rate of updates can also adversely affect performance.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not if I agree with this statement. You'd really have to take it to the extreme to affect performance. MAX_STREAM_DATA frames are small, and even if you bundle one of them with every ACK you send, this would likely not be a significant overhead.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tend to agree, the present working sounds like a "significant" warning, but the penalty of updating too infrequently is also severe - perhaps and example of frequently might help? such as 1/8 RTT?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tend to agree, the present working sounds like a "significant" warning, but the penalty of updating too infrequently is also severe - perhaps and example of frequently might help? such as 1/8 RTT?

Can the example of frequently lead to SWS?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd also like to understand why you're saying it's going to adversely affect performance. MsQuic bundles FC updates with ACKs and as far as I have seen, we've been able to reach some of the highest perf numbers in testing out there.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suspect "excessive" means "more frequently than ACKs and/or in their own packets." Should we say that?

@@ -968,6 +968,24 @@ signal before advertising additional credit, since doing so will mean that the
peer will be blocked for at least an entire round trip, and potentially for
longer if the peer chooses to not send STREAMS_BLOCKED frames.

## Flow Control Performance

Unlike TCP, QUIC decouples flow control from congestion control. This can
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TCP doesn't couple CC and FC either? The receive window is independent of cwnd. (There are some autotuning implementations that couple them, but the spec doesn't.)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TCP doesn't couple CC and FC either? The receive window is independent of cwnd. (There are some autotuning implementations that couple them, but the spec doesn't.)

Exactly right, TCP does not copule them. I know RFC 813.
I wonder if there is another RFC, where the TCP FC is described.

@krasic
Copy link

krasic commented Jul 7, 2020 via email

draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
order of the current BDP will have receive throughput limited by flow control
and not other limiting factors like congestion control. Timely sending of
updates to flow control limits can improve performance, however an excessive
rate of updates can also adversely affect performance.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suspect "excessive" means "more frequently than ACKs and/or in their own packets." Should we say that?

Co-authored-by: Mike Bishop <mbishop@evequefou.be>
draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
Comment on lines 976 to 977
updates to flow control limits can improve performance. However, an excessive
rate of updates can also adversely affect performance.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
updates to flow control limits can improve performance. However, an excessive
rate of updates can also adversely affect performance.
updates to flow control limits can improve performance. An excessive
rate of updates sent in their own packet increases network load and
can adversely affect performance. Bundling updates with ACK
frames provides frequent updates without adding significant load.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we instead say "Sending of packets just to provide flow control updates can increase network load and adversely affect performance. Sending flow control updates along with other frames, such as ACK frames, can reduce the cost of those updates."

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM, there's no reason it only needs to be ACK frames.

updates to flow control limits can improve performance. However, an excessive
rate of updates can also adversely affect performance.

This document does not specify techniques for tuning flow control performance
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this paragraph is necessary, but that's me.

draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
Co-authored-by: ianswett <ianswett@users.noreply.github.com>
@martinthomson martinthomson merged commit 1b08aa4 into master Jul 14, 2020
@martinthomson martinthomson deleted the fc-rationale branch July 14, 2020 22:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-transport editorial An issue that does not affect the design of the protocol; does not require consensus.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

QUIC Transport: Flow Control
9 participants