All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v10 00/11] sched: consolidation of CPU capacity and usage
@ 2015-02-27 15:54 Vincent Guittot
  2015-02-27 15:54 ` [PATCH v10 01/11] sched: add utilization_avg_contrib Vincent Guittot
                   ` (12 more replies)
  0 siblings, 13 replies; 68+ messages in thread
From: Vincent Guittot @ 2015-02-27 15:54 UTC (permalink / raw)
  To: peterz, mingo, linux-kernel, preeti, Morten.Rasmussen, kamalesh
  Cc: riel, efault, nicolas.pitre, dietmar.eggemann, linaro-kernel,
	Vincent Guittot

This patchset consolidates several changes in the capacity and the usage
tracking of the CPU. It provides a frequency invariant metric of the usage of
CPUs and generally improves the accuracy of load/usage tracking in the
scheduler. The frequency invariant metric is the foundation required for the
consolidation of cpufreq and implementation of a fully invariant load tracking.
These are currently WIP and require several changes to the load balancer
(including how it will use and interprets load and capacity metrics) and
extensive validation. The frequency invariance is done with
arch_scale_freq_capacity and this patchset doesn't provide the backends of
the function which are architecture dependent.

As discussed at LPC14, Morten and I have consolidated our changes into a single
patchset to make it easier to review and merge.

During load balance, the scheduler evaluates the number of tasks that a group
of CPUs can handle. The current method assumes that tasks have a fix load of
SCHED_LOAD_SCALE and CPUs have a default capacity of SCHED_CAPACITY_SCALE.
This assumption generates wrong decision by creating ghost cores or by
removing real ones when the original capacity of CPUs is different from the
default SCHED_CAPACITY_SCALE. With this patch set, we don't try anymore to
evaluate the number of available cores based on the group_capacity but instead
we evaluate the usage of a group and compare it with its capacity.

This patchset mainly replaces the old capacity_factor method by a new one and
keeps the general policy almost unchanged. These new metrics will be also used
in later patches.

The CPU usage is based on a running time tracking version of the current
implementation of the load average tracking. I also have a version that is
based on the new implementation proposal [1] but I haven't provide the patches
and results as [1] is still under review. I can provide change above [1] to
change how CPU usage is computed and to adapt to new mecanism.

Change since V9
 - add a dedicated patch for removing unused capacity_orig
 - update some comments and fix typo
 - change the condition for actively migrating task on CPU with higher capacity 

Change since V8
 - reorder patches

Change since V7
 - add freq invariance for usage tracking
 - add freq invariance for scale_rt
 - update comments and commits' message
 - fix init of utilization_avg_contrib
 - fix prefer_sibling

Change since V6
 - add group usage tracking
 - fix some commits' messages
 - minor fix like comments and argument order

Change since V5
 - remove patches that have been merged since v5 : patches 01, 02, 03, 04, 05, 07
 - update commit log and add more details on the purpose of the patches
 - fix/remove useless code with the rebase on patchset [2]
 - remove capacity_orig in sched_group_capacity as it is not used
 - move code in the right patch
 - add some helper function to factorize code

Change since V4
 - rebase to manage conflicts with changes in selection of busiest group

Change since V3:
 - add usage_avg_contrib statistic which sums the running time of tasks on a rq
 - use usage_avg_contrib instead of runnable_avg_sum for cpu_utilization
 - fix replacement power by capacity
 - update some comments

Change since V2:
 - rebase on top of capacity renaming
 - fix wake_affine statistic update
 - rework nohz_kick_needed
 - optimize the active migration of a task from CPU with reduced capacity
 - rename group_activity by group_utilization and remove unused total_utilization
 - repair SD_PREFER_SIBLING and use it for SMT level
 - reorder patchset to gather patches with same topics

Change since V1:
 - add 3 fixes
 - correct some commit messages
 - replace capacity computation by activity
 - take into account current cpu capacity

[1] https://lkml.org/lkml/2014/10/10/131
[2] https://lkml.org/lkml/2014/7/25/589

Morten Rasmussen (2):
  sched: Track group sched_entity usage contributions
  sched: Make sched entity usage tracking scale-invariant

Vincent Guittot (9):
  sched: add utilization_avg_contrib
  sched: remove frequency scaling from cpu_capacity
  sched: make scale_rt invariant with frequency
  sched: add per rq cpu_capacity_orig
  sched: get CPU's usage statistic
  sched: replace capacity_factor by usage
  sched; remove unused capacity_orig from
  sched: add SD_PREFER_SIBLING for SMT level
  sched: move cfs task on a CPU with higher capacity

 include/linux/sched.h |  21 ++-
 kernel/sched/core.c   |  15 +--
 kernel/sched/debug.c  |  12 +-
 kernel/sched/fair.c   | 366 +++++++++++++++++++++++++++++++-------------------
 kernel/sched/sched.h  |  15 ++-
 5 files changed, 271 insertions(+), 158 deletions(-)

-- 
1.9.1


^ permalink raw reply	[flat|nested] 68+ messages in thread

end of thread, other threads:[~2015-04-07 13:30 UTC | newest]

