All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.