From: Peter Zijlstra <peterz@infradead.org>
To: Vincent Guittot <vincent.guittot@linaro.org>
Cc: Valentin Schneider <valentin.schneider@arm.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
Ingo Molnar <mingo@kernel.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Ingo Molnar <mingo@redhat.com>,
Juri Lelli <juri.lelli@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH v3 6/9] sched: Kill select_task_rq()'s sd_flag parameter
Date: Thu, 16 Apr 2020 12:47:25 +0200 [thread overview]
Message-ID: <20200416104725.GM20730@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <CAKfTPtA5-S_EyzZMDMr9SuVQmWZNdLXOVSLMAMTD+6Bow4jJBQ@mail.gmail.com>
On Thu, Apr 16, 2020 at 09:42:36AM +0200, Vincent Guittot wrote:
> On Wed, 15 Apr 2020 at 23:05, Valentin Schneider
> > @@ -6622,13 +6622,25 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
> > * preempt must be disabled.
> > */
> > static int
> > +select_task_rq_fair(struct task_struct *p, int prev_cpu, int wake_flags)
> > {
> > + int sync = (wake_flags & WF_SYNC) && !(current->flags & PF_EXITING);
> > struct sched_domain *tmp, *sd = NULL;
> > int cpu = smp_processor_id();
> > int new_cpu = prev_cpu;
> > int want_affine = 0;
> > - int sync = (wake_flags & WF_SYNC) && !(current->flags & PF_EXITING);
> > + int sd_flag;
> > +
> > + switch (wake_flags & (WF_TTWU | WF_FORK | WF_EXEC)) {
>
> You remove a function parameter, which was directly set with the right
> flag, but then you add a switch case to recreate this sd_flag
> internally. Not sure we can say that it's real benefit
>
> > + case WF_TTWU:
> > + sd_flag = SD_BALANCE_WAKE;
> > + break;
> > + case WF_FORK:
> > + sd_flag = SD_BALANCE_FORK;
> > + break;
> > + default:
> > + sd_flag = SD_BALANCE_EXEC;
> > + }
Agreed, that's a bit yuck, how about something like so instead:
--- a/include/linux/sched/topology.h
+++ b/include/linux/sched/topology.h
@@ -11,10 +11,12 @@
*/
#ifdef CONFIG_SMP
+/* First nibble of SD_flag is shared with WF_flag */
#define SD_BALANCE_NEWIDLE 0x0001 /* Balance when about to become idle */
#define SD_BALANCE_EXEC 0x0002 /* Balance on exec */
#define SD_BALANCE_FORK 0x0004 /* Balance on fork, clone */
#define SD_BALANCE_WAKE 0x0008 /* Balance on wakeup */
+
#define SD_WAKE_AFFINE 0x0010 /* Wake task to waking CPU */
#define SD_ASYM_CPUCAPACITY 0x0020 /* Domain members have different CPU capacities */
#define SD_SHARE_CPUCAPACITY 0x0040 /* Domain members share CPU capacity */
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -6635,16 +6635,8 @@ select_task_rq_fair(struct task_struct *
int want_affine = 0;
int sd_flag;
- switch (wake_flags & (WF_TTWU | WF_FORK | WF_EXEC)) {
- case WF_TTWU:
- sd_flag = SD_BALANCE_WAKE;
- break;
- case WF_FORK:
- sd_flag = SD_BALANCE_FORK;
- break;
- default:
- sd_flag = SD_BALANCE_EXEC;
- }
+ /* SD_flags and WF_flags share the first nibble */
+ sd_flag = wake_flags & 0xf;
if (sd_flag & SD_BALANCE_WAKE) {
record_wakee(p);
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -1685,11 +1685,12 @@ static inline int task_on_rq_migrating(s
/*
* Wake flags
*/
-#define WF_SYNC 0x01 /* Waker goes to sleep after wakeup */
-#define WF_TTWU 0x02 /* Regular task wakeup */
-#define WF_FORK 0x04 /* Child wakeup after fork */
-#define WF_EXEC 0x08 /* "Fake" wakeup at exec */
-#define WF_MIGRATED 0x10 /* Internal use, task got migrated */
+#define WF_EXEC 0x02 /* SD_BALANCE_EXEC */
+#define WF_FORK 0x04 /* SD_BALANCE_FORK */
+#define WF_TTWU 0x08 /* SD_BALANCE_WAKE */
+
+#define WF_SYNC 0x10 /* Waker goes to sleep after wakeup */
+#define WF_MIGRATED 0x20 /* Internal use, task got migrated */
/*
* To aid in avoiding the subversion of "niceness" due to uneven distribution
next prev parent reply other threads:[~2020-04-16 11:12 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-15 21:05 [PATCH v3 0/9] sched: Streamline select_task_rq() & select_task_rq_fair() Valentin Schneider
2020-04-15 21:05 ` [PATCH v3 1/9] sched/fair: find_idlest_group(): Remove unused sd_flag parameter Valentin Schneider
2020-04-16 7:40 ` Vincent Guittot
2020-05-01 18:22 ` [tip: sched/core] " tip-bot2 for Valentin Schneider
2020-04-15 21:05 ` [PATCH v3 2/9] sched/debug: Make sd->flags sysctl read-only Valentin Schneider
2020-05-01 18:22 ` [tip: sched/core] " tip-bot2 for Valentin Schneider
2020-04-15 21:05 ` [PATCH v3 3/9] sched: Remove checks against SD_LOAD_BALANCE Valentin Schneider
2020-05-01 18:22 ` [tip: sched/core] " tip-bot2 for Valentin Schneider
2020-04-15 21:05 ` [PATCH v3 4/9] sched/topology: Kill SD_LOAD_BALANCE Valentin Schneider
2020-05-01 18:22 ` [tip: sched/core] " tip-bot2 for Valentin Schneider
2020-04-15 21:05 ` [PATCH v3 5/9] sched: Add WF_TTWU, WF_EXEC wakeup flags Valentin Schneider
2020-04-15 21:05 ` [PATCH v3 6/9] sched: Kill select_task_rq()'s sd_flag parameter Valentin Schneider
2020-04-16 7:42 ` Vincent Guittot
2020-04-16 10:24 ` Valentin Schneider
2020-04-16 10:47 ` Peter Zijlstra [this message]
2020-04-16 11:43 ` Valentin Schneider
2020-04-15 21:05 ` [PATCH v3 7/9] sched/fair: Dissociate wakeup decisions from SD flag value Valentin Schneider
2020-04-15 21:05 ` [PATCH v3 8/9] sched/fair: Split select_task_rq_fair want_affine logic Valentin Schneider
2020-04-15 21:05 ` [PATCH v3 9/9] sched/topology: Define and use shortcut pointers for wakeup sd_flag scan Valentin Schneider
2020-04-16 7:46 ` Vincent Guittot
2020-04-16 10:24 ` Valentin Schneider
2020-04-16 13:04 ` Dietmar Eggemann
2020-04-16 13:36 ` Vincent Guittot
2020-04-16 15:27 ` Valentin Schneider
2020-04-16 15:58 ` Vincent Guittot
2020-04-16 20:54 ` Valentin Schneider
2020-04-16 10:58 ` [PATCH v3 0/9] sched: Streamline select_task_rq() & select_task_rq_fair() Peter Zijlstra
2020-04-16 11:00 ` Peter Zijlstra
2020-04-16 11:02 ` Valentin Schneider
2020-04-16 13:00 ` Vincent Guittot
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=20200416104725.GM20730@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=mingo@redhat.com \
--cc=rostedt@goodmis.org \
--cc=valentin.schneider@arm.com \
--cc=vincent.guittot@linaro.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.