Messages in this thread | | | Subject | Re: [BISECTED] "conservative" cpufreq governor broken | From | Eero Nurkkala <> | Date | Wed, 07 Oct 2009 11:14:23 +0300 |
| |
On Wed, 2009-10-07 at 10:05 +0200, ext Steven Noonan wrote: > > Those look good. > > > > Well, might as well then go for: > > /drivers/cpufreq/cpufreq_conservative.c > > dbs_check_cpu() -> > > load = 100 * (wall_time - idle_time) / wall_time; <- What is your load? > > That's probably the problem... > > [ 40.632277] cpufreq load = 100 * (66667 - 3310) / 66667 = 95 > [ 40.698947] cpufreq load = 100 * (66661 - 3238) / 66661 = 95 > [ 73.965425] cpufreq load = 100 * (66667 - 12820) / 66667 = 80 > [ 74.032095] cpufreq load = 100 * (66661 - 1124) / 66661 = 98 > [ 107.298571] cpufreq load = 100 * (66666 - 13092) / 66666 = 80 > [ 107.365301] cpufreq load = 100 * (66722 - 3317) / 66722 = 95 > [ 140.631717] cpufreq load = 100 * (66666 - 3311) / 66666 = 95 > [ 140.698387] cpufreq load = 100 * (66662 - 3237) / 66662 = 95 > > idle_time is wrong. > > > Let assume load is sane, look for (in dbs_check_cpu()) > > if (load < (dbs_tuners_ins.down_threshold - 10)) { > > > > whether it is taken ever...if not, what is your > > (dbs_tuners_ins.down_threshold - 10) ? > > > > - Eero > > > >
<------------Sidenote------------------------------> Vankatesh, I think the following is not smp friendly: cpufreq_conservative.c: /* Get Absolute Load */ for_each_cpu(j, policy->cpus) { ... load = 100 * (wall_time - idle_time) / wall_time;
now the load is only considered from the last cpu in line? in ondemand, load goes to max_load_freq...so max is taken from all cpus out there. (well, doesn't seem like the case with conservative). Of course I may be wrong, and things are like supposed. </------------Sidenote------------------------------>
Steven, how do the cpu loads look like without the patch?
- Eero
| |