Re: ack delay in rx packets

Jana Iyengar <jri.ietf@gmail.com> Mon, 11 June 2018 22:51 UTC

Return-Path: <jri.ietf@gmail.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DCD5E12F1A5 for <quic@ietfa.amsl.com>; Mon, 11 Jun 2018 15:51:37 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.71
X-Spam-Level:
X-Spam-Status: No, score=-0.71 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, HTTPS_HTTP_MISMATCH=1.989, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.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 2fpeKglrhxQh for <quic@ietfa.amsl.com>; Mon, 11 Jun 2018 15:51:35 -0700 (PDT)
Received: from mail-it0-x229.google.com (mail-it0-x229.google.com [IPv6:2607:f8b0:4001:c0b::229]) (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 EBE141274D0 for <quic@ietf.org>; Mon, 11 Jun 2018 15:51:34 -0700 (PDT)
Received: by mail-it0-x229.google.com with SMTP id a3-v6so13086009itd.0 for <quic@ietf.org>; Mon, 11 Jun 2018 15:51:34 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=sAe97rCdnkzZf/fJIFrUWuRh5hzUsp27b0bFG4WALtY=; b=QDDVBcqgfi+fBK3YokMb11bgXTrF1eOZsfU1GJnq0r5xCcCcrGB5LHAVSgTSahIWrW 5i22Mn5vipb6t5BLQ43wiirBn5SzK6qhipgNqBWVu9HHzrJIAG7JHrekvnsg+FrYWAma qyY6Qew8wPBq5IfjmibOZiflx0SaXBiy/YymjL0ct/fr0Gvz7ujHQLb5VOr1N+lO7Zho 28cuGhhtyf7RAoj/JYMG1aW+dCblpm+i2n1u+eMkheC/IJX/XoxkzE+HxAkUVhg/qz/O YwUvqlveRPSJkTe6SP6677J/+4r4aK2JOjWUZWzCqGkvKuGgHReZr4Zgadi9gQrzblAa zl3w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=sAe97rCdnkzZf/fJIFrUWuRh5hzUsp27b0bFG4WALtY=; b=a5ZPLgBNg5fcHKKc3shNTus4aam12gUrcvQSaRH5/R3rD2Sg4p93Q6vO0LlX6fN3Gi NTPAgzI8iRoDHdROW4rt/yjILzPS/gJKoZWOQeX4XmUUysAOYz66koKkWT0HkslF5Ugc WfCBrFFMLn04L9fom7n4Y4TEY3wmsizE7spH7dXllt+e2wPXKJQt1vzxlK/HbcWiHLUj x4/HSRjhWs9kSCmkfuqZpi5NbSseaAFtqNBeqFkogfmG2CD5sWiviQ8yjG6o43/D9nxA HEO7hrL5v5/uL1X/EZJoSH0LEkBuM+zF5wR5+QKxbDRBQbqtaC/qF9XF1BeyCHPqH41j Cb+w==
X-Gm-Message-State: APt69E0upV+mHmDBdxVdY+SQckFt/aZAO7AhgoImhVGyQlqQNjTNZW2s hHp4vJ4aiN8bc47ar3/9VYQiFZByCAaJFtE5Tk8=
X-Google-Smtp-Source: ADUXVKIwp69J96GmMXbndg4cEYFcoLEKjWFL8k1kUrrZhRM21jp71Yi3eHRnzHaWsddanjc6dzfDwWvrBLfqWfhYfNs=
X-Received: by 2002:a24:5594:: with SMTP id e142-v6mr907271itb.46.1528757494235; Mon, 11 Jun 2018 15:51:34 -0700 (PDT)
MIME-Version: 1.0
References: <MWHPR15MB1821770E698C99AAD160864EB68F0@MWHPR15MB1821.namprd15.prod.outlook.com> <CACpbDcd-N+KLECz9z1JQJwE_JXqq_4rNzP9i9Aq9itfRhGaPgA@mail.gmail.com> <CAKcm_gNU-yFCk0QzCrLivb96Wy07VnFpH59Vdut2kR_Ff9fjTg@mail.gmail.com> <MWHPR15MB18211154D0F967B0A31FC0EDB68F0@MWHPR15MB1821.namprd15.prod.outlook.com> <MWHPR15MB1821A5550632E66D8133F54CB68F0@MWHPR15MB1821.namprd15.prod.outlook.com> <CAKcm_gOp9er6UR8e-RDjFMBT5Xtvuz1EexYPwfQWwYtQ7Ax=3A@mail.gmail.com> <MWHPR15MB18219D3154C51A7B10C2D3F8B68F0@MWHPR15MB1821.namprd15.prod.outlook.com>
In-Reply-To: <MWHPR15MB18219D3154C51A7B10C2D3F8B68F0@MWHPR15MB1821.namprd15.prod.outlook.com>
From: Jana Iyengar <jri.ietf@gmail.com>
Date: Mon, 11 Jun 2018 15:51:23 -0700
Message-ID: <CACpbDcfDeNHr6jrepz+C5b1LQrB=G2mMNPsh0GX63TwfHxXtpA@mail.gmail.com>
Subject: Re: ack delay in rx packets
To: Subodh Iyengar <subodh@fb.com>
Cc: Ian Swett <ianswett@google.com>, Ian Swett <ianswett=40google.com@dmarc.ietf.org>, QUIC WG <quic@ietf.org>
Content-Type: multipart/alternative; boundary="00000000000064479b056e6597b4"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/IBUeaVpA3imdgE0kM7WlmSB2Jlo>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.26
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Jun 2018 22:51:38 -0000

Subodh,

I think you're right. We should fix this issue, though I'm not exactly sure
how.  We dropped this earlier; I've filed #1438
<https://github.com/quicwg/base-drafts/issues/1438> so that we can continue
this discussion there.

- jana

On Wed, Apr 25, 2018 at 9:48 AM Subodh Iyengar <subodh@fb.com> wrote:

> It's possible that both sides will TLP at the same time assuming their RTT
> estimates are the same and both sides are tails. To see whether this
> happens I'll have to actually look at data in practice to see whether we
> see whether there is a delay between the server's TLP/RTO and the client's
> TLP/RTO.
>
> There is also another class case which in which it might be useful to
> retransmit the ack without a new packet where one side does not have a tail
> but the other does. For example, in the case of a revproxy where there is
> an upstream server. The client has sent a tail request to the revproxy,
> which it forwards to a webserver.
>
>
> There are 2 cases here:
>
>    1. The webserver has some processing delay which is < 2 * RTT, so the
>    response comes back and we have new data to send. The server could also
>    bundle a duplicate ack with this packet.
>    2. The response is larger than the request, so we could have bundled
>    some dup ACKs with the response.
>
>
> It is possible that the client would set an ACK timer < RTO timer and then
> send an ACK for this new packet, however if a server strictly does not ACK
> acks,  the client would still have to wait for the RTO timer.
>
>
> Subodh
> ------------------------------
> *From:* Ian Swett <ianswett@google.com>
> *Sent:* Wednesday, April 25, 2018 9:32:40 AM
> *To:* Subodh Iyengar
> *Cc:* ianswett=40google.com@dmarc.ietf.org; Jana Iyengar; IETF QUIC WG
> *Subject:* Re: ack delay in rx packets
>
> I'm not sure it would be much better, but it's worth thinking through the
> case you're describing.
>
> It must be that no 'retransmittable'(I hate that term) packets are being
> received, but you're sending packets.  If it's a one-way transfer, then
> you're receiving ACKs for the data you're sending at a regular rate.  If
> you bundled an ack with outgoing data every sometimes, the ack would have a
> new largest acked of the received ACK packets, so all is well.
>
> If it's a long pause, such as a TLP or RTO, then you've waited more than
> an RTT and received no packets to acknowledge, but then you decide to
> bundle an ACK?  At that point, it's likely the peer has already TLP'd
> around the same time, so you're probably not saving them a retransmission.
>
> It had never occurred to me to bundle an ACK in this case, but doing so
> does have the side effect of creating useless RTT estimates.  We could have
> a special value(already disliking this) for max_ack_delay which indicates
> the ACK should not be used for RTT estimates, but I'm not sure it's
> valuable to bundle an ACK with TLPs and RTOs.
>
> On Wed, Apr 25, 2018 at 12:20 PM Subodh Iyengar <subodh@fb.com> wrote:
>
> @Ian Swett <ianswett@google.com> sending ACKs in response to packets or
> delay seems fine, and an implementation might choose to do that. If we have
> more opportunities to send an ACK and avoid an RTO on the peer, wouldn't
> that be better? Is the objective of sending packets only during timer or
> recv data to simplify the ack delay calculation logic?
>
>
> Subodh
> ------------------------------
> *From:* Subodh Iyengar
> *Sent:* Wednesday, April 25, 2018 9:11:15 AM
> *To:* Ian Swett; Jana Iyengar
> *Cc:* IETF QUIC WG
> *Subject:* Re: ack delay in rx packets
>
>
> My concern is this situation: a "receiver" had not seen the original ACK
> (the packet was lost), then the sender rtos and sends a large ack delay to
> compensate for the rto, the max filter for max ack delay would inflate the
> delay for future packet.
>
>
> if latest_rtt - min_rtt  > ack_delay:
>
>    max_ack_delay = max(max_ack_delay, ack_delay)
>
>
> latest_rtt in this case would be rto_timer + rtt because the sender sends
> an ack after an rto.
>
>
> The rtt cal So max ack delay would become the rto timer. Is this a correct
> characterization?
>
>
> Subodh
>
> ------------------------------
> *From:* QUIC <quic-bounces@ietf.org> on behalf of Ian Swett <ianswett=
> 40google.com@dmarc.ietf.org>
> *Sent:* Wednesday, April 25, 2018 9:09:39 AM
> *To:* Jana Iyengar
> *Cc:* Subodh Iyengar; IETF QUIC WG
> *Subject:* Re: ack delay in rx packets
>
> Jana's right about ignoring the ack for RTT calculation if it doesn't
> acknowledge a new packet, see section 3.1:
> https://tools.ietf.org/html/draft-ietf-quic-recovery-11#section-3.1
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__tools.ietf.org_html_draft-2Dietf-2Dquic-2Drecovery-2D11-23section-2D3.1&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=h3Ju9EBS7mHtwg-wAyN7fQ&m=vQP8b9xGAVAynYcZHdgaeS3tK7f1xcKRczLJy-IILfA&s=z__D443_wlVvybsHUk1ua_Ve_0v1RqsNH09OhpeVA7g&e=>
>
> If it did acknowledge a new packet because the previous ACK was lost, then
> you end up with either a useless RTT, a useless max ack delay, or both.
> Because of issues like this, I prefer sending acks in response to packets,
> or within an alarm of packet receipt, rather than at other times.
>
> On Wed, Apr 25, 2018 at 11:53 AM Jana Iyengar <jri.ietf@gmail.com> wrote:
>
> If the sender has seen a previous ack for the same largest received, then
> it should basically ignore this new ack. If not, the ack delay will be
> accurate... What concern do you see with having a large ack delay?
>
> On Wed, Apr 25, 2018, 8:08 AM Subodh Iyengar <subodh@fb.com> wrote:
>
> We ran into very common cases where we might have all our data to send
> already outstanding, so when a TLP and RTO alarm fires, we have no new data
> to send, so we resend data that was in previous packets.
>
>
> In the time that the RTO fires, we might not have received any new
> packets, however want to send ACKs in this new packet as well. Since no new
> packets were received, this ACK will have the same largest acked as the
> previous packet.
>
>
> One question came up as to what the ack delay of an ACK in such a rx
> packet should be. We could technically set it to the time since receipt of
> the packet, however with the new max_ack_delay computations, adding this
> might screw up our estimate of the normal ack delay, so I don't really want
> to do that. Is there a better option here, or does max_ack_delay not cover
> this case?
>
>
> Subodh
>
>