All of lore.kernel.org
 help / color / mirror / Atom feed
From: "tip-bot2 for Ionela Voinescu" <tip-bot2@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: Ionela Voinescu <ionela.voinescu@arm.com>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: sched/core] arm64: Rebuild sched domains on invariance status changes
Date: Fri, 20 Nov 2020 12:34:04 -0000	[thread overview]
Message-ID: <160587564498.11244.17662958657423680290.tip-bot2@tip-bot2> (raw)
In-Reply-To: <20201027180713.7642-3-ionela.voinescu@arm.com>

The following commit has been merged into the sched/core branch of tip:

Commit-ID:     ecec9e86d1a366f97c827ab4a8134ec06ccf031a
Gitweb:        https://git.kernel.org/tip/ecec9e86d1a366f97c827ab4a8134ec06ccf031a
Author:        Ionela Voinescu <ionela.voinescu@arm.com>
AuthorDate:    Tue, 27 Oct 2020 18:07:12 
Committer:     Peter Zijlstra <peterz@infradead.org>
CommitterDate: Thu, 19 Nov 2020 11:25:47 +01:00

arm64: Rebuild sched domains on invariance status changes

Task scheduler behavior depends on frequency invariance (FI) support and
the resulting invariant load tracking signals. For example, in order to
make accurate predictions across CPUs for all performance states, Energy
Aware Scheduling (EAS) needs frequency-invariant load tracking signals
and therefore it has a direct dependency on FI. This dependency is known,
but EAS enablement is not yet conditioned on the presence of FI during
the built of the scheduling domain hierarchy.

Before this is done, the following must be considered: while
arch_scale_freq_invariant() will see changes in FI support and could
be used to condition the use of EAS, it could return different values
during system initialisation.

For arm64, such a scenario will happen for a system that does not support
cpufreq driven FI, but does support counter-driven FI. For such a system,
arch_scale_freq_invariant() will return false if called before counter
based FI initialisation, but change its status to true after it.
If EAS becomes explicitly dependent on FI this would affect the task
scheduler behavior which builds its scheduling domain hierarchy well
before the late counter-based FI init. During that process, EAS would be
disabled due to its dependency on FI.

Two points of future early calls to arch_scale_freq_invariant() which
would determine EAS enablement are:
 - (1) drivers/base/arch_topology.c:126 <<update_topology_flags_workfn>>
		rebuild_sched_domains();
       This will happen after CPU capacity initialisation.
 - (2) kernel/sched/cpufreq_schedutil.c:917 <<rebuild_sd_workfn>>
		rebuild_sched_domains_energy();
		-->rebuild_sched_domains();
       This will happen during sched_cpufreq_governor_change() for the
       schedutil cpufreq governor.

Therefore, before enforcing the presence of FI support for the use of EAS,
ensure the following: if there is a change in FI support status after
counter init, use the existing rebuild_sched_domains_energy() function to
trigger a rebuild of the scheduling and performance domains that in turn
will determine the enablement of EAS.

Signed-off-by: Ionela Voinescu <ionela.voinescu@arm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Link: https://lkml.kernel.org/r/20201027180713.7642-3-ionela.voinescu@arm.com
---
 arch/arm64/kernel/topology.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/arm64/kernel/topology.c b/arch/arm64/kernel/topology.c
index 543c67c..2a9b69f 100644
--- a/arch/arm64/kernel/topology.c
+++ b/arch/arm64/kernel/topology.c
@@ -213,6 +213,7 @@ static DEFINE_STATIC_KEY_FALSE(amu_fie_key);
 
 static int __init init_amu_fie(void)
 {
+	bool invariance_status = topology_scale_freq_invariant();
 	cpumask_var_t valid_cpus;
 	bool have_policy = false;
 	int ret = 0;
@@ -255,6 +256,15 @@ static int __init init_amu_fie(void)
 	if (!topology_scale_freq_invariant())
 		static_branch_disable(&amu_fie_key);
 
+	/*
+	 * Task scheduler behavior depends on frequency invariance support,
+	 * either cpufreq or counter driven. If the support status changes as
+	 * a result of counter initialisation and use, retrigger the build of
+	 * scheduling domains to ensure the information is propagated properly.
+	 */
+	if (invariance_status != topology_scale_freq_invariant())
+		rebuild_sched_domains_energy();
+
 free_valid_mask:
 	free_cpumask_var(valid_cpus);
 

  parent reply	other threads:[~2020-11-20 12:34 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-27 18:07 [PATCH RESEND v2 0/3] condition EAS enablement on FI support Ionela Voinescu
2020-10-27 18:07 ` Ionela Voinescu
2020-10-27 18:07 ` [PATCH RESEND v2 1/3] sched/topology,schedutil: wrap sched domains rebuild Ionela Voinescu
2020-10-27 18:07   ` [PATCH RESEND v2 1/3] sched/topology, schedutil: " Ionela Voinescu
2020-10-30 15:26   ` [PATCH RESEND v2 1/3] sched/topology,schedutil: " Rafael J. Wysocki
2020-10-30 15:26     ` Rafael J. Wysocki
2020-11-05 14:03     ` Ionela Voinescu
2020-11-05 14:03       ` Ionela Voinescu
2020-11-20 12:34   ` [tip: sched/core] sched/topology,schedutil: Wrap " tip-bot2 for Ionela Voinescu
2020-10-27 18:07 ` [PATCH RESEND v2 2/3] arm64: rebuild sched domains on invariance status changes Ionela Voinescu
2020-10-27 18:07   ` Ionela Voinescu
2020-11-10 17:20   ` Catalin Marinas
2020-11-10 17:20     ` Catalin Marinas
2020-11-20 12:34   ` tip-bot2 for Ionela Voinescu [this message]
2020-10-27 18:07 ` [PATCH RESEND v2 3/3] sched/topology: condition EAS enablement on FIE support Ionela Voinescu
2020-10-27 18:07   ` Ionela Voinescu
2020-11-20 12:34   ` [tip: sched/core] sched/topology: Condition " tip-bot2 for Ionela Voinescu
2020-11-18 11:42 ` [PATCH RESEND v2 0/3] condition EAS enablement on FI support Ionela Voinescu
2020-11-18 11:42   ` Ionela Voinescu
2020-11-18 14:01   ` Peter Zijlstra
2020-11-18 14:01     ` Peter Zijlstra

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=160587564498.11244.17662958657423680290.tip-bot2@tip-bot2 \
    --to=tip-bot2@linutronix.de \
    --cc=catalin.marinas@arm.com \
    --cc=ionela.voinescu@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=x86@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.