Re: [quicwg/base-drafts] Persistent Congestion Time Threshold (#2365)

Jana Iyengar <notifications@github.com> Wed, 20 February 2019 03:17 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 808BB12DDA3 for <quic-issues@ietfa.amsl.com>; Tue, 19 Feb 2019 19:17:48 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8.002
X-Spam-Level:
X-Spam-Status: No, score=-8.002 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, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-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 sF1SFBcXGoho for <quic-issues@ietfa.amsl.com>; Tue, 19 Feb 2019 19:17:43 -0800 (PST)
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 76FF4129619 for <quic-issues@ietf.org>; Tue, 19 Feb 2019 19:17:43 -0800 (PST)
Date: Tue, 19 Feb 2019 19:17:41 -0800
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1550632661; bh=uCIG49D2Cq/gsIOaT0P8v0Qi21jux81lllKk4Gcp/oU=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=uDemtsn1hVIIdEZr8ijcmshunOuNa2l2nromHm0ZgX92hFvZjQL2aURjwEO3o/V/g JGcIPcQJyVxRoGC19JmSTMeRCw7pgaIlshW57d6tbJiwChjOZpmk24/j8ch1BkuJYk oomdqUJ+CKU9RO4LMu7R19QedausDSgG8hAmalcQ=
From: Jana Iyengar <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4ab65409525ea7ea16e72946f394a867fa5063e28d992cf00000001188488d592a169ce17fab1f6@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/2365/review/205554955@github.com>
In-Reply-To: <quicwg/base-drafts/pull/2365@github.com>
References: <quicwg/base-drafts/pull/2365@github.com>
Subject: Re: [quicwg/base-drafts] Persistent Congestion Time Threshold (#2365)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5c6cc6d5a78d5_40ac3ff864ed45bc1089e"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: janaiyengar
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/80tAicAPo5GxNPx389bWuHHtO-k>
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, 20 Feb 2019 03:17:49 -0000

janaiyengar commented on this pull request.



> +  rttvar = 0
+  max_ack_delay = 0
+  kPersistentCongestionThreshold = 2
+
+If an eck-eliciting packet is sent at time = 0, the following scenario would
+illustrate persistent congestion:
+
+  t=0 | Send Pkt #1 (App Data)
+  t=1 | Send Pkt #2 (PTO 1)
+  t=3 | Send Pkt #3 (PTO 2)
+  t=7 | Send Pkt #4 (PTO 3)
+  t=8 | Recv ACK of Pkt #4
+
+The first three packets are determined to be lost when the ACK of packet 4 is
+received at t=8.  The congestion period is calculated as the time between the
+oldest and newest lost packets: (3 - 0) = 3.  The duration for persistent

I think @marten-seemann is right, we don't want to have differences between the text and the example at least. We don't need the pseudo code to be descriptive in how the datastructures are used, but It can specify what needs to be done. The problem here is that the example and the pseudo code are suggesting that this is simpler than it actually is. 

I think we may need to slightly alter the mechanism anyway. It's not the time difference between the newest and the oldest that's interesting, it's that packets sent in the 3 x PTO duration prior to the newest lost packet were all marked as lost. So (i) the latest packet sent >= 3 x PTO before the newest lost packet should be the oldest packet that we are interested in (not the oldest packet that is marked as lost), and (ii) we need to then check that all packets between that packet and the newest are marked lost.

So, I propose the following changes:
1. Change the example to show packets that were sent earlier than 3xPTO and marked lost, but they aren't used in the detection of PersistentCongestion
2. Add to the text below (proposed below)
3. Add to the pseudocode (proposed below)


> +  kPersistentCongestionThreshold = 2
+
+If an eck-eliciting packet is sent at time = 0, the following scenario would
+illustrate persistent congestion:
+
+  t=0 | Send Pkt #1 (App Data)
+  t=1 | Send Pkt #2 (PTO 1)
+  t=3 | Send Pkt #3 (PTO 2)
+  t=7 | Send Pkt #4 (PTO 3)
+  t=8 | Recv ACK of Pkt #4
+
+The first three packets are determined to be lost when the ACK of packet 4 is
+received at t=8.  The congestion period is calculated as the time between the
+oldest and newest lost packets: (3 - 0) = 3.  The duration for persistent
+congestion is equal to: (1 * ((2 ^ kPersistentCongestionThreshold) - 1)) = 3.
+Because the threshold was reached, the network is considered to have experienced

Suggestion: "Because the threshold was reached and because none of the packets between the oldest and the newest packets are acknowledged, the network is considered ..."

> @@ -1282,15 +1314,27 @@ Invoked by loss detection from DetectLostPackets when new packets
 are detected lost.
 
 ~~~
+   InPersistentCongestion(congestion_period):

Suggested rework of this function:
```
InPersistentCongestion(newest_lost_packet):
    pto = smoothed_rtt + 4 * rttvar + max_ack_delay
    congestion_period = pto * (2 ^ kPersistentCongestionThreshold - 1)
    // Find the latest packet that was sent at least pto time before the newest lost packet
    oldest_sent_packet = FindPacketSentBefore(newest_lost_packet, congestion_period)
    // Determine if all packets in the window, including the  edges, are marked lost
    return IsWindowLost(oldest_sent_packet, newest_lost_packet)
```
       

>  
      // Start a new congestion epoch if the last lost packet
      // is past the end of the previous recovery epoch.
-     CongestionEvent(largest_lost_packet.time_sent)
+     CongestionEvent(newest_lost_packet.time_sent)
+
+     // Collapse congestion window if persistent congestion
+     if (InPersistentCongestion(

Change params to InPersistentCongestion to only have newest_lost_packet.

-- 
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/2365#pullrequestreview-205554955