Subject: [quicwg/base-drafts] Add a section on stream prioritization (#303)

From: Martin Thomson <[email-masked]>
Date: Mon, 13 Feb 2017 22:50:48 -0800

We decided that the transport would need priority but that it would rely on the application (protocol) to provide that information.  This attempts to capture that decision and provides a little guidance on what to prioritize (management stuff over STREAM, STREAM 1 over other streams, retransmissions, and then the rest of the streams according to application-layer priority).

Closes #114.
You can view, comment on, or merge this pull request online at:

  https://github.com/quicwg/base-drafts/pull/303

-- Commit Summary --

  * Add a section on prioritization

-- File Changes --

    M draft-ietf-quic-transport.md (41)

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/303.patch
https://github.com/quicwg/base-drafts/pull/303.diff

-- 
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/pull/303

---

From: Mike Bishop <[email-masked]>
Date: Tue, 14 Feb 2017 11:12:12 -0800

MikeBishop approved this pull request.

Content looks good; a few grammar/punctuation nitpicks.

> @@ -1734,6 +1735,46 @@ Flow control is described in detail in {{flow-control}}, and congestion control
 is described in the companion document {{QUIC-RECOVERY}}.

+## Stream Prioritization
+
+Stream multiplexing has a significant effect on application performance if
+resources allocated to streams are correctly prioritized.  Experience with other
+multiplexed protocols, such as HTTP/2 {{?RFC7540}} shows that effective

Comma after the reference (parenthetical phrase).

> @@ -1734,6 +1735,46 @@ Flow control is described in detail in {{flow-control}}, and congestion control
 is described in the companion document {{QUIC-RECOVERY}}.

+## Stream Prioritization
+
+Stream multiplexing has a significant effect on application performance if
+resources allocated to streams are correctly prioritized.  Experience with other
+multiplexed protocols, such as HTTP/2 {{?RFC7540}} shows that effective

Multiplexing has a significant effect either way.  But if it's correctly prioritized, that effect can be beneficial.

> @@ -1734,6 +1735,46 @@ Flow control is described in detail in {{flow-control}}, and congestion control
 is described in the companion document {{QUIC-RECOVERY}}.

+## Stream Prioritization
+
+Stream multiplexing has a significant effect on application performance if
+resources allocated to streams are correctly prioritized.  Experience with other
+multiplexed protocols, such as HTTP/2 {{?RFC7540}} shows that effective
+prioritization strategies have a significant impact on performance.
+
+QUIC does not provide frames for exchanging priotization information.  Instead
+it relies on receiving priority information from the application that uses QUIC.
+Protocols that use QUIC are able to define any prioritization scheme that suits
+their application semantics.  A protocol might define explicit messages for
+signaling priority, such as those defined in HTTP/2, it could define rules that

Use ';' to separate a list if you have ',' inside the list elements.

-- 
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/pull/303#pullrequestreview-21836185

---

From: Mike Bishop <[email-masked]>
Date: Tue, 14 Feb 2017 11:13:38 -0800

Also closes #104 .

-- 
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/pull/303#issuecomment-279805290

---

From: ianswett <[email-masked]>
Date: Tue, 14 Feb 2017 14:13:06 -0800

ianswett commented on this pull request.

Mostly good, the last paragraph could be a bit terser.

Should the HTTP/2 RFC be referenced here?

> +resources to, QUIC SHOULD use the information provided by the application.
+Failure to account for priority of streams can result in suboptimal performance.
+
+Stream priority is most relevant when deciding which stream data will be
+transmitted.  Often, there will be limits on what can be transmitted as a result
+of connection flow control or the current congestion controller state.
+
+Giving preference to the transmission of its own management frames ensures that
+the protocol functions efficiently.  That is, prioritizing frames other than
+STREAM frames ensures that loss recovery, congestion control, and flow control
+operate effectively.  Prioritizing stream 1 over other streams ensures that the
+cryptographic handshake can complete.
+
+Choosing to retransmit data that was already sent and determined to be lost can
+help ensure that flow control doesn't cause underutilization or temporary
+stalling of a connection.  Data sent in STREAM frames counts toward flow control

I think this entire paragraph can be shortened to one sentence, which is the first one.   

-- 
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/pull/303#pullrequestreview-21877456

---

From: Martin Thomson <[email-masked]>
Date: Tue, 14 Feb 2017 18:06:04 -0800

martinthomson commented on this pull request.

I generally don't bother with a second citation for something when it appears in the same section.

---

From: Martin Thomson <[email-masked]>
Date: Tue, 14 Feb 2017 18:06:26 -0800

@martinthomson pushed 1 commit.

4d31689  Nits, thanks Mike

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/303/files/d9d21223b48c3850fd750f45ae91f0bc7bb42315..4d31689132e859a8d15b7e39a1462c73401f2824

---

From: Martin Thomson <[email-masked]>
Date: Tue, 14 Feb 2017 18:07:41 -0800

That might be true if you have an internalized model of the protocol, but I find that extra detail (gaps, how flow control works, etc...) helps comprehension.

---

From: ianswett <[email-masked]>
Date: Wed, 15 Feb 2017 07:43:28 -0800

One more try at the paragraph.

Ok, how about this: "Stream frames determined lost SHOULD be retransmitted before sending new data, unless application priorities indicate otherwise.  Retransmitting lost STREAM frames fills in gaps, allowing the peer to consume already received data and free up flow control window."

> +allow an endpoint to determine priority based on context; or it could leave the
+determination to the application.
+
+A QUIC implementation SHOULD provide ways in which an application can indicate
+the relative priority of streams.  When deciding which streams to dedicate
+resources to, QUIC SHOULD use the information provided by the application.
+Failure to account for priority of streams can result in suboptimal performance.
+
+Stream priority is most relevant when deciding which stream data will be
+transmitted.  Often, there will be limits on what can be transmitted as a result
+of connection flow control or the current congestion controller state.
+
+Giving preference to the transmission of its own management frames ensures that
+the protocol functions efficiently.  That is, prioritizing frames other than
+STREAM frames ensures that loss recovery, congestion control, and flow control
+operate effectively.  Prioritizing stream 1 over other streams ensures that the

I think we want a SHOULD for stream 1, unless you can think of a counter-example?

-- 
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/pull/303#pullrequestreview-22030526

---

From: Martin Thomson <[email-masked]>
Date: Wed, 15 Feb 2017 17:16:29 -0800

7197aff  Integrate Ian's suggested text

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/303/files/4d31689132e859a8d15b7e39a1462c73401f2824..7197aff9853d2664987b2bf26b9aa03efce6b334

---

From: Martin Thomson <[email-masked]>
Date: Wed, 15 Feb 2017 17:17:34 -0800

Yeah, once the connection is up and the handshake is complete, all we have there is NewSessionTicket messages.  Those aren't actually high priority.  They could be safely given the lowest priority and everything would still work.  Worst case, the ticket gets delayed, you open a new connection and get hit with a stateless reject for source address validation or you fail to resume. 

I think that I will make this MUST strength, but add a condition that it only applies prior to the handshake completing.

-- 
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/pull/303#discussion_r101425740

---

From: ianswett <[email-masked]>
Date: Thu, 16 Feb 2017 08:07:18 -0800

SGTM

-- 
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/pull/303#discussion_r101556085

---

From: ianswett <[email-masked]>
Date: Thu, 16 Feb 2017 08:07:41 -0800

ianswett approved this pull request.

-- 
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/pull/303#pullrequestreview-22288571

---

From: janaiyengar <[email-masked]>
Date: Thu, 16 Feb 2017 22:40:24 -0800

janaiyengar approved this pull request.

LGTM, but looks like there are conflicts now.

-- 
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/pull/303#pullrequestreview-22430822

---

From: Martin Thomson <[email-masked]>
Date: Fri, 17 Feb 2017 00:54:18 -0800

d891197  Merge branch 'master' into transport_priority

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/303/files/7197aff9853d2664987b2bf26b9aa03efce6b334..d8911972c6bc142eed1bb7f789c46f74d53e0645

---

From: Martin Thomson <[email-masked]>
Date: Fri, 17 Feb 2017 00:54:27 -0800

Deconflicted.

-- 
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/pull/303#issuecomment-280592325

---

From: janaiyengar <[email-masked]>
Date: Fri, 17 Feb 2017 09:38:36 -0800

Merged #303.

-- 
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/pull/303#event-967299999