From: Peter Zijlstra <peterz@infradead.org>
To: Tejun Heo <tj@kernel.org>
Cc: Aaron Lu <ziqianlu@bytedance.com>,
mingo@kernel.org, linux-kernel@vger.kernel.org,
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, williams@redhat.com, jkacur@redhat.com
Subject: Re: [PATCH 0/2] sched: Remove sched_class::balance()
Date: Thu, 20 Aug 2026 09:18:52 +0200 [thread overview]
Message-ID: <20260820071852.GJ1247881@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <aoYCXConRkdx8zKi@slm.duckdns.org>
On Wed, Aug 19, 2026 at 09:22:04AM -1000, Tejun Heo wrote:
> Hello,
>
> On Wed, Aug 19, 2026 at 04:36:49PM +0200, Peter Zijlstra wrote:
> ...
> > > Except that is susceptible to live-locks. It doesn't have forward
> > > progress guarantees. For that we need to limit the amount of
> > > lock-breaks/newidle invocations.
> >
> > So TJ did something like that for ext. I'm not entirely sure I get his
> > argument on forward progress though.
>
> For SCX, rq lock is dropped only when a task needs to be migrated to be put
> in the local DSQ and, barring something else happening to it like dequeue or
> competing dispatch, the next time pick_task comes around, the task is going
> to be on the local DSQ, and won't need to drop the lock for that rq and thus
> picking would be able to proceed to the next rq.
Right, but I worry about the cases:
- there is no ext task pulled to local because $reasons (could be
cpumask), and we retry, then it will see there are ext tasks, but no
local and it will try again?
- custom DSQs, those BPF based things, then we always need to drop the
lock in order to execute those BPF methods, no?
That is not unlike the case where fair has no local tasks and it will
try and pull some tasks. It will try this every time, and if there are
very few fair tasks in the system, this happens again and again.
As mentioned, one 'hack' I considered was keeping a retry count, and
simply setting 'rf = NULL' after a few cycles, to inhibit any further
balancing and forcing progress.
It just needs making sure all the sched_class::pick_task methods can
deal with !rf, but that shoulnd't be too hard.
> > But the simple thing is something like so, which I think also allows
> > simplifying ext some.
>
> Oh yeah, if core_seq tracks competing multi-picks, SCX no longer needs to
> track lock drops which was kinda ugly.
>
> > @@ -6392,7 +6393,7 @@ pick_next_task(struct rq *rq, struct rq_flags *rf)
> > if (cookie)
> > p = sched_core_find(rq_i, cookie);
> > if (!p)
> > - p = idle_sched_class.pick_task(rq_i, rf);
> > + p = idle_sched_class.pick_task(rq_i, NULL);
>
> I guess this is to signify that idle pick shouldn't drop rq lock as it's
> after seq verification?
Indeed. Obviously idle doesn't do balancing, so its trivially correct,
but it is indeed to make clear this is after seq validation.
next prev parent reply other threads:[~2026-08-20 7:19 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-24 12:13 [PATCH 0/2] sched: Remove sched_class::balance() Peter Zijlstra
2026-06-24 12:13 ` [PATCH 1/2] sched/core: Allow newidle for core-sched Peter Zijlstra
2026-06-24 23:56 ` K Prateek Nayak
2026-06-25 12:41 ` Peter Zijlstra
2026-06-25 12:42 ` Peter Zijlstra
2026-06-24 12:13 ` [PATCH 2/2] sched: Remove sched_class::balance() Peter Zijlstra
2026-07-02 11:49 ` [PATCH 0/2] " Aaron Lu
2026-07-03 3:31 ` K Prateek Nayak
2026-08-19 9:39 ` Peter Zijlstra
2026-08-19 7:58 ` Peter Zijlstra
2026-08-19 14:36 ` Peter Zijlstra
2026-08-19 19:22 ` Tejun Heo
2026-08-20 7:18 ` Peter Zijlstra [this message]
2026-08-20 7:42 ` Tejun Heo
2026-08-20 7:58 ` Peter Zijlstra
2026-08-20 15:40 ` Peter Zijlstra
2026-08-20 17:15 ` K Prateek Nayak
2026-08-21 7:10 ` Peter Zijlstra
2026-08-21 2:44 ` Aaron Lu
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=20260820071852.GJ1247881@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=jkacur@redhat.com \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@kernel.org \
--cc=rostedt@goodmis.org \
--cc=tj@kernel.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=williams@redhat.com \
--cc=ziqianlu@bytedance.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.