[RESEND x2][PATCH v12 0/7] Preparatory changes for Proxy Execution v12

John Stultz posted 7 patches 2 months, 2 weeks ago
There is a newer version of this series
kernel/futex/pi.c               |   6 +-
kernel/locking/mutex.c          |  59 ++++++---------
kernel/locking/mutex.h          |  27 +++++++
kernel/locking/rtmutex.c        |  49 ++++++++----
kernel/locking/rtmutex_api.c    |  11 ++-
kernel/locking/rtmutex_common.h |   3 +-
kernel/locking/rwbase_rt.c      |   8 +-
kernel/locking/rwsem.c          |   4 +-
kernel/locking/spinlock_rt.c    |   3 +-
kernel/locking/ww_mutex.h       |  51 +++++++------
kernel/sched/core.c             | 129 ++++++++++++++++++--------------
kernel/sched/deadline.c         |  57 ++++++--------
kernel/sched/fair.c             |  32 ++++----
kernel/sched/rt.c               |  67 +++++++----------
kernel/sched/sched.h            |  50 ++++++++++++-
kernel/sched/syscalls.c         |   4 +-
16 files changed, 328 insertions(+), 232 deletions(-)
[RESEND x2][PATCH v12 0/7] Preparatory changes for Proxy Execution v12
Posted by John Stultz 2 months, 2 weeks ago
Hey All,

  I wanted to re-send (again) v12 of the preparatory patches for
Proxy Execution - an approach for a generalized form of priority
inheritance. Here again, I’m only submitting the early /
preparatory changes for review, in the hope that we can move
these more straightforward patches along and then iteratively
move through the more interesting patches in the Proxy Execution
series.

There have been a few changes to the preparatory patches in v12:
* Peter suggested I switch from using “selected” to denote the
  task chosen to be scheduled, and instead use “donor”
* K Prateek Nayak and Peter both pointed out issues in the
  “Remove wakeups from under mutex::wait_lock” patch that needed
  some work to solve.

Thank you for all the detailed review and feedback there!

I’ve also continued working on the rest of the series, which you
can find here:
  https://github.com/johnstultz-work/linux-dev/commits/proxy-exec-v12-6.11-rc5
  https://github.com/johnstultz-work/linux-dev.git proxy-exec-v12-6.11-rc5

New changes in the full series include:
* Avoid donor migrations of SCHED_DEADLINE tasks
* Fix to avoid recently discovered race when bulk migrating the
  chain
* Propagating rename of rq_selected -> rq->donor
* Rework of ksched_football so it can be triggered repeatedly to
  run via sysfs

Issues still to address with the full series:
* K Prateek Nayak did some testing with an earlier version of
  the series and saw ~3-5% regressions in some cases. I’m hoping
  to look into this soon to see if we can reduce those further.
* 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)
* Juri Lelli proposed an alternative approach for handling
  issues with donor migration and SCHED_DEADLINE. I need to get
  some time to read over the paper he shared and understand it
  further.
* Also at OSPM, Thomas Gleixner mentioned we might consider
  including Proxy Exec in the PREEMPT_RT patch series, however
  for this to be useful I need to take a stab at deprecating
  rt_mutexes for proxy mutexes, as everything is an rt_mutex
  with PREEMPT_RT.


Credit/Disclaimer:
—--------------------
As mentioned previously, this Proxy Execution series has a long
history: 

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!)

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

Thanks so much!
-john

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


Cc: Joel Fernandes <joelaf@google.com>
Cc: Qais Yousef <qyousef@layalina.io>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: Vincent Guittot <vincent.guittot@linaro.org>
Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: Valentin Schneider <vschneid@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ben Segall <bsegall@google.com>
Cc: Zimuzo Ezeozue <zezeozue@google.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Will Deacon <will@kernel.org>
Cc: Waiman Long <longman@redhat.com>
Cc: Boqun Feng <boqun.feng@gmail.com>
Cc: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Metin Kaya <Metin.Kaya@arm.com>
Cc: Xuewen Yan <xuewen.yan94@gmail.com>
Cc: K Prateek Nayak <kprateek.nayak@amd.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: kernel-team@android.com


Connor O'Brien (2):
  sched: Add move_queued_task_locked helper
  sched: Consolidate pick_*_task to task_is_pushable helper

John Stultz (1):
  sched: Split out __schedule() deactivate task logic into a helper

Juri Lelli (2):
  locking/mutex: Make mutex::wait_lock irq safe
  locking/mutex: Expose __mutex_owner()

Peter Zijlstra (2):
  locking/mutex: Remove wakeups from under mutex::wait_lock
  sched: Split scheduler and execution contexts

 kernel/futex/pi.c               |   6 +-
 kernel/locking/mutex.c          |  59 ++++++---------
 kernel/locking/mutex.h          |  27 +++++++
 kernel/locking/rtmutex.c        |  49 ++++++++----
 kernel/locking/rtmutex_api.c    |  11 ++-
 kernel/locking/rtmutex_common.h |   3 +-
 kernel/locking/rwbase_rt.c      |   8 +-
 kernel/locking/rwsem.c          |   4 +-
 kernel/locking/spinlock_rt.c    |   3 +-
 kernel/locking/ww_mutex.h       |  51 +++++++------
 kernel/sched/core.c             | 129 ++++++++++++++++++--------------
 kernel/sched/deadline.c         |  57 ++++++--------
 kernel/sched/fair.c             |  32 ++++----
 kernel/sched/rt.c               |  67 +++++++----------
 kernel/sched/sched.h            |  50 ++++++++++++-
 kernel/sched/syscalls.c         |   4 +-
 16 files changed, 328 insertions(+), 232 deletions(-)

-- 
2.46.0.598.g6f2099f65c-goog