From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 896F13DD52E for ; Thu, 14 May 2026 15:25:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778772347; cv=none; b=DfZ+oQ1bHwnppJ9QCJ4blZFW7cInd+qZhG5vwFIAEs0g3OhSsaQGrWfGkWvopCi5gPIalXFayOFMZK/K+p5Ow4t+Dg2POUT9ixVzt7npBVHvuYKB2R6BukT1/ICz7hxgN5mnimewrD6XhgcM6Nu+9eZ65m0z0+p4dq3Lso7bEP0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778772347; c=relaxed/simple; bh=w6caHVt9jsKLPsxr9XBCriehGfxDLLCrr1df7VwO4sE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GJCDQDyDdHa343NuzcgmUAHix9rqWt5lLSOUwwxiCCVpPvSUAh5UDr0/di9Y72iRo0D+TTMDbx4RZZMpobb3riHKo7M0JZb2UgrvftRuokcQiLqSCwpkY0j5GYGRMNfYLwUbAOzj0D9RMbtJ5KTpThCayjbAA+IiqnRRbGl6+lE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=FyzPBo23; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="FyzPBo23" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64E8iOem2612159; Thu, 14 May 2026 15:25:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=tT0RyB+Bs1ihnP5LB z2nC5Kf4FH7i7zqVZageBkTbA4=; b=FyzPBo23rSNn4R8Vrx7e4O0yPtbksB4Hk ctJQ9cBxbmhdwydFKLDv637Xn3fk7YjOQCuqcfFAHb4kTZUCDadBgm0gYnR+7Dvx kFYNfhBNVFhecV+4pRGTGU915LvHpUFIiFHcZTIXuZ8zAi5gjo/V+Wb0UOeOG3df CjJZEA6JhLt1pA8A8on+/bFtqaVaIo6LiibB7pLtHROI5Vc9jhT/PoPCzmc3KeV8 B8fEVHmenEKVWDqy0OVncheAqlLzwN7CWXks4Xbe9KLnGMfq0s3vVxxCCZjQuEr4 xXT/ug0a3weJ8tNoNSHvSj7DpKeToM/6ypM0R/EYKrXstQlabrl0Q== Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4e3nve54s5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 14 May 2026 15:25:20 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 64EF9aMg002637; Thu, 14 May 2026 15:25:18 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4e3nfgvwae-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 14 May 2026 15:25:18 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 64EFPFRL31588828 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 14 May 2026 15:25:15 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 11A6D20043; Thu, 14 May 2026 15:25:15 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DAEFE20040; Thu, 14 May 2026 15:25:06 +0000 (GMT) Received: from li-7bb28a4c-2dab-11b2-a85c-887b5c60d769.ibm.com.com (unknown [9.124.213.185]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 14 May 2026 15:25:06 +0000 (GMT) From: Shrikanth Hegde To: linux-kernel@vger.kernel.org, mingo@kernel.org, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, yury.norov@gmail.com, kprateek.nayak@amd.com, iii@linux.ibm.com Cc: sshegde@linux.ibm.com, tglx@kernel.org, gregkh@linuxfoundation.org, pbonzini@redhat.com, seanjc@google.com, vschneid@redhat.com, huschle@linux.ibm.com, rostedt@goodmis.org, dietmar.eggemann@arm.com, mgorman@suse.de, bsegall@google.com, maddy@linux.ibm.com, srikar@linux.ibm.com, hdanton@sina.com, chleroy@kernel.org, vineeth@bitbyteword.org, frederic@kernel.org, arighi@nvidia.com, pauld@redhat.com, christian.loehle@arm.com, tj@kernel.org, tommaso.cucinotta@gmail.com, maz@kernel.org, rafael@kernel.org Subject: [PATCH v3 16/20] sched/core: Compute steal values at regular intervals Date: Thu, 14 May 2026 20:52:00 +0530 Message-ID: <20260514152204.481115-17-sshegde@linux.ibm.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260514152204.481115-1-sshegde@linux.ibm.com> References: <20260514152204.481115-1-sshegde@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=Y/XIdBeN c=1 sm=1 tr=0 ts=6a05e960 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=68sly6VtS29EVArANI4A:9 X-Proofpoint-GUID: YyFs_n1azEwPOKyvtwI-UoKKoz0zDZZ7 X-Proofpoint-ORIG-GUID: Tk39F5oy9o4iMTQu7Uj5n9MTKyZ-we2D X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTE0MDE1MyBTYWx0ZWRfXzDH/kQkRpi8R RnP4dG1VrxfjsXSt+k6gAGbcPDTuQ10TepjiFsntf3RgNy29pSCKSaQd1eb5HpCqy+agRHa+DR1 MmGOlOca+Nkx3yhBfnQgL0bKq+piHFHEJ/lLcUvghuq7IrGbomMTaP/xGamHpYdjGV+xyza4r6a uyjYr1LbLT+HqK2N6ptWbrl89dHhm/i5ED5uQS++l78bvCxYGYHzyLAnDR/5BYxaanMYKs/7tLD g+wUEs/CnjHqjQ0wf9Cv01cZUZQbAwtpqI8D0P8Y6AZeDqutadymOTkvmG/v25frBCNLsKbERzd RVJ4Uavhdje7HcWQpVXw3X31gEXsLi6E31A9Jx48Z72ZG084vriROP+298W+NxSKmRO6zXFGajI p720CwDkg3B/bPu/HbppVQVayPKihIMstbd7iEV4frULsZote46srvTDNKNPQn3wzeRKqN0yMLm 8sx5njdqDJUb0bmefbQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-14_03,2026-05-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 phishscore=0 malwarescore=0 suspectscore=0 bulkscore=0 spamscore=0 adultscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000 definitions=main-2605140153 Kick off the work to compute the steal time at regular interval. Gated with steal monitor enabled static key check to avoid any overhead when its disabled. The sampling period can changed at runtime using steal_mon/sampling_period. By default is 1000 milliseconds. I.e. 1 second This work is done by first online housekeeping CPU only. Hence it won't need any complicated synchronization. Signed-off-by: Shrikanth Hegde --- include/linux/sched.h | 2 ++ kernel/sched/core.c | 26 ++++++++++++++++++++++++++ kernel/sched/debug.c | 1 + kernel/sched/sched.h | 7 +++++++ 4 files changed, 36 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index ee5f19a96118..738f17d63943 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -2527,6 +2527,8 @@ struct steal_monitor_t { unsigned int high_threshold; unsigned int sampling_period_ms; }; + +extern struct steal_monitor_t steal_mon; #endif #endif diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 907c6b38460b..a3f65e9c7d30 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -5719,6 +5719,9 @@ void sched_tick(void) rq->idle_balance = idle_cpu(cpu); sched_balance_trigger(rq); } + + if (sched_steal_mon_enabled()) + sched_trigger_steal_computation(cpu); } #ifdef CONFIG_NO_HZ_FULL @@ -11375,4 +11378,27 @@ void sched_steal_detection_work(struct work_struct *work) now = ktime_get(); sm->prev_time = now; } + +void sched_trigger_steal_computation(int cpu) +{ + int first_hk_cpu = cpumask_first_and(housekeeping_cpumask(HK_TYPE_KERNEL_NOISE), + cpu_online_mask); + ktime_t now; + + /* Done by first online housekeeping CPU only */ + if (likely(cpu != first_hk_cpu)) + return; + + /* + * Since everything is updated by first housekeeping CPU, + * There is no need for complex syncronization. + */ + now = ktime_get(); + + /* Default is once per second */ + if (likely(ktime_ms_delta(now, steal_mon.prev_time) < steal_mon.sampling_period_ms)) + return; + + schedule_work_on(first_hk_cpu, &steal_mon.work); +} #endif diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index be8d223b43fd..f00c08581253 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -606,6 +606,7 @@ static ssize_t sched_sm_en_write(struct file *filp, const char __user *ubuf, static_branch_enable(&__sched_sm_enable); } else if (!sched_sm_wr_enable && orig) { static_branch_disable(&__sched_sm_enable); + cancel_work_sync(&steal_mon.work); cpumask_copy(&__cpu_preferred_mask, cpu_online_mask); } diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index d674f8e8e854..cc90012a85fc 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -4145,9 +4145,16 @@ DECLARE_STATIC_KEY_FALSE(__sched_sm_enable); void sched_push_current_non_preferred_cpu(struct rq *rq); void sched_init_steal_monitor(void); void sched_steal_detection_work(struct work_struct *work); +void sched_trigger_steal_computation(int cpu); +static inline bool sched_steal_mon_enabled(void) +{ + return static_branch_unlikely(&__sched_sm_enable); +} #else /* !CONFIG_PREFERRED_CPU */ static inline void sched_push_current_non_preferred_cpu(struct rq *rq) { } static inline void sched_init_steal_monitor(void) { } +static inline void sched_trigger_steal_computation(int cpu) { } +static inline bool sched_steal_mon_enabled(void) { return false; } #endif #endif /* _KERNEL_SCHED_SCHED_H */ -- 2.47.3