From: Vincent Guittot <vincent.guittot@linaro.org> To: peterz@infradead.org, mingo@kernel.org, linux-kernel@vger.kernel.org, preeti@linux.vnet.ibm.com, linux@arm.linux.org.uk, linux-arm-kernel@lists.infradead.org Cc: riel@redhat.com, Morten.Rasmussen@arm.com, efault@gmx.de, nicolas.pitre@linaro.org, linaro-kernel@lists.linaro.org, daniel.lezcano@linaro.org, dietmar.eggemann@arm.com, Vincent Guittot <vincent.guittot@linaro.org> Subject: [PATCH v5 10/12] sched: get CPU's utilization statistic Date: Tue, 26 Aug 2014 13:06:53 +0200 [thread overview] Message-ID: <1409051215-16788-11-git-send-email-vincent.guittot@linaro.org> (raw) In-Reply-To: <1409051215-16788-1-git-send-email-vincent.guittot@linaro.org> Monitor the utilization level of each group of each sched_domain level. The utilization is the amount of cpu_capacity that is currently used on a CPU or group of CPUs. We use the usage_load_avg to evaluate this utilization level. In the special use case where the CPU is fully loaded by more than 1 task, the activity level is set above the cpu_capacity in order to reflect the overload of the CPU Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org> --- kernel/sched/fair.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 1fd2131..2f95d1c 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4126,6 +4126,11 @@ static unsigned long capacity_of(int cpu) return cpu_rq(cpu)->cpu_capacity; } +static unsigned long capacity_orig_of(int cpu) +{ + return cpu_rq(cpu)->cpu_capacity_orig; +} + static unsigned long cpu_avg_load_per_task(int cpu) { struct rq *rq = cpu_rq(cpu); @@ -4514,6 +4519,17 @@ static int select_idle_sibling(struct task_struct *p, int target) return target; } +static int get_cpu_utilization(int cpu) +{ + unsigned long usage = cpu_rq(cpu)->cfs.usage_load_avg; + unsigned long capacity = capacity_of(cpu); + + if (usage >= SCHED_LOAD_SCALE) + return capacity + 1; + + return (usage * capacity) >> SCHED_LOAD_SHIFT; +} + /* * select_task_rq_fair: Select target runqueue for the waking task in domains * that have the 'sd_flag' flag set. In practice, this is SD_BALANCE_WAKE, @@ -5657,6 +5673,7 @@ struct sg_lb_stats { unsigned long sum_weighted_load; /* Weighted load of group's tasks */ unsigned long load_per_task; unsigned long group_capacity; + unsigned long group_utilization; /* Total utilization of the group */ unsigned int sum_nr_running; /* Nr tasks running in the group */ unsigned int group_capacity_factor; unsigned int idle_cpus; @@ -6011,6 +6028,7 @@ static inline void update_sg_lb_stats(struct lb_env *env, load = source_load(i, load_idx); sgs->group_load += load; + sgs->group_utilization += get_cpu_utilization(i); sgs->sum_nr_running += rq->cfs.h_nr_running; if (rq->nr_running > 1) @@ -6188,7 +6206,6 @@ static inline void update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sd /* Now, start updating sd_lb_stats */ sds->total_load += sgs->group_load; sds->total_capacity += sgs->group_capacity; - sg = sg->next; } while (sg != env->sd->groups); -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: vincent.guittot@linaro.org (Vincent Guittot) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v5 10/12] sched: get CPU's utilization statistic Date: Tue, 26 Aug 2014 13:06:53 +0200 [thread overview] Message-ID: <1409051215-16788-11-git-send-email-vincent.guittot@linaro.org> (raw) In-Reply-To: <1409051215-16788-1-git-send-email-vincent.guittot@linaro.org> Monitor the utilization level of each group of each sched_domain level. The utilization is the amount of cpu_capacity that is currently used on a CPU or group of CPUs. We use the usage_load_avg to evaluate this utilization level. In the special use case where the CPU is fully loaded by more than 1 task, the activity level is set above the cpu_capacity in order to reflect the overload of the CPU Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org> --- kernel/sched/fair.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 1fd2131..2f95d1c 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4126,6 +4126,11 @@ static unsigned long capacity_of(int cpu) return cpu_rq(cpu)->cpu_capacity; } +static unsigned long capacity_orig_of(int cpu) +{ + return cpu_rq(cpu)->cpu_capacity_orig; +} + static unsigned long cpu_avg_load_per_task(int cpu) { struct rq *rq = cpu_rq(cpu); @@ -4514,6 +4519,17 @@ static int select_idle_sibling(struct task_struct *p, int target) return target; } +static int get_cpu_utilization(int cpu) +{ + unsigned long usage = cpu_rq(cpu)->cfs.usage_load_avg; + unsigned long capacity = capacity_of(cpu); + + if (usage >= SCHED_LOAD_SCALE) + return capacity + 1; + + return (usage * capacity) >> SCHED_LOAD_SHIFT; +} + /* * select_task_rq_fair: Select target runqueue for the waking task in domains * that have the 'sd_flag' flag set. In practice, this is SD_BALANCE_WAKE, @@ -5657,6 +5673,7 @@ struct sg_lb_stats { unsigned long sum_weighted_load; /* Weighted load of group's tasks */ unsigned long load_per_task; unsigned long group_capacity; + unsigned long group_utilization; /* Total utilization of the group */ unsigned int sum_nr_running; /* Nr tasks running in the group */ unsigned int group_capacity_factor; unsigned int idle_cpus; @@ -6011,6 +6028,7 @@ static inline void update_sg_lb_stats(struct lb_env *env, load = source_load(i, load_idx); sgs->group_load += load; + sgs->group_utilization += get_cpu_utilization(i); sgs->sum_nr_running += rq->cfs.h_nr_running; if (rq->nr_running > 1) @@ -6188,7 +6206,6 @@ static inline void update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sd /* Now, start updating sd_lb_stats */ sds->total_load += sgs->group_load; sds->total_capacity += sgs->group_capacity; - sg = sg->next; } while (sg != env->sd->groups); -- 1.9.1
next prev parent reply other threads:[~2014-08-26 11:09 UTC|newest] Thread overview: 164+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-08-26 11:06 [PATCH v5 00/12] sched: consolidation of cpu_capacity Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-08-26 11:06 ` [PATCH v5 01/12] sched: fix imbalance flag reset Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-09-19 11:47 ` [tip:sched/core] sched: Fix " tip-bot for Vincent Guittot 2014-08-26 11:06 ` [PATCH v5 02/12] sched: remove a wake_affine condition Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-09-19 11:47 ` [tip:sched/core] sched: Remove a wake_affine() condition tip-bot for Vincent Guittot 2014-08-26 11:06 ` [PATCH v5 03/12] sched: fix avg_load computation Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-08-30 12:00 ` Preeti U Murthy 2014-08-30 12:00 ` Preeti U Murthy 2014-09-03 11:09 ` Vincent Guittot 2014-09-03 11:09 ` Vincent Guittot 2014-09-03 23:43 ` Tim Chen 2014-09-03 23:43 ` Tim Chen 2014-09-04 7:17 ` Vincent Guittot 2014-09-04 7:17 ` Vincent Guittot 2014-09-04 16:26 ` Tim Chen 2014-09-04 16:26 ` Tim Chen 2014-09-05 11:10 ` Preeti U Murthy 2014-09-05 11:10 ` Preeti U Murthy 2014-09-19 11:47 ` [tip:sched/core] sched: Fix " tip-bot for Vincent Guittot 2014-08-26 11:06 ` [PATCH v5 04/12] sched: Allow all archs to set the capacity_orig Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-08-27 13:12 ` Kamalesh Babulal 2014-08-27 13:12 ` Kamalesh Babulal 2014-08-30 17:07 ` Preeti U Murthy 2014-08-30 17:07 ` Preeti U Murthy 2014-09-01 8:05 ` Vincent Guittot 2014-09-01 8:05 ` Vincent Guittot 2014-09-03 8:41 ` Preeti U Murthy 2014-09-03 8:41 ` Preeti U Murthy 2014-09-10 13:50 ` Peter Zijlstra 2014-09-10 13:50 ` Peter Zijlstra 2014-09-10 14:22 ` Vincent Guittot 2014-09-10 14:22 ` Vincent Guittot 2014-09-11 10:36 ` Preeti U Murthy 2014-09-11 10:36 ` Preeti U Murthy 2014-09-19 11:47 ` [tip:sched/core] sched: Allow all architectures to set ' capacity_orig' tip-bot for Vincent Guittot 2014-08-26 11:06 ` [PATCH v5 05/12] ARM: topology: use new cpu_capacity interface Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-09-11 18:52 ` Nicolas Pitre 2014-09-11 18:52 ` Nicolas Pitre 2014-09-19 11:48 ` [tip:sched/core] ARM: topology: Use the " tip-bot for Vincent Guittot 2014-08-26 11:06 ` [PATCH v5 06/12] sched: add per rq cpu_capacity_orig Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-08-27 13:32 ` Kamalesh Babulal 2014-08-27 13:32 ` Kamalesh Babulal 2014-08-28 7:34 ` Vincent Guittot 2014-08-28 7:34 ` Vincent Guittot 2014-09-10 13:53 ` Peter Zijlstra 2014-09-10 13:53 ` Peter Zijlstra 2014-09-10 14:19 ` Vincent Guittot 2014-09-10 14:19 ` Vincent Guittot 2014-09-11 19:02 ` Nicolas Pitre 2014-09-11 19:02 ` Nicolas Pitre 2014-09-15 21:22 ` Vincent Guittot 2014-09-15 21:22 ` Vincent Guittot 2014-08-26 11:06 ` [PATCH v5 07/12] sched: test the cpu's capacity in wake affine Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-09-10 14:19 ` Peter Zijlstra 2014-09-10 14:19 ` Peter Zijlstra 2014-09-19 11:48 ` [tip:sched/core] sched: Test the CPU's capacity in wake_affine() tip-bot for Vincent Guittot 2014-08-26 11:06 ` [PATCH v5 08/12] sched: move cfs task on a CPU with higher capacity Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-08-30 17:50 ` Preeti U Murthy 2014-08-30 17:50 ` Preeti U Murthy 2014-09-01 8:45 ` Vincent Guittot 2014-09-01 8:45 ` Vincent Guittot 2014-09-03 9:11 ` Preeti U Murthy 2014-09-03 9:11 ` Preeti U Murthy 2014-09-03 11:44 ` Vincent Guittot 2014-09-03 11:44 ` Vincent Guittot 2014-09-03 12:26 ` Preeti U Murthy 2014-09-03 12:26 ` Preeti U Murthy 2014-09-03 12:49 ` Vincent Guittot 2014-09-03 12:49 ` Vincent Guittot 2014-09-11 9:27 ` Peter Zijlstra 2014-09-11 9:27 ` Peter Zijlstra 2014-09-05 12:06 ` Preeti U Murthy 2014-09-05 12:06 ` Preeti U Murthy 2014-09-05 12:24 ` Vincent Guittot 2014-09-05 12:24 ` Vincent Guittot 2014-09-11 10:07 ` Peter Zijlstra 2014-09-11 10:07 ` Peter Zijlstra 2014-09-11 11:20 ` Vincent Guittot 2014-09-11 11:20 ` Vincent Guittot 2014-09-11 10:13 ` Peter Zijlstra 2014-09-11 10:13 ` Peter Zijlstra 2014-09-11 12:14 ` Vincent Guittot 2014-09-11 12:14 ` Vincent Guittot 2014-09-11 11:54 ` Peter Zijlstra 2014-09-11 11:54 ` Peter Zijlstra 2014-08-26 11:06 ` [PATCH v5 09/12] sched: add usage_load_avg Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-09-04 7:34 ` [PATCH v5 09/11] " Vincent Guittot 2014-09-04 7:34 ` Vincent Guittot 2014-09-11 11:17 ` Peter Zijlstra 2014-09-11 11:17 ` Peter Zijlstra 2014-09-11 11:17 ` [PATCH v5 09/12] " Peter Zijlstra 2014-09-11 11:17 ` Peter Zijlstra 2014-09-11 12:18 ` Vincent Guittot 2014-09-11 12:18 ` Vincent Guittot 2014-09-11 12:20 ` Vincent Guittot 2014-09-11 12:20 ` Vincent Guittot 2014-09-15 19:15 ` Morten Rasmussen 2014-09-15 19:15 ` Morten Rasmussen 2014-09-15 22:33 ` Vincent Guittot 2014-09-15 22:33 ` Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot [this message] 2014-08-26 11:06 ` [PATCH v5 10/12] sched: get CPU's utilization statistic Vincent Guittot 2014-09-11 12:34 ` Peter Zijlstra 2014-09-11 12:34 ` Peter Zijlstra 2014-09-11 13:07 ` Vincent Guittot 2014-09-11 13:07 ` Vincent Guittot 2014-09-11 14:04 ` Peter Zijlstra 2014-09-11 14:04 ` Peter Zijlstra 2014-09-11 19:17 ` Nicolas Pitre 2014-09-11 19:17 ` Nicolas Pitre 2014-09-12 7:41 ` Vincent Guittot 2014-09-12 7:41 ` Vincent Guittot 2014-09-15 19:45 ` Morten Rasmussen 2014-09-15 19:45 ` Morten Rasmussen 2014-09-16 22:43 ` Vincent Guittot 2014-09-16 22:43 ` Vincent Guittot 2014-09-15 19:28 ` Morten Rasmussen 2014-09-15 19:28 ` Morten Rasmussen 2014-08-26 11:06 ` [PATCH v5 11/12] sched: replace capacity_factor by utilization Vincent Guittot 2014-08-26 11:06 ` Vincent Guittot 2014-09-11 15:39 ` Peter Zijlstra 2014-09-11 15:39 ` Peter Zijlstra 2014-09-11 16:15 ` Peter Zijlstra 2014-09-11 16:15 ` Peter Zijlstra 2014-09-11 17:26 ` Vincent Guittot 2014-09-11 17:26 ` Vincent Guittot 2014-09-14 19:41 ` Peter Zijlstra 2014-09-14 19:41 ` Peter Zijlstra 2014-09-14 19:51 ` Peter Zijlstra 2014-09-14 19:51 ` Peter Zijlstra 2014-09-15 11:42 ` Peter Zijlstra 2014-09-15 11:42 ` Peter Zijlstra 2014-09-15 19:07 ` Nicolas Pitre 2014-09-15 19:07 ` Nicolas Pitre 2014-09-15 20:01 ` Peter Zijlstra 2014-09-15 20:01 ` Peter Zijlstra 2014-09-17 18:45 ` Morten Rasmussen 2014-09-17 18:45 ` Morten Rasmussen 2014-09-17 18:58 ` Morten Rasmussen 2014-09-17 18:58 ` Morten Rasmussen 2014-09-17 23:03 ` Peter Zijlstra 2014-09-17 23:03 ` Peter Zijlstra 2014-09-15 22:14 ` Vincent Guittot 2014-09-15 22:14 ` Vincent Guittot 2014-09-15 22:18 ` Vincent Guittot 2014-09-15 22:18 ` Vincent Guittot 2014-09-17 22:25 ` Peter Zijlstra 2014-09-17 22:25 ` Peter Zijlstra 2014-09-18 1:32 ` Vincent Guittot 2014-09-18 1:32 ` Vincent Guittot 2014-09-16 17:00 ` Dietmar Eggemann 2014-09-16 17:00 ` Dietmar Eggemann 2014-08-26 11:06 ` [PATCH v5 12/12] sched: add SD_PREFER_SIBLING for SMT level Vincent Guittot 2014-08-26 11:06 ` 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=1409051215-16788-11-git-send-email-vincent.guittot@linaro.org \ --to=vincent.guittot@linaro.org \ --cc=Morten.Rasmussen@arm.com \ --cc=daniel.lezcano@linaro.org \ --cc=dietmar.eggemann@arm.com \ --cc=efault@gmx.de \ --cc=linaro-kernel@lists.linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux@arm.linux.org.uk \ --cc=mingo@kernel.org \ --cc=nicolas.pitre@linaro.org \ --cc=peterz@infradead.org \ --cc=preeti@linux.vnet.ibm.com \ --cc=riel@redhat.com \ /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: linkBe 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.