Dear Rafael, On Sat, 25 Jun 2016 02:14:28 +0200 "Rafael J. Wysocki" wrote:
> On Friday, June 17, 2016 04:09:33 PM Jisheng Zhang wrote: > > Dear all, > > > > If using acpi-cpufreq instead, v4.6, v4.6-rc3, v4.7-rc3 can't reproduce the > > issue. It seems > > only intel_pstate is impacted. > > Which is quite obvious, since the commit your bisection led to was > intel_pstate-specific. :-) > > If the issue is what I'm thinking it is, the patch below should help, so > can you please test it? > > Thanks, > Rafael > > --- > From: Rafael J. Wysocki <rafael.j.wyso...@intel.com> > Subject: [PATCH] intel_pstate: Do not clear utilization update hooks on > policy changes > > intel_pstate_set_policy() is invoked by the cpufreq core during > driver initialization, on changes of policy attributes (minimim and > maximum frequency, for example) via sysfs and via CPU notifications > from the platform firmware. On some platforms the latter may occur > relatively often. > > Commit bb6ab52f2bef (intel_pstate: Do not set utilization update hook > too early) made intel_pstate_set_policy() clear the CPU's utilization > update hook before updating the policy attributes for it (and set the > hook again after doind that), but that involves invoking > synchronize_sched() and adds overhead to the CPU notifications > mentioned above and to the sched-RCU handling in general. > > That extra overhead is arguably not necessary, because updating > policy attributes when the CPU's utilization update hook is active > should not lead to any adverse effects, so drop the clearing of > the hook from intel_pstate_set_policy() and make it check if > the hook has been set already when attempting to set it. This patch works! on a 32 snb cores server: 80 wakeups/s w/o the patch 7 wakeups/s w/ the patch on a 4 snb cores laptop: 22 wakeups/s w/o the patch 6 wakeups/s w/ the patch Thank you so much for fixing it ;) > > Fixes: bb6ab52f2bef (intel_pstate: Do not set utilization update hook too > early) > Reported-by: Jisheng Zhang <jszh...@marvell.com> So feel free to add Tested-by: Jisheng Zhang <jszh...@marvell.com> > Signed-off-by: Rafael J. Wysocki <rafael.j.wyso...@intel.com> > --- > drivers/cpufreq/intel_pstate.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > Index: linux-pm/drivers/cpufreq/intel_pstate.c > =================================================================== > --- linux-pm.orig/drivers/cpufreq/intel_pstate.c > +++ linux-pm/drivers/cpufreq/intel_pstate.c > @@ -1440,6 +1440,9 @@ static void intel_pstate_set_update_util > { > struct cpudata *cpu = all_cpu_data[cpu_num]; > > + if (cpu->update_util_set) > + return; > + > /* Prevent intel_pstate_update_util() from using stale data. */ > cpu->sample.time = 0; > cpufreq_add_update_util_hook(cpu_num, &cpu->update_util, > @@ -1480,8 +1483,6 @@ static int intel_pstate_set_policy(struc > if (!policy->cpuinfo.max_freq) > return -ENODEV; > > - intel_pstate_clear_update_util_hook(policy->cpu); > - > pr_debug("set_policy cpuinfo.max %u policy->max %u\n", > policy->cpuinfo.max_freq, policy->max); > >