Dominik, Le 25/03/2010 18:44, Dominik Brodowski a écrit : > From: Dominik Brodowski <linux@xxxxxxxxxxxxxxxxxxxx> > Date: Thu, 25 Mar 2010 18:13:20 +0100 > Subject: [PATCH] cpufreq: use average load in conservative governor > > Instead of using the load of the last CPU in a package, use the > average of all CPUs in a package. Don't we want to check the max load rather than the average, for a user running a single threaded job wants the CPU to jump to max speed? > > Reported-by: Jean-Christian Goussard <jeanchristian.goussard@xxxxxx> > Signed-off-by: Dominik Brodowski <linux@xxxxxxxxxxxxxxxxxxxx> > > diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c > index 599a40b..e0be6bd 100644 > --- a/drivers/cpufreq/cpufreq_conservative.c > +++ b/drivers/cpufreq/cpufreq_conservative.c > @@ -444,6 +444,7 @@ static struct attribute_group dbs_attr_group_old = { > static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) > { > unsigned int load = 0; > + unsigned int max_load = 0; > unsigned int freq_target; > > struct cpufreq_policy *policy; > @@ -500,8 +501,9 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) > if (unlikely(!wall_time || wall_time < idle_time)) > continue; > > - load = 100 * (wall_time - idle_time) / wall_time; > + load += 100 * (wall_time - idle_time) / wall_time; > } > + load = load / cpumask_weight(policy->cpus); > > /* > * break out if we 'cannot' reduce the speed as the user might > @@ -511,7 +513,7 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) > return; > > /* Check for frequency increase */ > - if (load > dbs_tuners_ins.up_threshold) { > + if (max_load > dbs_tuners_ins.up_threshold) { max_load is still 0 here. "load" now holds the average load but as I said, I think the max load should be used: - load = 100 * (wall_time - idle_time) / wall_time; + if (load > max_load) + max_load = load; } > this_dbs_info->down_skip = 0; > > /* if we are already at full speed then break out early */ > @@ -538,7 +540,7 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) > * can support the current CPU usage without triggering the up > * policy. To be safe, we focus 10 points under the threshold. > */ > - if (load < (dbs_tuners_ins.down_threshold - 10)) { > + if (max_load < (dbs_tuners_ins.down_threshold - 10)) { > freq_target = (dbs_tuners_ins.freq_step * policy->max) / 100; > > this_dbs_info->requested_freq -= freq_target; > Jean-Christian -- To unsubscribe from this list: send the line "unsubscribe cpufreq" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html