mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: John Stultz <jstultz@google.com>
To: LKML <linux-kernel@vger.kernel.org>
Cc: John Stultz <jstultz@google.com>,
	Peter Zijlstra <peterz@infradead.org>,
	 Ingo Molnar <mingo@redhat.com>,
	K Prateek Nayak <kprateek.nayak@amd.com>,
	 Thomas Gleixner <tglx@linutronix.de>,
	Juri Lelli <juri.lelli@redhat.com>,
	 Vincent Guittot <vincent.guittot@linaro.org>,
	Valentin Schneider <vschneid@redhat.com>,
	 Suleiman Souhlal <suleiman@google.com>,
	Andrea Righi <arighi@nvidia.com>, Metin Kaya <Metin.Kaya@arm.com>,
	 Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	 Zimuzo Ezeozue <zezeozue@google.com>,
	Waiman Long <longman@redhat.com>,
	 Boqun Feng <boqun.feng@gmail.com>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	 Joel Fernandes <joelagnelf@nvidia.com>,
	Qais Yousef <qyousef@layalina.io>,
	 Xuewen Yan <xuewen.yan94@gmail.com>,
	kuyo chang <kuyo.chang@mediatek.com>,  hupu <hupu.gm@gmail.com>,
	Zhan Xusheng <zhanxusheng@xiaomi.com>,
	 "zhidao su (Xiaomi)" <soolaugust@gmail.com>,
	Hui Su <sh_def@163.com>,
	 "Shubhang Kaushik (Ampere)" <sh@gentwo.org>,
	kernel-team@android.com
Subject: [PATCH v33 0/7] Sleeping Owner Handling for Proxy Execution (v33)
Date: Fri, 23 Oct 2026 22:04:11 +0000	[thread overview]
Message-ID: <20261023220431.1106611-1-jstultz@google.com> (raw)

Hey All,
  Just wanted to send out this next iteration of Proxy
Execution: Sleeping Owner Handling.

As always, I’m trying to submit this larger work in smallish
digestible pieces. A quick overview of the journey so far:
 1) Prep patches
 2) Single rq proxying
 3) Simple donor migration
 4) Optimized donor migration
 5) Sleeping owner handling  <---- We are here!
 6) K Prateek’s core-sched fixes
 7) Connor's chain level balancing
 8) Suleiman’s proxy rwsems
 9) Suleiman’s proxy futexes
10) ...

The main feature in this series is the sleeping owner handling
patch, which addresses what to do when a task is blocked on a
mutex whose owner is sleeping. Since there is nothing we can do
to boost the sleeping owner at that point, we instead deactivate
and queue the waiter on a list attached to the owner. Then when
the owner wakes up, we will activate the waiters on the same
runqueue, so they can then boost the owner to run.

But since the simple sounding things hide subtlety, this ends up
being a pretty complex bit of logic. You can effectively get
trees of waiters, and it's possible to have tasks in the middle
of the tree be woken up. Then handling wakeups as they cascade
down the tree properly is also a bit complex, as there are extra
lists to manage the recursive style work without actually
recursing.

K Prateek sent an interesting alternative approach:
  https://lore.kernel.org/lkml/20260826062901.2137-1-kprateek.nayak@amd.com/

But after talking with Peter on this at LPC, we agreed to start
with the “relatively simpler”(ha!) approach first, and then take
a later swing at using K Prateek’s approach to optimize it.

