Re: [quicwg/base-drafts] QPACK improvement: wrap absolute index values (#1644)
Dmitri Tikhonov <notifications@github.com> Thu, 09 August 2018 20:56 UTC
Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 798B2130EF7 for <quic-issues@ietfa.amsl.com>; Thu, 9 Aug 2018 13:56:14 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8.009
X-Spam-Level:
X-Spam-Status: No, score=-8.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, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, T_DKIMWL_WL_HIGH=-0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.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 Ckdih8gsEagw for <quic-issues@ietfa.amsl.com>; Thu, 9 Aug 2018 13:56:12 -0700 (PDT)
Received: from out-6.smtp.github.com (out-6.smtp.github.com [192.30.252.197]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 8B950130FA0 for <quic-issues@ietf.org>; Thu, 9 Aug 2018 13:56:12 -0700 (PDT)
Date: Thu, 09 Aug 2018 13:56:11 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1533848171; bh=qt02lin8zffewjB/eoxLhtCAt8eFLbXtmUV+wTmlFZo=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=DbvF3jetjXfi5ZcCz0phobTa2heWDuOIHQyZhs12Zn/++qwKpNDPcYgFy8oCMKqf3 QM3sSxAQpNGCr3Zcgd70BavQQBJkXeGbPCF0aLHTePVfot6U++cA7tv+utuCHsPhdd U2qvb6MOHtd6wy7eqXFTCUFoYVBW6+VrquW5KgZk=
From: Dmitri Tikhonov <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4ab134293af779ce2c123ea835a222652e564c166f492cf0000000117846c6b92a169ce14cf3287@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/issues/1644/411894178@github.com>
In-Reply-To: <quicwg/base-drafts/issues/1644@github.com>
References: <quicwg/base-drafts/issues/1644@github.com>
Subject: Re: [quicwg/base-drafts] QPACK improvement: wrap absolute index values (#1644)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5b6caa6be2b5c_42073f879b6be6287294d"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: dtikhonov
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/jZ20UiAStTOKGnfvITmyZ-vwW-I>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.27
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 09 Aug 2018 20:56:22 -0000
> I think doubling-or-more is attempting to guard against a situation where X was valid pre-wrap but about to expire, then enough entries are added that X is valid again post-wrap, and there's confusion about whether a new frame refers to the old or new one, correct? If so, Almost, but not quite (or maybe we _are_ talking about the same thing -- in that case, apologies): The particular values of the index -- pre-wrap or post-wrap -- do not really matter, as what matters is where they are relative to the position of the latest entry -- either to the left of it or to the right of it. > the existing prohibition on evicting entries which still have references should ensure that there's no confusion Please note that a dynamic entry may have no references (e.g. a speculative update). The encoder is currently allowed to insert an unlimited number of entries into the table -- and evict them -- if no headers reference them. The purpose of making the window larger than `MaxEntries` is to provide low and high boundaries. Since the numbers wrap, the decoder must be able to classify an incoming _Largest Reference_ as something that it is supposed to possess (the lower bound, or past) or as a future reference that the header block should be blocked on (the upper bound). The low bound is the absolute index of the decoder's newest entry in the dynamic table minus `MaxEntries` plus one. A difference of `MaxEntries` or more would indicate that the encoder has inserted more than `MaxEntries` into the dynamic table, which is an error. Thus, the window must be at least `MaxEntries` to cover entries that may already exist. Because the index wraps, we need more room for the "future" entries -- those on which the header block will block on. The proposal is to extend the window another `MaxEntries` and place additional restrictions on the encoder to guarantee that no more than that number of entries be unacknowledged. The full range of values can be separated into two broad sections, Past and Future: ``` 1 MaxAbsIndexId | Past | Future | | Error area | Current Dynamic Table X | | ^ | / Latest Entry ``` _(Absolute index value increases from left to right and then wraps around. The diagram has `X = MaxEntries` for convenience.)_ After classifying the incoming _Largest Reference_ as Past or Future, the decoder either: - Marks the header block as blocked and parks the stream (Future); - Processes the header block (Past, with _Largest Reference_ pointing to a valid table entry); or - Produces an error if the _Largest Reference_ points to an already-evicted entry. Reserving `MaxEntries` for the lower bound and a healthy number of entries for the future entries makes for rules that are easy to reason about. This gives us a theoretical guarantee, so to speak, without using arguments such as "in practice, entries are larger then the fixed overhead." A smaller window, I am afraid, will require much more complicated rules. -- 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/1644#issuecomment-411894178
- [quicwg/base-drafts] QPACK improvement: wrap abso… Dmitri Tikhonov
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Mike Bishop
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Dmitri Tikhonov
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Mike Bishop
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Dmitri Tikhonov
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Mike Bishop
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Dmitri Tikhonov
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Mike Bishop
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Martin Thomson
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Dmitri Tikhonov
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Mike Bishop
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Dmitri Tikhonov
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Mike Bishop
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Martin Thomson
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Dmitri Tikhonov
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Martin Thomson
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Dmitri Tikhonov
- Re: [quicwg/base-drafts] QPACK improvement: wrap … afrind
- Re: [quicwg/base-drafts] QPACK improvement: wrap … afrind
- Re: [quicwg/base-drafts] QPACK improvement: wrap … Dmitri Tikhonov
- Re: [quicwg/base-drafts] QPACK improvement: wrap … afrind