Li, Aubrey wrote:
> Rafael Vanoni wrote:
> 
>> Aubrey Li wrote:
>>>  Here is a bug and fix from J?rgen.
>>>
>>>  J?rgen Keil <> wrote:
>>>> It's a bug in powertop.  The dtrace code that powertop is using
>>>> aggregates on a processorid_t (cpu) and an uint32_t (cpuspeed).
>>>>
>>>> But in function pt_cpufreq_dtrace_walk() the cpu speed is
>>>> read as uint64_t - this is working with bogus values for cpu speed!
>>>>
>> Thanks for picking this up, J?rgen.
>>
>> After applying your patch, the p-state numbers would display negative
>> values when the sampling interval was shorter than the
>> interval between
>> firings of the cpu-change-speed probe. I added a check in
>> pt_cpufreq_stat_account() to fix that. I'm including the diff below.
>>
>> I'm still seeing the original issue when observing CPUs other than CPU
>> 0. The --cpu option has been on the project gate for a while, but was
>> only putback last Friday. 
>>
> 
> When walk the aggregation of the cpufreq,
> This implementation looks wrong for the specific CPU.
> 
> for (i = 0; i < g_ncpus; i++) {
>                         /* LINTED - alignment */
>                         dt_state_time += *((hrtime_t 
> *)(data->dtada_percpu[i]));
>                 }
> 
> I never found the doc for the dtrace data structure definition.
> What does data->dtada_percpu[i] mean here?

That was the first place I looked ;) It's actually right, changing to 
g_ncpus_observed caused an error.

Kuriakose is reviewing this fix, he pointed out that the 
cpu-change-speed probe is actually using uint64_t's, so I changed the 
fix to simply cast the argument in the DTrace script. There's a webrev 
here -> http://cr.opensolaris.org/~rafaelv/p-states/

Thanks.
Rafael


Reply via email to