Re: Large Frames, Continuations, Flow Control, and changing HPACK

There are two HOL blocking issues w.r.t. headers:
  1) HOL blocking because you can't send data frames while headers are
being transmitted.
  2) HOL blocking because you can't create other new streams while headers
are being transmitted.

Removing the reference set doesn't change either of these.

#1 occurs because of an artificial restriction added to the spec for the
sake of implementation simplicity.
We could remove tomorrow by allowing data frames to interleave with
headers/continuation.
#2 is the big(ger) issue.

The easiest solution to #2 is to send small headers, which is what commonly
takes place today.
Assuming that large headers are being sent, however,

Even without a reference set, anything that modifies or references state
places an ordering requirement on header data.
Getting rid of the reference set reduces HPACK code complexity for decoders
and encoders slightly, and that is about it as far as properties of that
change.
Making emission of the reference set explicit (instead implicit at the end
of the header block) helps to reduce encoder complexity somewhat, but the
opcode-frame-boundary-crossing issues still exist.

Jeff's proposal of separating SYN_STREAM is meant to help address #2.
I don't know if that would work, however, since knowing what the stream is
about or addressed to requires the headers, which in turn means that stream
creation is always tied to headers anyway... and you end up HOL blocking on
'em at the receiver, though not necessarily on the wire.
-=R


On Tue, Jul 8, 2014 at 2:28 PM, <K.Morgan@iaea.org> wrote:

> On 08 Jul 2014, at 19:05, "jpinner@twitter.com" <jpinner@twitter.com>
> wrote:
> >
> > To be clear, the proposal is:
> >
> > 1) Remove the reference set from HPACK (use "Linear-H")
> > 2) Increase the frame size to 16-bits
> > 3) Allow interleaving of HEADERS frames
> > 4) Remove the "\0" separator hack.
> >
> > Coupling this with my earlier proposal to add a "SYN_STREAM" header
> > would also allow us to:
> >
> > 5) Remove CONTINUATION frames entirely
> > 6) Move END_* flags to the last HEADERS frame
> > 7) Flow control HEADERS frames
> >
>
> Hi Jeff-
>
> Can you please explain why the SYN_STREAM frame is necessary? It seems to
> me that just removing the reference set would get rid of the need for
> CONTINUATION frames since there would no longer be a requirement to process
> all headers together as one big "jumbo block", just a requirement to
> process frames in order.
>
> To be short, it seems to me that getting rid of the reference set also
> solves 5, 6, & 7??
>
> -Keith
>
> This email message is intended only for the use of the named recipient.
> Information contained in this email message and its attachments may be
> privileged, confidential and protected from disclosure. If you are not the
> intended recipient, please do not read, copy, use or disclose this
> communication to others. Also please notify the sender by replying to this
> message and then delete it from your system.
>
>

Received on Tuesday, 8 July 2014 23:34:38 UTC