Re: [tcpm] hystart++

Neal Cardwell <ncardwell@google.com> Thu, 02 December 2021 19:44 UTC

Return-Path: <ncardwell@google.com>
X-Original-To: tcpm@ietfa.amsl.com
Delivered-To: tcpm@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 2A7B53A079C for <tcpm@ietfa.amsl.com>; Thu, 2 Dec 2021 11:44:16 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -17.599
X-Spam-Level:
X-Spam-Status: No, score=-17.599 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.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 jgLQxMMJqgQG for <tcpm@ietfa.amsl.com>; Thu, 2 Dec 2021 11:44:11 -0800 (PST)
Received: from mail-qv1-xf2d.google.com (mail-qv1-xf2d.google.com [IPv6:2607:f8b0:4864:20::f2d]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id AFAF83A0799 for <tcpm@ietf.org>; Thu, 2 Dec 2021 11:44:11 -0800 (PST)
Received: by mail-qv1-xf2d.google.com with SMTP id a24so554659qvb.5 for <tcpm@ietf.org>; Thu, 02 Dec 2021 11:44:11 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=0C/UA2MC7VbAyA58SnMuG5iJXbzOH0PiHW9jQxcZCQ0=; b=Q+dkisRD+u5djyuLd9ln3shqrn0fjfTos5dVnSLTqaPWEtDVy+3p0j1QJEV2rRTK2k Ap+Dy3/EUHet5D01xq9T09BaJH96rvj+6qRFXv98G+LZlqsboB/lc7Z6v9r87vzkXtKa 1j333bR2Z1jZGILmIYbpBet5KNA9xlpSYGMGr+wPXU2wNET1id26sczuZDa4YRyE6IQ2 g7Hgd/hoZ1+nQWIcWC4mNw04UUQLsvlGE/kYB1UoRYxvY/ODYQDyNz08BpabhIiHBde+ 0fqLJ3s5Bq723h7sFGyfnkL78szyTkQ6jwjykIp79/ieEZHCGi2yOvSss3lW/xzs//Dq 4w8A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=0C/UA2MC7VbAyA58SnMuG5iJXbzOH0PiHW9jQxcZCQ0=; b=8GO1ml3E9coHUMQ9ItbnIu9zQhejXdZcJXbf5wb0TsOXyK5uidXp7v96CWk6cBUUzz fOwq0e1cVzJ1Lib2NeEEezoDTbMIJ4mRFQHfYBjMVIaJRJcBhX+S2hEbnTaie+okkV9o vLmQxg6NvkWOMRuQZNso1BP4WeT4MqfrspF2c4/mbpnDvyXvIlGMDN6AcOVV3g8a8Ft5 BaekSlA3ENezVqc60ERPq90/1mpVoSmjj6doWrLkcwH+MqyIPyWK5Ao4R7vg56UFeO42 i7g1xd4tM45raJ4O1ojLNecpEuZB5qnueq7/2ifhR6USe9yJofKO9MUsUJP9Udnvb9Sa +bJg==
X-Gm-Message-State: AOAM533QhLbMEIdlSJ+BIIgFPelRFhhmHaPiO8eXjjHR2SslUWHSgqhf rLaGPxOnuZcl0Jgzw4SdUsjf7DJkrHOlZdjHcU1TlQ==
X-Google-Smtp-Source: ABdhPJyvn7PoWbhq4eiCQf37bR01dm5YQOdTebd2uG4+X9ypmC1MUqgYzvzzWF8v+eYLuY7tB/g0yPzoMAnA65GzVnE=
X-Received: by 2002:ad4:5bec:: with SMTP id k12mr14666581qvc.94.1638474249191; Thu, 02 Dec 2021 11:44:09 -0800 (PST)
MIME-Version: 1.0
References: <D8D48D50-6143-49D5-B3D8-C1888FFE33EB@netflix.com>
In-Reply-To: <D8D48D50-6143-49D5-B3D8-C1888FFE33EB@netflix.com>
From: Neal Cardwell <ncardwell@google.com>
Date: Thu, 02 Dec 2021 14:43:52 -0500
Message-ID: <CADVnQyk1=JO-yt_MThxLCZ2kr951ia7HQT-GoSX0o34+EcOQ0w@mail.gmail.com>
To: Randall Stewart <rrs=40netflix.com@dmarc.ietf.org>
Cc: tcpm@ietf.org, Praveen Balasubramanian <pravb@microsoft.com>
Content-Type: multipart/alternative; boundary="000000000000991e1805d22f0319"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/zmUVXAiFtSvj6Oe29Yc9tKt_MxM>
Subject: Re: [tcpm] hystart++
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <tcpm.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tcpm>, <mailto:tcpm-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tcpm/>
List-Post: <mailto:tcpm@ietf.org>
List-Help: <mailto:tcpm-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tcpm>, <mailto:tcpm-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 02 Dec 2021 19:44:16 -0000

Thanks, Randall. That's a nice analysis, and I agree that your proposal
sounds like a nice improvement.

This nice analysis brings to mind another potential (related) issue that
might cause spurious oscillations: after Hystart++ exits slow-start, if
there are application-limited periods where the amount of data in flight
falls below the BDP (e.g. flow goes idle and then restarts), then we would
expect the currentRoundMinRTT to be very low, triggering a resumption of
slow-start in the current logic, even if the Hystart++ exit of slow-start
was correct.

It seems that the connection should not use a data ACK's RTT sample to
estimate whether Hystart++ exit was spurious unless the amount of data in
flight at the time that data was sent was "sufficiently large". How to
define "sufficiently large" may be a little tricky (the cwnd is probably
not a good gauge for "sufficiently large" since it is probably somewhere
out beyond twice the BDP in CSS).

One option would be to track the maximum number of packets delivered in a
round of slow-start (slowStartMaxDeliveredPackets), and only check for
spurious Hystart++ exits if the most recent round of CSS has at least
slowStartMaxDeliveredPackets delivered. Something like:

- if (currentRoundDeliveredPackets >= slowStartMaxDeliveredPackets &&
      currentRoundMinRTT < cssBaselineMinRtt)

         o  cssBaselineMinRtt = infinity

         o  resume slow start including HyStart++

best regards,
neal






On Thu, Dec 2, 2021 at 1:46 PM Randall Stewart <rrs=
40netflix.com@dmarc.ietf.org> wrote:

> Greetings all:
>
> I have implemented hystart++ off of the draft-03 for FreeBSD
> (both newreno and cubic) and I have noted one thing that I think
> is a bug in the spec:
>
> Draft-03 currently says:
>
>
>
>         o  if (currentRoundMinRTT >= (lastRoundMinRTT + RttThresh))
>
>            +  cssBaselineMinRtt = currentRoundMinRTT
>
>            +  exit slow start and enter CSS
>
>
> <And>
>
>
>
>      -  if (currentRoundMinRTT < cssBaselineMinRtt)
>
>         o  cssBaselineMinRtt = infinity
>
>         o  resume slow start including HyStart++
>
>
>
> But notice that the threshold for entering CSS is (lastRoundMinRtt +
> RttThresh) and
> the exiting of CSS back to Slow Start is (currentRoundMinRTT <
> cssBaseLineMinRTT), which can
> under the right circumstances set up an oscillation. In the case I
> observed I saw lastRoundMinRtt set
> to like 63ms and currentRoundMinRtt set at 115ms. And the next RTT in was
> 114ms.. so out of
> CSS into Slow Start, but the next measurement (114ms again) pushes you
> back into CSS since
> the lastRoundMinRTT + RttThresh is around 63ms or so.
>
> I would think what you really want here is to set cssBaseLineMinRTT to
> (lastRoundMinRtt + RttThresh).
>
> I.e. on entry:
>
>
>         o  if (currentRoundMinRTT >= (lastRoundMinRTT + RttThresh))
>
>            +  cssBaselineMinRtt = (lastRoundMinRtt + RttThresh)
>
>            +  exit slow start and enter CSS
>
> R
>
> ------
> Randall Stewart
> rrs@netflix.com
>
>
>
> _______________________________________________
> tcpm mailing list
> tcpm@ietf.org
> https://www.ietf.org/mailman/listinfo/tcpm
>