[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.DEB.2.10.1604251437210.18257@vshiva-Udesk>
Date: Mon, 25 Apr 2016 14:43:51 -0700 (PDT)
From: Vikas Shivappa <vikas.shivappa@...el.com>
To: Peter Zijlstra <peterz@...radead.org>
cc: Vikas Shivappa <vikas.shivappa@...el.com>,
Vikas Shivappa <vikas.shivappa@...ux.intel.com>,
tony.luck@...el.com, "Shankar, Ravi V" <ravi.v.shankar@...el.com>,
"Yu, Fenghua" <fenghua.yu@...el.com>, x86@...nel.org,
linux-kernel@...r.kernel.org, hpa@...or.com, tglx@...utronix.de,
mingo@...nel.org, h.peter.anvin@...el.com
Subject: Re: [PATCH 3/4] perf/x86/mbm: Fix mbm counting when RMIDs are
reused
On Mon, 25 Apr 2016, Peter Zijlstra wrote:
> On Mon, Apr 25, 2016 at 09:44:53AM -0700, Vikas Shivappa wrote:
>>
>>
>> On Mon, 25 Apr 2016, Peter Zijlstra wrote:
>>
>>> On Fri, Apr 22, 2016 at 05:27:20PM -0700, Vikas Shivappa wrote:
>>>> When multiple instances of perf reuse RMID, then we need to start
>>>> counting for each instance rather than reporting the current RMID count.
>>>> This patch adds a st_count(start count) per event to track the same.
>>>
>>> what?
>>>
>>
>> Will fix the comit log :
>>
>> When multiple instances of perf reuse RMID for the same PID, then we need to
>> start counting from zero for each new event, rather than reporting the
>> current RMID. This patch adds a st_count(start count) per event to track the
>> same.
>>
>> For ex:
>> 1.RMID1's total_bytes is 100MB for event1(PID1)
>> 2.another perf instance starts measuring the same PID1 with event2. We reuse
>> RMID1 as the PID1 is already counted.
>> 3.event2 stores st_count as 100MB.
>> 4.After some time, when user wants to count event2 and say RMID1's current
>> total_bytes 110MB, we report 110MB - 100MB = 10MB
>
> This is naturally handled by the scheme I outlined in the other patch.
Something similar although there is one per rmid and one per event..
u64 read_sample(rmid...) // for each rmid
{
...
start:
'per rmid' prev = read_hw_counter();
count:
cur_count = read_hw_counter();
delta = cur_count - prev;
prev = cur_count;
total_bytes += delta;
return total_bytes;
}
when we lose the rmid -
xchng(event, rmid=-1)
{
..
'per event' rc_count = read_sample(event->rmid) - per event start count;
'per event' start_count = 0;
}
for each event -
start:
if rmid is reused
'per event' prev = read_sample(rmid);
else
prev = 0;
count: // we use count instead of read
count = read_sample(rmid) + rc_count - prev;
>
Powered by blists - more mailing lists