[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CADVnQy=-m37Uxfg1=nJpkuy2CKTtW1fp2jG53Q+MNF7ifGvoHw@mail.gmail.com>
Date: Sun, 23 Jul 2017 22:36:32 -0400
From: Neal Cardwell <ncardwell@...gle.com>
To: Yuchung Cheng <ycheng@...gle.com>
Cc: Lisong Xu <xu@....edu>, Wei Sun <unlcsewsun@...il.com>,
netdev <netdev@...r.kernel.org>
Subject: Re: A buggy behavior for Linux TCP Reno and HTCP
On Fri, Jul 21, 2017 at 5:16 PM, Yuchung Cheng <ycheng@...gle.com> wrote:
> On Fri, Jul 21, 2017 at 1:46 PM, Neal Cardwell <ncardwell@...gle.com> wrote:
>> On Fri, Jul 21, 2017 at 4:27 PM, Lisong Xu <xu@....edu> wrote:
>>>
>>> Hi Yuchung,
>>>
>>> This test scenario is only one example to trigger this bug. In general, as
>>> long as cwnd <4, the undo function has this bug.
>>
>>
>> Yes, personally I agree that this seems like an issue that is general enough
>> to be worth fixing. In the sense that, if cwnd <4, then we may well be very
>> congested. So we don't want to get hit by this bug wherein an undo of a loss
>> recovery can cause cwnd to suddenly jump (from 1, 2, or 3) up to 4.
>>
>> Seems like any of the several CCs that use tcp_reno_undo_cwnd() have this
>> bug.
>>
>> I guess in my mind the only question is whether we want to add a
>> tcp_foo_undo_cwnd() and ca->loss_cwnd to every CC module to handle this
>> issue (i.e. make every CC module handle it the way CUBIC does), or (my
> I would prefer the former b/c loss_cwnd may not be universal TCP
> state, just like ssthresh carries no meaning in some CC (bbr). It also
> seems also more consistent with the recent change on undo
>
> commit e97991832a4ea4a5f47d65f068a4c966a2eb5730
> Author: Florian Westphal <fw@...len.de>
> Date: Mon Nov 21 14:18:38 2016 +0100
>
> tcp: make undo_cwnd mandatory for congestion modules
>
You are certainly right that it is more pure to keep a CC detail like
that inside the CC module.
But it's a bit sad to me that we have 9 separate identical
implementations of a cwnd undo function, and that approach would add 6
more.
We do have tp->snd_ssthresh and tp->prior_ssthresh, even though not
all CC modules use ssthresh.
What if we call the field tp->prior_cwnd? Then at least we'd have some
nice symmetry:
- tp->snd_cwnd, which is saved in tp->prior_cwnd (and restored upon undo)
- tp->snd_ssthresh, which is saved in tp-> prior_ssthresh (and
restored upon undo)
That sounds appealing to me. WDYT?
neal
Powered by blists - more mailing lists