* [Cake] [PATCH net 0/2] net/sched: sch_cake: fixes for cake_mq
@ 2026-02-26 11:40 Jonas Köppeler
2026-02-26 11:40 ` [Cake] [PATCH net 1/2] net/sched: sch_cake: avoid sync overhead when unlimited Jonas Köppeler
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Jonas Köppeler @ 2026-02-26 11:40 UTC (permalink / raw)
To: Toke Høiland-Jørgensen, Jamal Hadi Salim, Jiri Pirko,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman
Cc: cake, netdev, Jonas Köppeler
This patch contains two fixes for cake_mq:
- do not sync when bandwidth is unlimited
- adjust the rates for all tins during sync
---
To: Toke Høiland-Jørgensen <toke@toke.dk>
To: Jamal Hadi Salim <jhs@mojatatu.com>
To: Jiri Pirko <jiri@resnulli.us>
To: David S. Miller <davem@davemloft.net>
To: Eric Dumazet <edumazet@google.com>
To: Jakub Kicinski <kuba@kernel.org>
To: Paolo Abeni <pabeni@redhat.com>
To: Simon Horman <horms@kernel.org>
Cc: cake@lists.bufferbloat.net
Cc: netdev@vger.kernel.org
Signed-off-by: Jonas Köppeler <j.koeppeler@tu-berlin.de>
---
Jonas Köppeler (2):
net/sched: sch_cake: avoid sync overhead when unlimited
net/sched: sch_cake: fixup cake_mq rate adjustment for diffserv config
net/sched/sch_cake.c | 53 +++++++++++++++++++++++++---------------------------
1 file changed, 25 insertions(+), 28 deletions(-)
---
base-commit: 2b7a25df823dc7d8f56f8ce7c2d2dac391cea9c2
change-id: 20260219-cake-mq-skip-sync-bandwidth-unlimited-57f3a4bac385
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Cake] [PATCH net 1/2] net/sched: sch_cake: avoid sync overhead when unlimited
2026-02-26 11:40 [Cake] [PATCH net 0/2] net/sched: sch_cake: fixes for cake_mq Jonas Köppeler
@ 2026-02-26 11:40 ` Jonas Köppeler
2026-02-26 12:04 ` [Cake] " Toke Høiland-Jørgensen
2026-02-26 11:40 ` [Cake] [PATCH net 2/2] net/sched: sch_cake: fixup cake_mq rate adjustment for diffserv config Jonas Köppeler
2026-02-28 2:40 ` [Cake] Re: [PATCH net 0/2] net/sched: sch_cake: fixes for cake_mq patchwork-bot+netdevbpf
2 siblings, 1 reply; 6+ messages in thread
From: Jonas Köppeler @ 2026-02-26 11:40 UTC (permalink / raw)
To: Toke Høiland-Jørgensen, Jamal Hadi Salim, Jiri Pirko,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman
Cc: cake, netdev, Jonas Köppeler
Skip inter-instance sync when no rate limit is configured, as it serves
no purpose and only adds overhead.
Fixes: 1bddd758bac2 ("net/sched: sch_cake: share shaper state across sub-instances of cake_mq")
Signed-off-by: Jonas Köppeler <j.koeppeler@tu-berlin.de>
---
net/sched/sch_cake.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
index d2bbd5654d5b..3718200353b5 100644
--- a/net/sched/sch_cake.c
+++ b/net/sched/sch_cake.c
@@ -2013,7 +2013,8 @@ static struct sk_buff *cake_dequeue(struct Qdisc *sch)
u64 delay;
u32 len;
- if (q->config->is_shared && now - q->last_checked_active >= q->config->sync_time) {
+ if (q->config->is_shared && q->rate_ns &&
+ now - q->last_checked_active >= q->config->sync_time) {
struct net_device *dev = qdisc_dev(sch);
struct cake_sched_data *other_priv;
u64 new_rate = q->config->rate_bps;
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Cake] [PATCH net 2/2] net/sched: sch_cake: fixup cake_mq rate adjustment for diffserv config
2026-02-26 11:40 [Cake] [PATCH net 0/2] net/sched: sch_cake: fixes for cake_mq Jonas Köppeler
2026-02-26 11:40 ` [Cake] [PATCH net 1/2] net/sched: sch_cake: avoid sync overhead when unlimited Jonas Köppeler
@ 2026-02-26 11:40 ` Jonas Köppeler
2026-02-26 12:05 ` [Cake] " Toke Høiland-Jørgensen
2026-02-28 2:40 ` [Cake] Re: [PATCH net 0/2] net/sched: sch_cake: fixes for cake_mq patchwork-bot+netdevbpf
2 siblings, 1 reply; 6+ messages in thread
From: Jonas Köppeler @ 2026-02-26 11:40 UTC (permalink / raw)
To: Toke Høiland-Jørgensen, Jamal Hadi Salim, Jiri Pirko,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman
Cc: cake, netdev, Jonas Köppeler
cake_mq's rate adjustment during the sync periods did not adjust the
rates for every tin in a diffserv config. This lead to inconsistencies
of rates between the tins. Fix this by setting the rates for all tins
during synchronization.
Fixes: 1bddd758bac2 ("net/sched: sch_cake: share shaper state across sub-instances of cake_mq")
Signed-off-by: Jonas Köppeler <j.koeppeler@tu-berlin.de>
---
net/sched/sch_cake.c | 50 +++++++++++++++++++++++---------------------------
1 file changed, 23 insertions(+), 27 deletions(-)
diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
index 3718200353b5..230ed16c6c91 100644
--- a/net/sched/sch_cake.c
+++ b/net/sched/sch_cake.c
@@ -391,8 +391,8 @@ static const u32 inv_sqrt_cache[REC_INV_SQRT_CACHE] = {
1239850263, 1191209601, 1147878294, 1108955788
};
-static void cake_set_rate(struct cake_tin_data *b, u64 rate, u32 mtu,
- u64 target_ns, u64 rtt_est_ns);
+static void cake_configure_rates(struct Qdisc *sch, u64 rate, bool rate_adjust);
+
/* http://en.wikipedia.org/wiki/Methods_of_computing_square_roots
* new_invsqrt = (invsqrt / 2) * (3 - count * invsqrt^2)
*
@@ -2040,12 +2040,9 @@ static struct sk_buff *cake_dequeue(struct Qdisc *sch)
if (num_active_qs > 1)
new_rate = div64_u64(q->config->rate_bps, num_active_qs);
- /* mtu = 0 is used to only update the rate and not mess with cobalt params */
- cake_set_rate(b, new_rate, 0, 0, 0);
+ cake_configure_rates(sch, new_rate, true);
q->last_checked_active = now;
q->active_queues = num_active_qs;
- q->rate_ns = b->tin_rate_ns;
- q->rate_shft = b->tin_rate_shft;
}
begin:
@@ -2362,12 +2359,10 @@ static void cake_set_rate(struct cake_tin_data *b, u64 rate, u32 mtu,
b->cparams.p_dec = 1 << 20; /* 1/4096 */
}
-static int cake_config_besteffort(struct Qdisc *sch)
+static int cake_config_besteffort(struct Qdisc *sch, u64 rate, u32 mtu)
{
struct cake_sched_data *q = qdisc_priv(sch);
struct cake_tin_data *b = &q->tins[0];
- u32 mtu = psched_mtu(qdisc_dev(sch));
- u64 rate = q->config->rate_bps;
q->tin_cnt = 1;
@@ -2381,12 +2376,10 @@ static int cake_config_besteffort(struct Qdisc *sch)
return 0;
}
-static int cake_config_precedence(struct Qdisc *sch)
+static int cake_config_precedence(struct Qdisc *sch, u64 rate, u32 mtu)
{
/* convert high-level (user visible) parameters into internal format */
struct cake_sched_data *q = qdisc_priv(sch);
- u32 mtu = psched_mtu(qdisc_dev(sch));
- u64 rate = q->config->rate_bps;
u32 quantum = 256;
u32 i;
@@ -2457,7 +2450,7 @@ static int cake_config_precedence(struct Qdisc *sch)
* Total 12 traffic classes.
*/
-static int cake_config_diffserv8(struct Qdisc *sch)
+static int cake_config_diffserv8(struct Qdisc *sch, u64 rate, u32 mtu)
{
/* Pruned list of traffic classes for typical applications:
*
@@ -2474,8 +2467,6 @@ static int cake_config_diffserv8(struct Qdisc *sch)
*/
struct cake_sched_data *q = qdisc_priv(sch);
- u32 mtu = psched_mtu(qdisc_dev(sch));
- u64 rate = q->config->rate_bps;
u32 quantum = 256;
u32 i;
@@ -2505,7 +2496,7 @@ static int cake_config_diffserv8(struct Qdisc *sch)
return 0;
}
-static int cake_config_diffserv4(struct Qdisc *sch)
+static int cake_config_diffserv4(struct Qdisc *sch, u64 rate, u32 mtu)
{
/* Further pruned list of traffic classes for four-class system:
*
@@ -2518,8 +2509,6 @@ static int cake_config_diffserv4(struct Qdisc *sch)
*/
struct cake_sched_data *q = qdisc_priv(sch);
- u32 mtu = psched_mtu(qdisc_dev(sch));
- u64 rate = q->config->rate_bps;
u32 quantum = 1024;
q->tin_cnt = 4;
@@ -2547,7 +2536,7 @@ static int cake_config_diffserv4(struct Qdisc *sch)
return 0;
}
-static int cake_config_diffserv3(struct Qdisc *sch)
+static int cake_config_diffserv3(struct Qdisc *sch, u64 rate, u32 mtu)
{
/* Simplified Diffserv structure with 3 tins.
* Latency Sensitive (CS7, CS6, EF, VA, TOS4)
@@ -2555,8 +2544,6 @@ static int cake_config_diffserv3(struct Qdisc *sch)
* Low Priority (LE, CS1)
*/
struct cake_sched_data *q = qdisc_priv(sch);
- u32 mtu = psched_mtu(qdisc_dev(sch));
- u64 rate = q->config->rate_bps;
u32 quantum = 1024;
q->tin_cnt = 3;
@@ -2581,32 +2568,33 @@ static int cake_config_diffserv3(struct Qdisc *sch)
return 0;
}
-static void cake_reconfigure(struct Qdisc *sch)
+static void cake_configure_rates(struct Qdisc *sch, u64 rate, bool rate_adjust)
{
+ u32 mtu = likely(rate_adjust) ? 0 : psched_mtu(qdisc_dev(sch));
struct cake_sched_data *qd = qdisc_priv(sch);
struct cake_sched_config *q = qd->config;
int c, ft;
switch (q->tin_mode) {
case CAKE_DIFFSERV_BESTEFFORT:
- ft = cake_config_besteffort(sch);
+ ft = cake_config_besteffort(sch, rate, mtu);
break;
case CAKE_DIFFSERV_PRECEDENCE:
- ft = cake_config_precedence(sch);
+ ft = cake_config_precedence(sch, rate, mtu);
break;
case CAKE_DIFFSERV_DIFFSERV8:
- ft = cake_config_diffserv8(sch);
+ ft = cake_config_diffserv8(sch, rate, mtu);
break;
case CAKE_DIFFSERV_DIFFSERV4:
- ft = cake_config_diffserv4(sch);
+ ft = cake_config_diffserv4(sch, rate, mtu);
break;
case CAKE_DIFFSERV_DIFFSERV3:
default:
- ft = cake_config_diffserv3(sch);
+ ft = cake_config_diffserv3(sch, rate, mtu);
break;
}
@@ -2617,6 +2605,14 @@ static void cake_reconfigure(struct Qdisc *sch)
qd->rate_ns = qd->tins[ft].tin_rate_ns;
qd->rate_shft = qd->tins[ft].tin_rate_shft;
+}
+
+static void cake_reconfigure(struct Qdisc *sch)
+{
+ struct cake_sched_data *qd = qdisc_priv(sch);
+ struct cake_sched_config *q = qd->config;
+
+ cake_configure_rates(sch, qd->config->rate_bps, false);
if (q->buffer_config_limit) {
qd->buffer_limit = q->buffer_config_limit;
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Cake] Re: [PATCH net 1/2] net/sched: sch_cake: avoid sync overhead when unlimited
2026-02-26 11:40 ` [Cake] [PATCH net 1/2] net/sched: sch_cake: avoid sync overhead when unlimited Jonas Köppeler
@ 2026-02-26 12:04 ` Toke Høiland-Jørgensen
0 siblings, 0 replies; 6+ messages in thread
From: Toke Høiland-Jørgensen @ 2026-02-26 12:04 UTC (permalink / raw)
To: Jonas Köppeler, Jamal Hadi Salim, Jiri Pirko,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman
Cc: cake, netdev, Jonas Köppeler
Jonas Köppeler <j.koeppeler@tu-berlin.de> writes:
> Skip inter-instance sync when no rate limit is configured, as it serves
> no purpose and only adds overhead.
>
> Fixes: 1bddd758bac2 ("net/sched: sch_cake: share shaper state across sub-instances of cake_mq")
> Signed-off-by: Jonas Köppeler <j.koeppeler@tu-berlin.de>
Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Cake] Re: [PATCH net 2/2] net/sched: sch_cake: fixup cake_mq rate adjustment for diffserv config
2026-02-26 11:40 ` [Cake] [PATCH net 2/2] net/sched: sch_cake: fixup cake_mq rate adjustment for diffserv config Jonas Köppeler
@ 2026-02-26 12:05 ` Toke Høiland-Jørgensen
0 siblings, 0 replies; 6+ messages in thread
From: Toke Høiland-Jørgensen @ 2026-02-26 12:05 UTC (permalink / raw)
To: Jonas Köppeler, Jamal Hadi Salim, Jiri Pirko,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman
Cc: cake, netdev, Jonas Köppeler
Jonas Köppeler <j.koeppeler@tu-berlin.de> writes:
> cake_mq's rate adjustment during the sync periods did not adjust the
> rates for every tin in a diffserv config. This lead to inconsistencies
> of rates between the tins. Fix this by setting the rates for all tins
> during synchronization.
>
> Fixes: 1bddd758bac2 ("net/sched: sch_cake: share shaper state across sub-instances of cake_mq")
> Signed-off-by: Jonas Köppeler <j.koeppeler@tu-berlin.de>
Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Cake] Re: [PATCH net 0/2] net/sched: sch_cake: fixes for cake_mq
2026-02-26 11:40 [Cake] [PATCH net 0/2] net/sched: sch_cake: fixes for cake_mq Jonas Köppeler
2026-02-26 11:40 ` [Cake] [PATCH net 1/2] net/sched: sch_cake: avoid sync overhead when unlimited Jonas Köppeler
2026-02-26 11:40 ` [Cake] [PATCH net 2/2] net/sched: sch_cake: fixup cake_mq rate adjustment for diffserv config Jonas Köppeler
@ 2026-02-28 2:40 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-02-28 2:40 UTC (permalink / raw)
To: =?utf-8?q?Jonas_K=C3=B6ppeler_=3Cj=2Ekoeppeler=40tu-berlin=2Ede=3E?=
Cc: toke, jhs, jiri, davem, edumazet, kuba, pabeni, horms, cake,
netdev
Hello:
This series was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Thu, 26 Feb 2026 12:40:14 +0100 you wrote:
> This patch contains two fixes for cake_mq:
> - do not sync when bandwidth is unlimited
> - adjust the rates for all tins during sync
>
> ---
> To: Toke Høiland-Jørgensen <toke@toke.dk>
> To: Jamal Hadi Salim <jhs@mojatatu.com>
> To: Jiri Pirko <jiri@resnulli.us>
> To: David S. Miller <davem@davemloft.net>
> To: Eric Dumazet <edumazet@google.com>
> To: Jakub Kicinski <kuba@kernel.org>
> To: Paolo Abeni <pabeni@redhat.com>
> To: Simon Horman <horms@kernel.org>
> Cc: cake@lists.bufferbloat.net
> Cc: netdev@vger.kernel.org
> Signed-off-by: Jonas Köppeler <j.koeppeler@tu-berlin.de>
>
> [...]
Here is the summary with links:
- [net,1/2] net/sched: sch_cake: avoid sync overhead when unlimited
https://git.kernel.org/netdev/net/c/0b3cd139be56
- [net,2/2] net/sched: sch_cake: fixup cake_mq rate adjustment for diffserv config
https://git.kernel.org/netdev/net/c/15c2715a5264
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-02-28 2:40 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-26 11:40 [Cake] [PATCH net 0/2] net/sched: sch_cake: fixes for cake_mq Jonas Köppeler
2026-02-26 11:40 ` [Cake] [PATCH net 1/2] net/sched: sch_cake: avoid sync overhead when unlimited Jonas Köppeler
2026-02-26 12:04 ` [Cake] " Toke Høiland-Jørgensen
2026-02-26 11:40 ` [Cake] [PATCH net 2/2] net/sched: sch_cake: fixup cake_mq rate adjustment for diffserv config Jonas Köppeler
2026-02-26 12:05 ` [Cake] " Toke Høiland-Jørgensen
2026-02-28 2:40 ` [Cake] Re: [PATCH net 0/2] net/sched: sch_cake: fixes for cake_mq patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox