Subject: Re: [quicwg/base-drafts] Split instruction space (#1123)

From: afrind <[email-masked]>
Date: Thu, 08 Mar 2018 21:48:59 +0000 (UTC)

I'm not sure if it's better to have the discussion on the issue or the PR (or the list).

In my implementation, decoding a QCRAM request block after Depends and an HPACK block are exactly the same code, except for throwing an error on invalid instructions.  I think there's value in this code sharing that shouldn't be overlooked.  

My initial simulations of QCRAM show it to perform about as well as HPACK compression ratio wise - maybe .2% less.  More efficient use of the bits by itself isn't enough to sway me to give up the code re-use.  It's more concerning that an encoder can tell the decoder to do things that don't make sense - duplicate a static index, or try to update the table from a request stream.  It's simple enough to add a few error checks in these cases though.

This is an important decision that is gating a number of other improvements we need to make to the specification.  Please weigh in with your thoughts of balancing code reuse vs small efficiency gains and fewer error checks.

-- 
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/issues/1123#issuecomment-371636055

---

From: Mike Bishop <[email-masked]>
Date: Thu, 08 Mar 2018 14:02:55 -0800

Not the PR -- issue or list.  From the list, the savings are:

- One byte saved for:
    - Insert w/ Name Reference from Dynamic (first 63 entries)
    - Insert w/o Name Reference (header names <32 octets long)
    - Literal w/ Name Reference from Dynamic (first 15 entries)
    - Literal w/o Name Reference (header names <16 octets long)
- One byte lost for Indexed headers in indices 62-63

Those seem like fairly common instructions, so the savings are interesting, albeit perhaps not huge.  You mention that the decode is the same, modulo the error checks; encode is going to be noticeably different, however, which means your library is already half-disjoint.

-- 
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/issues/1123#issuecomment-371639867

---

From: Martin Thomson <[email-masked]>
Date: Thu, 08 Mar 2018 23:55:48 +0000 (UTC)

I have three decoders: one for HPACK instructions, one for QPACK table updates, and one for QPACK header blocks.  The amount of overlap between the first and the latter two is actually pretty minimal - they dispatch to similar but not identical code which could still be shared, maybe (my go skills are still only a few weeks old).

-- 
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/issues/1123#issuecomment-371666211

---

From: krasic <[email-masked]>
Date: Fri, 09 Mar 2018 14:09:31 -0800

Perhaps a post to the list soliciting input from the wider group?   

I don't feel super strongly either way (as I mentioned in #1141), I am slightly inclined to stay closer to HPACK instruction format.  The proposed changes have merit, I'm skeptical that the performance gains will be large.   On the other hand, I don't think they're so complex that they obviously threaten the overall schedule.     

-- 
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/issues/1123#issuecomment-371959427

---

From: Mike Bishop <[email-masked]>
Date: Fri, 09 Mar 2018 15:09:37 -0800

There's already been one e-mail to the list, and the only response was from @martinthomson.

-- 
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/issues/1123#issuecomment-371971447

---

From: krasic <[email-masked]>
Date: Sat, 10 Mar 2018 00:30:43 +0000 (UTC)

Not so much the details of which bytes are saved where, but more the question is re-use valued or not?  I was meaning a post more along the lines of afrind@'s comment above.  

-- 
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/issues/1123#issuecomment-371983760