Re: [tcpm] Questions about TLP

Yi Huang <> Thu, 09 May 2019 00:19 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 44B121201DB for <>; Wed, 8 May 2019 17:19:42 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: 1.602
X-Spam-Level: *
X-Spam-Status: No, score=1.602 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, HTTPS_HTTP_MISMATCH=1.989, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_DKIMWL_WL_HIGH=-0.01, URIBL_BLOCKED=0.001, URI_HEX=1.122, URI_NOVOWEL=0.5] autolearn=no autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 8D9MVqUb2XvQ for <>; Wed, 8 May 2019 17:19:40 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id C53C11201CC for <>; Wed, 8 May 2019 17:19:39 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=testarcselector01;; cv=none; b=XcHn4KqsWRTIKm/IUNNbaVCgT2dTuI2DWD5np9Wx3tUZ+v1XwBaSvDjg3TnAUG+q8sQfYgtOojfec+BVfviE0Geo4rDMnQ0QNrvcc7qyaolSiZiiRPrgtvMBaZrSk1CPVFFlYtQGLRvZrYzMC/rE5a/+Zs+AG/GEQnyPfUjTFzQ=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed;; s=testarcselector01; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qW/QpLZ1/ezRgjJWnwxWwDNDHt4rYQHgsefWGQWeYwQ=; b=P1dLSAstxZJqHqeoy5lArGpRriCOncZ/1MZEIywk4AEoPKespbGvnYSIUm/XrIbxHRK8fy2dzP9nlStAssxsVz6+9OMUTw+LHFQiMk25+4Y2b0Jq+PGMn8HxlV/Z5ZWQDS3hxP2jpGxwiNpW8tmNjptGk7Z9QMvAF3gM8oKREfw=
ARC-Authentication-Results: i=1; 1;spf=none;dmarc=none;dkim=none;arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qW/QpLZ1/ezRgjJWnwxWwDNDHt4rYQHgsefWGQWeYwQ=; b=HwcPLyh80q80i9nDxhE1IYJe24SruzjLsWRuQ9JvAfEsweaXLsecnivNAHAb3YFC/BXaIW605hiwjsfY3odsnjCHEOpP62eipRRunRLTPB0b9fph7/BcH8vJnD7GQhpvty2mg9paLZXFnLBrWVO/405SOao9W4WoVeTI2pv8DmE=
Received: from ( by ( with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1900.3; Thu, 9 May 2019 00:19:37 +0000
Received: from ([fe80::2056:cdb6:e2aa:e45a]) by ([fe80::2056:cdb6:e2aa:e45a%9]) with mapi id 15.20.1900.002; Thu, 9 May 2019 00:19:37 +0000
From: Yi Huang <>
To: Yuchung Cheng <>
CC: Yuchung Cheng <>, Matt Olson <>, "" <>
Thread-Topic: [tcpm] Questions about TLP
Date: Thu, 09 May 2019 00:19:37 +0000
Message-ID: <>
References: <> <> <> <> <> <>
In-Reply-To: <>
Accept-Language: en-US
Content-Language: en-US
msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2019-05-09T00:19:35.8716685Z; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Application=Microsoft Azure Information Protection; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ActionId=5092bb3e-39ee-4ee2-acde-fb70eba0073c; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Extended_MSFT_Method=Automatic
authentication-results: spf=none (sender IP is );
x-originating-ip: [2001:4898:80e8:2:c52:a508:8c4c:b31e]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 013575a7-2491-4e9f-a942-08d6d4140577
x-ms-office365-filtering-ht: Tenant
x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(4618075)(2017052603328)(7193020); SRVR:BL0PR2101MB1059;
x-ms-traffictypediagnostic: BL0PR2101MB1059:
x-ms-exchange-purlcount: 6
x-microsoft-antispam-prvs: <>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-forefront-prvs: 003245E729
x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(39860400002)(366004)(396003)(136003)(346002)(376002)(13464003)(199004)(189003)(51914003)(790700001)(6116002)(4326008)(46003)(186003)(2906002)(52536014)(73956011)(486006)(66446008)(64756008)(66556008)(66476007)(66946007)(11346002)(446003)(476003)(25786009)(6436002)(8990500004)(54906003)(5660300002)(68736007)(74316002)(14444005)(99286004)(256004)(76176011)(9686003)(53546011)(236005)(7696005)(55016002)(102836004)(6306002)(54896002)(10090500001)(6506007)(8676002)(81166006)(81156014)(53936002)(9326002)(8936002)(10290500003)(76116006)(7736002)(6246003)(71190400001)(71200400001)(86612001)(86362001)(22452003)(316002)(33656002)(229853002)(966005)(14454004)(478600001)(606006); DIR:OUT; SFP:1102; SCL:1; SRVR:BL0PR2101MB1059;; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1;
received-spf: None ( does not designate permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: vAFhh3wEbMZ/5PrhAUBiRvEGNM/bvUwQ2RZEhv0I4VXYg4BcfHKZJZ6rRcXHc83Sq2F6NTGyeNYwkHZYfqEmNlxVRhcQ3OcmXKm/7vDqbX7qqJ9tXwaSCeg8SuAZUMDOU3w+FD9wUL8z5XargYtbf0zmN8zccNhgJeeMuNBB03QR0bejGllWpof2dPraBXPrE/YrYgBOnai0zBuSVFRywZsnD1zF0iOYM6emSItJqvgPqSetYZ75JKovBJh9zBGyFTy0gQLaWB8YHVQuyywgAKBPIR78mksDgQdCWiw6drM57jr4r0HS3FGLKn8KN9P9m2jbn31Z+lE92TQSVwiZrfY/VAPz01Z1knCItILCw8nWRO+GZbfTMT9icaSmNR5+x9z/rhRwoJfiKri+6cDOVkxvl/Y5EVamT7v1npSxR2M=
Content-Type: multipart/alternative; boundary="_000_BL0PR2101MB104398C390A677A41F52E075C3330BL0PR2101MB1043_"
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-Network-Message-Id: 013575a7-2491-4e9f-a942-08d6d4140577
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 May 2019 00:19:37.3647 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR2101MB1059
Archived-At: <>
Subject: Re: [tcpm] Questions about TLP
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Thu, 09 May 2019 00:19:42 -0000

Hi Yuchung,

I have one more question regarding to TLP and the proposed rev. So during a post-TLP RTO, if the application writes something before this RTO fires, the sender will still try to schedule PTO, which should cancel the already running RTO. When this new PTO fires, since TLPRxtOut is true due the previous TLP sent, the sender will not send another TLP but rearm RTO timer. Is this true? If so and an app always writes data in such a pattern and no ACKs are coming back due to network failure, RTO will be postponed infinitely until the window limit is reached? My main concern is that we could have detected the network failure very early. It seems like the current algorithm might cause delays in tearing down the connection depending on app send behavior.

A sequence to help illustrate the problem I mentioned and assume no ACKs will be received due to network failure during so.
App writes->arm PTO->PTO fires->TLP->arm RTO->app writes->arm PTO->PTO fires->arm RTO->app writes->arm PTO->PTO fires->arm RTO…

Also, the proposed rev says “Also checking TLPRxtOut prior to sending the loss probe is important to avoid TLP loops if an application writes periodically at an interval less than PTO.”. If an app writes periodically at an interval less than PTO, the sender will just periodically postpone PTO until window limit is reached since each time the app writes data, a new PTO will be scheduled and cancel the existing one. I don’t quite understand how this app behavior is related to repeated back-to-back TLPs problem caused by arming PTO after sending TLP. Btw, “TLP loops” looks like a brand new term used only in this paragraph.



From: Yuchung Cheng <>
Sent: Tuesday, May 7, 2019 9:52 AM
To: Yi Huang <>
Cc: Yuchung Cheng <>; Matt Olson <>;
Subject: Re: [tcpm] Questions about TLP

Thanks for the review as well!

From: Yi Huang <<>>
Date: Thu, May 2, 2019, 11:47 AM
To: Yuchung Cheng, Matt Olson
If TLPRxtOut is checked in TLP_send_probe(), a new PTO can cancel an already running RTO timer armed by sending TLP previously. If TLP_send_probe() decides not to send the probe for the new PTO, what should the sender do next? Rearm RTO or treat it as RTO timeout? The draft states we must arm an RTO after transmitting TLP but in this case, no probe will be sent.

Also, in page 17, the draft says "This is important to avoid TLP loops if an application writes periodically at an interval less than PTO." but if the app writes periodically at an interval less than PTO, PTO will just be pushed out and not fire until the sender cannot send anything due to window limit. Then in this case, TLP loops do not seem to exist if TLP loops means back-to-back TLP probes. Am I missing anything here?



-----Original Message-----
From: Yuchung Cheng <<>>
Sent: Thursday, May 2, 2019 10:25 AM
To: Matt Olson <<>>
Cc: Yi Huang <<>>;<>
Subject: Re: [tcpm] Questions about TLP

On Thu, May 2, 2019 at 10:09 AM Matt Olson <<>> wrote:
> Also, section 6.5.1 Step 1 is presented as a complete set of conditions for scheduling a PTO, but it is missing a bullet point for TLPRxtOut.
Thanks for checking: but checking TLPRxtOut is not necessary and is not preferred when scheduling a probe -- the goal is to prevent more than one probe inflight, so checking right before TLPRxtOut sending the next one allows the best coverage of application-limited writes (burst-idle-burst-....).

> -----Original Message-----
> From: Yuchung Cheng <<>>
> Sent: Wednesday, May 1, 2019 11:33 PM
> To: Yi Huang <<>>
> Cc:<>; Matt Olson <<>>
> Subject: Re: [tcpm] Questions about TLP
> On Wed, May 1, 2019 at 10:48 PM Yi Huang <<>> wrote:
> >
> > Hi RACK/TLP authors,
> >
> >
> >
> > I have the following questions (page numbers refer to draft-ietf-tcpm-rack-05):
> >
> >
> >
> > 1.In page 16, it says “Finally, if the time at which an RTO would fire (here denoted "TCP_RTO_expire") is sooner than the computed time for the PTO, then a probe is scheduled to be sent at that earlier time.” What does this TCP_RTO_expire actually mean? Does it mean there is another RTO timer (possibly started some time in the past) running along with PTO or just RTT + 4*RTTVar + Now()? Also, why would another probe be sent at RTO expiration time instead of treating it like RTO and collapsing the cwnd?
> TCP_RTO_expire() should return a timeout value for regular RTO, i.e.
> SRTT + 4*RTTVAR + Now()
> We use TCP_RTO_expire() because many implementations including Linux
> do not use the exact RFC formula
> The reason it's not treated as a regular RTO is to avoid resetting congestion window to 1. The rationale is if the probe was sent within min(PTO, RTO) and was delivered successfully, there's no need to reset congestion window and re-start slow-start, similar to the rationale of Reno's fast recovery reducing window to ssthresh instead of 1. We have found this strategy benefits wireless connections, as the chance of spurious RTO is high due to the delay variation.
> >
> >
> >
> > 2.In page 18 section 6.6, a new variable TLPRxtOut is defined and it is stated that TLPRxtOut is used to guarantee that there is only one outstanding TLP retransmission.. However, it is not clear to me when TLPRxtOut should be really used. Should it be used in 6.5.1 Step. 1 (checking whether we should and can schedule a TLP) or in TLP_send_probe()?
> This is in
> 6.6.2.  Recording loss probe states
>    Senders MUST only send a TLP loss probe retransmission if TLPRxtOut
>    is false.  This ensures that at any given time a connection has at
>    most one outstanding TLP retransmission.  This allows the sender to
> but I agree it'd be more clear to include this in TLP_send_probe() pseudo code. I'd incorporate in the next rev.
> >
> >
> >
> > Thanks,
> >
> >
> >
> > Yi
> >
> >
> >
> > _______________________________________________
> > tcpm mailing list
> ><>
> >
> ><>%2Fmailman%2Flistinfo%2Ftcpm&amp;data=01%7C01%7Cmaolson%40mi
> > cr
> ><>%7C66db44672e3d4101d72908d6cec82001%7C72f988bf86f141af91ab2
> > d7
> > cd011db47%7C1&amp;sdata=n8rp5Emowm459iSKolhIP1hFXBs8pZjsGG2iy3OBAno%
> > 3D
> > &amp;reserved=0
tcpm mailing list<><>