Re: [quicwg/base-drafts] Processing buffered packets can cause hugely inflated RTT measurements (#3980)

Kazuho Oku <notifications@github.com> Tue, 04 August 2020 20:45 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 E8E3F3A0AEB for <quic-issues@ietfa.amsl.com>; Tue, 4 Aug 2020 13:45:21 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 1.899
X-Spam-Level: *
X-Spam-Status: No, score=1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, GB_SUMOF=5, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=no 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 wRrXTZ-hhANM for <quic-issues@ietfa.amsl.com>; Tue, 4 Aug 2020 13:45:20 -0700 (PDT)
Received: from out-21.smtp.github.com (out-21.smtp.github.com [192.30.252.204]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 6CDF13A0ACC for <quic-issues@ietf.org>; Tue, 4 Aug 2020 13:45:20 -0700 (PDT)
Received: from github-lowworker-d31a065.va3-iad.github.net (github-lowworker-d31a065.va3-iad.github.net [10.48.17.70]) by smtp.github.com (Postfix) with ESMTP id A8AC0520DA1 for <quic-issues@ietf.org>; Tue, 4 Aug 2020 13:45:19 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1596573919; bh=4l7q4Z9vNCc3kOHKy/nAkCCgrKyXN5Vv13YJpGQURw4=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=BZAQYFthS3xXkdk35p39oHE+y2n9/WHJBcP4XYcFgR/kGH7BG3PMOy4WzZ/XGNv07 gcp99OBa1wN2FyFm980VgOdk3xutOvrMdxR5X41K9u5ZJITjOx+Klid+qDYvi/PKdV DJv0o/RH7C54ix4oQ+CI6avvL/fckhVcrFhQTkSM=
Date: Tue, 04 Aug 2020 13:45:19 -0700
From: Kazuho Oku <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+AFTOJK62HLIKMGAIGX5QKNF5GWU57EVBNHHCQD7LPA@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/issues/3980/668816044@github.com>
In-Reply-To: <quicwg/base-drafts/issues/3980@github.com>
References: <quicwg/base-drafts/issues/3980@github.com>
Subject: Re: [quicwg/base-drafts] Processing buffered packets can cause hugely inflated RTT measurements (#3980)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5f29c8df99216_5fc316f84167bd"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: kazuho
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/c5tn7riJm-ohePovC6N6hYViMxI>
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: Tue, 04 Aug 2020 20:45:22 -0000

It seems to me that this issue is an alternative resolution to one specific part of what is being proposed as the resolution to #3821. Specifically, quoting from https://github.com/quicwg/base-drafts/issues/3821#issuecomment-665393532, the approach proposed here is an alternative to the line being emphasized below.

> S1. To solve the first problem, we already have a condition in the recovery draft to _not_ arm the PTO on
1-RTT data until the handshake is complete (Section 6.2.1). This is not quite adequate, since it still allows
a client to arm a PTO timer on 1-RTT data on sending a CFIN and 1-RTT data, before ensuring that the server
has received the CFIN. The proposed solution here is to change this condition from "handshake complete" to
"handshake confirmed". Meaning that an endpoint only arms a PTO timer on 0-RTT or 1-RTT data when it knows
that the peer has the keys necessary to read and write in 1-RTT, and can therefore respond with an ACK.
> 
> We think this holds up, but we'd like to get this under everyone's eyes, to ensure that the discussion isn't
missing subtle deadlock issues.
> 
> S2. To solve the second problem, the proposal is to use ack_delay as reported by the endpoint that buffers
the data appropriately. ack_delay is the amount of the time the information (regardless of that being the
packet itself or the acknowledgement) being buffered intentionally. For this, we need the following:
> 
> - endpoints MUST report an ack_delay that is the sum of the controlled delay (i.e. the duration of the data
and the ack being buffered)
> 
> - __endpoints ignore max_ack_delay for acknowledgements of packets that were sent prior to handshake
confirmation. Those are the ones that might have been buffered at the peer until keys were ready.__
> 
> In addition, we explicitly recommend endpoints that asynchronously process handshake messages to buffer
1-RTT packets, instead of dropping them, as dropping packets has significant impact on congestion control.
Note that this matches what those implementations already do.

The proposed resolution in #3821 recommends the sender to retain one bit of constant for each packet it sends, and use it to see if ack_delay should be capped.

The resolution proposed here is to retain a mutable bit for each packet number space, and flip that bit when the seder receives the first ack. Until that bit is flipped, the sender does not cap ack_delay. As correctly pointed out in the [original comment](https://github.com/quicwg/base-drafts/issues/3980#issue-672131960), this approach relies on the receiver processing all the buffered packets at once then sending an ACK.

I think that both approaches work, and do not have a strong preference among the two.

I'd also note both approaches would work correctly once we adopt the basis of the latter approach; i.e. recommend the receiver to process all buffered packets before sending an ACK (the basis of the latter resolution.

Therefore, it seems to me that the only question is if we want to have that recommendation. If the answer is yes, then both approaches would work, and the choice between the approaches becomes an editorial preference (i.e. write down either or both).

-- 
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/3980#issuecomment-668816044