From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A04B93B6351 for ; Tue, 24 Mar 2026 19:13:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774379623; cv=none; b=sJj9nWrMHZe5ey/4uIvWBJWCcoWX2MvurUxI7IlmI2Jq12Hk3GHzr05uMJCec92wPFAwi80MFCukMnXxuOdUsV2dUILt7WIdigusP7NcC5O10DIxmYE6IHD4yiyUexl1yIIT2pufoff0GQMzxsrJ03E79KNzhxxBoCigyiRv7Dk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774379623; c=relaxed/simple; bh=Mq54RwXoJ1AF4ZPgNndcloxByF/VRzwhwN25KrweLyw=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=abex4yCBoy9sK0sPMKUmkLYbhmNM80zKQiXyT7U0LOusO1bjYsenlS1Bkmz+NX7dtupESrNNGwbpZl/ltt7EvYzWCv1eoZLY2kbN/IOU3p5p7wywcg713310XPTC8F1BXqPRBCQMtVuJ6chLMCz/e7aqWCTXu2lHE5G67SzmDjw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--jstultz.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=MYlcfMx5; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--jstultz.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="MYlcfMx5" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-35a0b51eb23so1632765a91.2 for ; Tue, 24 Mar 2026 12:13:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774379621; x=1774984421; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:from:subject:message-id :mime-version:date:from:to:cc:subject:date:message-id:reply-to; bh=pqmYOM/WoGYGkAP2swMuk4FlM/yWt5sbdY+RN+fQ8/0=; b=MYlcfMx5iTGhxpcIKXNqDhoXjZa3/UHsgoobpuoS5dG+yoybP3ZY2iZhyXYrOh4+q0 0cGe2F0JEAReaxAumk5uH/jO7PdclDSkRxIuvBVopQOejhEaEEXRyrSc1nC+hJxWOdFH Q3YddTI9jyzFIqg5wpiwRZBabj0O/YB/T7l7AQWMzJHcsnFhFQJQg4BwrSD9zHHNTYOg J13hbVcOstv+q1TcN1BaZ85xAEvJWoxAu9gYF6+7BqD1owl9sruchN3p4aJZ+S4UaGfW Rog9sWNiEWAGGQCmx8OiATqQhGj8M4VOGSqNgVnj3uJbiNuxmAY+s/5qytDoRjAoJepU 0v3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774379621; x=1774984421; h=content-transfer-encoding:cc:to:from:subject:message-id :mime-version:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=pqmYOM/WoGYGkAP2swMuk4FlM/yWt5sbdY+RN+fQ8/0=; b=bulTFjnHbw8/DiFXxmzG7neR1aFPyLZGuNSVpZVsR3pUGIcfDBRoKdB2leLHedS96t LOa+w3+6kPZ2PWzGkUYFVrpdAhdaTSaSonL47/wXcxIvRHBGh4o8kQHFwV8bDmmUnP6Z vvrOohWVqSq+aCY2HtFgmGkvggi/KXaMlfloRgcd96gqOdbfXkyv71xhXwxaGz6FcCro LUYNsza2wubZzAlZcou7OZGlSJmYtPLr/kBi9/f8veskzqr2LcN6hddD7cwLaVe0LY7n mVkrJG3WH2S/DKVEbOgZpx5AbVvZH3pumkuiw2JVzK3ESk0s6KceQ5ai/fDv7wBou365 Yb5g== X-Gm-Message-State: AOJu0YzaaRIzDVvnVcmun8XbJW9xfE+y0hgNFUSSuliGNzzAA2ALUm3M PFJf2MVvsnz6dZVRuCGX9Vpw6pGHDLfo+i+u6JOMVER9HlJLiJJyEtjlHhOSP49qaLxJCQZjnqp r/moNW47xcOB+FpeJZb8KIqXJp1dNV3hZxELflbHXLyZ9XW8/fgsfe/220sVMsUV5LhKM3CKfRN Ti1tnwG2rm2tfgrKeUmDgMNeUC0lvQ7H4o1QukfHEWqqkesGAU X-Received: from pjbgx18.prod.google.com ([2002:a17:90b:1252:b0:35b:c86f:f542]) (user=jstultz job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4c81:b0:35b:e51a:85af with SMTP id 98e67ed59e1d1-35c0dce51ffmr423688a91.10.1774379620457; Tue, 24 Mar 2026 12:13:40 -0700 (PDT) Date: Tue, 24 Mar 2026 19:13:15 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog Message-ID: <20260324191337.1841376-1-jstultz@google.com> Subject: [PATCH v26 00/10] Simple Donor Migration for Proxy Execution From: John Stultz To: LKML Cc: John Stultz , Joel Fernandes , Qais Yousef , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Valentin Schneider , Steven Rostedt , Ben Segall , Zimuzo Ezeozue , Mel Gorman , Will Deacon , Waiman Long , Boqun Feng , "Paul E. McKenney" , Metin Kaya , Xuewen Yan , K Prateek Nayak , Thomas Gleixner , Daniel Lezcano , Suleiman Souhlal , kuyo chang , hupu , kernel-team@android.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hey All, Yet another iteration on the next chunk of the Proxy Exec series: Simple Donor Migration This is just the next step for Proxy Execution, to allow us to migrate blocked donors across runqueues to boost remote lock owners. As always, I=E2=80=99m trying to submit this larger work in smallish digestible pieces, so in this portion of the series, I=E2=80=99m only submitting for review and consideration some recent fixups, and the logic that allows us to do donor(blocked waiter) migration, which requires some additional changes to locking and extra state tracking to ensure we don=E2=80=99t accidentally run a migrated donor on a cpu it isn=E2=80=99t affined to, as well as some extra handling to deal with balance callback state that needs to be reset when we decide to pick a different task after doing donor migration. I really want to share my appreciation for feedback provided by Peter, K Prateek and Juri on the last revision!=20 New in this iteration: * Fix missed balancing opportunity that K Prateek noticed * Fix bug in pick_next_pushable_task_dl() that Juri noticed * Use guard() in attach_one_task() as suggested by K Prateek * Add context analysis annotations, as suggested by Peter * Introduce proxy_release/reaquire_rq_lock() helpers as suggested by Peter * Rework comments and logic in numerous places to address feedback from Peter * Mark tasks PROXY_WAKING if try_to_block_task() fails due to a signal, as noted by K Prateek I=E2=80=99d love to get further feedback on any place where these patches are confusing, or could use additional clarifications. There=E2=80=99s also been some further improvements In the full Proxy Execution series: * Tweaks to proxy_needs_return() suggested by K Prateek * Additional tweaks to address concern about signal edge cases from K Prateek I=E2=80=99d appreciate any testing or comments that folks have with the full set! You can find the full Proxy Exec series here: https://github.com/johnstultz-work/linux-dev/commits/proxy-exec-v26-7.0-r= c5/ https://github.com/johnstultz-work/linux-dev.git proxy-exec-v26-7.0-rc5 Issues still to address with the full series: * Resolve a regression in the later optimized donor-migration changes combined with =E2=80=9CFix 'stuck' dl_server=E2=80=9D change in 6= .19 * With the full series against 7.0-rc3, when doing heavy stress testing, I=E2=80=99m occasionally hitting crashes due to null return from __pick_eevdf(). Need to dig on this and find why it doesn=E2=80=99t happen against 6.18 * Continue working to get sched_ext to be ok with Proxy Execution enabled. * Reevaluate performance regression K Prateek Nayak found with the full series. * 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: Figuring out pi-futexes would be good, using proxy for Binder PI is something else we=E2=80=99re exploring. * Eventually: Work to replace rt_mutexes and get things happy with PREEMPT_RT I=E2=80=99d love any feedback or review thoughts on the full series as well. I=E2=80=99m trying to keep the chunks small, reviewable and iteratively testable, but if you have any suggestions on how to improve the larger series, I=E2=80=99m all ears. Credit/Disclaimer: =E2=80=94-------------------- As always, this Proxy Execution series has a long history with lots of developers that deserve credit:=20 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 and Suleiman Souhlal 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: Joel Fernandes Cc: Qais Yousef Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Juri Lelli Cc: Vincent Guittot Cc: Dietmar Eggemann Cc: Valentin Schneider Cc: Steven Rostedt Cc: Ben Segall Cc: Zimuzo Ezeozue Cc: Mel Gorman Cc: Will Deacon Cc: Waiman Long Cc: Boqun Feng Cc: "Paul E. McKenney" Cc: Metin Kaya Cc: Xuewen Yan Cc: K Prateek Nayak Cc: Thomas Gleixner Cc: Daniel Lezcano Cc: Suleiman Souhlal Cc: kuyo chang Cc: hupu Cc: kernel-team@android.com John Stultz (10): sched: Make class_schedulers avoid pushing current, and get rid of proxy_tag_curr() sched: Minimise repeated sched_proxy_exec() checking sched: Fix potentially missing balancing with Proxy Exec locking: Add task::blocked_lock to serialize blocked_on state sched: Fix modifying donor->blocked on without proper locking sched/locking: Add special p->blocked_on=3D=3DPROXY_WAKING value for prox= y return-migration sched: Add assert_balance_callbacks_empty helper sched: Add logic to zap balance callbacks if we pick again sched: Move attach_one_task and attach_task helpers to sched.h sched: Handle blocked-waiter migration (and return migration) include/linux/sched.h | 91 ++++++---- init/init_task.c | 1 + kernel/fork.c | 1 + kernel/locking/mutex-debug.c | 4 +- kernel/locking/mutex.c | 40 +++-- kernel/locking/mutex.h | 6 + kernel/locking/ww_mutex.h | 16 +- kernel/sched/core.c | 328 +++++++++++++++++++++++++++++------ kernel/sched/deadline.c | 18 +- kernel/sched/fair.c | 26 --- kernel/sched/rt.c | 15 +- kernel/sched/sched.h | 32 +++- 12 files changed, 442 insertions(+), 136 deletions(-) --=20 2.53.0.1018.g2bb0e51243-goog