ondemand governor cleanup
PATCH 1/2 ondemand governor cleanup
Hello,
Here is a cleanup patch for the ondemand governor (as found in 2.6.11). In dbs_check_cpu(), first the idle ticks of the current CPU are measured and then the idle ticks of all the associated CPUs. This patch factorises the code: all the idle ticks are measured in the same loop.
Note: this was tested only on a computer with one CPU, I don't own any hardware with several CPUs which stick to the same frequency.
Eric
--
Ondemand governor cleanup, it factorises the idle ticks measurement.
Signed-off-by Eric Piel <[email protected]>
--
drivers/cpufreq/cpufreq_ondemand.c renamed from drivers/cpufreq/cpufreq_ondemand.c.bak +6 -24
@@ -223,7 +223,6 @@ static struct attribute_group dbs_attr_gstatic void dbs_check_cpu (int cpu) {unsigned int idle_ticks, up_idle_ticks, down_idle_ticks; -unsigned int total_idle_ticks;unsigned int freq_down_step;unsigned int freq_down_sampling_rate;static int down_skip[NR_CPUS ];
@@ -252,20 +251,11 @@ static void dbs_check_cpu(int cpu)*/ /* Check for frequency increase */ - total_idle_ticks =kstat_cpu (cpu).cpustat.idle + -kstat_cpu (cpu).cpustat.iowait; - idle_ticks = total_idle_ticks - - this_dbs_info->prev_cpu_idle_up; - this_dbs_info->prev_cpu_idle_up = total_idle_ticks; - - + idle_ticks =UINT_MAX ;for_each_cpu_mask (j, policy->cpus) { -unsigned int tmp_idle_ticks; +unsigned int tmp_idle_ticks, total_idle_ticks;struct cpu_dbs_info_s *j_dbs_info; -if (j == cpu) -continue ; - j_dbs_info = &per_cpu (cpu_dbs_info, j);/* Check for frequency increase */ total_idle_ticks = kstat_cpu(j).cpustat.idle +
@@ -287,7 +277,7 @@ static void dbs_check_cpu(int cpu)__cpufreq_driver_target (policy, policy->max,CPUFREQ_RELATION_H ); down_skip[cpu] =0 ; - this_dbs_info->prev_cpu_idle_down = total_idle_ticks; + this_dbs_info->prev_cpu_idle_down = this_dbs_info->prev_cpu_idle_up;return ; }
@@ -296,19 +286,11 @@ static void dbs_check_cpu(int cpu)if (down_skip[cpu] < dbs_tuners_ins.sampling_down_factor)return ; - total_idle_ticks =kstat_cpu (cpu).cpustat.idle + -kstat_cpu (cpu).cpustat.iowait; - idle_ticks = total_idle_ticks - - this_dbs_info->prev_cpu_idle_down; - this_dbs_info->prev_cpu_idle_down = total_idle_ticks; - + idle_ticks =UINT_MAX ;for_each_cpu_mask (j, policy->cpus) { -unsigned int tmp_idle_ticks; +unsigned int tmp_idle_ticks, total_idle_ticks;struct cpu_dbs_info_s *j_dbs_info; -if (j == cpu) -continue ; - j_dbs_info = &per_cpu (cpu_dbs_info, j);/* Check for frequency increase */ total_idle_ticks = kstat_cpu(j).cpustat.idle +
@@ -330,7 +312,7 @@ static void dbs_check_cpu(int cpu) down_idle_ticks = (100 - dbs_tuners_ins.down_threshold) *sampling_rate_in_HZ (freq_down_sampling_rate); -if (idle_ticks > down_idle_ticks ) { +if (idle_ticks > down_idle_ticks) { freq_down_step = (5 * policy->max) /100 ;/* max freq cannot be less than 100. But who knows.... */
_______________________________________________
Cpufreq mailing list
[email protected]
http://lists.linux.org.uk/mailman/listinfo/cpufreq