From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) (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 1EF2039F175 for ; Fri, 27 Mar 2026 08:09:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=209.85.208.46 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774598992; cv=pass; b=fFZxiNPeeGLySmWvCAND3di3hxBN4gcua6ab/JtU72/e30ds9DWI9un2XiEPuIlUqUAQxdQcWqRScmkzcmAxv+NB3pIZtlutSOrBPq2tBzkFG/VfYD5C0Bzsv90yMDzkkKQAOIa0wVzFmuJKK8W6veZrnUlpa4eaRrKtlSDENKU= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774598992; c=relaxed/simple; bh=v5YPdZzweON+At7DVdE+idlPN848L4ehBIvTVeXFFZw=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=CBCTq6ruE8c6Z2XELH0fvogbqerovycCwBrrBz3Z9VVZWd+GHP//Vm6YiHVU8+BFwV0eTtPdLkurUswZI+BbgSpaSvyKQfcfalxs+J0DKltdo0a3YLMy6zZvCEM6upAuoX8uuxHPt0NCs7RdAvJqJ6CibvnzXvLXHlXmKzDILig= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=dkQ1rrDy; arc=pass smtp.client-ip=209.85.208.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="dkQ1rrDy" Received: by mail-ed1-f46.google.com with SMTP id 4fb4d7f45d1cf-66a87eb232bso3007214a12.2 for ; Fri, 27 Mar 2026 01:09:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774598987; cv=none; d=google.com; s=arc-20240605; b=jnEUcjRARwclix5tzSsTVZfW8ubSgo4h4wwr+y7NneYSFg51NEMIkqYkhj04JEogoY F9FaX+xeZY5tj5YXe1D4VlWa5/qM6cSxqtjYrLtOEx2HCGIzmAB4ZVpTCOSfXdCzoK/s FVr4I2XdiVCgKwBdmj6OpQk1XBRFEvcCamG/8ZXaQSR/b7X9bjsJvj1nJamK5SC6JBZU aBo/mxiepFPj17vJ5FnixyCT9Us/cp+ex5sVyFXg5YE//VItMFyt1q2b3vOytBGLa8bo 6QTqRvu85DQOAR1dlzBkARCaNbPyocFpOi1lfwl+xtCUIL+2VS04Br7et18xc5cLxxYd rH+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Q9St+NGDMaz/uxG6C3SRUWwfX2nwq+Fo4JF7kwV+A3Q=; fh=OMIaRmveio80403ID6I9PZOi+SSGAAdqtkiDjaWP0Hg=; b=jsoZTHUyJQIohno8Am153K20bdelILl/a7d118/2z1syaJcRLXUxrpwdnEgGK1/PHQ i0fS/srEcQnP2StOz41B+kt0qy8Epg/CPOi+sy+8O83BDhMSL6ot2hVGGpzIRlWOz/9j 95C9Q8L67OpmZz9Ke+2wIpLEH5+mHGBiVnZikfpW81pXZxZ9H2odfbA+fnUjczXua2Xc axOhO+pgg3l8wpLFcQOLq4dlZFLSlupQtwo5jJe0irJQfTT9yXtSyfQ48lAYqBrwcgfh 3Y0tKDLW9uEMFJHHbmvXwR6TvYAYI1gNOH3tPk10Fi5Mk3bZ/LslNpg14uvdXKG/Y6hV 2/QA==; darn=vger.kernel.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1774598987; x=1775203787; darn=vger.kernel.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Q9St+NGDMaz/uxG6C3SRUWwfX2nwq+Fo4JF7kwV+A3Q=; b=dkQ1rrDyPveK5IMRKy5gM4wIjou2E1qk2VjK/aBc8HH4Dbr8iq3yp80iW88hcbbRdk hzjN/mtHNgCjpmkjM8wVnLI0kWBQ5O64u0t81VMCykg9kwGckHZqbCf3f3qKhd11M8wP 9+uItNUxHl1GNa8AioFQIh0GCw9c+gZO57Fj2SZmtw8AeZn4m2kg+basIZhpdLcYgmCo ZHowCSCz7F9UjmHPV9lFt5jDPmzJkaVIAkHkE7ZsqtfXM09LwQkj3rZoxYGcolAzdgJ+ cAQ3SEPyN5VUQTYkfGKeU2D/rn5nZyjdSk1GhgubLaB0yy/0bJBecGcRzBxmJoqz47mp rtSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774598987; x=1775203787; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Q9St+NGDMaz/uxG6C3SRUWwfX2nwq+Fo4JF7kwV+A3Q=; b=N5XJhaQih/inQLvsDRnuUAYEjIQLjLtjcFZI2/ITmnTEZKcA/PpZd0Z9Qr4zdz7G8o gnbi9j12mwUWblvJnvcu3Y6eBKyPMqDx5Rvh+7IfeWlywR1vM5NVzhJArOdjMpsIMIll wHWdYrCM28oeWOEpeP9qkV/xeynn8QoHarPhiXWp4NK3h/bPQOpcN+XtWDbO5pjEtEvI iA6LI/lfzaoFlGQUkC3z5tKgf4NqTUpWxMn7wTr+NatMFkfFVUC9VYmipv5dpC0AA0iR u6xxC16womPpg6yBv+bkTpAaLlDPBdG3N3vJ8bG5dRReiYmYbwuZtE1v0euQ99drvppG /tzw== X-Forwarded-Encrypted: i=1; AJvYcCUlxGNVR8+21kpeJ7oOnBFq/yxyWbcJuWMv9JxBZM2iZ2tzi2cK7HcSRKJuhoaYJdQMmZWbu9UylaaM7Bg=@vger.kernel.org X-Gm-Message-State: AOJu0Yym1Kpd5voVFy87WZxYQElUrmECtZ1HNt8/scpEBo7Q719uJnb1 u0SAusOWIaHpGOj3LY3aw5jvJkS/prRRXBO5qTH2jaHIZV5ejFGiXxeHvFsZh6QBej6gBYIiayQ 3Y24G4gdh8GpZvXXY1Ag+M3WEfemWPrvDV3CXeq50ww== X-Gm-Gg: ATEYQzwj6vkI5KGYnhYuox6yDNSdjq4/gAMUSEXTREKE0IZ79svEtR67aJINPndWSbQ wxaDBruyXjPKBXop8Cr+h755fBFfvEwYL2cGeqyoXjNpIBrZaSi3Wd0IUoPlaxaVNwZC7lscJ53 4tLvEQjH3b9JPMC0cVYyBc3u1OIrvT4h/XArjtnttN4Jpz4qrWxhlH8eui1KPS4Ewr0obCajHT3 BJeE6K4vz+xgKOlVehFjGj5cX8Bk3H1nZkFYwP1F9S7V3FcK5zSfD8GA59UcbO2tpVuF669xQK2 pLTvATzo3emED4udB/i/ULfOuOijusY6eHoU X-Received: by 2002:a05:6402:5188:b0:669:c769:cd1c with SMTP id 4fb4d7f45d1cf-66b28b5639bmr908279a12.19.1774598986965; Fri, 27 Mar 2026 01:09:46 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20260326151211.1862600-1-arighi@nvidia.com> <20260326151211.1862600-4-arighi@nvidia.com> In-Reply-To: <20260326151211.1862600-4-arighi@nvidia.com> From: Vincent Guittot Date: Fri, 27 Mar 2026 09:09:35 +0100 X-Gm-Features: AQROBzAgFS_X-sYHX1CfkDsPgi-MB6RI92a97HfnlE2sxDiRU6jl2htt-dsaV9A Message-ID: Subject: Re: [PATCH 3/4] sched/fair: Enable EAS with SMT on SD_ASYM_CPUCAPACITY systems To: Andrea Righi Cc: Ingo Molnar , Peter Zijlstra , Juri Lelli , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Christian Loehle , Koba Ko , Felix Abecassis , Balbir Singh , linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" On Thu, 26 Mar 2026 at 16:12, Andrea Righi wrote: > > Drop the sched_is_eas_possible() guard that rejects EAS whenever SMT is > active. This allows to enable EAS and perf-domain setup to succeed on > SD_ASYM_CPUCAPACITY topologies with SMT enabled. I don't think that we want to enable EAS with SMT. So keep EAS and SMT exclusive, at least for now > > Moreover, apply to find_energy_efficient_cpu() the same SMT-aware > preference as the non-EAS wakeup path: when SMT is active and there is a > fully-idle core in the relevant domain, prefer max-spare-capacity > candidates on fully-idle cores. Otherwise, fall back to the prior > behavior, to include also partially-idle SMT siblings. > > Cc: Vincent Guittot > Cc: Dietmar Eggemann > Cc: Christian Loehle > Cc: Koba Ko > Reported-by: Felix Abecassis > Signed-off-by: Andrea Righi > --- > kernel/sched/fair.c | 50 +++++++++++++++++++++++++++++++++++++++-- > kernel/sched/topology.c | 9 -------- > 2 files changed, 48 insertions(+), 11 deletions(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index f8deaaa5bfc85..593a89f688679 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -8658,13 +8658,15 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu) > eenv_task_busy_time(&eenv, p, prev_cpu); > > for (; pd; pd = pd->next) { > - unsigned long util_min = p_util_min, util_max = p_util_max; > unsigned long cpu_cap, cpu_actual_cap, util; > long prev_spare_cap = -1, max_spare_cap = -1; > + long max_spare_cap_fallback = -1; > unsigned long rq_util_min, rq_util_max; > unsigned long cur_delta, base_energy; > - int max_spare_cap_cpu = -1; > + int max_spare_cap_cpu = -1, max_spare_cap_cpu_fallback = -1; > int fits, max_fits = -1; > + int max_fits_fallback = -1; > + bool prefer_idle_cores; > > if (!cpumask_and(cpus, perf_domain_span(pd), cpu_online_mask)) > continue; > @@ -8676,6 +8678,8 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu) > eenv.cpu_cap = cpu_actual_cap; > eenv.pd_cap = 0; > > + prefer_idle_cores = sched_smt_active() && test_idle_cores(prev_cpu); > + > for_each_cpu(cpu, cpus) { > struct rq *rq = cpu_rq(cpu); > > @@ -8687,6 +8691,11 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu) > if (!cpumask_test_cpu(cpu, p->cpus_ptr)) > continue; > > + if (prefer_idle_cores && cpu != prev_cpu && !is_core_idle(cpu)) > + goto fallback; > + > + unsigned long util_min = p_util_min, util_max = p_util_max; > + > util = cpu_util(cpu, p, cpu, 0); > cpu_cap = capacity_of(cpu); > > @@ -8733,6 +8742,43 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu) > max_spare_cap_cpu = cpu; > max_fits = fits; > } > + > +fallback: > + if (!prefer_idle_cores || cpu == prev_cpu || is_core_idle(cpu)) > + continue; > + > + util_min = p_util_min; > + util_max = p_util_max; > + util = cpu_util(cpu, p, cpu, 0); > + cpu_cap = capacity_of(cpu); > + > + if (uclamp_is_used() && !uclamp_rq_is_idle(rq)) { > + rq_util_min = uclamp_rq_get(rq, UCLAMP_MIN); > + rq_util_max = uclamp_rq_get(rq, UCLAMP_MAX); > + > + util_min = max(rq_util_min, p_util_min); > + util_max = max(rq_util_max, p_util_max); > + } > + > + fits = util_fits_cpu(util, util_min, util_max, cpu); > + if (!fits) > + continue; > + > + lsub_positive(&cpu_cap, util); > + > + if ((fits > max_fits_fallback) || > + ((fits == max_fits_fallback) && > + ((long)cpu_cap > max_spare_cap_fallback))) { > + max_spare_cap_fallback = cpu_cap; > + max_spare_cap_cpu_fallback = cpu; > + max_fits_fallback = fits; > + } > + } > + > + if (max_spare_cap_cpu < 0 && max_spare_cap_cpu_fallback >= 0) { > + max_spare_cap = max_spare_cap_fallback; > + max_spare_cap_cpu = max_spare_cap_cpu_fallback; > + max_fits = max_fits_fallback; > } > > if (max_spare_cap_cpu < 0 && prev_spare_cap < 0) > diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c > index 061f8c85f5552..cb060fe56aec1 100644 > --- a/kernel/sched/topology.c > +++ b/kernel/sched/topology.c > @@ -232,15 +232,6 @@ static bool sched_is_eas_possible(const struct cpumask *cpu_mask) > return false; > } > > - /* EAS definitely does *not* handle SMT */ > - if (sched_smt_active()) { > - if (sched_debug()) { > - pr_info("rd %*pbl: Checking EAS, SMT is not supported\n", > - cpumask_pr_args(cpu_mask)); > - } > - return false; > - } > - > if (!arch_scale_freq_invariant()) { > if (sched_debug()) { > pr_info("rd %*pbl: Checking EAS: frequency-invariant load tracking not yet supported", > -- > 2.53.0 >