sched: add load balance cpumask pointer into lb_env
RFC PATCH 1/1 sched: add load balance cpumask pointer into lb_env
From: Michael Wang <[email protected]>
with this patch, ld_env will have a pointer of load balance cpumask, and we don't need to pass cpus anymore.
Signed-off-by Michael Wang <[email protected]>
--- kernel/sched/fair.c | 34 ++++++++++++++++------------------ 1 files changed, 16 insertions(+), 18 deletions(-)
kernel/sched/fair.c +16 -18
@@ -3102,14 +3102,16 @@ struct lb_env {struct list_head *tasks; +/* The set of CPUs under consideration for load-balancing */ +struct cpumask *cpus; +unsigned int flags;unsigned int loop;unsigned int loop_break;unsigned int loop_max;struct rq * (*find_busiest_queue)(struct lb_env *, -struct sched_group *, -const struct cpumask *); +struct sched_group *); };/*
@@ -3847,8 +3849,7 @@ fix_small_capacity(struct sched_domain *sd, struct sched_group *group)*/ static inline void update_sg_lb_stats (struct lb_env *env,struct sched_group *group,int load_idx, -int local_group,const struct cpumask *cpus, -int *balance,struct sg_lb_stats *sgs) +int local_group,int *balance,struct sg_lb_stats *sgs) {unsigned long nr_running, max_nr_running, min_nr_running;unsigned long load, max_cpu_load, min_cpu_load;
@@ -3865,7 +3866,7 @@ static inline void update_sg_lb_stats(struct lb_env *env, max_nr_running =0 ; min_nr_running = ~0UL ; -for_each_cpu_and (i,sched_group_cpus (group), cpus) { +for_each_cpu_and (i,sched_group_cpus (group), env->cpus) {struct rq *rq =cpu_rq (i); nr_running = rq->nr_running;
@@ -3995,9 +3996,8 @@ static bool update_sd_pick_busiest(struct lb_env *env,* @balance: Should we balance. * @sds: variable to hold the statistics for this sched_domain. */ -static inline void update_sd_lb_stats (struct lb_env *env, -const struct cpumask *cpus, -int *balance,struct sd_lb_stats *sds) +static inline void update_sd_lb_stats (struct lb_env *env, +int *balance,struct sd_lb_stats *sds) {struct sched_domain *child = env->sd->child;struct sched_group *sg = env->sd->groups;
@@ -4014,8 +4014,7 @@ static inline void update_sd_lb_stats(struct lb_env *env, local_group =cpumask_test_cpu (env->dst_cpu,sched_group_cpus (sg));memset (&sgs,0 ,sizeof (sgs)); -update_sg_lb_stats (env, sg, load_idx, local_group, - cpus, balance, &sgs); +update_sg_lb_stats (env, sg, load_idx, local_group, balance, &sgs);if (local_group && !(*balance))return ;
@@ -4253,7 +4252,6 @@ static inline void calculate_imbalance(struct lb_env *env, struct sd_lb_stats *s* to restore balance. * * @env: The load balancing environment. -* @cpus: The set of CPUs under consideration for load-balancing. * @balance: Pointer to a variable indicating if this_cpu * is the appropriate cpu to perform load balancing at this_level. *
@@ -4263,7 +4261,7 @@ static inline void calculate_imbalance(struct lb_env *env, struct sd_lb_stats *s* put to idle by rebalancing its tasks onto our group. */ static struct sched_group * -find_busiest_group (struct lb_env *env,const struct cpumask *cpus,int *balance) +find_busiest_group (struct lb_env *env,int *balance) {struct sd_lb_stats sds;
@@ -4273,7 +4271,7 @@ find_busiest_group(struct lb_env *env, const struct cpumask *cpus, int *balance)* Compute the various statistics relavent for load balancing at * this level. */ -update_sd_lb_stats (env, cpus, balance, &sds); +update_sd_lb_stats (env, balance, &sds);/* * this_cpu is not the appropriate cpu to perform load balancing at
@@ -4356,8 +4354,7 @@ ret:* find_busiest_queue - find the busiest runqueue among the cpus in group. */ static struct rq *find_busiest_queue (struct lb_env *env, -struct sched_group *group, -const struct cpumask *cpus) +struct sched_group *group) {struct rq *busiest =NULL , *rq;unsigned long max_load =0 ;
@@ -4372,7 +4369,7 @@ static struct rq *find_busiest_queue(struct lb_env *env,if (!capacity) capacity =fix_small_capacity (env->sd, group); -if (!cpumask_test_cpu (i, cpus)) +if (!cpumask_test_cpu (i, env->cpus))continue ; rq =cpu_rq (i);
@@ -4456,6 +4453,7 @@ static int load_balance(int this_cpu, struct rq *this_rq, .dst_grpmask = sched_group_cpus(sd->groups), .idle = idle, .loop_break = sched_nr_migrate_break, + .cpus = cpus, .find_busiest_queue = find_busiest_queue, };
@@ -4465,7 +4463,7 @@ static int load_balance(int this_cpu, struct rq *this_rq,schedstat_inc (sd, lb_count[idle]); redo: - group =find_busiest_group (&env, cpus, balance); + group =find_busiest_group (&env, balance);if (*balance ==0 ) goto out_balanced;
@@ -4475,7 +4473,7 @@ redo: goto out_balanced; } - busiest = env.find_busiest_queue (&env, group, cpus); + busiest = env.find_busiest_queue (&env, group);if (!busiest) {schedstat_inc (sd, lb_nobusyq[idle]); goto out_balanced;
Signature · 1 line
1.7.4.1
Peter Zijlstra
maintainerQuoted 4 lines · Michael Wang
From: Michael Wang <[email protected]>
with this patch,
ld_envwill have a pointer of load balance cpumask, and we don't need to pass cpus anymore.
Thanks!
[tip:sched/urgent] sched/cleanups: Add load balance cpumask pointer to 'struct lb_env'
In reply to Michael WangCommit-ID: b9403130a5350fca59a50ed11c198cb8c7e54119 Gitweb: http://git.kernel.org/tip/b9403130a5350fca59a50ed11c198cb8c7e54119 Author: Michael Wang <[email protected]> AuthorDate: Thu, 12 Jul 2012 16:10:13 +0800 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 31 Jul 2012 17:00:16 +0200
sched/cleanups: Add load balance cpumask pointer to 'struct lb_env'
With this patch struct ld_env will have a pointer of the load balancing cpumask and we don't need to pass a cpumask around anymore.
Signed-off-by Michael Wang <[email protected]>
Signed-off-by Peter Zijlstra <[email protected]>
Signed-off-by Ingo Molnar <[email protected]>
--- kernel/sched/fair.c | 29 ++++++++++++++--------------- 1 files changed, 14 insertions(+), 15 deletions(-)
kernel/sched/fair.c +14 -15
@@ -3069,6 +3069,9 @@ struct lb_env {int new_dst_cpu;enum cpu_idle_type idle;long imbalance; +/* The set of CPUs under consideration for load-balancing */ +struct cpumask *cpus; +unsigned int flags;unsigned int loop;
@@ -3653,8 +3656,7 @@ fix_small_capacity(struct sched_domain *sd, struct sched_group *group)*/ static inline void update_sg_lb_stats (struct lb_env *env,struct sched_group *group,int load_idx, -int local_group,const struct cpumask *cpus, -int *balance,struct sg_lb_stats *sgs) +int local_group,int *balance,struct sg_lb_stats *sgs) {unsigned long nr_running, max_nr_running, min_nr_running;unsigned long load, max_cpu_load, min_cpu_load;
@@ -3671,7 +3673,7 @@ static inline void update_sg_lb_stats(struct lb_env *env, max_nr_running =0 ; min_nr_running = ~0UL ; -for_each_cpu_and (i,sched_group_cpus (group), cpus) { +for_each_cpu_and (i,sched_group_cpus (group), env->cpus) {struct rq *rq =cpu_rq (i); nr_running = rq->nr_running;
@@ -3800,8 +3802,7 @@ static bool update_sd_pick_busiest(struct lb_env *env,* @sds: variable to hold the statistics for this sched_domain. */ static inline void update_sd_lb_stats (struct lb_env *env, -const struct cpumask *cpus, -int *balance,struct sd_lb_stats *sds) +int *balance,struct sd_lb_stats *sds) {struct sched_domain *child = env->sd->child;struct sched_group *sg = env->sd->groups;
@@ -3818,8 +3819,7 @@ static inline void update_sd_lb_stats(struct lb_env *env, local_group =cpumask_test_cpu (env->dst_cpu,sched_group_cpus (sg));memset (&sgs,0 ,sizeof (sgs)); -update_sg_lb_stats (env, sg, load_idx, local_group, - cpus, balance, &sgs); +update_sg_lb_stats (env, sg, load_idx, local_group, balance, &sgs);if (local_group && !(*balance))return ;
@@ -4055,7 +4055,6 @@ static inline void calculate_imbalance(struct lb_env *env, struct sd_lb_stats *s* to restore balance. * * @env: The load balancing environment. -* @cpus: The set of CPUs under consideration for load-balancing. * @balance: Pointer to a variable indicating if this_cpu * is the appropriate cpu to perform load balancing at this_level. *
@@ -4065,7 +4064,7 @@ static inline void calculate_imbalance(struct lb_env *env, struct sd_lb_stats *s* put to idle by rebalancing its tasks onto our group. */ static struct sched_group * -find_busiest_group (struct lb_env *env,const struct cpumask *cpus,int *balance) +find_busiest_group (struct lb_env *env,int *balance) {struct sd_lb_stats sds;
@@ -4075,7 +4074,7 @@ find_busiest_group(struct lb_env *env, const struct cpumask *cpus, int *balance)* Compute the various statistics relavent for load balancing at * this level. */ -update_sd_lb_stats (env, cpus, balance, &sds); +update_sd_lb_stats (env, balance, &sds);/* * this_cpu is not the appropriate cpu to perform load balancing at
@@ -4155,8 +4154,7 @@ ret:* find_busiest_queue - find the busiest runqueue among the cpus in group. */ static struct rq *find_busiest_queue (struct lb_env *env, -struct sched_group *group, -const struct cpumask *cpus) +struct sched_group *group) {struct rq *busiest =NULL , *rq;unsigned long max_load =0 ;
@@ -4171,7 +4169,7 @@ static struct rq *find_busiest_queue(struct lb_env *env,if (!capacity) capacity =fix_small_capacity (env->sd, group); -if (!cpumask_test_cpu (i, cpus)) +if (!cpumask_test_cpu (i, env->cpus))continue ; rq =cpu_rq (i);
@@ -4252,6 +4250,7 @@ static int load_balance(int this_cpu, struct rq *this_rq, .dst_grpmask = sched_group_cpus(sd->groups), .idle = idle, .loop_break = sched_nr_migrate_break, + .cpus = cpus, };cpumask_copy (cpus, cpu_active_mask);
@@ -4260,7 +4259,7 @@ static int load_balance(int this_cpu, struct rq *this_rq,schedstat_inc (sd, lb_count[idle]); redo: - group =find_busiest_group (&env, cpus, balance); + group =find_busiest_group (&env, balance);if (*balance ==0 ) goto out_balanced;
@@ -4270,7 +4269,7 @@ redo: goto out_balanced; } - busiest =find_busiest_queue (&env, group, cpus); + busiest =find_busiest_queue (&env, group);if (!busiest) {schedstat_inc (sd, lb_nobusyq[idle]); goto out_balanced;