Re: [PATCH] CPUFREQ : calculate delay after dbs_check_cpu

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

The ondemand delay value is calculated before calling dbs_check_cpu
which can lead to a delay value of sampling_rate*sampling_down_factor
but a frequency set to the lowest value. The main result is a slow
responsiveness during this period. This patch moves the calculation of
delay after the call of dbs_check_cpu. I have seen this problem when
testing cpufreq-bench on my Arm platform.

Vincent

On 7 February 2011 17:14, Vincent Guittot <vincent.guittot@xxxxxxxxxx> wrote:
> calculate ondemand delay after dbs_check_cpu call because it can
> modify rate_mult value
>
> use freq_lo_jiffies value for the sub sample period of powersave_bias mode
>
> Signed-off-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
> ---
>  drivers/cpufreq/cpufreq_ondemand.c |   20 +++++++++++++-------
>  1 files changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/cpufreq/cpufreq_ondemand.c
> b/drivers/cpufreq/cpufreq_ondemand.c
> index 58aa85e..44c2dba 100644
> --- a/drivers/cpufreq/cpufreq_ondemand.c
> +++ b/drivers/cpufreq/cpufreq_ondemand.c
> @@ -641,13 +641,7 @@ static void do_dbs_timer(struct work_struct *work)
>                container_of(work, struct cpu_dbs_info_s, work.work);
>        unsigned int cpu = dbs_info->cpu;
>        int sample_type = dbs_info->sample_type;
> -
> -       /* We want all CPUs to do sampling nearly on same jiffy */
> -       int delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate
> -               * dbs_info->rate_mult);
> -
> -       if (num_online_cpus() > 1)
> -               delay -= jiffies % delay;
> +       int delay;
>
>        mutex_lock(&dbs_info->timer_mutex);
>
> @@ -660,10 +654,22 @@ static void do_dbs_timer(struct work_struct *work)
>                        /* Setup timer for SUB_SAMPLE */
>                        dbs_info->sample_type = DBS_SUB_SAMPLE;
>                        delay = dbs_info->freq_hi_jiffies;
> +               } else {
> +                       /* We want all CPUs to do sampling nearly on
> +                        * same jiffy
> +                        */
> +                       delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate
> +                               * dbs_info->rate_mult);
> +
> +                       if (num_online_cpus() > 1)
> +                               delay -= jiffies % delay;
> +
>                }
> +
>        } else {
>                __cpufreq_driver_target(dbs_info->cur_policy,
>                        dbs_info->freq_lo, CPUFREQ_RELATION_H);
> +               delay = dbs_info->freq_lo_jiffies;
>        }
>        schedule_delayed_work_on(cpu, &dbs_info->work, delay);
>        mutex_unlock(&dbs_info->timer_mutex);
> --
> 1.7.1
>
--
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


[Index of Archives]     [Linux Kernel Devel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Forum]     [Linux SCSI]

  Powered by Linux