Skip to content
This repository has been archived by the owner on Aug 28, 2023. It is now read-only.

clarify the meaning of "application-limited" #139

Merged
merged 7 commits into from Jan 26, 2022

Conversation

nealcardwell
Copy link
Contributor

Clarify the meaning of "application-limited" to explicitly
mention that this can include slow sender applicaitons
or slow receiver applications.

Matt Olson notes in Issue #137:

It seems like usually "app-limited" refers only to the local app,
but if the peer's receive window limits the connection's send
rate then we have the same problem where CWnd can grow
arbitrarily. So, is "app-limited" supposed to also refer to the peer's
receive window? If so, then this should probably be spelled out.

So we should be explicit that application-limited can refer to sender
or receiver apps that are slower than what cwnd allows.

We should particularly clarify this because the text on this topic
in 7661 is buggy, when it says:

"application-limited period" for the time when the sender sends less
than is allowed by the congestion or receiver windows.

This RFC 7661 text is buggy because if the receiver window is
smaller than the congestion window, and the sender sends
an amount equal to the receiver window, then the flow is
application-limited (it is limited by the receiver and receiver
advertised window instead of cwnd).

Clarify the meaning of "application-limited" to explicitly
mention that this can include slow sender applicaitons
or slow receiver applications.

Matt Olson notes in Issue NTAP#137:

  It seems like usually "app-limited" refers only to the local app, 
  but if the peer's receive window limits the connection's send 
  rate then we have the same problem where CWnd can grow
 arbitrarily. So, is "app-limited" supposed to also refer to the peer's
 receive window? If so, then this should probably be spelled out.

So we should be explicit that application-limited can refer to sender
or receiver apps that are slower than what cwnd allows.

We should particularly clarify this because the text on this topic
in 7661 is buggy, when it says:

   "application-limited period" for the time when the sender sends less
  than is allowed by the congestion or receiver windows.

This RFC 7661 text is buggy because if the receiver window is
smaller than the congestion window, and the sender sends
an amount equal to the receiver window, then the flow is
application-limited (it is limited by the receiver and receiver
advertised window instead of cwnd).
@larseggert larseggert linked an issue Jan 18, 2022 that may be closed by this pull request
Copy link
Contributor

@larseggert larseggert left a comment

Choose a reason for hiding this comment

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

Could you add a changelog entry?

@nealcardwell
Copy link
Contributor Author

Could you add a changelog entry?

Sure, added a change log entry in a separate commit in the same pull request:
nealcardwell@ad37705

draft-ietf-tcpm-rfc8312bis.md Outdated Show resolved Hide resolved
draft-ietf-tcpm-rfc8312bis.md Outdated Show resolved Hide resolved
less than is allowed by the congestion window.
This can happen if the flow is limited by either the
sender application or the receiver application (via the receiver
advertised window) instead of the sender's congestion window.
Copy link
Contributor

Choose a reason for hiding this comment

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

I got a little confused when I first read instead of the sender's congestion window.
Should we rephrase it to, ... window) and thus sends less data than what is allowed by the sender's congestion window.

Copy link
Contributor

Choose a reason for hiding this comment

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

This seems to be the last open review comment. I will merge and publish a new rev once the PR shows no requested changes.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks, Vidhi and Lars. This morning's patch should reflect Vidhi's suggestion now:
https://github.com/NTAP/rfc8312bis/pull/139/files

@@ -1010,8 +1010,13 @@ This is not considered in the current CUBIC design.

## Behavior for Application-Limited Flows {#app-limited}

CUBIC does not increase its congestion window size if a flow is
currently limited by the application instead of the congestion window.
A flow is application-limited if it is currently sending
Copy link
Contributor

Choose a reason for hiding this comment

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

"currently sending less than cwnd"- is this too general? A pacer or CPU bottleneck could also cause this to happen. Although, maybe it would also make sense to limit cwnd growth in those cases (since the point is that increasing the cwnd will not increase the send rate)?

Copy link
Contributor

Choose a reason for hiding this comment

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

Pacing the send rate doesn't mean you are sending less than cwnd (excluding app-limited), it just means that you are sending the cwnd paced within a duration (equal to RTT) instead of sending it all at once. As the cwnd growth is based on received ACKs, and ACKs themselves are dependent on sent data, the cwnd sort of grows somewhat paced too (unless the ACKs are coalesced).

I agree that "currently sending less than cwnd" is too generic and maybe we can add text about pacing etc to clarify this. But the rest of the text about cwnd growth looks fine.

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 talking about particular instants in time when I talk about pacing- we will eventually send the whole window, but at the time when we are making a decision about whether to increase the CWnd, we may have deferred sending some of those packets until later in the round. I'm not allowed to look at the linux code, but it's my rough understanding that normally it goes ahead and posts the full CWnd of packets with appropriate "due times" for actually sending each packet, but that's only one possible implementation. TCP itself could also defer sending with a timer (which I think I heard has also been implemented in linux).

Copy link
Contributor

Choose a reason for hiding this comment

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

I'd be alright with leaving this text as Neal has written it, which is still vague but better than the existing text.

nealcardwell and others added 2 commits January 19, 2022 10:09
Co-authored-by: Vidhi Goel <goel.vidhi07@gmail.com>
Co-authored-by: Vidhi Goel <goel.vidhi07@gmail.com>
@larseggert
Copy link
Contributor

Could we finalize this PR?

nealcardwell and others added 2 commits January 25, 2022 10:15
From @larseggert and @goelvidhi.

Co-authored-by: Lars Eggert <lars@eggert.org>
The latest patch caused a lint error:

draft-ietf-tcpm-rfc8312bis.md:1017:81 MD013/line-length Line length [Expected: 80; Actual: 99]

Fixed by wrapping:

"and thus sends less data than what is allowed by
the sender's congestion window."
@larseggert larseggert merged commit 1c65ce2 into NTAP:main Jan 26, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

"Application-Limited" seems ambiguous
4 participants