Re: [quicwg/base-drafts] Changing the Default QUIC ACK Policy (#3529)

ianswett <> Sun, 22 March 2020 16:17 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id BB01D3A07B3 for <>; Sun, 22 Mar 2020 09:17:52 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -3.1
X-Spam-Status: No, score=-3.1 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id OPKNwTvXQlaX for <>; Sun, 22 Mar 2020 09:17:51 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 2CB623A07BA for <>; Sun, 22 Mar 2020 09:17:51 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 1DB0928214E for <>; Sun, 22 Mar 2020 09:17:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=pf2014; t=1584893870; bh=cqMT6fbYTVBMILyit5wP7IZGsN8/ks/OlmI+dlyUOM0=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=LUYaDQX2eiPao6q9kloSAMJXlYuq9eNAlNijSMkGX9ioSMQ9+YjXpHONxXkOAGSo9 9snVA/cj2nwEgZ9rb0mbMhuAFsCQRRW+a36KX2vP8jKBrXPdj9WXIHdY4fC2IlEb++ cBGl0aptFbwmoTArbAuLqt4ZOcR2CpX6nCPSUX3I=
Date: Sun, 22 Mar 2020 09:17:50 -0700
From: ianswett <>
Reply-To: quicwg/base-drafts <>
To: quicwg/base-drafts <>
Cc: Subscribed <>
Message-ID: <quicwg/base-drafts/issues/3529/>
In-Reply-To: <quicwg/base-drafts/issues/>
References: <quicwg/base-drafts/issues/>
Subject: Re: [quicwg/base-drafts] Changing the Default QUIC ACK Policy (#3529)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5e778faedb2e_58593fb2d8acd9686741a8"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: ianswett
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
Archived-At: <>
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Sun, 22 Mar 2020 16:17:53 -0000

> As currently specified, the default QUIC ACK policy models TCP’s ACK policy, but consumes significantly more return path capacity. This can impact resource usage of the return channel, can constrain forward throughput, and can impact the performance of other sessions sharing an uplink (draft-fairhurst-quic-ack-scaling). This was not discussed in Zurich - where discussion moved instead to the separate topic of draft-iyengar-quic-delayed-ack.

I don't believe QUIC ACKs are significantly larger.  In fact, I believe the ACK frame itself is typically smaller than TCP ACKs, but the savings there are used on QUIC's 16-byte auth hash and likely a non-zero-length CID.  Do you have a size analysis written up somewhere?

> In many current network segments (e.g., cable networks, mobile cellular, WiFi and other radio tech), the effects of asymetry are presently mitigated by network devices RFC3449 that rely upon observing TCP headers. This results in ossification problems, but does practically have beneit. It reduces the TCP ACK rate over the constrained link, it reduces consumption of "radio" transmission opportunities, and reduces traffic volume from ACKs. These mitigations are not possible, nor desirable for QUIC. However, the default performance of QUIC is therefore much worse than for TCP.

I think this is the core issue.  It's not that QUIC ACKs are really consuming significantly more capacity in terms of bytes on the wire, it's that middleboxes can't decide to thin the ACKs, because they don't know which packets are ACK-only packets.

> In QUIC, the default ACK Ratio has to set by the endpoints implementing the protocol because the sender and receiver have no information about the "cost" of sending an ACK using a link along an asymmetric path. These endpoints can also choose a non-default value to enable a new CC, scale to higher rates, etc (e.g. draft-iyengar-quic-delayed-ack).
> We have shown there can be significant benefit from an ACK Ratio of 1:10 and this is expected to alos have benefit for higher levels of asymmetry. The proposed change from 1:2 to 1:10 is predicated on QUIC's design decisions: starting a connection with an Initial Window of 10 is acceptable, QUIC uses PTO as the loss detection method (a predicate to issue #3357), and QUIC has some form of pacing at the sender, at least to mitigate IW bursts.

Did you implement the optimization already described in the recovery draft?: "As an optimization, a receiver MAY process multiple packets before sending any ACK frames in response.  In this case the receiver can determine whether an immediate or delayed acknowledgement should be generated after processing incoming packets."

@larseggert did and I believe found it hugely reduce the number of ACKs, sometimes too much.

As I've said before, I would really prefer not specify an approach in QUIC transport that is a heuristic like the PR attached to this issue does.  In particular, on lower bandwidth networks, 10 packets may be the entire congestion window and is too large a value.  On higher bandwidth networks, every 20 packets has shown to be slightly better than 10, at least when using BBR.  I wrote #3518 to add some editorial text about why every 2 packets is a SHOULD, not a MUST.  Chrome did not to default enable the ACK strategy #3501 recommends until BBR was launched, because there was a performance regression with Cubic.  I'd rather not assume everyone is using BBR or a BBR-like congestion controller.

@martinduke BBR does fine with stretch ACKs.  Cubic and Reno suffer in some cases, however.

You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub: