lkml.org 
[lkml]   [2017]   [Dec]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH 2/4] perf/x86/intel: fix event update for auto-reload
From
Date


On 12/19/2017 5:07 PM, Peter Zijlstra wrote:
> On Tue, Dec 19, 2017 at 03:08:58PM -0500, Liang, Kan wrote:
>>> This all looks very wrong... In auto reload we should never call
>>> intel_pmu_save_and_restore() in the first place I think.
>>>
>>> Things like x86_perf_event_update() and x86_perf_event_set_period()
>>> simply _cannot_ do the right thing when we auto reload the counter.
>>>
>>
>> I think it should be OK to call it in first place.
>> For x86_perf_event_update(), the reload_times will tell if it's auto reload.
>> Both period_left and event->count are carefully recalculated for auto
>> reload.
>
> How does prev_count make sense when we've already reloaded a bunch of
> times?

Same as non-auto-reload, it's the 'left' (unfinished) period from last time.
The period for the first record should always be the 'left' period no
matter on which case.
For auto-reload, it doesn't need to increase the prev_count with the
reload. Because for later records, the period should be exactly the same
as the reload value.

To calculate the event->count,
For auto-reload, the event->count = prev_count + (reload times - 1) *
reload value + gap between PMI trigger and PMI handler.

For non-auto-reload, the event->count = prev_count + gap between PMI
trigger and PMI handler.

The 'prev_count' is same for both auto-reload and non-auto-reload.

The gap is a little bit tricky for auto-reload. Because it starts from
-reload_value. But for non-auto-reload, it starts from 0.
"delta += (reload_val << shift);" is used to correct it.

>
>> For x86_perf_event_set_period(), there is nothing special needed for auto
>> reload. The period is fixed. The period_left from x86_perf_event_update() is
>> already handled.
>
> Hurm.. I see. But rather than make an ever bigger trainwreck of things,
> I'd rather you just write a special purpose intel_pmu_save_and_restart()
> just for AUTO_RELOAD.

OK. I will do it in V2.

Thanks,
Kan

\
 
 \ /
  Last update: 2017-12-20 00:26    [W:0.042 / U:0.500 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site