[quicwg/base-drafts] f14448: Fix the AllPacketsLost thing too

Martin Thomson <noreply@github.com> Wed, 19 August 2020 00:57 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 231913A107A for <quic-issues@ietfa.amsl.com>; Tue, 18 Aug 2020 17:57:02 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.101
X-Spam-Level:
X-Spam-Status: No, score=-2.101 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, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, 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 ru76jCVJQLMT for <quic-issues@ietfa.amsl.com>; Tue, 18 Aug 2020 17:57:01 -0700 (PDT)
Received: from out-15.smtp.github.com (out-15.smtp.github.com [192.30.254.198]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 19F753A1077 for <quic-issues@ietf.org>; Tue, 18 Aug 2020 17:57:01 -0700 (PDT)
Received: from github-lowworker-6349a71.ac4-iad.github.net (github-lowworker-6349a71.ac4-iad.github.net [10.52.18.20]) by smtp.github.com (Postfix) with ESMTP id 8634F7A03F5 for <quic-issues@ietf.org>; Tue, 18 Aug 2020 17:57:00 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1597798620; bh=jHmV+inHxmgZHw4LBRFnW0SlXZfKcoaonp0/A2x8fV4=; h=Date:From:To:Subject:From; b=QzU7RmWiBhE0EMOhAtzh1lUpT8NV6Ra8ta/LhOZGUM0w2RZCttMaE77IuMmMPNIVQ pULAMo+y7PM2frvzSmoYzSOtcaQmXO0lBAfSk0ZYb/1dThl+dwQ4PK40t/ZBniTJnV 1cOR0q2EtIol/mVbW7A+NuPbVVkxjUmzVYuzWcP4=
Date: Tue, 18 Aug 2020 17:57:00 -0700
From: Martin Thomson <noreply@github.com>
To: quic-issues@ietf.org
Message-ID: <quicwg/base-drafts/push/refs/heads/pc-starts-now/033500-f14448@github.com>
Subject: [quicwg/base-drafts] f14448: Fix the AllPacketsLost thing too
Mime-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-GitHub-Recipient-Address: quic-issues@ietf.org
X-Auto-Response-Suppress: All
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/3_JO00JN6fd3M2kaaq9-EJd10bs>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
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, 19 Aug 2020 00:57:02 -0000

  Branch: refs/heads/pc-starts-now
  Home:   https://github.com/quicwg/base-drafts
  Commit: f14448146246f4296e9853f0969aaae7279f3c6c
      https://github.com/quicwg/base-drafts/commit/f14448146246f4296e9853f0969aaae7279f3c6c
  Author: Martin Thomson <mt@lowentropy.net>
  Date:   2020-08-19 (Wed, 19 Aug 2020)

  Changed paths:
    M draft-ietf-quic-recovery.md

  Log Message:
  -----------
  Fix the AllPacketsLost thing too

This turned out to be really tricky.  There is still a "cheat" here in a
function I called `FindLargestContiguousLoss`, which requires comments.

I did manage to address the problem of doing this across packet number
spaces by introducing a global variable.  That variable now collects all
lost packets into a single place.

However, doing that means that you need to clear it out occasionally, or
you declare persistent congestion all the time.  This only clears it out
each time you declare persistent congestion, which is massively
inefficient.  I hope people realize that, but it didn't seem
appropriate as the best fix I could come up with requires breaking down
the clean separation of congestion control and loss recovery parts.

(That fix is to reset this persistent congestion collection if the
largest acknowledged increases, but after running the persistent
congestion check.  That requires that the loss recovery code
and congestion control code be interleaved in awkward ways.  Maybe there
is a simpler approach, but I can't think of one right now.)

cc @ianswett, @janaiyengar