All of lore.kernel.org
 help / color / mirror / Atom feed
From: morten.rasmussen@arm.com (Morten Rasmussen)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 09/14] sched: evaluate the activity level of the system
Date: Wed, 22 May 2013 17:50:35 +0100	[thread overview]
Message-ID: <20130522165035.GC4935@e103034-lin> (raw)
In-Reply-To: <1366910611-20048-10-git-send-email-vincent.guittot@linaro.org>

On Thu, Apr 25, 2013 at 06:23:25PM +0100, Vincent Guittot wrote:
> We evaluate the activity level of CPUs, groups and domains in order to define
> how many CPUs are required to handle the current activity.
> 
> Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
> ---
>  kernel/sched/fair.c |   19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 954adfd..234ecdd 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -3465,7 +3465,22 @@ static int check_pack_buddy(int cpu, struct task_struct *p)
>  		return true;
>  
>  	return false;
> +}
> +
> +static int get_cpu_activity(int cpu)
> +{
> +	struct rq *rq = cpu_rq(cpu);
> +	u32 sum = rq->avg.runnable_avg_sum;
> +	u32 period = rq->avg.runnable_avg_period;
> +
> +	sum = min(sum, period);
> +
> +	if (sum == period) {
> +		u32 overload = rq->nr_running > 1 ? 1 : 0;
> +		return power_of(cpu) + overload;
> +	}

Adding one to indicate cpu overload seems to work well in the cases that
I can think of. It may take some time to have effect if the overloaded
cpu is in a group with nearly overloaded cpus. Adding one won't enable
more cpus in another group until they have all reached overload.

Reaching sum == period takes quite a long time. Would it be an idea to
use sum*1024 >= period*1000 like you do in is_buddy_full()?

I think that would be more consistent since overloaded is essential the
same as full.

Cheers,
Morten

>  
> +	return (sum * power_of(cpu)) / period;
>  }
>  
>  /*
> @@ -4355,6 +4370,7 @@ struct sd_lb_stats {
>  	struct sched_group *busiest; /* Busiest group in this sd */
>  	struct sched_group *this;  /* Local group in this sd */
>  	unsigned long total_load;  /* Total load of all groups in sd */
> +	unsigned long total_activity;  /* Total activity of all groups in sd */
>  	unsigned long total_pwr;   /*	Total power of all groups in sd */
>  	unsigned long avg_load;	   /* Average load across all groups in sd */
>  
> @@ -4383,6 +4399,7 @@ struct sd_lb_stats {
>  struct sg_lb_stats {
>  	unsigned long avg_load; /*Avg load across the CPUs of the group */
>  	unsigned long group_load; /* Total load over the CPUs of the group */
> +	unsigned long group_activity; /* Total activity of the group */
>  	unsigned long sum_nr_running; /* Nr tasks running in the group */
>  	unsigned long sum_weighted_load; /* Weighted load of group's tasks */
>  	unsigned long group_capacity;
> @@ -4629,6 +4646,7 @@ static inline void update_sg_lb_stats(struct lb_env *env,
>  		}
>  
>  		sgs->group_load += load;
> +		sgs->group_activity += get_cpu_activity(i);
>  		sgs->sum_nr_running += nr_running;
>  		sgs->sum_weighted_load += weighted_cpuload(i);
>  		if (idle_cpu(i))
> @@ -4752,6 +4770,7 @@ static inline void update_sd_lb_stats(struct lb_env *env,
>  			return;
>  
>  		sds->total_load += sgs.group_load;
> +		sds->total_activity += sgs.group_activity;
>  		sds->total_pwr += sg->sgp->power;
>  
>  		/*
> -- 
> 1.7.9.5
> 
> 

  reply	other threads:[~2013-05-22 16:50 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-25 17:23 [RFC PATCH v4 00/14] sched: packing small tasks Vincent Guittot
2013-04-25 17:23 ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 01/14] Revert "sched: Introduce temporary FAIR_GROUP_SCHED dependency for load-tracking" Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 02/14] sched: add a new SD_SHARE_POWERDOMAIN flag for sched_domain Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 03/14] sched: pack small tasks Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-26 12:30   ` Peter Zijlstra
2013-04-26 12:30     ` Peter Zijlstra
2013-04-26 13:16     ` Vincent Guittot
2013-04-26 13:16       ` Vincent Guittot
2013-04-26 12:38   ` Peter Zijlstra
2013-04-26 12:38     ` Peter Zijlstra
2013-04-26 13:38     ` Vincent Guittot
2013-04-26 13:38       ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 04/14] sched: pack the idle load balance Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-26 12:49   ` Peter Zijlstra
2013-04-26 12:49     ` Peter Zijlstra
2013-04-26 13:47     ` Vincent Guittot
2013-04-26 13:47       ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 05/14] ARM: sched: clear SD_SHARE_POWERDOMAIN Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 06/14] sched: add a knob to choose the packing level Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 07/14] sched: agressively pack at wake/fork/exec Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-26 13:08   ` Peter Zijlstra
2013-04-26 13:08     ` Peter Zijlstra
2013-04-26 14:23     ` Vincent Guittot
2013-04-26 14:23       ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 08/14] sched: trig ILB on an idle buddy Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-26 13:15   ` Peter Zijlstra
2013-04-26 13:15     ` Peter Zijlstra
2013-04-26 14:52     ` Vincent Guittot
2013-04-26 14:52       ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 09/14] sched: evaluate the activity level of the system Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-05-22 16:50   ` Morten Rasmussen [this message]
2013-05-23  8:11     ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 10/14] sched: update the buddy CPU Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-28  8:20   ` Francesco Lavra
2013-04-28  8:20     ` Francesco Lavra
2013-04-29  7:32     ` Vincent Guittot
2013-04-29  7:32       ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 11/14] sched: filter task pull request Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-26 10:00   ` Vincent Guittot
2013-04-26 10:00     ` Vincent Guittot
2013-05-22 15:56     ` Morten Rasmussen
2013-05-22 15:56       ` Morten Rasmussen
2013-05-22 16:03       ` Vincent Guittot
2013-05-22 16:03         ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 12/14] sched: create a new field with available capacity Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 13/14] sched: update the cpu_power Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-05-22 15:46   ` Morten Rasmussen
2013-05-22 15:58     ` Vincent Guittot
2013-04-25 17:23 ` [PATCH 14/14] sched: force migration on buddy CPU Vincent Guittot
2013-04-25 17:23   ` Vincent Guittot
2013-04-26 12:08 ` [RFC PATCH v4 00/14] sched: packing small tasks Vincent Guittot
2013-04-26 12:08   ` Vincent Guittot
2013-04-26 15:00 ` Arjan van de Ven
2013-04-26 15:00   ` Arjan van de Ven
2013-04-26 15:40   ` Vincent Guittot
2013-04-26 15:40     ` Vincent Guittot
2013-04-26 15:46     ` Arjan van de Ven
2013-04-26 15:46       ` Arjan van de Ven
2013-04-26 15:56       ` Vincent Guittot
2013-04-26 15:56         ` Vincent Guittot
2013-05-02  9:12       ` Vincent Guittot
2013-05-02  9:12         ` 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=20130522165035.GC4935@e103034-lin \
    --to=morten.rasmussen@arm.com \
    --cc=linux-arm-kernel@lists.infradead.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.