Re: [PATCH] cpufreq: schedutil: Always trace frequency if it does not change

From: Rafael J. Wysocki
Date: Wed Mar 22 2017 - 10:14:38 EST


On Wed, Mar 22, 2017 at 1:52 PM, Rafael J. Wysocki <rafael@xxxxxxxxxx> wrote:
> On Wed, Mar 22, 2017 at 10:29 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
>> On Wed, Mar 22, 2017 at 01:56:53AM +0100, Rafael J. Wysocki wrote:
>>> From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
>>>
>>> sugov_update_commit() calls trace_cpu_frequency() to record the
>>> current CPU frequency if it has not changed in the fast switch case
>>> to prevent utilities from getting confused (they may report that the
>>> CPU is idle if the frequency has not been recorded for too long, for
>>> example).
>>
>> That seems like buggy tools; we should then fix the tools, not the
>> kernel to emit more superfluous information.
>>
>>> However, the same problem may occur for a cpufreq driver that doesn't
>>> support fast frequency switching and implements the ->target callback
>>> (that is, it doesn't use frequency tables), but trace_cpu_frequency()
>>> is not called if frequency updates are skipped in that case.
>>
>> I'm having trouble parsing that; am I right in understanding this is the
>> exact same scenario where only superfluous changes are omitted?
>
> Yes, that's the same scenario basically, which is the point of the patch. :-)
>
>>> For this reason, modify sugov_update_commit() to always call
>>> trace_cpu_frequency() when the new frequency to be set is equal to
>>> the one that was set previously and reorganize the code in there to
>>> reduce duplication somewhat.
>>
>> So why not fix the tools?
>
> Because I can't.
>
> I just can't go and fix all of the tools binaries that people use out
> there and I want them to use recent kernels at the same time.
>
> But anyway, I think that the code with the patch looks better than
> without it regardless and having a frivolous difference there between
> the two cases is not useful.

Well, perhaps the changelog should just be

"Get rid of superfluous differences between two code branches in
sugov_update_commit()"

or similar. :-)