Subject: HTTP/3 with strict priorities (PR #2700)

From: Dmitri Tikhonov <[email-masked]>
Date: Wed, 15 May 2019 16:54:52 -0400

Hello Ian,

You opened a PR that proposes YAHPM (Yet Another HTTP Prioritization
Mechanism) -- HTTP/3 with Strict Priorities.  Having read through the
diff, I have several questions.  I am using this medium because your
PR does not have an associated bug.

1. What is a _strict priority_?

    There is no definition of strict priority that I could find
    in the diff.  Do strict priorities work outside of the
    dependency tree?  For example, which stream has higher priority
    in the following figure?

                (Root Node)
               /           \
              /             \
    (Placeholder A,     (Placeholder B,
     Weight 50)             Weight 100)
        |                    |
        V                    V
    (Stream P,          (Stream Q,
     Priority 100)       Priority 50)

2. Why require PRIORITY frames delivered on own streams?

    " In order to ensure that prioritization is processed in a
    " consistent order, any subsequent PRIORITY frames for that
    " request MUST be sent on the request stream.

    This requirement is unfortunate, as Lucas Pardue has already
    observed (see PR comments).  Is this done to avoid introducing
    false stream dependencies or is there another reason for this
    requirement?

3. What problem do all-or-nothing resources solve?

    " When [weight is] absent, indicates the resource should be
    " delivered all at once or not at all.

    This is new.  I don't believe I've seen it in other prioritization
    proposals.  Adding this dimension increases complexity.  What
    problem do these all-or-nothing resources solve?

Thank you,

  - Dmitri.

---

From: Ian Swett <[email-masked]>
Date: Wed, 15 May 2019 17:51:27 -0400

Thanks for taking a look Dmitri.  I just added Issue #2502
<https://github.com/quicwg/base-drafts/issues/2502> to the PR.  It was
inadvertently sent out slightly before it was done, so there are some
details I'm still trying to fix.

>      Priority 100)       Priority 50)

Strict priorities are only relative to other siblings under the same
placeholder/root.  I'll clarify that.  Currently the text says "Higher
priority elements have all available data sent before elements of lower
priority."

>     false stream dependencies or is there another reason for this

I made the change because it was a simplification that was possible, but I
think it's a poor choice on my part so I'm going to go back to allowing
PRIORITY on either the request stream or control stream, I just haven't had
a chance to update the PR yet.

>     problem do these all-or-nothing resources solve?

This is an effort to incorporate Patrick Meenan's Round Robin Sequential
and Round Robin Interleaved proposal, as outlined on slide 49 here:
https://github.com/HTTPWorkshop/workshop2019/blob/master/talks/pardue-jones-priorities.pdf
or
here: http3-prioritization-proposal
<https://github.com/pmeenan/http3-prioritization-proposal/blob/master/README.md>

I'm sure Patrick could rewrite this text more clearly, and I think
Patrick's explanation for the motivation is solid.

---

From: Dmitri Tikhonov <[email-masked]>
Date: Fri, 17 May 2019 10:55:41 -0400

> >     dependency tree?  For example, which stream has higher priority
--- 8< --- 8< --- 8< ---
> priority elements have all available data sent before elements of lower

I see, so this is two levels of prioritization, with weights (if present)
serving to determine how resources are allocated to streams that have the
same priority.  This feature is analogous to priority and concurrency in
Patrick Meenan's proposal. [1]

> Patrick's explanation for the motivation is solid.

I could not find the "all at once or not at all" concept mentioned
in these documents, nor did I succeed in mapping the "not at all"
part to anything in Patrick's proposal.  Where can I find his
explanation for the motivation?

  - Dmitri.

1. https://github.com/pmeenan/http3-prioritization-proposal

---

From: Ian Swett <[email-masked]>
Date: Fri, 17 May 2019 16:59:58 -0400

On Fri, May 17, 2019 at 10:56 AM Dmitri Tikhonov <
[email-masked]> wrote:

> > <
> https://github.com/pmeenan/http3-prioritization-proposal/blob/master/README.md
> >
> >

I'm referencing "Sequential" and "Interleaved" on slide 49.

I added this text after your original review, which hopefully is clearer:
"Higher priority elements have all available data sent before elements of
lower
priority.  When multiple elements have the same priority, if a weight is
specified, elements with weights are interleaved.  If a weight is 0, either
because it is the default weight or it was not specified, then elements are
delivered sequentially and all available data from one element is sent
before
any data from the next.  If a given priority level has some elements with
weights and some without, the two groups share the available bandwidth
equally."