[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