In this series (against linus' HEAD) I’ve also aggregated fixes
from K Prateek, Shubhang Kaushik, as well as included some
initial proxy-chain cycle detection logic combining parallel
efforts from Zhidao Su and Hui Su. Additionally there have been
issues fixed in the sleeping-owner-enqueuing change, reported
by David Stevens as well as other partners.

Thank you to everyone for contributing bug reports, fixes and
improvements! I really appreciate it!

New in v32 of this set:
 * Fixes to PSI flag handling logic that proxy-exec could break.

 * Fix from Shubhang to use rq->donor for sched_tick_remote().

 * Extended K Prateek’s optimization to activate on NULL owner
   to do the same for null mutex/blocked_on.

 * Fix to set TASK_RUNNING when we shortcut return-migration to
   immediately run a task.

 * Fixed chain depth limit for find_proxy_task() to avoid
   deadlocks if there were a lock cycle, from Zhidao Su.

 * Further chain cycle-detection logic, using Brent’s algorithm
   to catch cycles faster from Hui Su.

 * Additional fixes to activate_blocked_waiters() to avoid PSI
   state problems

 * Fix for a potential crasher caused when the call to
   do_activate_blocked_waiter() is significantly delayed, which
   could cause proxy activations to the previous owner’s cpu,
   even if the task had been otherwise woken and then went back
   to sleep - potentially allowing execution outside of the smp
   affinity mask.

Additionally I’d appreciate any testing or comments that folks
have with the full Proxy Execution series! You can find the full
Proxy Exec series here:
  https://github.com/johnstultz-work/linux-dev/commits/proxy-exec-v33-7.4-pre-rc1/
  https://github.com/johnstultz-work/linux-dev.git proxy-exec-v33-7.4-pre-rc1

New changes to the full patch series in this revision include:
 * Small fix for Suleiman’s FUTEX_LOCK_PING logic

Issues still to address with the full series:
 * Address and integrate feedback from v1 RFC of Proxy enabled
   futexes

 * Maria Yu raised a subtle difference in how the nr_iowait
   counting might be attributed with proxy-exec: potentially
   proxy-migrated donors that become blocked on sleeping owners
   could increment/decrement the value on the owners cpu rq,
   instead of on the donor’s original cpu rq. It’s unclear to
   me what the impact of this would be, if at all, but it is
   potentially an observable difference with proxy-exec, so
   I’m going to take a swing at addressing it.

 * Reevaluate performance regression K Prateek Nayak found with
   the full series earlier.

 * The chain migration functionality needs further iterations
   and better validation to ensure it truly maintains the RT/DL
   load balancing invariants (despite this being broken in
   vanilla upstream with RT_PUSH_IPI currently)

Future work:
 * Expand to more locking primitives: Binder PI is something
   else we’re exploring.

 * Eventually: Work to replace rt_mutexes and get things happy
   with PREEMPT_RT


Credit/Disclaimer:
—--------------------
As always, this Proxy Execution series has a long history with
lots of developers that deserve credit: 

First described in a paper[1] by Watkins, Straub, Niehaus, then
from patches from Peter Zijlstra, extended with lots of work by
Juri Lelli, Valentin Schneider, and Connor O'Brien. (and thank
you to Steven Rostedt for providing additional details here!).
Thanks also to Joel Fernandes, Dietmar Eggemann, Metin Kaya,
K Prateek Nayak, Suleiman Souhlal, Christian Loehle, and
Andrea Righi for their substantial review, suggestion, and patch
contributions.

So again, many thanks to those above, as all the credit for this
series really is due to them - while the mistakes are surely mine.

Thanks so much!
-john

[1] https://static.lwn.net/images/conf/rtlws11/papers/proc/p38.pdf

Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: K Prateek Nayak <kprateek.nayak@amd.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: Vincent Guittot <vincent.guittot@linaro.org>
Cc: Valentin Schneider <vschneid@redhat.com>
Cc: Suleiman Souhlal <suleiman@google.com>
Cc: Andrea Righi <arighi@nvidia.com>
Cc: Metin Kaya <Metin.Kaya@arm.com>
Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Zimuzo Ezeozue <zezeozue@google.com>
Cc: Waiman Long <longman@redhat.com>
Cc: Boqun Feng <boqun.feng@gmail.com>
Cc: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Joel Fernandes <joelagnelf@nvidia.com>
Cc: Qais Yousef <qyousef@layalina.io>
Cc: Xuewen Yan <xuewen.yan94@gmail.com>
Cc: kuyo chang <kuyo.chang@mediatek.com>
Cc: hupu <hupu.gm@gmail.com>
Cc: Zhan Xusheng <zhanxusheng@xiaomi.com>
Cc: zhidao su (Xiaomi) <soolaugust@gmail.com>
Cc: Hui Su <sh_def@163.com>
Cc: Shubhang Kaushik (Ampere) <sh@gentwo.org>
Cc: kernel-team@android.com


