From: Tim Chen <tim.c.chen@linux.intel.com>
To: "Chen, Yu C" <yu.c.chen@intel.com>, wanglu15 <wanglu.priv@gmail.com>
Cc: peterz@infradead.org, mingo@redhat.com, juri.lelli@redhat.com,
vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de,
vschneid@redhat.com, kprateek.nayak@amd.com,
linux-kernel@vger.kernel.org, chen.yu@linux.dev
Subject: Re: [PATCH] sched/cache: honor migrate_llc_task semantics in active load balance
Date: Thu, 06 Aug 2026 09:21:09 -0700 [thread overview]
Message-ID: <ebbc093ff4966be0c785ba2886530541e0b0b431.camel@linux.intel.com> (raw)
In-Reply-To: <266b2607-45a6-4e36-820f-85b93e5df33d@intel.com>
On Thu, 2026-08-06 at 00:43 +0800, Chen, Yu C wrote:
> On 8/6/2026 12:04 AM, Tim Chen wrote:
> > On Wed, 2026-08-05 at 10:38 +0800, wanglu15 wrote:
> > > From: Lu Wang <wanglu.priv@gmail.com>
> > >
> > > Thanks, Tim.
> > >
> > > On Tue, 2026-08-04 at 12:42 -0700, Tim Chen wrote:
> > > > On Tue, 2026-08-04 at 23:07 +0800, Lu Wang wrote:
> > > > > Thanks, Chenyu.
> > > > >
> > > > > On Tue, 2026-08-04 at 16:17 +0800, Chen, Yu C wrote:
> > > > > > Yes. Besides, if I understand correctly, I suppose Lu Wang was
> > > > > > referring to the following scenario:
> > > > > >
> > > > > > src_rq has 2 runnable tasks, p1 and p2. p1 prefers dst_rq (dst_llc),
> > > > > > while p2 prefers src_rq (src_llc). In this case, migrate_llc_task is
> > > > > > set because src_rq has at least one task, p1, that wants to migrate
> > > > > > to dst_rq. In ALB, can_migrate_task() found p2 and returns true for p2
> > > > > > thus moves p2 out of its preferred LLC.
> > > > >
> > > > > That's exactly the scenario I had in mind.
> > > > >
> > > > > > Firstly, before ALB is triggered, the generic (passive) load balance is
> > > > > > triggered. It iterates over p1 and p2 on src_rq to see if it can move any
> > > > > > one of them to dst_rq, and in most cases it succeeds in moving p1 to
> > > > > > dst_cpu. As a result, ALB will not be triggered.
> > > > >
> > > > > My question is whether p1 is guaranteed to be moved out in passive
> > > > > LB. can_migrate_task()/migrate_degrades_llc() can reject p1 for
> > > > > several independent reasons — p1 pinned by cpus_ptr, p1 cache-hot
> > > > > with nr_balance_failed still below cache_nice_tries, or
> > > > > can_migrate_llc_task() returning something other than mig_forbid due
> > > > > to capacity constraints on dst_llc at that instant. If passive LB
> > > > > rejects p1 for any of these, ALB is still triggered with p1 and p2
> > > > > both present on src_rq.
> > > > >
> > > > > Can we conclude that p1 and p2 never end up on src_rq together when
> > > > > ALB fires? Or would it help to set up a simple experiment and trace
> > > > > this path to see whether it actually occurs in practice?
>
> I see. It is possible for p1 and p2 to coexist on src_rq. Previously,
> I thought that if task migration failed due to CPU affinity, then dst_cpu
> or src_cpu would be changed because of env.flags & LBF_DST_PINNED or
> env.flags & LBF_ALL_PINNED. So ALB would be skipped. But a more common
> scenario seems to be when p1 is the running task. Then can_migrate_task()
> will gate it anyway. That is a common migration failure.
>
> > > >
> > > > With 2 tasks on rq with different preference, active load balance could
> > > > pick the wrong task as can_migrate_task() checked in active load balance
> > > > will not consult migrate_degrades_llc(). How about the following patch
> > > > to fix this issue.
> > > >
> > > > [...]
> > > >
> > > > + if (env->migration_type == migrate_llc_task &&
> > > > + env->src_rq->cfs.h_nr_runnable > 1)
> > > > + return true;
> > > > +
> > > > return false;
> > > > }
> > >
> > > Your approach is simpler than mine — it avoids threading
> > > migration_type across the CPU stopper boundary and doesn't need any
> > > new rq field.
> > >
> > > One thing I'd like to flag, IMO: this approach skips the ALB path
> > > entirely for migrate_llc_task whenever more than one task is
> > > runnable, deferring the fix to the next passive LB pass. So it
> > > trades "delay" for a simpler implementation.
> > >
> >
> > If we cannot pull a task from this rq for a migrate_llc_task imbalance
> > with more than one runnable task, can_migrate_task() has already
> > rejected the candidates — either the task preferring the dst LLC
> > is cache-hot or capacity-constrained, or the only movable task
> > prefers the source LLC. Forcing ALB here would ignore that.
>
> In passive load balance, if there are 2 tasks, p1 prefers dst_llc,
> and if p1 is the running task, then p1 can not be migrated to
> dst_cpu in can_migrate_task():
> if (task_on_cpu(env->src_rq, p))
> return 0;
> and in this case we might have to rely on ALB to migrate p1(not
> ignore it)
Considering the case above, then what Lu Wang proposed is probably the better
option.
Tim
next prev parent reply other threads:[~2026-08-06 16:21 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-01 12:22 [PATCH] sched/cache: honor migrate_llc_task semantics in active load balance Lu Wang
2026-08-03 4:20 ` Chen, Yu C
2026-08-03 10:02 ` Lu Wang
2026-08-04 0:10 ` Tim Chen
2026-08-04 8:17 ` Chen, Yu C
2026-08-04 15:07 ` Lu Wang
2026-08-04 19:42 ` Tim Chen
2026-08-05 2:38 ` wanglu15
2026-08-05 16:04 ` Tim Chen
2026-08-05 16:43 ` Chen, Yu C
2026-08-06 16:21 ` Tim Chen [this message]
2026-08-04 8:30 ` Lu Wang
2026-08-06 15:35 ` Chen, Yu C
2026-08-06 17:22 ` Tim Chen
2026-08-07 6:48 ` Chen, Yu C
2026-08-07 9:58 ` Lu Wang
2026-08-09 10:53 ` [PATCH v2] " Lu Wang
-- strict thread matches above, loose matches on Subject: below --
2026-08-01 12:17 [PATCH] " Lu Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ebbc093ff4966be0c785ba2886530541e0b0b431.camel@linux.intel.com \
--to=tim.c.chen@linux.intel.com \
--cc=bsegall@google.com \
--cc=chen.yu@linux.dev \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=wanglu.priv@gmail.com \
--cc=yu.c.chen@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.