- From: Greg Wilkins <gregw@intalio.com>
- Date: Wed, 15 Oct 2014 13:37:15 +1100
- To: Roberto Peon <grmocg@gmail.com>
- Cc: Willy Tarreau <w@1wt.eu>, Mark Nottingham <mnot@mnot.net>, HTTP Working Group <ietf-http-wg@w3.org>, Jeff Pinner <jpinner@twitter.com>
- Message-ID: <CAH_y2NEfOXWRtEbO+uUCKroW+NPGtyjqxNan3p5G+uFzuxxnCA@mail.gmail.com>
On 15 October 2014 04:17, Roberto Peon <grmocg@gmail.com> wrote: > One byte more overhead is significant when the amount of overhead was > typically one byte to begin with, > Well if looked at in that way, removing the reference set was an increase of 0 bytes to 1 byte for many headers, so an infinite increase in size. Yet when looked at overall, the impact was negligible. I agree that we need good efficient compression for dynamic headers, and am willing to consider changes to ensure we get the balance right (such as reducing the static table). But I think that switching the index's back adjusts the balance too far away from the very common use case of static headers and static header names. Here are my numbers for the test data run with h2-14, then removing the suggested static headers (except Date), then adding in the suggested static values: *size* *H2-14* *reduced* *values* 0 63.50% 64.40% 62.10% 4096 34.50% 34.20% 33.50% 8192 33.20% 32.70% 32.60% 12288 33.30% 32.60% 32.50% So for the test data, reducing the static table size has hardly any affect and by adding in values, the effect is often slightly positive. So such a change looks to at least do no harm. Question is, does it do any good for lots of dynamic headers - I'm happy to try answer that, but can do so only if somebody can give me some test data to run against. The worst possible impact of this means that one cannot bit-blit a large > number of static headers-- one must add them one at a time or fix them up. > Not just static headers, but dynamic headers that use static names. > I'll bet that I can show that this makes almost zero difference in CPU > when implemented properly (there is little magical about a bit-blit to > begin with)-- I'd be shocked if we couldn't do 100s of millions of > header-sets per second on a single core. > While I'm sure that dedicated code can be written to generate h2 headers very quickly, the reality is that servers are not written to be dedicated to h2. The fast bulk of the header generation and handling code is written protocol neutral and has to work for http, spdy, h2, fastcgi, etc. In that environment we have found it extraordinary difficult to introduce header pre-generation when the bytes generated are a function of the connection and sequence that the header will be sent. For example, we regenerate headers when we move a static resource into the cache, which is done without reference to any particular protocol or connection. While the actual operation of customising a header for a particular connection might just be a lookup and an add, there is a lot of complexity required to work out when and if this addition is needed and bringing all the required information to the correct point in the code. I know this is a specific example, but I am sure that in general far better and simpler optimisations can be done with encodings that are immutable rather than with ones that are a function of connection and time. regards -- Greg Wilkins <gregw@intalio.com> @ Webtide - *an Intalio subsidiary* http://eclipse.org/jetty HTTP, SPDY, Websocket server and client that scales http://www.webtide.com advice and support for jetty and cometd.
Received on Wednesday, 15 October 2014 02:37:44 UTC