- From: Roberto Peon <grmocg@gmail.com>
- Date: Thu, 17 Oct 2013 11:17:13 -0700
- To: Jeff Pinner <jpinner@twitter.com>
- Cc: RUELLAN Herve <Herve.Ruellan@crf.canon.fr>, Fred Akalin <akalin@google.com>, Roberto Peon <fenix@google.com>, "ietf-http-wg@w3.org Group" <ietf-http-wg@w3.org>
- Message-ID: <CAP+FsNemC1hVZ1ippNyvXjMevoSKJmxe45CAP68AueFJ=_Hvow@mail.gmail.com>
Lets call this #6. -=R On Thu, Oct 17, 2013 at 11:15 AM, Jeff Pinner <jpinner@twitter.com> wrote: > Another option: > > Do not allow indexed representations to use the static set. If you can > only use the set for literal representations (with or without indexing) > then you could never add anything from the static set to the reference set. > No need to track emitted status. Problem sovled. > > This would mean a slight overhead when sending the initial ":scheme" or > ":method" headers since you would have to encode the values. > > It would mean that we could remove values (and thus duplicates) from the > static set since they could never be referenced. > > > > On Thu, Oct 17, 2013 at 10:44 AM, Roberto Peon <grmocg@gmail.com> wrote: > >> We most definitely want to be able to clear out all compression state. >> >> An example use-case is that we'll have long-lived connections from just >> about any client that wants server-side notifications. Leaving lots of >> memory lying about unused (~99% to ~99.9% of the time things are idle) has >> strongly negative utility. I'd rather use that memory to have larger >> compression contexts for connections which are active, or to allow more >> connections, or, in the case of mobile devices, to yield more memory to >> actively running processes. >> >> So, it would be a very good thing to be able to completely de-allocate >> the compression context until communication is going on. >> Terminating the connection is not a desirable mechanism for accomplishing >> this, as it requires both significant latency and significant CPU to >> reconnect. Reconnecting implies a worse experience for all users, and for >> mobile devices also implies decreased battery life. Ick/should be avoided. >> >> >> #1 strictly bounds the amount of memory used. I do like that a lot. >> I'd imagine that #1 would be specified approximately as: >> Evict entries normally as per eviction rules. >> if size(header table) is zero, size(header context) > >> MAX_HEADER_CONTEXT_SIZE, evict the highest indexed reference from the >> reference set. >> if MAX_HEADER_CONTEXT_SIZE is zero, then the receiver side need never >> allocate a header context/may completely deallocate it. >> >> MAX_HEADER_CONTEXT_SIZE would replace MAX_HEADER_TABLE_SIZE. We'd still >> use only one setting (just rename it). >> >> #2 is fairly clean, and would be a close-second choice. This perhaps >> minimizes complexity. I could be made to like this one :) >> I'd assume that the mechanism to accomplish #2 would be a setting >> which toggles whether or not the reference set is allowed to have any >> elements. >> Thus, if HEADER_TABLE_SIZE is 0 and REFERENCE_SET_DISABLED is true, >> the receiver is guaranteed to require no compression context. >> The main thing I dislike about this option is that it requires >> another setting. The main advantage is that this is essentially all it >> requires. >> >> #3 doesn't solve the problem better than #2, as we'd still need something >> like #2 for the decoder-side to signal to the encoder-side that it would >> like this state to be cleared. >> >> #4 is less clean than #2, but I prefer it to #3, as it is also a complete >> solution. >> We would also need to specify that this implies that one cannot add >> elements to the reference set when the size is zero (essentially, the same >> mechanism used for adding entries to the header table which don't fit). >> >> There is another option as well: >> >> #5 When referencing an element from the static set, instead of inserting >> a reference to the static-table entry, instead copy the element into the >> header table and add a reference to it there. >> References stored in the reference set must point only to elements >> of the header table with this option. >> >> This solves the problem without requiring any additional signaling, >> but at the cost of worse compression, and increased CPU consumption >> (copying). >> >> -=R >> >> >> On Thu, Oct 17, 2013 at 7:34 AM, RUELLAN Herve < >> Herve.Ruellan@crf.canon.fr> wrote: >> >>> I'm wondering if we want to be able to clear out all compression state. >>> We currently have 59 entries in the static table, meaning 8 bytes to store >>> whether they are in the reference set or not. >>> >>> I we want this, I think #1 is too complex. >>> >>> It means that sending an index (therefore adding a new entry to the >>> reference set) may trigger an eviction. >>> >>> We have several other solutions for this: >>> - #2 >>> - 3 Adding the possibility of clearing the reference set inside a header >>> block. >>> - 4 Having a special rule for a max header table of 0, stating that this >>> clears all the compression state. >>> >>> >>> My preference is for 2 or 3. >>> >>> Hervé. >>> >>> >>> > -----Original Message----- >>> > From: Fred Akalin [mailto:akalin@google.com] >>> > Sent: jeudi 17 octobre 2013 04:10 >>> > To: Roberto Peon >>> > Cc: ietf-http-wg@w3.org Group >>> > Subject: Re: I ran across this while working on the spec. >>> > >>> > (copying from issue) >>> > >>> > #1 <https://github.com/http2/http2-spec/issues/1> has the problem >>> that it >>> > introduces an ambiguity in what to do when reducing the max size >>> (clear out >>> > the reference set first?). But if we specify exactly what to do when >>> reducing >>> > the max size, then that isn't that bad. >>> > >>> > >>> > >>> > On Wed, Oct 16, 2013 at 5:37 PM, Roberto Peon <fenix@google.com> >>> wrote: >>> > >>> > >>> > https://github.com/http2/http2-spec/issues/281 >>> > >>> > Setting the max header size to 0 does not clear out all encoder >>> state. >>> > >>> > In particular, elements to the reference set that are pointing >>> to static >>> > table elements are not cleared out. >>> > >>> > There are a couple of obvious ways of fixing this: >>> > 1) Include the space used in the reference set in the overhead >>> (e.g. >>> > 2-bytes per reference) >>> > 2) explicit SETTING for clearing the compression state >>> > >>> > >>> > I prefer #1. >>> > >>> >>> >> >
Received on Thursday, 17 October 2013 18:17:41 UTC