Re: [quicwg/base-drafts] Clarify QPACK eviction races (#1237)
Martin Thomson <notifications@github.com> Wed, 05 September 2018 06:27 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 697BF128CB7 for <quic-issues@ietfa.amsl.com>; Tue, 4 Sep 2018 23:27:35 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8.01
X-Spam-Level:
X-Spam-Status: No, score=-8.01 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] 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 upgYuuwtc9SN for <quic-issues@ietfa.amsl.com>; Tue, 4 Sep 2018 23:27:33 -0700 (PDT)
Received: from out-5.smtp.github.com (out-5.smtp.github.com [192.30.252.196]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id CCE05130DD5 for <quic-issues@ietf.org>; Tue, 4 Sep 2018 23:27:32 -0700 (PDT)
Date: Tue, 04 Sep 2018 23:27:31 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1536128851; bh=VZA9SsEGhuVhHLx5wZhyCLCErNp6VLXRUHnHHPA6fzk=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=Ah/XDWV/ZwQiYblOBrYFVS1Bu7ZsljCqzcod2+sRq2nczRWZJfoC6E16bt2enBrOr RfmXa3bAQkgJi6VusVWhgCkNdbc6OW6XXcqumf66e9UZAcv5i3WBto8choWq5j0eLx dSIvZD9M4i4aW4b2zp5rW95aqqxEB34n35jEaee0=
From: Martin Thomson <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4abb98629b5e7e2ad038f633d97cff3e113ff636ecc92cf0000000117a7395392a169ce12443a1c@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/1237/review/152347354@github.com>
In-Reply-To: <quicwg/base-drafts/pull/1237@github.com>
References: <quicwg/base-drafts/pull/1237@github.com>
Subject: Re: [quicwg/base-drafts] Clarify QPACK eviction races (#1237)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5b8f7753e759e_698d3f91b1ad45bc7763d8"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: martinthomson
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/HwbSP2oKQtQyFt4baw3W1XOXk7I>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
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: Wed, 05 Sep 2018 06:27:35 -0000
martinthomson approved this pull request.
I have tried to be very specific in my suggestions, but feel free to take or leave.
> -entry remains unacknowledged. If a new header to be inserted into the dynamic
-table would cause the eviction of such an entry, the encoder MUST NOT emit the
-insert instruction until the reference has been processed by the decoder and
-acknowledged.
-
-The encoder can emit a literal representation for the new header in order to
-avoid encoding delays, and MAY insert the header into the table later if
-desired.
-
-To ensure that the blocked eviction case is rare, references to the oldest
-entries in the dynamic table SHOULD be avoided. When one of the oldest entries
-in the table is still actively used for references, the encoder SHOULD emit an
-Duplicate representation instead (see {{duplicate}}).
+The encoder MUST NOT emit an instruction that evicts an entry while a reference
+to that entry remains unacknowledged. When the encoder encounters a blocked
+eviction, it emits a literal representation for the new header, and MAY insert
"When the encoder encounters a blocked eviction, ..." involves a logical leap, or an assumption about the structure of encoders that hasn't been explained. We all assume that encoders emit new table modifications as the result of processing header blocks, but that isn't necessary.
Perhaps: "An encoder MUST NOT insert an entry into the dynamic table (or duplicate an existing entry) if that would cause an entry with unacknowledged references to be evicted. For header blocks that might rely on the newly added entry, the encoder can use a literal representation and maybe insert the entry later."
> @@ -871,21 +871,38 @@ the decoder.
### Blocked Eviction
The title here might be better as "Blocked Dynamic Table Insertions". Evictions don't get blocked, they are the immovable object here. It's more the case that insertions are what get blocked.
> -acknowledged.
-
-The encoder can emit a literal representation for the new header in order to
-avoid encoding delays, and MAY insert the header into the table later if
-desired.
-
-To ensure that the blocked eviction case is rare, references to the oldest
-entries in the dynamic table SHOULD be avoided. When one of the oldest entries
-in the table is still actively used for references, the encoder SHOULD emit an
-Duplicate representation instead (see {{duplicate}}).
+The encoder MUST NOT emit an instruction that evicts an entry while a reference
+to that entry remains unacknowledged. When the encoder encounters a blocked
+eviction, it emits a literal representation for the new header, and MAY insert
+the header into the table later if desired.
+
+To ensure that blocked evictions are rare, the encoder SHOULD avoid referencing
"To ensure that the encoder is not prevented from adding new entries, the encoder can avoid referencing entries that are near the point at which they would be evicted. Rather than ..."
>
+~~~~~~~~~~ drawing
+ +----------+---------------------------------+--------+
+ | Draining | Referenceable | Unused |
+ | Entries | Entries | Space |
+ +----------+---------------------------------+--------+
+ ^ ^ ^
+ | | |
+ Drop Point Draining Index Base Index /
+ Insertion Point
+~~~~~~~~~~
+{:#fig-eviction-prone title="Encoder's View of Dynamic Table with
+draining index"}
This has to be a single line. Also, check whether You Want Title Case or Sentence case. I think that we use Title Case elsewhere.
> +the header into the table later if desired.
+
+To ensure that blocked evictions are rare, the encoder SHOULD avoid referencing
+older entries that will be evicted soon. Rather than reference such an entry,
+the encoder SHOULD emit a Duplicate instruction (see {{duplicate}}), and
+reference the duplicate instead.
+
+Determining which entries are too close to eviction to reference is an encoder
+preference. One heuristic is to target a fixed amount of available space in the
+dynamic table: either unused space or space that can be reclaimed by evicting
+unreferenced entries. To achieve this, the encoder can maintain a draining
+index, which is the smallest absolute index in the dynamic table that it will
+emit a reference for. As new entries are inserted, the encoder increments the
+draining index such that the amount of unused space and space occupied by
+draining entries table is larger than its target threshold. Draining entries
+will eventually become evictable as any references to them are acknowledged.
"As new entries are inserted, the encoder increases the draining index to maintain the section of the table that it will not reference. Draining entries - entries with an absolute index lower than this the draining index - will not accumulate new references. The number of unacknowledged references to draining entries will eventually become zero, making the entry available for eviction."
--
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/pull/1237#pullrequestreview-152347354
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… Mike Bishop
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… Martin Thomson
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… afrind
- [quicwg/base-drafts] Clarify QPACK eviction races… afrind
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… Martin Thomson
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… afrind
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… Mike Bishop
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… Mike Bishop
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… afrind
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… afrind
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… Martin Thomson
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… Martin Thomson
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… afrind
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… Mike Bishop
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… Martin Thomson
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… Martin Thomson
- Re: [quicwg/base-drafts] Clarify QPACK eviction r… afrind