[tcpm] apparent ambiguities in draft spec for Hystart++ window start/end?

Neal Cardwell <ncardwell@google.com> Mon, 29 November 2021 23:23 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 39B093A07DB for <tcpm@ietfa.amsl.com>; Mon, 29 Nov 2021 15:23:54 -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 9s2R4usP_yva for <tcpm@ietfa.amsl.com>; Mon, 29 Nov 2021 15:23:52 -0800 (PST)
Received: from mail-qk1-x72b.google.com (mail-qk1-x72b.google.com [IPv6:2607:f8b0:4864:20::72b]) (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 2EA6A3A0B0D for <tcpm@ietf.org>; Mon, 29 Nov 2021 15:23:52 -0800 (PST)
Received: by mail-qk1-x72b.google.com with SMTP id 193so24775303qkh.10 for <tcpm@ietf.org>; Mon, 29 Nov 2021 15:23:52 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:from:date:message-id:subject:to:cc; bh=Pynef9HU8G4r8me3L2Lx99aCCMKMyRYoR2RGW6TV638=; b=rZZ5SME+3/A/OL9Bxf+MStO1GCA+J9XcYg73iiYPdzyTWI5eERrUpgdOZhUwSlv//Y A3pF0CVpuWx2ZkQFycJlqYiiozAhAp/p4guglz7kBPKYrBA01ottdI4qRoLbUJ2PsWB7 Iuk5F1Hbd1IMaB78JrIqnNoKLsBUSRUS2JWV66JVQTsEEXAllJriiIKo670tsRU1NPuE iIITGIUIBVjM2JpWJAWFKQcFEo3VTu6qDeLKDBJb6iGdlWFeNiilHW2C7xbxYaAh1sjN e0a0FxmK2Hy3+1QYzIfEBLIiSbP2/ADJELH7v8cZE9/19X8/aCgdzb4yiyrD9AdRbF6H e4FQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=Pynef9HU8G4r8me3L2Lx99aCCMKMyRYoR2RGW6TV638=; b=DL0d55WJPoU+RN+WMDopCjahmRViXB0lfLYJNHnnQcW7WFQX+BocoNRNtTKkhWLeGz vUaTGmaY1wY2jwm9W2en3LRhrJn3al6D/Yre2SJhJEwQhVl+YQX+5pM7cgLwdErTfLO1 O7VSksONLEBnAhSieX++m6WNoTJvOB/M4xlpN4Nx4AwymIsA59Msf6ELmT8LS4mMKJBR hesnqNjP3KuBEcY4Sk8YP1/J7b9lOjKw/vmZRUMvSmCTeRblp5cLz65Mi1BkjBM7fw1n IijJEHauIOWXQpAs/OES+ju53bh0cv2isM7GzzxybEEvJvdRvMZ/9aZkLGJZDqvDXHaB yIMA==
X-Gm-Message-State: AOAM531Y6Y6i0dcTMG50StrWtfoAnaAaJZ0TNcHXFSnZo/+DYGlAP0zd UQUlGKttZBJnwXlwNEM8qya/iZcT4MU+z4FO+K+OpQ==
X-Google-Smtp-Source: ABdhPJwaC3SIvrfpPSwyeio7ZFytxoUDx4rutA6BpGH78xHsRKm1OEaovolwGH4KQbKdZT+H7cm2YfYwWwXBDtrqfHM=
X-Received: by 2002:a05:620a:3193:: with SMTP id bi19mr41327800qkb.296.1638228229527; Mon, 29 Nov 2021 15:23:49 -0800 (PST)
MIME-Version: 1.0
From: Neal Cardwell <ncardwell@google.com>
Date: Mon, 29 Nov 2021 18:23:33 -0500
Message-ID: <CADVnQym=Uq_wK-YTvEwSw7AkdzGA4pvuY8ibaT6z2Hyq2sZX=A@mail.gmail.com>
To: Praveen Balasubramanian <pravb@microsoft.com>, draft-ietf-tcpm-hystartplusplus@ietf.org
Cc: tcpm <tcpm@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000af087f05d1f5bbf5"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/_gnYvlnPzfdidq3K60Z_zZZ6bJE>
Subject: [tcpm] apparent ambiguities in draft spec for Hystart++ window start/end?
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: Mon, 29 Nov 2021 23:23:54 -0000

Hi,

Thanks again for the nice Hystart++ draft!

Below are three quick comments about what AFAICT are some ambiguities about
the spec for detecting and handling window starts/ends, plus a suggestion
for wording that section:

(1) Currently, the draft at:

https://datatracker.ietf.org/doc/html/draft-ietf-tcpm-hystartplusplus#section-4.2
says:

      When windowEnd is ACKed, the current round ends and windowEnd is
      set to SND.NXT

IMHO this is a bit ambiguous as to whether it means:
(a)  if (SND.UNA > windowEnd)
or
(b)  if (SND.UNA >= windowEnd)

Normally when I read that a sequence number X "is ACKed" I think of the (b)
case, i.e. SND.UNA >= X. But for application-limited flights of data, I
think that (b) interpretation would lead to the Hystart++ logic for the
start/end of rounds potentially being executed twice for each flight of
data: once for the first segment in the flight, and once for the last
segment in the flight (because while processing ACKs for an
application-limited flight the value of SND.NXT may not change).

So I imagine the Hystart++ algorithm actually intends the (a) semantics.
The (a) approach is what Linux TCP CUBIC Hystart does, and the AFAICT  (a)
semantics give the correct once-per-round behavior even for
application-limited flights. I think it would be good to express that
aspect of the algorithm more precisely to indicate the approach that is
intended.

(2) A second, related, issue: for per-round behavior section 4.2 of the
algorithm specifies how to detect the end of a round ("When windowEnd is
ACKed, the current round ends"), but only specifies what action is to be
taken at the start of a round ("At the start of each round during standard
slow start ([RFC5681]) and CSS:").

I suppose the text is implicitly considering that the start of one round is
the same as the end of the previous round. For bulk data that assumption
might be acceptable; it might be fine to think of the start of one round as
the same as the end of the previous round. But for application-limited
flights of data that assumption does not hold, and the start of a round and
end of a round are very different events with very different timing and
characteristics. So for the common case of application-limited flights of
data currently the draft does not specify how to detect the "start of each
round" event that triggers the per-round actions; it only defines how to
detect the "end" of a round.

(3)  A third, related, issue: the text in section 4.2 says:

   A round is chosen to be approximately the Round-Trip Time (RTT).


For application-limited flights this text is a poor or confusing fit. For
application-limited flights,  the duration of time between two successive
rounds, aka the length of a round (IMHO), can be arbitrarily long; it can
be much longer than the RTT and perhaps hours or even days. I would suggest
just dropping that sentence, to avoid confusion.

---

(a suggestion):

To clear up these ambiguities I would suggest tweaking the existing text
from:

*(before):*
"""

   A round is chosen to be approximately the Round-Trip Time (RTT).  We
   recommend that rounds be measured using sequence numbers.  Round can
   be approximated using sequence numbers as follows:

      Define windowEnd as a sequence number initialize to SND.UNA

      When windowEnd is ACKed, the current round ends and windowEnd is
      set to SND.NXT

   At the start of each round during standard slow start ([RFC5681
<https://datatracker.ietf.org/doc/html/rfc5681>]) and
   CSS:

"""

...to be something more like the following:

*(after):*
"""

   Hystart++ measures rounds using sequence numbers, as follows:


      Define windowEnd as a sequence number initialized to SND.UNA.

      Upon receiving an ACK, if (SND.UNA > windowEnd) then
      a new round has started and the sender sets windowEnd to
      SND.NXT.

   At the start of each new round during standard slow start ([RFC5681])
   and CSS:
"""

best regards,
neal