* [Cake] cake srchost/dsthost stopped working?
@ 2021-08-03 16:03 Pete Heist
2021-08-03 19:46 ` Pete Heist
0 siblings, 1 reply; 12+ messages in thread
From: Pete Heist @ 2021-08-03 16:03 UTC (permalink / raw)
To: Cake List
It seems like Cake's srchost and dsthost keywords may have stopped
working some time between kernel 5.4 and 5.10.
When the bug occurs, there seems to not be fairness between hosts, but
rather fairness between flows. It reproduces on any 5.10 series kernel
I've tried, and does not reproduce on any 5.4 series or lower. Here's a
standalone script to reproduce it with netns, and some sample output:
https://www.heistp.net/downloads/cake-hostfair/
It creates competition from one IP to two IPs, and from two IPs to one
IP, using the src/dsthost keywords as appropriate. It also tests
fq_codel with a tc-flow filter, and cake *dual*-(src|dst)host, which
are both unaffected by this.
Any ideas?
Pete
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-03 16:03 [Cake] cake srchost/dsthost stopped working? Pete Heist
@ 2021-08-03 19:46 ` Pete Heist
2021-08-04 11:14 ` Toke Høiland-Jørgensen
0 siblings, 1 reply; 12+ messages in thread
From: Pete Heist @ 2021-08-03 19:46 UTC (permalink / raw)
To: Cake List
One more tip, reverting this commit seems to fix it:
https://github.com/torvalds/linux/commit/b0c19ed6088ab41dd2a727b60594b7297c15d6ce
Pete
On Tue, 2021-08-03 at 18:03 +0200, Pete Heist wrote:
> It seems like Cake's srchost and dsthost keywords may have stopped
> working some time between kernel 5.4 and 5.10.
>
> When the bug occurs, there seems to not be fairness between hosts, but
> rather fairness between flows. It reproduces on any 5.10 series kernel
> I've tried, and does not reproduce on any 5.4 series or lower. Here's a
> standalone script to reproduce it with netns, and some sample output:
>
> https://www.heistp.net/downloads/cake-hostfair/
>
> It creates competition from one IP to two IPs, and from two IPs to one
> IP, using the src/dsthost keywords as appropriate. It also tests
> fq_codel with a tc-flow filter, and cake *dual*-(src|dst)host, which
> are both unaffected by this.
>
> Any ideas?
>
> Pete
>
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-03 19:46 ` Pete Heist
@ 2021-08-04 11:14 ` Toke Høiland-Jørgensen
2021-08-04 11:36 ` Jonathan Morton
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Toke Høiland-Jørgensen @ 2021-08-04 11:14 UTC (permalink / raw)
To: Pete Heist, Cake List
Pete Heist <pete@heistp.net> writes:
> One more tip, reverting this commit seems to fix it:
>
> https://github.com/torvalds/linux/commit/b0c19ed6088ab41dd2a727b60594b7297c15d6ce
Ah, I think I see what the problem is; could you please try the patch
below?
-Toke
diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
index 951542843cab..a83c4d4326da 100644
--- a/net/sched/sch_cake.c
+++ b/net/sched/sch_cake.c
@@ -720,7 +720,7 @@ static u32 cake_hash(struct cake_tin_data *q, const struct sk_buff *skb,
skip_hash:
if (flow_override)
flow_hash = flow_override - 1;
- else if (use_skbhash)
+ else if (use_skbhash && flow_mode & CAKE_FLOW_FLOWS)
flow_hash = skb->hash;
if (host_override) {
dsthost_hash = host_override - 1;
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-04 11:14 ` Toke Høiland-Jørgensen
@ 2021-08-04 11:36 ` Jonathan Morton
2021-08-04 19:29 ` Toke Høiland-Jørgensen
2021-08-04 20:49 ` Pete Heist
2021-08-11 3:57 ` Stephen Hemminger
2 siblings, 1 reply; 12+ messages in thread
From: Jonathan Morton @ 2021-08-04 11:36 UTC (permalink / raw)
To: Toke Høiland-Jørgensen; +Cc: Pete Heist, Cake List
On Wed, 4 Aug 2021 at 14:14, Toke Høiland-Jørgensen via Cake
<cake@lists.bufferbloat.net> wrote:
>
> Pete Heist <pete@heistp.net> writes:
>
> > One more tip, reverting this commit seems to fix it:
> >
> > https://github.com/torvalds/linux/commit/b0c19ed6088ab41dd2a727b60594b7297c15d6ce
>
> Ah, I think I see what the problem is; could you please try the patch
> below?
>
> -Toke
>
> diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
> index 951542843cab..a83c4d4326da 100644
> --- a/net/sched/sch_cake.c
> +++ b/net/sched/sch_cake.c
> @@ -720,7 +720,7 @@ static u32 cake_hash(struct cake_tin_data *q, const struct sk_buff *skb,
> skip_hash:
> if (flow_override)
> flow_hash = flow_override - 1;
> - else if (use_skbhash)
> + else if (use_skbhash && flow_mode & CAKE_FLOW_FLOWS)
> flow_hash = skb->hash;
> if (host_override) {
> dsthost_hash = host_override - 1;
Good catch - I was going to have to wade in and remind myself how this
lump of code worked. But shouldn't the masking operation be in
brackets, to make the precedence explicit?
- Jonathan Morton
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-04 11:36 ` Jonathan Morton
@ 2021-08-04 19:29 ` Toke Høiland-Jørgensen
0 siblings, 0 replies; 12+ messages in thread
From: Toke Høiland-Jørgensen @ 2021-08-04 19:29 UTC (permalink / raw)
To: Jonathan Morton; +Cc: Pete Heist, Cake List
Jonathan Morton <chromatix99@gmail.com> writes:
> On Wed, 4 Aug 2021 at 14:14, Toke Høiland-Jørgensen via Cake
> <cake@lists.bufferbloat.net> wrote:
>>
>> Pete Heist <pete@heistp.net> writes:
>>
>> > One more tip, reverting this commit seems to fix it:
>> >
>> > https://github.com/torvalds/linux/commit/b0c19ed6088ab41dd2a727b60594b7297c15d6ce
>>
>> Ah, I think I see what the problem is; could you please try the patch
>> below?
>>
>> -Toke
>>
>> diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
>> index 951542843cab..a83c4d4326da 100644
>> --- a/net/sched/sch_cake.c
>> +++ b/net/sched/sch_cake.c
>> @@ -720,7 +720,7 @@ static u32 cake_hash(struct cake_tin_data *q, const struct sk_buff *skb,
>> skip_hash:
>> if (flow_override)
>> flow_hash = flow_override - 1;
>> - else if (use_skbhash)
>> + else if (use_skbhash && flow_mode & CAKE_FLOW_FLOWS)
>> flow_hash = skb->hash;
>> if (host_override) {
>> dsthost_hash = host_override - 1;
>
> Good catch - I was going to have to wade in and remind myself how this
> lump of code worked. But shouldn't the masking operation be in
> brackets, to make the precedence explicit?
Well, seeing as I introduced the bug, I think it's only fair that I fix
it as well ;)
I don't mind adding parenthesis; can do so when submitting a patch,
after Pete confirms that this fixes the issue...
-Toke
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-04 11:14 ` Toke Høiland-Jørgensen
2021-08-04 11:36 ` Jonathan Morton
@ 2021-08-04 20:49 ` Pete Heist
2021-08-04 22:52 ` Pete Heist
2021-08-11 3:57 ` Stephen Hemminger
2 siblings, 1 reply; 12+ messages in thread
From: Pete Heist @ 2021-08-04 20:49 UTC (permalink / raw)
To: Toke Høiland-Jørgensen; +Cc: Cake List
Great, that seems to fix it. :) For sanity, I confirmed that I can
apply/unapply the patch to fix/break it, so all seems well.
Is there anything that you'd want to make sure still works after the
patch? I don't have any official regression tests to run, but with this
setup ready I should be able to test something easily if needed...
Pete
On Wed, 2021-08-04 at 13:14 +0200, Toke Høiland-Jørgensen wrote:
> Pete Heist <pete@heistp.net> writes:
>
> > One more tip, reverting this commit seems to fix it:
> >
> > https://github.com/torvalds/linux/commit/b0c19ed6088ab41dd2a727b60594b7297c15d6ce
>
> Ah, I think I see what the problem is; could you please try the patch
> below?
>
> -Toke
>
> diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
> index 951542843cab..a83c4d4326da 100644
> --- a/net/sched/sch_cake.c
> +++ b/net/sched/sch_cake.c
> @@ -720,7 +720,7 @@ static u32 cake_hash(struct cake_tin_data *q,
> const struct sk_buff *skb,
> skip_hash:
> if (flow_override)
> flow_hash = flow_override - 1;
> - else if (use_skbhash)
> + else if (use_skbhash && flow_mode & CAKE_FLOW_FLOWS)
> flow_hash = skb->hash;
> if (host_override) {
> dsthost_hash = host_override - 1;
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-04 20:49 ` Pete Heist
@ 2021-08-04 22:52 ` Pete Heist
2021-08-04 23:26 ` Jonathan Morton
2021-08-05 8:55 ` Pete Heist
0 siblings, 2 replies; 12+ messages in thread
From: Pete Heist @ 2021-08-04 22:52 UTC (permalink / raw)
To: Toke Høiland-Jørgensen; +Cc: Cake List
I ended up testing each of the keywords, with two src IPs then two dst
IPs, and I think everything makes sense:
https://www.heistp.net/downloads/cake-hostfair/cake-hostfair-patched.txt
I'm only not sure if we can tell from this test if triple-isolate is
doing what it should...
Pete
On Wed, 2021-08-04 at 22:49 +0200, Pete Heist wrote:
> Great, that seems to fix it. :) For sanity, I confirmed that I can
> apply/unapply the patch to fix/break it, so all seems well.
>
> Is there anything that you'd want to make sure still works after the
> patch? I don't have any official regression tests to run, but with this
> setup ready I should be able to test something easily if needed...
>
> Pete
>
> On Wed, 2021-08-04 at 13:14 +0200, Toke Høiland-Jørgensen wrote:
> > Pete Heist <pete@heistp.net> writes:
> >
> > > One more tip, reverting this commit seems to fix it:
> > >
> > > https://github.com/torvalds/linux/commit/b0c19ed6088ab41dd2a727b60594b7297c15d6ce
> >
> > Ah, I think I see what the problem is; could you please try the patch
> > below?
> >
> > -Toke
> >
> > diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
> > index 951542843cab..a83c4d4326da 100644
> > --- a/net/sched/sch_cake.c
> > +++ b/net/sched/sch_cake.c
> > @@ -720,7 +720,7 @@ static u32 cake_hash(struct cake_tin_data *q,
> > const struct sk_buff *skb,
> > skip_hash:
> > if (flow_override)
> > flow_hash = flow_override - 1;
> > - else if (use_skbhash)
> > + else if (use_skbhash && flow_mode & CAKE_FLOW_FLOWS)
> > flow_hash = skb->hash;
> > if (host_override) {
> > dsthost_hash = host_override - 1;
>
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-04 22:52 ` Pete Heist
@ 2021-08-04 23:26 ` Jonathan Morton
2021-08-05 8:55 ` Pete Heist
1 sibling, 0 replies; 12+ messages in thread
From: Jonathan Morton @ 2021-08-04 23:26 UTC (permalink / raw)
To: Pete Heist; +Cc: Toke Høiland-Jørgensen, Cake List
Those results look good to me as well. The difference between the
dual modes and the pure host modes is visible in terms of looser
fairness in the latter case.
Don't worry too much about triple-isolate, as it is significantly more
complicated to test comprehensively. I'm satisfied that if the dual
modes are working, we probably haven't broken triple-isolate either.
- Jonathan Morton
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-04 22:52 ` Pete Heist
2021-08-04 23:26 ` Jonathan Morton
@ 2021-08-05 8:55 ` Pete Heist
2021-08-05 14:56 ` Toke Høiland-Jørgensen
1 sibling, 1 reply; 12+ messages in thread
From: Pete Heist @ 2021-08-05 8:55 UTC (permalink / raw)
To: Toke Høiland-Jørgensen; +Cc: Cake List
As for triple-isolate, I added a test Jon suggested:
"I would recommend a W configuration of flows
one of the three hosts sends to or from both of the two hosts, while
the other two send to or from only one each
this should result in the two hosts getting equal throughput each, and
equal throughput in each of their two flows"
This is the last test in the output, and I think the behavior looks
correct for both the unpatched and patched versions:
https://www.heistp.net/downloads/cake-hostfair/cake-hostfair-unpatched.txt
https://www.heistp.net/downloads/cake-hostfair/cake-hostfair-patched.txt
Thanks guys, and that, I believe, is finally it for now... :)
Pete
On Thu, 2021-08-05 at 00:52 +0200, Pete Heist wrote:
> I ended up testing each of the keywords, with two src IPs then two dst
> IPs, and I think everything makes sense:
>
> https://www.heistp.net/downloads/cake-hostfair/cake-hostfair-patched.txt
>
> I'm only not sure if we can tell from this test if triple-isolate is
> doing what it should...
>
> Pete
>
> On Wed, 2021-08-04 at 22:49 +0200, Pete Heist wrote:
> > Great, that seems to fix it. :) For sanity, I confirmed that I can
> > apply/unapply the patch to fix/break it, so all seems well.
> >
> > Is there anything that you'd want to make sure still works after the
> > patch? I don't have any official regression tests to run, but with
> > this
> > setup ready I should be able to test something easily if needed...
> >
> > Pete
> >
> > On Wed, 2021-08-04 at 13:14 +0200, Toke Høiland-Jørgensen wrote:
> > > Pete Heist <pete@heistp.net> writes:
> > >
> > > > One more tip, reverting this commit seems to fix it:
> > > >
> > > > https://github.com/torvalds/linux/commit/b0c19ed6088ab41dd2a727b60594b7297c15d6ce
> > >
> > > Ah, I think I see what the problem is; could you please try the
> > > patch
> > > below?
> > >
> > > -Toke
> > >
> > > diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
> > > index 951542843cab..a83c4d4326da 100644
> > > --- a/net/sched/sch_cake.c
> > > +++ b/net/sched/sch_cake.c
> > > @@ -720,7 +720,7 @@ static u32 cake_hash(struct cake_tin_data *q,
> > > const struct sk_buff *skb,
> > > skip_hash:
> > > if (flow_override)
> > > flow_hash = flow_override - 1;
> > > - else if (use_skbhash)
> > > + else if (use_skbhash && flow_mode & CAKE_FLOW_FLOWS)
> > > flow_hash = skb->hash;
> > > if (host_override) {
> > > dsthost_hash = host_override - 1;
> >
> >
>
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-05 8:55 ` Pete Heist
@ 2021-08-05 14:56 ` Toke Høiland-Jørgensen
2021-08-06 10:08 ` Pete Heist
0 siblings, 1 reply; 12+ messages in thread
From: Toke Høiland-Jørgensen @ 2021-08-05 14:56 UTC (permalink / raw)
To: Pete Heist; +Cc: Cake List
Pete Heist <pete@heistp.net> writes:
> As for triple-isolate, I added a test Jon suggested:
>
> "I would recommend a W configuration of flows
>
> one of the three hosts sends to or from both of the two hosts, while
> the other two send to or from only one each
>
> this should result in the two hosts getting equal throughput each, and
> equal throughput in each of their two flows"
>
> This is the last test in the output, and I think the behavior looks
> correct for both the unpatched and patched versions:
>
> https://www.heistp.net/downloads/cake-hostfair/cake-hostfair-unpatched.txt
>
> https://www.heistp.net/downloads/cake-hostfair/cake-hostfair-patched.txt
>
> Thanks guys, and that, I believe, is finally it for now... :)
Awesome, thank you both! I'll send a proper patch upstream :)
-Toke
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-05 14:56 ` Toke Høiland-Jørgensen
@ 2021-08-06 10:08 ` Pete Heist
0 siblings, 0 replies; 12+ messages in thread
From: Pete Heist @ 2021-08-06 10:08 UTC (permalink / raw)
To: Toke Høiland-Jørgensen; +Cc: Cake List
Fyi I threw the test script up in a repo, so in case we need to test
the flow isolation keywords again we can just run that:
https://github.com/heistp/cake-flowiso
Pete
On Thu, 2021-08-05 at 16:56 +0200, Toke Høiland-Jørgensen wrote:
> Pete Heist <pete@heistp.net> writes:
>
> > As for triple-isolate, I added a test Jon suggested:
> >
> > "I would recommend a W configuration of flows
> >
> > one of the three hosts sends to or from both of the two hosts, while
> > the other two send to or from only one each
> >
> > this should result in the two hosts getting equal throughput each,
> > and
> > equal throughput in each of their two flows"
> >
> > This is the last test in the output, and I think the behavior looks
> > correct for both the unpatched and patched versions:
> >
> > https://www.heistp.net/downloads/cake-hostfair/cake-hostfair-unpatched.txt
> >
> > https://www.heistp.net/downloads/cake-hostfair/cake-hostfair-patched.txt
> >
> > Thanks guys, and that, I believe, is finally it for now... :)
>
> Awesome, thank you both! I'll send a proper patch upstream :)
>
> -Toke
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Cake] cake srchost/dsthost stopped working?
2021-08-04 11:14 ` Toke Høiland-Jørgensen
2021-08-04 11:36 ` Jonathan Morton
2021-08-04 20:49 ` Pete Heist
@ 2021-08-11 3:57 ` Stephen Hemminger
2 siblings, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2021-08-11 3:57 UTC (permalink / raw)
To: Toke Høiland-Jørgensen via Cake
On Wed, 04 Aug 2021 13:14:30 +0200
Toke Høiland-Jørgensen via Cake <cake@lists.bufferbloat.net> wrote:
> + else if (use_skbhash && flow_mode & CAKE_FLOW_FLOWS)
I think some compilers and static checkers are going to give a warning unless
you add a parenthesis in this statement.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-08-11 3:57 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-03 16:03 [Cake] cake srchost/dsthost stopped working? Pete Heist
2021-08-03 19:46 ` Pete Heist
2021-08-04 11:14 ` Toke Høiland-Jørgensen
2021-08-04 11:36 ` Jonathan Morton
2021-08-04 19:29 ` Toke Høiland-Jørgensen
2021-08-04 20:49 ` Pete Heist
2021-08-04 22:52 ` Pete Heist
2021-08-04 23:26 ` Jonathan Morton
2021-08-05 8:55 ` Pete Heist
2021-08-05 14:56 ` Toke Høiland-Jørgensen
2021-08-06 10:08 ` Pete Heist
2021-08-11 3:57 ` Stephen Hemminger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox