All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
To: "Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>
Cc: Ricardo Neri <ricardo.neri@intel.com>,
	"Ravi V. Shankar" <ravi.v.shankar@intel.com>,
	Ben Segall <bsegall@google.com>,
	Daniel Bristot de Oliveira <bristot@redhat.com>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Len Brown <len.brown@intel.com>, Mel Gorman <mgorman@suse.de>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Tim Chen <tim.c.chen@linux.intel.com>,
	Valentin Schneider <vschneid@redhat.com>,
	Lukasz Luba <lukasz.luba@arm.com>,
	Ionela Voinescu <ionela.voinescu@arm.com>,
	x86@kernel.org,
	"Joel Fernandes (Google)" <joel@joelfernandes.org>,
	linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
	Ricardo Neri <ricardo.neri-calderon@linux.intel.com>,
	"Tim C . Chen" <tim.c.chen@intel.com>
Subject: [PATCH v3 01/24] sched/task_struct: Introduce IPC classes of tasks
Date: Mon,  6 Feb 2023 21:10:42 -0800	[thread overview]
Message-ID: <20230207051105.11575-2-ricardo.neri-calderon@linux.intel.com> (raw)
In-Reply-To: <20230207051105.11575-1-ricardo.neri-calderon@linux.intel.com>

On hybrid processors, the architecture differences between the types of
CPUs lead to different instructions-per-cycle (IPC) on each type of CPU.
IPCs may differ further by the type of instructions. Instructions can be
grouped into classes of similar IPCs.

Hence, tasks can be classified into groups based on the type of
instructions they execute.

Add a new member task_struct::ipcc to associate a particular task to
an IPC class that depends on the instructions it executes.

The scheduler may use the IPC class of a task and data about the
performance among CPUs of a given IPC class to improve throughput. It
may, for instance, place certain classes of tasks on CPUs of higher
performance.

The methods to determine the classification of a task and its relative
IPC score are specific to each CPU architecture.

Cc: Ben Segall <bsegall@google.com>
Cc: Daniel Bristot de Oliveira <bristot@redhat.com>
Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: Ionela Voinescu <ionela.voinescu@arm.com>
Cc: Joel Fernandes (Google) <joel@joelfernandes.org>
Cc: Len Brown <len.brown@intel.com>
Cc: Lukasz Luba <lukasz.luba@arm.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Tim C. Chen <tim.c.chen@intel.com>
Cc: Valentin Schneider <vschneid@redhat.com>
Cc: x86@kernel.org
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
---
Changes since v2:
 * Changed the type of task_struct::ipcc to unsigned short. A subsequent
   patch uses bit fields to use 9 bits, along with other auxiliary
   members.

Changes since v1:
 * Renamed task_struct::class as task_struct::ipcc. (Joel)
 * Use task_struct::ipcc = 0 for unclassified tasks. (PeterZ)
 * Renamed CONFIG_SCHED_TASK_CLASSES as CONFIG_IPC_CLASSES. (PeterZ, Joel)
---
 include/linux/sched.h | 10 ++++++++++
 init/Kconfig          | 12 ++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index 4df2b3e76b30..98f84f90a01d 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -127,6 +127,8 @@ struct task_group;
 					 __TASK_TRACED | EXIT_DEAD | EXIT_ZOMBIE | \
 					 TASK_PARKED)
 
+#define IPC_CLASS_UNCLASSIFIED		0
+
 #define task_is_running(task)		(READ_ONCE((task)->__state) == TASK_RUNNING)
 
 #define task_is_traced(task)		((READ_ONCE(task->jobctl) & JOBCTL_TRACED) != 0)
@@ -1528,6 +1530,14 @@ struct task_struct {
 	union rv_task_monitor		rv[RV_PER_TASK_MONITORS];
 #endif
 
+#ifdef CONFIG_IPC_CLASSES
+	/*
+	 * A hardware-defined classification of task that reflects but is
+	 * not identical to the number of instructions per cycle.
+	 */
+	unsigned short			ipcc;
+#endif
+
 	/*
 	 * New fields for task_struct should be added above here, so that
 	 * they are included in the randomized portion of task_struct.
diff --git a/init/Kconfig b/init/Kconfig
index e76dc579cfa2..731a4b652030 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -867,6 +867,18 @@ config UCLAMP_BUCKETS_COUNT
 
 	  If in doubt, use the default value.
 
+config IPC_CLASSES
+	bool "IPC classes of tasks"
+	depends on SMP
+	help
+	  If selected, each task is assigned a classification value that
+	  reflects the type of instructions that the task executes. This
+	  classification reflects but is not equal to the number of
+	  instructions retired per cycle.
+
+	  The scheduler uses the classification value to improve the placement
+	  of tasks.
+
 endmenu
 
 #
-- 
2.25.1


  reply	other threads:[~2023-02-07  5:02 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-07  5:10 [PATCH v3 00/24] sched: Introduce classes of tasks for load balance Ricardo Neri
2023-02-07  5:10 ` Ricardo Neri [this message]
2023-02-07  5:10 ` [PATCH v3 02/24] sched: Add interfaces for IPC classes Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 03/24] sched/core: Initialize the IPC class of a new task Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 04/24] sched/core: Add user_tick as argument to scheduler_tick() Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 05/24] sched/core: Update the IPC class of the current task Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 06/24] sched/fair: Collect load-balancing stats for IPC classes Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 07/24] sched/fair: Compute IPC class scores for load balancing Ricardo Neri
2023-03-28 10:00   ` Vincent Guittot
2023-03-30  2:07     ` Ricardo Neri
2023-03-31 12:20       ` Vincent Guittot
2023-04-17 22:52         ` Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 08/24] sched/fair: Use IPCC stats to break ties between asym_packing sched groups Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 09/24] sched/fair: Use IPCC stats to break ties between fully_busy SMT groups Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 10/24] sched/fair: Use IPCC scores to select a busiest runqueue Ricardo Neri
2023-03-28 10:03   ` Vincent Guittot
2023-03-30  2:14     ` Ricardo Neri
2023-03-31 12:23       ` Vincent Guittot
2023-04-17 23:01         ` Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 11/24] thermal: intel: hfi: Introduce Intel Thread Director classes Ricardo Neri
2023-03-27 16:31   ` Rafael J. Wysocki
2023-03-28 23:42     ` Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 12/24] x86/cpufeatures: Add the Intel Thread Director feature definitions Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 13/24] thermal: intel: hfi: Store per-CPU IPCC scores Ricardo Neri
2023-03-27 16:37   ` Rafael J. Wysocki
2023-03-28 23:43     ` Ricardo Neri
2023-03-29 12:08       ` Rafael J. Wysocki
2023-03-30  2:15         ` Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 14/24] thermal: intel: hfi: Update the IPC class of the current task Ricardo Neri
2023-03-27 16:42   ` Rafael J. Wysocki
2023-03-28 23:41     ` Ricardo Neri
2023-03-29 12:13       ` Rafael J. Wysocki
2023-03-30  3:06         ` Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 15/24] thermal: intel: hfi: Report the IPC class score of a CPU Ricardo Neri
2023-03-27 16:50   ` Rafael J. Wysocki
2023-03-28 23:41     ` Ricardo Neri
2023-03-29 12:17       ` Rafael J. Wysocki
2023-03-31  2:07         ` Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 16/24] thermal: intel: hfi: Define a default class for unclassified tasks Ricardo Neri
2023-03-27 16:51   ` Rafael J. Wysocki
2023-03-28 23:49     ` Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 17/24] thermal: intel: hfi: Enable the Intel Thread Director Ricardo Neri
2023-03-27 16:53   ` Rafael J. Wysocki
2023-03-28 23:50     ` Ricardo Neri
2023-02-07  5:10 ` [PATCH v3 18/24] sched/task_struct: Add helpers for IPC classification Ricardo Neri
2023-02-07  5:11 ` [PATCH v3 19/24] sched/core: Initialize helpers of task classification Ricardo Neri
2023-02-07  5:11 ` [PATCH v3 20/24] sched/fair: Introduce sched_smt_siblings_idle() Ricardo Neri
2023-02-07  5:11 ` [PATCH v3 21/24] thermal: intel: hfi: Implement model-specific checks for task classification Ricardo Neri
2023-03-27 17:03   ` Rafael J. Wysocki
2023-03-29  0:15     ` Ricardo Neri
2023-03-29 12:21       ` Rafael J. Wysocki
2023-03-30  2:41         ` Ricardo Neri
2023-03-31 17:08           ` Rafael J. Wysocki
2023-04-03 14:12             ` Ricardo Neri
2023-02-07  5:11 ` [PATCH v3 22/24] x86/cpufeatures: Add feature bit for HRESET Ricardo Neri
2023-02-07  5:11 ` [PATCH v3 23/24] x86/hreset: Configure history reset Ricardo Neri
2023-02-07  5:11 ` [PATCH v3 24/24] x86/process: Reset hardware history in context switch Ricardo Neri
2023-03-05 22:49 ` [PATCH v3 00/24] sched: Introduce classes of tasks for load balance Ricardo Neri

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=20230207051105.11575-2-ricardo.neri-calderon@linux.intel.com \
    --to=ricardo.neri-calderon@linux.intel.com \
    --cc=bristot@redhat.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=ionela.voinescu@arm.com \
    --cc=joel@joelfernandes.org \
    --cc=juri.lelli@redhat.com \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=lukasz.luba@arm.com \
    --cc=mgorman@suse.de \
    --cc=peterz@infradead.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=ravi.v.shankar@intel.com \
    --cc=ricardo.neri@intel.com \
    --cc=rostedt@goodmis.org \
    --cc=srinivas.pandruvada@linux.intel.com \
    --cc=tim.c.chen@intel.com \
    --cc=tim.c.chen@linux.intel.com \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.com \
    --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.