Return-Path: <bounces+848413-a050-quic-issues=ietf.org@sgmail.github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1])
 by ietfa.amsl.com (Postfix) with ESMTP id 75431120423
 for <quic-issues@ietfa.amsl.com>; Tue, 26 Mar 2019 10:09:56 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3
X-Spam-Level: 
X-Spam-Status: No, score=-3 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, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001]
 autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key)
 header.d=github.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 DBUiEBbegZOr for <quic-issues@ietfa.amsl.com>;
 Tue, 26 Mar 2019 10:09:54 -0700 (PDT)
Received: from o8.sgmail.github.com (o8.sgmail.github.com [167.89.101.199])
 (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 D43F91202FA
 for <quic-issues@ietf.org>; Tue, 26 Mar 2019 10:09:53 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=github.com; 
 h=from:reply-to:to:cc:in-reply-to:references:subject:mime-version:content-type:content-transfer-encoding:list-id:list-archive:list-post:list-unsubscribe;
 s=s20150108; bh=ZI9XDBCph+UAqMgx8pX8qkHZU9w=; b=hbBJd87rQNwazgBI
 pDTrmh7xq/lVuKSdm0rsCYwDvQtG5qSD4/zgFkzyZ7MJ/JtzXEg8/YShMFpYQT4g
 vAjE8kqyBZ8czYezGLqrgmchSK1QMZIPTSZsyCUPC+xCshXUI0tVtZnIJUWvC1Pn
 R4bK1XhbnYPNED5x3GCMduKgz+4=
Received: by filter1709p1mdw1.sendgrid.net with SMTP id
 filter1709p1mdw1-3542-5C9A5CE0-17
 2019-03-26 17:09:52.37740219 +0000 UTC m=+693720.329332388
Received: from github-lowworker-63e61ec.cp1-iad.github.net (unknown
 [192.30.252.36])
 by ismtpd0010p1iad1.sendgrid.net (SG) with ESMTP id vDkBMVI5QRKRx4VcR8v7WQ
 for <quic-issues@ietf.org>; Tue, 26 Mar 2019 17:09:52.356 +0000 (UTC)
Received: from github.com (localhost [127.0.0.1])
 by github-lowworker-63e61ec.cp1-iad.github.net (Postfix) with ESMTP id
 58BC62A086E
 for <quic-issues@ietf.org>; Tue, 26 Mar 2019 10:09:52 -0700 (PDT)
Date: Tue, 26 Mar 2019 17:09:52 +0000 (UTC)
From: Jana Iyengar <notifications@github.com>
Reply-To: quicwg/base-drafts
 <reply+0166e4ab627cf063bcc02f5eafc8d3fd28b8bdfee012ea8392cf0000000118b21ee092a169ce195b9436@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/issues/2556/476751807@github.com>
In-Reply-To: <quicwg/base-drafts/issues/2556@github.com>
References: <quicwg/base-drafts/issues/2556@github.com>
Subject: Re: [quicwg/base-drafts] Should kPersistentCongestionThreshold be 1
 or 2? (#2556)
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_5c9a5ce056bef_24573f8b4b2d45b811030";
 charset=UTF-8
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: janaiyengar
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
X-SG-EID: l64QuQ2uJCcEyUykJbxN122A6QRmEpucztpreh3Pak0CSpJoL9nxe9yscoBX+EvzSo4yXlcY5A6hjt
 aN+fVW1uPBDL5qk/EnTsQ+oN5iaHb/4x+yyl+46kPGxh6DrOjI+1o8oQ+zcSlIdC3fpA3hsBUY77MV
 Ruxrwx4RlZ22eOmS8eHXiGQUjQ/aKZ20H95rOFHSKLLx04XT9Hppx7yrL/xOrDofvlREqpu26Ahgmp
 U=
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/UYdaMpOmJUw_2aP4BMV-tZk6hhA>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG
 <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>,
 <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>,
 <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 26 Mar 2019 17:09:57 -0000

----==_mimepart_5c9a5ce056bef_24573f8b4b2d45b811030
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

*facepalm* @ianswett, of course. (Also, FWIW, PR #2557 makes this a simple multiplier, so let's just use that language.)

So I think I may have the opposite concern to @pravb. The mechanisms we are talking about are subtly different, so let's just talk about behavior instead of the mechanisms.

TCP RTO uses a minRTO while PTO does not. As a result, in the common case, persistent congestion for TCP will be declared at minRTO (or later). We risk declaring persistent congestion too soon with QUIC, even with 3 PTOs, since minRTO is at least 200ms for TCP, AFAIK. QUIC might be too aggressive in declaring persistent congestion.

This might be actually bad for performance. Anecdotally, I remember that Yuchung had tried turning on [RTO Restart](https://datatracker.ietf.org/meeting/85/materials/slides-85-tcpm-2) and found that it increased spurious RTOs.  While spurious PTOs are not bad in QUIC, we don't yet have a way to detect spuriously declared persistent congestion.

This makes me wonder if we should use a min value for declaring persistent congestion. I think this is justifiable as based on best current practice that we know in TCP and that declaring congestion too soon might hurt throughput. (Note that a min is still unnecessary for QUIC PTO because spurious PTOs have only minor bandwidth cost.)

As a strawman, I'll propose that we set the persistent congestion time period to max(PTO, 200ms).

Why PTO and not 3 * PTO? Because I believe (and someone can prove me wrong) that TCP actually does use a single RTO period for declaring an RTO, despite potentially sending TLPs in that time period.
>From the RACK draft, my understanding is that sending TLPs in TCP does not actually change the RTO timer, which runs for the same amount of time (from the last ack received in practice or the earliest outstanding data).

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2556#issuecomment-476751807
----==_mimepart_5c9a5ce056bef_24573f8b4b2d45b811030
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<p><em>facepalm</em> <a class=3D"user-mention" data-hovercard-type=3D"user"=
 data-hovercard-url=3D"/hovercards?user_id=3D20072817" data-octo-click=3D"h=
overcard-link-click" data-octo-dimensions=3D"link_type:self" href=3D"https:=
//github.com/ianswett">@ianswett</a>, of course. (Also, FWIW, PR <a class=
=3D"issue-link js-issue-link" data-error-text=3D"Failed to load issue title=
" data-id=3D"425506121" data-permission-text=3D"Issue title is private" dat=
a-url=3D"https://github.com/quicwg/base-drafts/issues/2557" data-hovercard-=
type=3D"pull_request" data-hovercard-url=3D"/quicwg/base-drafts/pull/2557/h=
overcard" href=3D"https://github.com/quicwg/base-drafts/pull/2557">#2557</a=
> makes this a simple multiplier, so let's just use that language.)</p>
<p>So I think I may have the opposite concern to <a class=3D"user-mention" =
data-hovercard-type=3D"user" data-hovercard-url=3D"/hovercards?user_id=3D12=
821832" data-octo-click=3D"hovercard-link-click" data-octo-dimensions=3D"li=
nk_type:self" href=3D"https://github.com/pravb">@pravb</a>. The mechanisms =
we are talking about are subtly different, so let's just talk about behavio=
r instead of the mechanisms.</p>
<p>TCP RTO uses a minRTO while PTO does not. As a result, in the common cas=
e, persistent congestion for TCP will be declared at minRTO (or later). We =
risk declaring persistent congestion too soon with QUIC, even with 3 PTOs, =
since minRTO is at least 200ms for TCP, AFAIK. QUIC might be too aggressive=
 in declaring persistent congestion.</p>
<p>This might be actually bad for performance. Anecdotally, I remember that=
 Yuchung had tried turning on <a href=3D"https://datatracker.ietf.org/meeti=
ng/85/materials/slides-85-tcpm-2" rel=3D"nofollow">RTO Restart</a> and foun=
d that it increased spurious RTOs.  While spurious PTOs are not bad in QUIC=
, we don't yet have a way to detect spuriously declared persistent congesti=
on.</p>
<p>This makes me wonder if we should use a min value for declaring persiste=
nt congestion. I think this is justifiable as based on best current practic=
e that we know in TCP and that declaring congestion too soon might hurt thr=
oughput. (Note that a min is still unnecessary for QUIC PTO because spuriou=
s PTOs have only minor bandwidth cost.)</p>
<p>As a strawman, I'll propose that we set the persistent congestion time p=
eriod to max(PTO, 200ms).</p>
<p>Why PTO and not 3 * PTO? Because I believe (and someone can prove me wro=
ng) that TCP actually does use a single RTO period for declaring an RTO, de=
spite potentially sending TLPs in that time period.<br>
>From the RACK draft, my understanding is that sending TLPs in TCP does not =
actually change the RTO timer, which runs for the same amount of time (from=
 the last ack received in practice or the earliest outstanding data).</p>

<p style=3D"font-size:small;-webkit-text-size-adjust:none;color:#666;">&mda=
sh;<br />You are receiving this because you are subscribed to this thread.<=
br />Reply to this email directly, <a href=3D"https://github.com/quicwg/bas=
e-drafts/issues/2556#issuecomment-476751807">view it on GitHub</a>, or <a h=
ref=3D"https://github.com/notifications/unsubscribe-auth/AWbkq9oC9D-WCr1h9S=
QxQD6evvCx-PiTks5valRggaJpZM4cLgN2">mute the thread</a>.<img src=3D"https:/=
/github.com/notifications/beacon/AWbkq2gZF5OGZ1JvLXUgAvZTMtHRuLlgks5valRgga=
JpZM4cLgN2.gif" height=3D"1" width=3D"1" alt=3D"" /></p>
<script type=3D"application/json" data-scope=3D"inboxmarkup">{"api_version"=
:"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"Gi=
tHub"},"entity":{"external_key":"github/quicwg/base-drafts","title":"quicwg=
/base-drafts","subtitle":"GitHub repository","main_image_url":"https://gith=
ub.githubassets.com/images/email/message_cards/header.png","avatar_image_ur=
l":"https://github.githubassets.com/images/email/message_cards/avatar.png",=
"action":{"name":"Open in GitHub","url":"https://github.com/quicwg/base-dra=
fts"}},"updates":{"snippets":[{"icon":"PERSON","message":"@janaiyengar in #=
2556: *facepalm* @ianswett, of course. (Also, FWIW, PR #2557 makes this a s=
imple multiplier, so let's just use that language.)\r\n\r\nSo I think I may=
 have the opposite concern to @pravb. The mechanisms we are talking about a=
re subtly different, so let's just talk about behavior instead of the mecha=
nisms.\r\n\r\nTCP RTO uses a minRTO while PTO does not. As a result, in the=
 common case, persistent congestion for TCP will be declared at minRTO (or =
later). We risk declaring persistent congestion too soon with QUIC, even wi=
th 3 PTOs, since minRTO is at least 200ms for TCP, AFAIK. QUIC might be too=
 aggressive in declaring persistent congestion.\r\n\r\nThis might be actual=
ly bad for performance. Anecdotally, I remember that Yuchung had tried turn=
ing on [RTO Restart](https://datatracker.ietf.org/meeting/85/materials/slid=
es-85-tcpm-2) and found that it increased spurious RTOs.  While spurious PT=
Os are not bad in QUIC, we don't yet have a way to detect spuriously declar=
ed persistent congestion.\r\n\r\nThis makes me wonder if we should use a mi=
n value for declaring persistent congestion. I think this is justifiable as=
 based on best current practice that we know in TCP and that declaring cong=
estion too soon might hurt throughput. (Note that a min is still unnecessar=
y for QUIC PTO because spurious PTOs have only minor bandwidth cost.)\r\n\r=
\nAs a strawman, I'll propose that we set the persistent congestion time pe=
riod to max(PTO, 200ms).\r\n\r\nWhy PTO and not 3 * PTO? Because I believe =
(and someone can prove me wrong) that TCP actually does use a single RTO pe=
riod for declaring an RTO, despite potentially sending TLPs in that time pe=
riod.\r\nFrom the RACK draft, my understanding is that sending TLPs in TCP =
does not actually change the RTO timer, which runs for the same amount of t=
ime (from the last ack received in practice or the earliest outstanding dat=
a)."}],"action":{"name":"View Issue","url":"https://github.com/quicwg/base-=
drafts/issues/2556#issuecomment-476751807"}}}</script>
<script type=3D"application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/quicwg/base-drafts/issues/2556#issuecomment-4=
76751807",
"url": "https://github.com/quicwg/base-drafts/issues/2556#issuecomment-4767=
51807",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>=

----==_mimepart_5c9a5ce056bef_24573f8b4b2d45b811030--