Thread overview: 68+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-27 15:54 [PATCH v10 00/11] sched: consolidation of CPU capacity and usage Vincent Guittot
2015-02-27 15:54 ` [PATCH v10 01/11] sched: add utilization_avg_contrib Vincent Guittot
2015-03-27 11:40   ` [tip:sched/core] sched: Add sched_avg::utilization_avg_contrib tip-bot for Vincent Guittot
2015-02-27 15:54 ` [PATCH v10 02/11] sched: Track group sched_entity usage contributions Vincent Guittot
2015-03-27 11:40   ` [tip:sched/core] " tip-bot for Morten Rasmussen
2015-02-27 15:54 ` [PATCH v10 03/11] sched: remove frequency scaling from cpu_capacity Vincent Guittot
2015-03-27 11:40   ` [tip:sched/core] sched: Remove " tip-bot for Vincent Guittot
2015-02-27 15:54 ` [PATCH v10 04/11] sched: Make sched entity usage tracking scale-invariant Vincent Guittot
2015-03-03 12:51   ` Dietmar Eggemann
2015-03-04  7:54     ` Vincent Guittot
2015-03-04  7:46   ` Vincent Guittot
2015-03-27 11:40     ` [tip:sched/core] " tip-bot for Morten Rasmussen
2015-03-23 13:19   ` [PATCH v10 04/11] " Peter Zijlstra
2015-03-24 10:00     ` Vincent Guittot
2015-03-25 17:33       ` Peter Zijlstra
2015-03-25 18:08         ` Vincent Guittot
2015-03-26 17:38           ` Morten Rasmussen
2015-03-26 17:40             ` Morten Rasmussen
2015-03-26 17:46             ` [PATCH 1/2] sched: Change arch_scale_*() functions to scale input factor Morten Rasmussen
2015-03-26 17:46               ` [PATCH 2/2] sched: Make sched entity usage tracking scale-invariant Morten Rasmussen
2015-03-26 17:47             ` [PATCH v10 04/11] " Peter Zijlstra
2015-03-26 17:51               ` Morten Rasmussen
2015-03-27  8:17             ` Vincent Guittot
2015-03-27  9:05               ` Vincent Guittot
2015-04-02 16:53         ` Morten Rasmussen
2015-04-02 17:32           ` Peter Zijlstra
2015-04-07 13:31             ` Morten Rasmussen
2015-03-27 11:43     ` [tip:sched/core] sched: Optimize freq invariant accounting tip-bot for Peter Zijlstra
2015-02-27 15:54 ` [PATCH v10 05/11] sched: make scale_rt invariant with frequency Vincent Guittot
2015-03-27 11:41   ` [tip:sched/core] sched: Make " tip-bot for Vincent Guittot
2015-02-27 15:54 ` [PATCH v10 06/11] sched: add per rq cpu_capacity_orig Vincent Guittot
2015-03-27 11:41   ` [tip:sched/core] sched: Add struct rq::cpu_capacity_orig tip-bot for Vincent Guittot
2015-02-27 15:54 ` [PATCH v10 07/11] sched: get CPU's usage statistic Vincent Guittot
2015-03-03 12:47   ` Dietmar Eggemann
2015-03-04  7:53     ` Vincent Guittot
2015-03-04  7:48   ` Vincent Guittot
2015-03-27 11:41     ` [tip:sched/core] sched: Calculate CPU' s usage statistic and put it into struct sg_lb_stats::group_usage tip-bot for Vincent Guittot
2015-03-27 15:12   ` [PATCH v10 07/11] sched: get CPU's usage statistic Xunlei Pang
2015-03-27 15:37     ` Vincent Guittot
2015-04-01  3:22       ` Xunlei Pang
2015-02-27 15:54 ` [PATCH v10 08/11] sched: replace capacity_factor by usage Vincent Guittot
2015-03-27 11:42   ` [tip:sched/core] sched: Replace " tip-bot for Vincent Guittot
2015-03-27 14:52   ` [PATCH v10 08/11] sched: replace " Xunlei Pang
2015-03-27 15:59     ` Vincent Guittot
2015-04-01  3:37       ` Xunlei Pang
2015-04-01  9:06         ` Vincent Guittot
2015-04-01 14:54           ` Xunlei Pang
2015-04-01 15:57             ` Vincent Guittot
2015-02-27 15:54 ` [PATCH v10 09/11] sched; remove unused capacity_orig from Vincent Guittot
2015-03-03 10:18   ` Morten Rasmussen
2015-03-03 10:33     ` Vincent Guittot
2015-03-03 10:35   ` [PATCH v10 09/11] sched; remove unused capacity_orig Vincent Guittot
2015-03-27 11:42     ` [tip:sched/core] sched: Remove unused struct sched_group_capacity ::capacity_orig tip-bot for Vincent Guittot
2015-02-27 15:54 ` [PATCH v10 10/11] sched: add SD_PREFER_SIBLING for SMT level Vincent Guittot
2015-03-02 11:52   ` Srikar Dronamraju
2015-03-03  8:38     ` Vincent Guittot
2015-03-23  9:11       ` Peter Zijlstra
2015-03-23  9:59         ` Preeti U Murthy
2015-03-26 10:55   ` Peter Zijlstra
2015-03-26 12:03     ` Preeti U Murthy
2015-03-27 11:42   ` [tip:sched/core] sched: Add " tip-bot for Vincent Guittot
2015-02-27 15:54 ` [PATCH v10 11/11] sched: move cfs task on a CPU with higher capacity Vincent Guittot
2015-03-26 14:19   ` Dietmar Eggemann
2015-03-26 15:43     ` Vincent Guittot
2015-03-27 11:42   ` [tip:sched/core] sched: Move CFS tasks to CPUs " tip-bot for Vincent Guittot
2015-03-11 10:10 ` [PATCH v10 00/11] sched: consolidation of CPU capacity and usage Vincent Guittot
2015-04-02  1:47 ` Wanpeng Li
2015-04-02  7:30   ` Vincent Guittot

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.