ondemand: tune for hardware coordination
PATCH 1/2 ondemand: tune for hardware coordination
From: Venkatesh Pallipadi <[email protected]>
cpufreq_ondemand.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-)
Try to make dbs_check_cpu() call on all CPUs at the same jiffy. This will help when multiple cores share P-states via Hardware Coordination.
Signed-off-by Venkatesh Pallipadi <[email protected]>
Signed-off-by Alexey Starikovskiy <[email protected]>
Signed-off-by Len Brown <[email protected]>
drivers/cpufreq/cpufreq_ondemand.c +10 -6
@@ -74,6 +74,7 @@struct dbs_tuners {unsigned int sampling_rate; +unsigned int sampling_rate_jiffies;unsigned int up_threshold;unsigned int ignore_nice; };
@@ -139,6 +140,7 @@ } dbs_tuners_ins.sampling_rate = input; + dbs_tuners_ins.sampling_rate_jiffies =usecs_to_jiffies (input);mutex_unlock (&dbs_mutex);return count;
@@ -303,26 +305,28 @@ {unsigned int cpu =smp_processor_id ();struct cpu_dbs_info_s *dbs_info = &per_cpu (cpu_dbs_info, cpu); +int delay = dbs_tuners_ins.sampling_rate_jiffies - + (jiffies % dbs_tuners_ins.sampling_rate_jiffies);dbs_check_cpu (dbs_info); -queue_delayed_work_on (cpu, kondemand_wq, &dbs_info->work, -usecs_to_jiffies (dbs_tuners_ins.sampling_rate)); +/* We want all CPUs to do sampling nearly on same jiffy */ +queue_delayed_work_on (cpu, kondemand_wq, &dbs_info->work, delay); }static inline void dbs_timer_init (unsigned int cpu) {struct cpu_dbs_info_s *dbs_info = &per_cpu (cpu_dbs_info, cpu); +int delay = dbs_tuners_ins.sampling_rate_jiffies - + (jiffies % dbs_tuners_ins.sampling_rate_jiffies);INIT_WORK (&dbs_info->work, do_dbs_timer,0 ); -queue_delayed_work_on (cpu, kondemand_wq, &dbs_info->work, -usecs_to_jiffies (dbs_tuners_ins.sampling_rate)); -return ; +/* We want all CPUs to do sampling nearly on same jiffy */ +queue_delayed_work_on (cpu, kondemand_wq, &dbs_info->work, delay); }static inline void dbs_timer_exit (unsigned int cpu) {struct cpu_dbs_info_s *dbs_info = &per_cpu (cpu_dbs_info, cpu); -cancel_rearming_delayed_workqueue (kondemand_wq, &dbs_info->work); }