Hui Su (1):
  sched/proxy: Detect cycles in proxy walks earlier

John Stultz (2):
  sched/psi: Preserve sleep-persistent PSI flags on off-CPU sleeping
    dequeues
  sched/proxy: Set TASK_RUNNING when shortcuting return migration

K Prateek Nayak (1):
  sched/core: Activate blocked donor when no owner is found

Peter Zijlstra (1):
  sched/proxy: Add deactivated (sleeping) owner handling to
    find_proxy_task()

Shubhang Kaushik (Ampere) (1):
  sched/core: Use the scheduling context for remote ticks

zhidao su (Xiaomi) (1):
  sched/proxy: Break cyclic proxy chains by deactivating blocked tasks

 include/linux/sched.h      |   7 +
 include/linux/sched/task.h |   1 +
 init/init_task.c           |   6 +
 kernel/fork.c              |   6 +
 kernel/sched/core.c        | 404 +++++++++++++++++++++++++++++++++----
 kernel/sched/stats.h       |  24 ++-
 6 files changed, 407 insertions(+), 41 deletions(-)

-- 
2.56.0.257.gf7497c7d27-goog


             reply	other threads:[~2026-10-23 22:04 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-23 22:04 John Stultz [this message]
2026-10-23 22:04 ` [PATCH v33 1/7] sched/psi: Preserve sleep-persistent PSI flags on off-CPU sleeping dequeues John Stultz
2026-10-24 11:44   ` Peter Zijlstra
2026-10-23 22:04 ` [PATCH v33 2/7] sched/core: Use the scheduling context for remote ticks John Stultz
2026-10-24 13:44   ` Kayra Cizmeci
2026-10-23 22:04 ` [PATCH v33 3/7] sched/core: Activate blocked donor when no owner is found John Stultz
2026-10-24  8:33   ` Andrea Righi
2026-10-23 22:04 ` [PATCH v33 4/7] sched/proxy: Set TASK_RUNNING when shortcuting return migration John Stultz
2026-10-24  8:36   ` Andrea Righi
2026-10-23 22:04 ` [PATCH v33 5/7] sched/proxy: Break cyclic proxy chains by deactivating blocked tasks John Stultz
2026-10-23 22:04 ` [PATCH v33 6/7] sched/proxy: Detect cycles in proxy walks earlier John Stultz
2026-10-24 15:34   ` Kayra Cizmeci
2026-10-23 22:04 ` [PATCH v33 7/7] sched/proxy: Add deactivated (sleeping) owner handling to find_proxy_task() John Stultz
2026-10-24  9:07   ` Andrea Righi

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=20261023220431.1106611-1-jstultz@google.com \
    --to=jstultz@google.com \
    --cc=Metin.Kaya@arm.com \
    --cc=arighi@nvidia.com \
    --cc=boqun.feng@gmail.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=hupu.gm@gmail.com \
    --cc=joelagnelf@nvidia.com \
    --cc=juri.lelli@redhat.com \
    --cc=kernel-team@android.com \
    --cc=kprateek.nayak@amd.com \
    --cc=kuyo.chang@mediatek.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=longman@redhat.com \
    --cc=mingo@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=qyousef@layalina.io \
    --cc=rostedt@goodmis.org \
    --cc=sh@gentwo.org \
    --cc=sh_def@163.com \
    --cc=soolaugust@gmail.com \
    --cc=suleiman@google.com \
    --cc=tglx@linutronix.de \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.com \
    --cc=xuewen.yan94@gmail.com \
    --cc=zezeozue@google.com \
    --cc=zhanxusheng@xiaomi.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®