Re: Updated QCRAM Draft

"Charles 'Buck' Krasic" <ckrasic@google.com> Thu, 25 January 2018 21:03 UTC

Return-Path: <ckrasic@google.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6229512EAB0 for <quic@ietfa.amsl.com>; Thu, 25 Jan 2018 13:03:53 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.009
X-Spam-Level:
X-Spam-Status: No, score=-2.009 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 157Qd0PL4kdX for <quic@ietfa.amsl.com>; Thu, 25 Jan 2018 13:03:50 -0800 (PST)
Received: from mail-ot0-x231.google.com (mail-ot0-x231.google.com [IPv6:2607:f8b0:4003:c0f::231]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 15F6212EAAF for <quic@ietf.org>; Thu, 25 Jan 2018 13:03:50 -0800 (PST)
Received: by mail-ot0-x231.google.com with SMTP id d7so8075105oti.0 for <quic@ietf.org>; Thu, 25 Jan 2018 13:03:50 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=nsdkNwAXdrPzGnz8kHibQ2a7LVVpZjynQSMCYhAGvXg=; b=hBDeUUBbh8YsW1OnA/rKj4Z0WDeWRJZp0xI6gdot9pToM1Rc7/bgsuN54peEk71sC1 fonIdo4EbDsJPEGuI6fqaVEGJa6Cz/b8WAdIEzUzWIV95c5VpjeHhPntn6ki8YyqTJYF dLm1O5Cx+r3Bst81C2tvvtmkxWaFZ9lGOhV3ol/mSPnIsGxcebTEt7KsX21TLNIwc5rA csNPmj2iskiUvT6Z9mtRJ61iG4X+7N2A+cHndlyW9nhHm9InUuafjGbka8iZXZzF7WvN yvwltoFUiGyS8mKRfy0sztZzebq8SgItNN4KO+jqyF43QZKnsOh6B3gHTe2fzHrgqCJg Rzug==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=nsdkNwAXdrPzGnz8kHibQ2a7LVVpZjynQSMCYhAGvXg=; b=TlASxwuYSNA0TS/ZcBanqUBeaiM3b8rcQbhyhMxrtQoMRznxQgD5wfzfTVLjmHu2Wz r11DEqEiLuw+NQvRBMxzGROwfLQeiZ/pfv+5UmYZHZ+36l2ay5bCA4KMZKZNYBpd/PcW vaPIYUiU69hFHB07tg4nexjV+D518S6gQJsu9MOVhJhShOiryTrqIpVVsj7LNEsbTtDw owVb+aOWqQQE5AcCUPzGumbQXKuiTOcvJQWfeyIQoFA9XQrgAa53BwosLlPg2KbbGwa9 v4KN7bJmk4htqMNt34nFvW4GlcdHXgxepiOzoaSuvGlqfjKkCsgU4Ou5LVl71dRlJWDA GSVg==
X-Gm-Message-State: AKwxytenIo/WCR5Q9Ue1REFlQve4m0/pcg9smyNgfjKfYK4xLJT0cfzj 9yxgX1W1GZieXGlxedJdcsHJjFknFI1mvJdONR3N
X-Google-Smtp-Source: AH8x227j+HsSozz4Xpkbd+RjJW+LGh49poRTvLVoJXGzfwDrkPNj4Ao1PwM8Z/hIAHXs0UDtslv8uQ7ngazXR2+srew=
X-Received: by 10.107.59.66 with SMTP id i63mr13692185ioa.220.1516914228691; Thu, 25 Jan 2018 13:03:48 -0800 (PST)
MIME-Version: 1.0
Received: by 10.107.156.203 with HTTP; Thu, 25 Jan 2018 13:03:28 -0800 (PST)
In-Reply-To: <CANatvzw8VMCUu-vuZu1gRuydF=yE3s-7J0TLE8kahWACTbX6vQ@mail.gmail.com>
References: <MWHPR08MB2432AA6E7D43B2318F23B671DAE20@MWHPR08MB2432.namprd08.prod.outlook.com> <CANatvzw6fFOuStZS+WOpA8HnkBHu7OxU9DTsKCWGeK73_mZFpQ@mail.gmail.com> <CAGD1bZZTnsL2KEmU4RL2TemjKph2Jnx+s-qHZikz=AQKsnXfvw@mail.gmail.com> <CANatvzxijP_HDxtAXZBSiaks1waGAo5EETjTMx+WH=TmF1H+7Q@mail.gmail.com> <CAD-iZUZ3cfekWxjn1NWucqyzw4UkNv6B6eLqd7TRc-89nBsFyA@mail.gmail.com> <CANatvzw8VMCUu-vuZu1gRuydF=yE3s-7J0TLE8kahWACTbX6vQ@mail.gmail.com>
From: Charles 'Buck' Krasic <ckrasic@google.com>
Date: Thu, 25 Jan 2018 13:03:28 -0800
Message-ID: <CAD-iZUZKg0xmYVeDboiZ51d9RppqVHG4vwLJG8w+ex-MVMcw7A@mail.gmail.com>
Subject: Re: Updated QCRAM Draft
To: Kazuho Oku <kazuhooku@gmail.com>
Cc: Jana Iyengar <jri@google.com>, Mike Bishop <mbishop@evequefou.be>, IETF QUIC WG <quic@ietf.org>
Content-Type: multipart/alternative; boundary="94eb2c068686c268e70563a01d29"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/k8KDAbgDTJuwTAwd0ldhPVjzOZI>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 25 Jan 2018 21:03:53 -0000

I've gotten the simulator working with QCRAM -04 changes, specifically the
part that moves all updates to the control stream.

I ran some tests to compare hpack, qcram-03 and qcram-04.


                   HolBs     (%)
hpack         850         100
qcram-03   27            3.2
qcram-04   46            5.4

HolBs here are requests that experienced Hol blocking.

I think the main reason -04 doesn't degrade to HPACK is that there are
quite a lot of requests that do no updates.   Note that the indexing
strategy doesn't index :path.

Additional details:

The har was a facebook of my own.  I got it from chrome, using developer
tools For reference it has 299 requests, and 167955 uncompressed header
bytes.

The table maxed out at 38 entries (same for all runs).

The HolBs above are totals over 10 runs of each scheme.  I ran multiple
times to smooth variation due to the randomization of the simulator.

I set the simulator loss rate of 0.35, which may be insanely high, but it
stresses HoL Blocking.










On Wed, Jan 24, 2018 at 9:06 AM, Kazuho Oku <kazuhooku@gmail.com> wrote:

> Hi,
>
> Thank you for the response.
>
> 2018-01-25 3:44 GMT+11:00 Charles 'Buck' Krasic <ckrasic@google.com>:
>
>>
>>
>> On Wed, Jan 24, 2018 at 7:27 AM, Kazuho Oku <kazuhooku@gmail.com> wrote:
>>
>>> 2018-01-24 23:10 GMT+11:00 Jana Iyengar <jri@google.com>:
>>> >
>>> > The draft outlines what I think the room converged on, and it seems
>>> fairly straightforward -- thanks for the quick turnaround!
>>> >
>>> > Kazuho: I could be wrong, so Buck or Mike should correct me if so, but
>>> I believe the "Base Index" is basically what I think of as the "generation
>>> ID" of the table. It reflects the number of table operations that have
>>> happened... this is important when you have evictions, since just a
>>> reference to the largest index is ambiguous if there have been evictions.
>>>
>>> Jana, thank you for the response.
>>>
>>> Please correct me if I am wrong, but the below is my understanding.
>>>
>>> Modifications to the HPACK state only happens on the Control Stream.
>>> So we do not need to rely on the index to determine how the state
>>> needs to be changed.
>>>
>>
>> Great point.  The prefix is not needed for the modifications to HPACK
>> state, i.e. for the blocks delivered on the Control Stream.
>>
>>
>>>
>>> For HEADERS frames sent over non-control streams, the only information
>>> that the decoder needs is the absolute indices of the header table,
>>> which can be encoded as largest_index (or whatever you call) plus the
>>> deltas.
>>>
>>> >
>>> >
>>> > I don't understand however how the largest index is "Base Index -
>>> Depends". I would've thought the largest index would simply be "Depends".
>>> What am I missing?
>>>
>>
>> Alan F.  also made a similar point.
>>
>> Base index is for interpreting indexed representations correctly
>> regardless of re-ordering.  It is basically the total number of insertions
>> that happened before the current block has processed.
>>
>> Depends is for ensuring that the decoder blocks if necessary to wait for
>> table updates the current block depends on.
>>
>> The 'Base Index - Depends' is poorly written and needs an example, sorry
>> about that.   The point I was trying (badly) to make was that depends is
>> encoded relative to Base Index so that it's size stays bounded, it's just
>> an optimization to save bytes for the case of very long lived connections.
>> Note that Base Index does not have such bound right now.  Maybe a change to
>> specify wrap-around  might be a reasonable way to also bound Base Index.
>>
>> Alternatively, and maybe this is what you just said (?), the two could be
>> combined into one number.
>>
>
> Yes. That is what I have been thinking of.
>
>
>> I think that is tricky because one does not naturally know "depends" yet
>> while emitting indexed entries.
>>
>
> I think that the encoder needs to do a two-pass operation regardless of if
> we encode two numbers (i.e. base_index, depends) or just one. This is
> because since base_index and depends cannot be determined until the encoder
> iterate through all the headers.
>
> So to me it seems that it is not tricker for an encoder to use an unified
> value; in the first pass the encoder determines the absolute index, and
> then in the second pass emit the unified "base index" plus the deltas.
>
>
>>     It could be in practice that either the depends flag is false, or it
>> is true and the Depends value is the same as Base Index.   This was
>> definitely not true with QCRAM-03, but it might well be with QCRAM-04.
>> That's what I hope to sort out ASAP with updates to the simulator. 🤔
>>
>
> I understand that it's hard to update all the related code as we adjust
> the approach. Thank you for your efforts!
>
>
>>
>>
>>
>>
>>
>>> >
>>> > On Wed, Jan 24, 2018 at 8:11 PM, Kazuho Oku <kazuhooku@gmail.com>
>>> wrote:
>>> >>
>>> >> Buck,
>>> >>
>>> >> Thank you for the draft.
>>> >>
>>> >> I like the approach and I think that it is not difficult to implement.
>>> >>
>>> >> Reading the spec, the question I have is why you need the BLOCKING
>>> flag and two variables (i.e. base index and depends). Can't each HEADERS
>>> frame always hold just one offset (i.e. largest index that the frame refers
>>> to)?
>>> >>
>>> >> Maybe I am missing something.
>>> >>
>>> >>
>>> >> 2018-01-24 16:53 GMT+11:00 Mike Bishop <mbishop@evequefou.be>:
>>> >>>
>>> >>> Buck has posted an updated QCRAM draft at
>>> https://tools.ietf.org/html/draft-krasic-quic-qcram-04 -- please read
>>> before tomorrow’s meeting so we can have a useful discussion.  Thanks!
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> Kazuho Oku
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> Kazuho Oku
>>>
>>
>>
>>
>> --
>> Charles 'Buck' Krasic | Software Engineer | ckrasic@google.com | +1
>> (408) 412-1141 <(408)%20412-1141>
>>
>>
>
>
> --
> Kazuho Oku
>



-- 
Charles 'Buck' Krasic | Software Engineer | ckrasic@google.com | +1 (408)
412-1141