Cake - FQ_codel the next generation
 help / color / mirror / Atom feed
* [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