linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	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>,
	x86@kernel.org, linux-kernel@vger.kernel.org,
	"Tim C . Chen" <tim.c.chen@intel.com>
Subject: Re: [RFC PATCH 09/23] sched/fair: Use task-class performance score to pick the busiest group
Date: Wed, 5 Oct 2022 16:38:41 -0700	[thread overview]
Message-ID: <20221005233841.GA29251@ranerica-svr.sc.intel.com> (raw)
In-Reply-To: <YzLYDPU+upHeUG65@hirez.programming.kicks-ass.net>

On Tue, Sep 27, 2022 at 01:01:32PM +0200, Peter Zijlstra wrote:
> On Fri, Sep 09, 2022 at 04:11:51PM -0700, Ricardo Neri wrote:
> > update_sd_pick_busiest() keeps on selecting as the busiest group scheduling
> > groups of identical priority. Since both groups have the same priority,
> > either group is a good choice. The classes of tasks in the scheduling
> > groups can break this tie.
> > 
> > Pick as busiest the scheduling group that yields a higher task-class
> > performance score after load balancing.
> 
> > +/**
> > + * sched_asym_class_pick - Select a sched group based on classes of tasks
> > + * @a:		A scheduling group
> > + * @b:		A second scheduling group
> > + * @a_stats:	Load balancing statistics of @a
> > + * @b_stats:	Load balancing statistics of @b
> > + *
> > + * Returns: true if @a has the same priority and @a has classes of tasks that
> > + * yield higher overall throughput after load balance. Returns false otherwise.
> > + */
> > +static bool sched_asym_class_pick(struct sched_group *a,
> > +				  struct sched_group *b,
> > +				  struct sg_lb_stats *a_stats,
> > +				  struct sg_lb_stats *b_stats)
> > +{
> > +	/*
> > +	 * Only use the class-specific preference selection if both sched
> > +	 * groups have the same priority.
> > +	 */
> > +	if (arch_asym_cpu_priority(a->asym_prefer_cpu) !=
> > +	    arch_asym_cpu_priority(b->asym_prefer_cpu))
> > +		return false;
> > +
> > +	return sched_asym_class_prefer(a_stats, b_stats);
> > +}
> > +
> >  #else /* CONFIG_SCHED_TASK_CLASSES */
> >  static void update_rq_task_classes_stats(struct sg_lb_task_class_stats *class_sgs,
> >  					 struct rq *rq)
> 
> > @@ -9049,6 +9111,12 @@ static bool update_sd_pick_busiest(struct lb_env *env,
> >  		/* Prefer to move from lowest priority CPU's work */
> >  		if (sched_asym_prefer(sg->asym_prefer_cpu, sds->busiest->asym_prefer_cpu))
> >  			return false;
> > +
> > +		/* @sg and @sds::busiest have the same priority. */
> > +		if (sched_asym_class_pick(sds->busiest, sg, &sds->busiest_stat, sgs))
> > +			return false;
> > +
> > +		/* @sg has lower priority than @sds::busiest. */
> >  		break;
> >  
> >  	case group_misfit_task:
> 
> So why does only this one instance of asym_prefer() require tie
> breaking?

This is the only place in which two sched groups with running tasks and of
equal priority are compared.

In all other places sched_asym_prefer() is used to compare the destination
CPU with others. Since asym_packing is done only when the destination CPU is
idle, there is no need to break this tie.

> 
> I must also re-iterate how much I hate having two different means of
> dealing with big-little topologies.

Yes, that is true. We discussed the challenges of using EAS on x86 during
this year's Linux Plumbers Conference. For the discussion at hand, I think
that the most relevant part is the difficulty to assess CPU capacity
on Intel processors given the presence of SMT, a large range of turbo
frequencies and hardware-controlled frequency scaling.

We are looking into these challenges.

This patchset focuses mainly on the infrastructure to support IPC classes of
tasks in the scheduler. We use it on this tie break when using asym_packing,
but it could be used in capacity computations.

> 
> And while looking through this, I must ask about the comment that goes
> with sched_set_itmt_core_prio() vs the sg->asym_prefer_cpu assignment in
> init_sched_groups_capacity(), what-up ?!

Are you referring to this comment?

	"No need to rebuild sched domain after updating
	 the CPU priorities. The sched domains have no
	 dependency on CPU priorities"

If yes, then it looks wrong to me. Sched domains are rebuilt after updating
priorities.

Thanks and BR,
Ricardo

  reply	other threads:[~2022-10-05 23:32 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-09 23:11 [RFC PATCH 00/23] sched: Introduce classes of tasks for load balance Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 01/23] sched/task_struct: Introduce classes of tasks Ricardo Neri
2022-09-14 13:46   ` Peter Zijlstra
2022-09-16 14:41     ` Ricardo Neri
2022-09-27 13:01       ` Peter Zijlstra
2022-10-02 22:32         ` Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 02/23] sched: Add interfaces for " Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 03/23] sched/core: Initialize the class of a new task Ricardo Neri
2022-09-26 14:57   ` Joel Fernandes
2022-09-26 21:53     ` Ricardo Neri
2022-09-27 13:04     ` Peter Zijlstra
2022-09-27 15:48       ` Joel Fernandes
2022-10-01 20:32       ` Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 04/23] sched/core: Add user_tick as argument to scheduler_tick() Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 05/23] sched/core: Move is_core_idle() out of fair.c Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 06/23] sched/core: Update the classification of the current task Ricardo Neri
2022-09-14 13:44   ` Peter Zijlstra
2022-09-16 14:42     ` Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 07/23] sched/fair: Collect load-balancing stats for task classes Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 08/23] sched/fair: Compute task-class performance scores for load balancing Ricardo Neri
2022-09-27  9:15   ` Peter Zijlstra
2022-10-26  3:57     ` Ricardo Neri
2022-10-26  8:55       ` Peter Zijlstra
2022-10-27  3:30         ` Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 09/23] sched/fair: Use task-class performance score to pick the busiest group Ricardo Neri
2022-09-27 11:01   ` Peter Zijlstra
2022-10-05 23:38     ` Ricardo Neri [this message]
2022-10-06  8:37       ` Peter Zijlstra
2022-10-06 19:07         ` Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 10/23] sched/fair: Use classes of tasks when selecting a busiest runqueue Ricardo Neri
2022-09-27 11:25   ` Peter Zijlstra
2022-10-07 23:36     ` Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 11/23] thermal: intel: hfi: Introduce Hardware Feedback Interface classes Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 12/23] thermal: intel: hfi: Convert table_lock to use flags-handling variants Ricardo Neri
2022-09-27 11:34   ` Peter Zijlstra
2022-09-27 11:36     ` Peter Zijlstra
2022-10-26  3:59       ` Ricardo Neri
2022-10-26  3:58     ` Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 13/23] x86/cpufeatures: Add the Intel Thread Director feature definitions Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 14/23] thermal: intel: hfi: Update the class of the current task Ricardo Neri
2022-09-27 11:46   ` Peter Zijlstra
2022-10-07 20:34     ` Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 15/23] thermal: intel: hfi: Report per-cpu class-specific performance scores Ricardo Neri
2022-09-27 11:59   ` Peter Zijlstra
2022-10-05 23:59     ` Ricardo Neri
2022-10-06  8:52       ` Peter Zijlstra
2022-10-06  9:14         ` Peter Zijlstra
2022-10-06 15:05           ` Brown, Len
2022-10-06 16:14             ` Peter Zijlstra
2022-10-07 11:20               ` Len Brown
2022-09-09 23:11 ` [RFC PATCH 16/23] thermal: intel: hfi: Define a default classification for unclassified tasks Ricardo Neri
2022-09-09 23:11 ` [RFC PATCH 17/23] thermal: intel: hfi: Enable the Intel Thread Director Ricardo Neri
2022-09-27 12:00   ` Peter Zijlstra
2022-10-06  1:50     ` Ricardo Neri
2022-09-09 23:12 ` [RFC PATCH 18/23] sched/task_struct: Add helpers for task classification Ricardo Neri
2022-09-27 11:52   ` Peter Zijlstra
2022-10-08  0:38     ` Ricardo Neri
2022-09-09 23:12 ` [RFC PATCH 19/23] sched/core: Initialize helpers of " Ricardo Neri
2022-09-09 23:12 ` [RFC PATCH 20/23] thermal: intel: hfi: Implement model-specific checks for " Ricardo Neri
2022-09-09 23:12 ` [RFC PATCH 21/23] x86/cpufeatures: Add feature bit for HRESET Ricardo Neri
2022-09-09 23:12 ` [RFC PATCH 22/23] x86/hreset: Configure history reset Ricardo Neri
2022-09-27 12:03   ` Peter Zijlstra
2022-10-02 22:34     ` Ricardo Neri
2022-09-09 23:12 ` [RFC PATCH 23/23] x86/process: Reset hardware history in context switch Ricardo Neri
2022-09-27 12:52   ` Peter Zijlstra
2022-10-03 23:07     ` Ricardo Neri
2022-10-06  8:35       ` Peter Zijlstra
2022-10-06 22:55         ` Ricardo Neri
2022-09-27 12:53   ` Peter Zijlstra
2022-10-02 22:02     ` Ricardo Neri
2022-09-27 13:15   ` Borislav Petkov
2022-10-02 22:12     ` Ricardo Neri
2022-10-02 22:15       ` Borislav Petkov
2022-10-03 19:49         ` Ricardo Neri
2022-10-03 19:55           ` Borislav Petkov
     [not found] ` <20220910072120.2651-1-hdanton@sina.com>
2022-09-16 14:51   ` [RFC PATCH 06/23] sched/core: Update the classification of the current task Ricardo Neri
2022-10-11 19:12 ` Trying to apply patch set Carlos Bilbao
2022-10-18  2:31   ` 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=20221005233841.GA29251@ranerica-svr.sc.intel.com \
    --to=ricardo.neri-calderon@linux.intel.com \
    --cc=bristot@redhat.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=juri.lelli@redhat.com \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).