Hi Alex, I am sorry I overlooked the changes you have made to the power scheduling policies.Now you have just two : performance and powersave.
Hence you can ignore my below comments.But if you use group->capacity instead of group->weight for threshold,like you did for balance policy in your version5 of this patchset, dont you think the below patch can be avoided? group->capacity being the threshold will automatically ensure that you dont pack onto domains that share cpu power. Regards Preeti U Murthy On 04/08/2013 08:47 AM, Preeti U Murthy wrote: > Hi Alex, > > On 04/04/2013 07:31 AM, Alex Shi wrote: >> Packing tasks among such domain can't save power, just performance >> losing. So no power balance on them. > > As far as my understanding goes, powersave policy is the one that tries > to pack tasks onto a SIBLING domain( domain where SD_SHARE_CPUPOWER is > set).balance policy does not do that,meaning it does not pack on the > domain that shares CPU power,but packs across all other domains.So the > change you are making below results in nothing but the default behaviour > of balance policy. > > Correct me if I am wrong but my point is,looks to me,that the powersave > policy is introduced in this patchset,and with the below patch its > characteristic behaviour of packing onto domains sharing cpu power is > removed,thus making it default to balance policy.Now there are two > policies which behave the same way:balance and powersave. > >> >> Signed-off-by: Alex Shi <alex....@intel.com> >> --- >> kernel/sched/fair.c | 7 ++++--- >> 1 file changed, 4 insertions(+), 3 deletions(-) >> >> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c >> index 047a1b3..3a0284b 100644 >> --- a/kernel/sched/fair.c >> +++ b/kernel/sched/fair.c >> @@ -3503,7 +3503,7 @@ static int get_cpu_for_power_policy(struct >> sched_domain *sd, int cpu, >> >> policy = get_sd_sched_balance_policy(sd, cpu, p, sds); >> if (policy != SCHED_POLICY_PERFORMANCE && sds->group_leader) { >> - if (wakeup) >> + if (wakeup && !(sd->flags & SD_SHARE_CPUPOWER)) >> new_cpu = find_leader_cpu(sds->group_leader, >> p, cpu, policy); >> /* for fork balancing and a little busy task */ >> @@ -4410,8 +4410,9 @@ static unsigned long task_h_load(struct task_struct *p) >> static inline void init_sd_lb_power_stats(struct lb_env *env, >> struct sd_lb_stats *sds) >> { >> - if (sched_balance_policy == SCHED_POLICY_PERFORMANCE || >> - env->idle == CPU_NOT_IDLE) { >> + if (sched_balance_policy == SCHED_POLICY_PERFORMANCE >> + || env->sd->flags & SD_SHARE_CPUPOWER >> + || env->idle == CPU_NOT_IDLE) { >> env->flags &= ~LBF_POWER_BAL; >> env->flags |= LBF_PERF_BAL; >> return; >> > > Regards > Preeti U Murthy > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/