Re: Updated QCRAM Draft

Dmitri Tikhonov <dtikhonov@litespeedtech.com> Wed, 24 January 2018 16:49 UTC

Return-Path: <dtikhonov@litespeedtech.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 D4D34127010 for <quic@ietfa.amsl.com>; Wed, 24 Jan 2018 08:49:57 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level:
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=litespeedtech-com.20150623.gappssmtp.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 Xz2yh8GaHUxV for <quic@ietfa.amsl.com>; Wed, 24 Jan 2018 08:49:55 -0800 (PST)
Received: from mail-qt0-x22e.google.com (mail-qt0-x22e.google.com [IPv6:2607:f8b0:400d:c0d::22e]) (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 B9DFB126DCA for <quic@ietf.org>; Wed, 24 Jan 2018 08:49:54 -0800 (PST)
Received: by mail-qt0-x22e.google.com with SMTP id o35so11912534qtj.13 for <quic@ietf.org>; Wed, 24 Jan 2018 08:49:54 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=litespeedtech-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-disposition:in-reply-to:user-agent; bh=NckQ/hrDS4DXIzq2ct3TFyn+4QH9yfhgwLGlEyIZflk=; b=P4tRPnHT2/bkghXDIfXIIBYayE8RGq+QyhVM3V4mpWdE5/2GCGUf2OdF9oY6wbUDp+ +bk5Op7KVeMOrUWCWGdjcWMakU3gt1K7SKX4w+ll7wiCV4fgT1NC5EIEtTirNSK3FRNl /ohxoqO0jGmln3xu5P5/yNi9o3U48s1L/KQa01zb+9yYIcYighx2mTqtK3NHU1J8IoDB xDb3b7am0Cax+M/lVU/BYqw47pG2kPiImVKFdDWIFARDdXAt/wHTMilhLV2Ly2qXVqgW mxpj64Y70cOZZ4zHjIz8+NZHewxtJI1epD3Q8Kapgl3pn3UzKOJzUvd/bmlCPoyWBPur zl2w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :in-reply-to:user-agent; bh=NckQ/hrDS4DXIzq2ct3TFyn+4QH9yfhgwLGlEyIZflk=; b=ua6wN3HpLTE99SYXBwK3esnaCCx50fK+UMVQO/lrFNW/1oYGeUpm8XQnx0Bj7+c/l6 hcZkkRLUqLBub5sIHPqLcVYYjeG7aEhtub8sh1Cl5Bj/P35aJ5tZYzjGa5T/zenChwxu OuAztddo8DJJ3j+8S/F8EyjcX9IjZXVyX+uatVoHLu+bZHte7P78QNzU7H9ic/OSWuuj GpEp5fjwz9umhDRL7C2tj+/tr7d56BtXfJwBs8nuMtkW8DdTw/1JXtOriqrepFgauIHa 5WKcB5kY51cQ4elw87EgwI0CdFj0YnMsDsPVr2STaj3M0IAd744WgQc/bVAuVYzhV5Hy NSOQ==
X-Gm-Message-State: AKwxytd/ChzM28eo09rBbijmwZPyxQVlraM3zrFOGXn0IE0EaJJiLtT6 i6pLv1onUu/MdLWnPFVVqaX0Hg==
X-Google-Smtp-Source: AH8x227mcuJHkxGkAOvtH9310rSR8DLmL/SgyJ/8XxfEc0a8bWD+C02DibVtmmuHFRXy0pQUeuGC3w==
X-Received: by 10.55.207.156 with SMTP id v28mr10014152qkl.36.1516812593662; Wed, 24 Jan 2018 08:49:53 -0800 (PST)
Received: from ubuntu-dmitri (ool-2f1636b6.static.optonline.net. [47.22.54.182]) by smtp.gmail.com with ESMTPSA id x79sm586325qkg.38.2018.01.24.08.49.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Jan 2018 08:49:53 -0800 (PST)
Date: Wed, 24 Jan 2018 11:49:51 -0500
From: Dmitri Tikhonov <dtikhonov@litespeedtech.com>
To: Mike Bishop <mbishop@evequefou.be>
Cc: IETF QUIC WG <quic@ietf.org>, Charles 'Buck' Krasic <ckrasic@google.com>
Subject: Re: Updated QCRAM Draft
Message-ID: <20180124164950.GC7729@ubuntu-dmitri>
Mail-Followup-To: Mike Bishop <mbishop@evequefou.be>, IETF QUIC WG <quic@ietf.org>, Charles 'Buck' Krasic <ckrasic@google.com>
References: <MWHPR08MB2432AA6E7D43B2318F23B671DAE20@MWHPR08MB2432.namprd08.prod.outlook.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <MWHPR08MB2432AA6E7D43B2318F23B671DAE20@MWHPR08MB2432.namprd08.prod.outlook.com>
User-Agent: Mutt/1.5.24 (2015-08-30)
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/YjnhdliEhI9XQvIQKuq3myDW2Eo>
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: Wed, 24 Jan 2018 16:49:58 -0000

On Wed, Jan 24, 2018 at 05:53:55AM +0000, Mike Bishop wrote:
> 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!

Single Control Stream Prevents QCRAM-04 from Solving HoLB
=========================================================

    Abstract:  A consice overview of the HoLB problem is presented.
    The QCRAM-04 approach to solving this problem is analyzed.  A
    problematic design choice is identified and its impact assessed.
    An alternative design is suggested.

Problem Statement
-----------------

QCRAM-04 is a version of QCRAM in which all table updates occur on a
dedicated control stream.  This restriction has a negative effect on
the protocol's ability to minimize HoLB.  There exists a class of
applications for which QCRAM-04 does not solve HoLB, solely as a
result of introducing ordering to otherwise independent operations.

The Original HoLB Problem
-------------------------

The original HoLB problem that we are trying to solve is as follows.
HPACK/GQUIC delivers all HTTP message headers as header blocks on a
separate control stream.  HTTP message payload (bodies) are sent on
different streams, one message per stream.  The application (HTTP)
cannot process message bodies without the headers; it must have the
headers before it starts reading from the message stream.

    +----------------+----------------+
    | Header Block A | Header Block B |
    +----------------+----------------+

    +----------------+
    | Message A Body |
    +----------------+

    +--------------------------------+
    |        Message B Body          |
    +--------------------------------+

  Figure 1: HPACK/GQUIC: Control stream carrying two header blocks and
            two streams carrying message bodies.

If a packet carrying part of the Header Block A is lost, Header Block B
and, therefore, the whole of Message B cannot be processed, even if all
of the packets carrying Header Block B and Message B Body have arrived.
Message B is stalled until the lost packet is retransmitted successfully
and the control stream is unblocked.  This is the HoLB problem.

Proposed Solutions
------------------

The solutions to the HoLB problem fall into two categories:

    1. Avoidance:  Disallow vulnerable references.  This approach is
       robust and simple to implement, but carries a compression
       performance penalty.

    2. Minimization:  Allow vulnerable references, but minimize their
       impact.  This approach looks to achieve maximum compression at
       the cost of protocol and implementation complexity.

QCRAM and QPACK belong to the second category.  Until QCRAM-04, both
carried table updates on multiple streams, for the following reason:

Coping with False Dependencies
------------------------------

(Refer to Figure 1 again).  If Header Block B uses a dynamic entry
inserted by Header Block A, then B cannot be processed until A has
been processed; this is a true dependency.  If, however, Header Block B
does not depend on any insertions performed by Header Block A, placing
them in order on a single control stream introduces a false dependency.
The design choice of placing dynamic table updates on separate streams
is driven by desire to eliminate false dependencies and, thereby, to
minimize HoLB.

How QCRAM-04 is Different From HPACK/GQUIC
------------------------------------------

QCRAM-04 moves parts of header blocks from the control stream to the
individual message streams.  This means that if a particular message's
headers do not cause an insertion into the dynamic table, this message
does not have to write to the control stream.  This eliminates some
false dependencies and is an improvement over HPACK/GQUIC.

    +---------------------------+
    | Updates Associated with A |
    +---------------------------+

    +----------------+----------------+
    | Header Block A | Message A Body |
    +----------------+----------------+

    +----------------+--------------------------------+
    | Header Block B |          Message B Body        |
    +----------------+--------------------------------+

  Figure 2: QCRAM-04: control stream carrying table modifications upon
            which Header Block A depends and message streams for
            messages A and B.  Message B can be processed if parts of
            message A are lost.

False Dependencies Remain
-------------------------

If messages A and B cause independent updates to the dynamic table,
they are written to the control stream.  This fact makes message B
depend on message A: a false dependency.

    +-----------------------+-----------------------+
    | Updates Assoc. with A | Updates Assoc. with B |
    +-----------------------+-----------------------+

    +----------------+----------------+
    | Header Block A | Message A Body |
    +----------------+----------------+

    +----------------+--------------------------------+
    | Header Block B |          Message B Body        |
    +----------------+--------------------------------+

  Figure 3: QCRAM-04: control stream carrying independent table
            modifications which, nevertheless, make Message B
            depend on Message A: a false dependency.

Note that Figure 3 and Figure 1 are quite similar.

Three Application Classes
-------------------------

To analyze how QCRAM-04 improves over HPACK/GQUIC, we should consider
three application classes (basically, usage patterns):

    I.   Dependent header blocks;
    II.  Independent header blocks without table modification; and
    III. Independent header blocks with table modification.

I. Dependent Header Blocks
--------------------------

If Header Block B uses table entries added by Header Block A, there is
not much one can do about that: A must be processed before B, no matter
how the header blocks are transmitted.  QCRAM-04 and HPACK/GQUIC do not
introduce HoLB: this is the property of the application itself.

II. Independent header blocks without table modification
--------------------------------------------------------

Header blocks that do not modify the dynamic table do not require the
use of the control stream in QCRAM-04 (see Figure 2).  This is a clear
improvement over HPACK/GQUIC, which introduces a false dependency and
risks HoLB by delivering all header blocks over the same stream.

III. Independent header blocks with table modification
------------------------------------------------------

If Header Blocks A and B insert different entries into the dynamic
table and Header Block B does not use any entries inserted by A, both
QCRAM-04 and HPACK/GQUIC introduce a false dependency by delivering
unrelated table updates associated with A and B on the same stream
(see Figure 3).

Quantitatively, QCRAM-04 is a little better than HPACK/GQUIC here.
This is because it sends less data on the control stream, which means
that the chances of packet loss are smaller.  However, the improvement
is small: the control stream carries table updates, which is most of
the header block data.

Summary
-------

QCRAM-04 achieves HoLB minimization in one class of applications, but
not in the other, where it introduces a false dependency.  This means
that the answer to the question "Will my application suffer from
protocol-induced HoLB were I to switch to HTTP/QUIC?" is "It depends."
That is not good enough.  In the HoLB minimization approach, independent
dynamic table updates must be sent on different streams.

  - Dmitri.