Re: [tcpm] More motivating scenarios for tcpm-ack-pull

"Scheffenegger, Richard" <rs.ietf@gmx.at> Wed, 04 December 2019 14:18 UTC

Return-Path: <rs.ietf@gmx.at>
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 99C61120817 for <tcpm@ietfa.amsl.com>; Wed, 4 Dec 2019 06:18:54 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 0.4
X-Spam-Level:
X-Spam-Status: No, score=0.4 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, BITCOIN_SPAM_02=2.499, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, PDS_BTC_ID=0.499, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=gmx.net
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 4qyn3UB8thgs for <tcpm@ietfa.amsl.com>; Wed, 4 Dec 2019 06:18:53 -0800 (PST)
Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (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 7C78B120816 for <tcpm@ietf.org>; Wed, 4 Dec 2019 06:18:52 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1575469120; bh=hp6FcM+Cit5MnBWnP0eGgbgKonWsD7QF2UxlHBER498=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=UY/xLOBFCynaYyqsQWh8vt9uIle5wyD0rUqC8QjzWbpS6lQnZT/MGcxL6hZRYT/Hf GZgoqGBUG+Y2Yccgq1BHpTvcB/wn2yMwcxKzzxXSlhzkUg4dMVYVSKqUpELZS+k6Fq SK3n/83beweiKbgyF3lw6IfIUzxvaC40pu4duqbs=
X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c
Received: from [10.67.131.61] ([217.70.210.46]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MA7KU-1iVP1W1Tqc-00BfFG; Wed, 04 Dec 2019 15:18:40 +0100
To: Jon Crowcroft <jon.crowcroft@cl.cam.ac.uk>, Carles Gomez Montenegro <carlesgo@entel.upc.edu>
Cc: tcpm IETF list <tcpm@ietf.org>
References: <3326ed99-b077-592b-7913-aeb2286912c4@bobbriscoe.net> <13486113479ebcb344247daedda10467.squirrel@webmail.entel.upc.edu> <CAEeTejJC4KLbjLNWmVxPXwDtrC=rjrcOsVnwjEym2uEhJZq7cw@mail.gmail.com>
From: "Scheffenegger, Richard" <rs.ietf@gmx.at>
Message-ID: <3f4d3d94-24a8-4ed8-a752-ae5242907d43@gmx.at>
Date: Wed, 04 Dec 2019 15:18:38 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1
MIME-Version: 1.0
In-Reply-To: <CAEeTejJC4KLbjLNWmVxPXwDtrC=rjrcOsVnwjEym2uEhJZq7cw@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: quoted-printable
X-Provags-ID: V03:K1:+EfqsH3w1h9JhOdA3RkA8FcHqmNt75lSryLSK2O5NBhgzf0w9VA Uq8Ow6Rli8uESl0l8X7WNnu+klzqtDbIs2lGM74Pjn7ARCeN7dermJ0fEB2+T96+IxXfT2Q z4PEqsQ9X5uKEcBjWZQpn5V/MnKiM3y/XN97MZ6mTUvgj8KOFD7s2CzWBFe96373umFN+Sp GHyQ+97+0rj9iYJHS15JQ==
X-UI-Out-Filterresults: notjunk:1;V03:K0:q7U6CNQ7zI4=:bgKh8MOJz6VYZmw8vnFwry r8s3uOTrd3eEiVsPRoT+JjPbfDtn41KDudlz21peWNKqq3tjyHecRjIlgHQA9ui/lqXyu13WZ LGaTfjKiDMUI5vofxwTqOxvx2FwvZ6A564cF2fxjAmXL4XWKbKM/Il/vz0omx7fV01GI1HNIl be1jBspMxu2vKKbLoY3IyQeN+YwLknk17G9OLdFOWig7D6hMohn43U8gZEMIfX5hdNsWYR0HC b2umtfSr88sJCd/R1g+0VK9lmBjO/LqYHaYpD3exub0AbaBGcIoHBr8gutSq7rWzK33VdWDm6 s71pAAnPJRCFGZFcxhezSuyn7wqfjC1NS6MMG8kH+FhPV8dr4mCe0AT7U+1AuqgBr1dcoBVYC 2lhucBozm27HuqqLWYViPKpTKKCrsbS6xDojJ94P++qPnrv6DMGesPkKFAzxChiqBXrYCkr85 ax2i5ibP+/guZVbIaygI/yHDi1rgpQ+v3ZTf0lVD8VZDXr6b9vh3W8XicOEeMMtJhKa1jd/gB Y/EA5QJJvIZHofxitnlXL7n5h2Nc0KNRPQ81zg6LDO05e7CZ3NkeoupzlyyZM/9HRAavz5KOv 5UqlegBSJ6mcHhJE8/5WZVMo3f7Oqu1RPfqFBtAEgUhnpWckaT6CRQ245ZRRyUmsNeBb+pIcl mNIfL/M+gqxiNGNEmPtgIhsrgtiB1xBxrqQT2IKwacZpZJQJDT4KNiaQKF2E30ygyUoOLvJaa 1kE1RCnc+U5m4g8KiF40PSfDsrYDl7SXe3JR37JpT8WsN2hblEpV9sMqks6/v2JSAxui9kq+G BWM8kAIsV8AxUWc1ncIzJDnVdYcbmvgavQ0m/ctqRk07AyI+xFMJ0Q6Sbsio2g9DWpJjUQFce Tq5c2hB2HakNKkoNjXCS7rm/zNfhYllx8vRr49w5YeGT+S0zNaddlvpWBVyFWO0XXzrYNaBC0 ovS4K4qr66zxCU5vaF1kHOLETLmY3xX2ofzO7ZL3sGDXvxx404TZPeSvUmsdkkME64EVio4dr gu8AjTfXebNbUr8i1A4C8agZ2lL9ADvB+gDl97wfgpZqhGFrlkIqog4unnSbR9oeLI349MlK4 wFtAqcRe3ZlTDWGwkzp4HkGQyMRwUpuW7ZPqBR594Hb3crAboPYaqy2n6zrZE7OFNxs+5/Ubq aHFcEMxwoT1o0iVCqfOXuaROD0+GQQNvCPZsujasSe3dTQO6KbvDpkbal4brSXhwYIDZFB//3 aJSsKzoGK2LbvWFovh02NK9jjhrR7S/bjaVkgmw==
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/44urgurlEzk9DN0uXdu1PqpqdKY>
Subject: Re: [tcpm] More motivating scenarios for tcpm-ack-pull
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: Wed, 04 Dec 2019 14:18:54 -0000

Carles,

I just found, that as a performance improvement measure, linux has
recently added a patch to trigger immediate ACKs when a packet with CWR
is received...

While the underlying issue was found in the dctcp context, the patch
appears to be against the generic rfc3168 ECN handling code.

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fd2123a3d7527d4c7092633d55e877c0cc1d84a3

While that performance improvement has obvious benefits, RFC3168 is
silent on this particular issue.

But there are use cases where it is certainly valuable for the sender to
be able to elicit an immediate ACK from the receiver.


I don't know if it warrants a dedicated bit though - or if, for example,
the combination of CWR/PSH could perhaps obtain the ACK PULL semantics
as an overload of of their normal semantics...


Best regards,
    Richard


Am 18.11.2019 um 08:21 schrieb Jon Crowcroft:
> Mark Handley said a lot of the middlebox corner case avoidance stuff is
> in the tcpmp RFC...have got time to look just yet...
>
> On Mon, 18 Nov 2019, 04:46 Carles Gomez Montenegro,
> <carlesgo@entel.upc.edu <mailto:carlesgo@entel.upc.edu>> wrote:
>
>     Hi Bob,
>
>     Once again, thanks a lot for all the very useful feedback!
>
>     Please find below some inline responses.
>
>      > Carles, Jon, (re-sending, this time without accidentally omitting
>     tcpm,
>      > also see couple of addenda tagged [Bob adds:])
>      >
>      > I'm generally supportive of a mechanism to suppress delayed ACKs from
>      > the receiver (in any transport protocol including TCP). So thank you.
>      >
>      > You might want to borrow at least some of the text for additional
>      > motivating scenarios for such a facility from the first two posts
>     on a
>      > thread for a similar facility in QuiC:
>      > https://github.com/quicwg/base-drafts/issues/1978
>      >
>      > Also pasted at the end.
>      >
>      > Some is not relevant to your specific ack-pull scheme, 'cos it's
>      > proposing a more general facility in QUIC for the sender to the
>     receiver
>      > alters its ACK ratio. (theoretically there are more bits available in
>      > QUIC, but this particular request has been put on hold while someone
>      > goes and finds them ;)
>
>     Thanks a lot. This is indeed very useful!
>
>     As you explain, the more general facility for QUIC allows to suppress
>     Delayed ACKs and also allows to modify the ACK ratio in a more general
>     way.
>
>     Regarding the Delayed ACK suppression discussion, the additional
>     motivation is definitely important.
>
>      >       Another motivating example (rather niche)
>      >
>      > Coincidentally, Just this morning I published a tech report that
>     had to
>      > use the hack of overlapping a byte from the previous segment to
>     force a
>      > quick ack:
>      > TCP Prague Fall-back on Detection of a Classic ECN AQM
>      > <https://arxiv.org/pdf/1911.00710.pdf#page9> (the link takes you
>     to Fig
>      > 2, which illustrates the hack)
>      > I'd rather not have to do these sorts of hacks - it really messes
>     with
>      > the segmentation code.
>
>     This is very useful feedback as well, and a nice coincidence!
>
>     Regarding the hack, sending an old byte may be even worse when there is
>     not a next data segment readily available for sending, which would
>     lead to
>     sending a whole packet just to carry an old byte.
>
>      >       Middlebox traversal of bit 6
>      >
>      > I recall that someone did a study of traversal of each of the
>     reserved
>      > flags (Marcelo Bagnulo maybe?). I don't think it was that good [Bob
>      > adds: I mean traversal - not the study!].
>      > A good search engine might find it ;)
>
>     I wasn't able to find the study, but this is an important
>     consideration..
>
>     One might think that if new functionality is defined and standardized,
>     related middlebox traversal of it should improve over time. Perhaps that
>     might be optimistic...
>
>      >       More alternative approaches:
>      >
>      > 1/ At one stage, we tried to include a bit for Delayed Ack control in
>      > another protocol called Accurate ECN. We were persuaded to take
>     it out,
>      > because it was mission creep (outside the scope of the protocol
>     we were
>      > working on):
>      >
>     https://tools.ietf.org/html/draft-kuehlewind-tcpm-accurate-ecn-03#appendix-B.4
>
>     I was unaware of this, thanks!
>
>     This is actually very aligned with what we are proposing...
>
>      > 2/ Have you considered using the Urgent Pointer in a novel way?
>     I.e. a
>      > non-zero Urgent Pointer field, even tho the URG flag is zero.
>      > [Bob adds:] From memory, traversal was pretty good - much better than
>      > bits 4-6. But I think Windows treated it as a potential attack. I
>      > believe Fernando Gont did a study on how 'invalid' TCP header
>     fields are
>      > handled.
>      >
>      > You could assign, say, 3 bits of the urgent pointer for a variable
>      > ack_exp that is log base 2 of the ack ratio the sender would
>     like. Then
>      > the sender can request the receiver uses ack_ratio` = 2^ack_exp,
>     as in
>      > the QUIC proposal below,
>      > With ack_exp = 0, you get ack_ratio = 2^0 = 1, which has the same
>     effect
>      > as ack-pull. But you also have a more general facility for high speed
>      > machines to widen out the ack ratio.
>      >
>      > If this works, you could open up a registry for the other 13 bits. So
>      > instead of using up a precious bit, you generate 13 more ;)
>
>     Nice! :)
>
>     Actually, we had not considered such an idea.
>
>     In your proposal above, if a segment has the URG flag set to 1,
>     would then
>     the 3 ack_exp bits still be used as ack_exp bits, thus reducing the size
>     of the urgent pointer in practice to 13 bits?
>
>      > See:
>      > https://tools.ietf.org/agenda/90/slides/slides-90-tcpm-10.pdf#page=5
>      >
>      > I think there were problems with some implementations and middleboxes
>      > (bound to be). I've checked the minutes of the IETF meeting where
>     that
>      > slide was presented
>      > <https://www.ietf.org/proceedings/90/minutes/minutes-90-tcpm>, but
>      > there's no push-back in there. I suggest you delve back into the
>      > archives of the tcpm mailing list around the time of that meeting to
>      > find out if there were any show-stoppers.
>
>     Thanks for the pointers!
>
>     Sure, we'll check the tcpm mailing list archive.
>
>     Cheers,
>
>     Carles
>
>
>      > Cheers
>      >
>      >
>      >
>      > Bob
>      >
>      >
>      > Paste from QUIC thread:
>      >
>     /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
>      >
>      >
>      >
>      >       Problem/goals:
>      >
>      >  1. Getting up to speed fast without inducing much queue is one
>     of the
>      >     main areas where latency reductions are needed (for short and
>     long
>      >     flows). The sender needs frequent ACKing during this phase in
>     many
>      >     approaches (hystart, etc). A Linux TCP receiver starts with
>      >     ack_ratio 1 and uses heuristics to identify the end of the
>     sender's
>      >     slow-start (or a re-start after idle). This has ossified a
>     certain
>      >     slow-start behaviour into all TCP senders (whether Linux or
>     not). We
>      >     are trying to new sender behaviours (paced chirping being an
>      >     example), but we need a way for the sender to suppress
>     delayed ACKs.
>      >  2. At the other end of the scale, for long-running flows, many
>     current
>      >     CC approaches (e.g. BBR) use pacing not ACK-clocking so they
>     can use
>      >     very few ACKs per RTT. And fewer means less cache ejections
>     for GRO.
>      >     But the receiver doesn't know what CC the sender is using, so it
>      >     doesn't know how many or few is too many or too few.
>      >  3. Some middleboxes and the majority of link technologies (e.g.
>     DOCSIS,
>      >     LTE, Satellite) thin TCP ACKs when they detect the upstream is
>      >     filled with TCP ACK stream(s), which are unresponsive.
>     Otherwise the
>      >     ACKs constrain downstream throughput (and any upstream data
>     either
>      >     in the flow itself, or in others). We don't want these links to
>      >     attempt to guess which are the QUIC ACKs and try to thin
>     them. QUIC
>      >     can and should do this itself. QUIC has all the machinery for the
>      >     sender CC to detect ACK congestion, but not the protocol to
>     tell the
>      >     receiver to do the thinning. This protocol addition would
>     provide a
>      >     sufficient hook for hosts to unilaterally add this to their CC
>      >     behaviour.
>      >
>      >
>      >       Some scenarios where the sender's preferred ack_ratio changes
>      >       through the connection:
>      >
>      >  1.
>      >
>      >     A sender CC that wants the receiver to turn off DelAcks during
>      >     flow-start (e.g. it's using hybrid slow-start as in Cubic and
>     wants
>      >     to get delay measurements more frequently) sets ack_exp=0 during
>      >     flow-start (ack_ratio=1), then increases ack_exp during
>     congestion
>      >     avoidance. If it goes idle, then re-starts, it would set
>     ack_exp=0
>      >     again.
>      >
>      >     Note on heuristics: A Linux TCP receiver currently uses a
>     heuristic
>      >     to determine when the sender has exited slow-start. However,
>      >     heuristics -> ossification. A Linux receiver's heuristic only
>     works
>      >     with the current pattern of slow-start. In TCP, when we tried to
>      >     improve the pattern on the sender (paced chirping), the
>     heuristic on
>      >     the receiver killed us.
>      >
>      >  2.
>      >
>      >     Imagine a paced sender has hardware generic receive offload
>     (GRO),
>      >     so for a long-running flow it doesn't want a high rate of
>     QUIC ACKs
>      >     that are opaque to GRO. Let's say it would prefer at least 8 ACKs
>      >     per RTT. Again, it starts with ack_exp=0, but in congestion
>      >     avoidance it would use:
>      >
>      >     ack_ratio <= cwnd_in_packets/8
>      >
>      > Upshot: By remote controlling the receiver, the server offloads
>     nearly
>      > all the ACKs from large downloads, but still focuses its
>     ACK-receiving
>      > resources on getting each client up to speed.
>      >
>      > Note that calculation of ack_ratio lends itself to fast integer
>      > arithmetic.
>      >
>      >
>      >
>      >
>      >
>      >
>      >
>      > Bob
>      >
>      >
>      > --
>      > ________________________________________________________________
>      > Bob Briscoehttp://bobbriscoe.net/ <http://bobbriscoe.net/>
>      >
>      >
>
>
>
> _______________________________________________
> tcpm mailing list
> tcpm@ietf.org
> https://www.ietf.org/mailman/listinfo/tcpm
>