[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <568b09ce-dc6a-8d2a-13ca-6df045236449@linux.intel.com>
Date: Tue, 14 Feb 2023 15:38:35 -0500
From: "Liang, Kan" <kan.liang@...ux.intel.com>
To: John Stultz <jstultz@...gle.com>
Cc: Thomas Gleixner <tglx@...utronix.de>, peterz@...radead.org,
mingo@...hat.com, linux-kernel@...r.kernel.org, sboyd@...nel.org,
eranian@...gle.com, namhyung@...nel.org, ak@...ux.intel.com,
adrian.hunter@...el.com
Subject: Re: [RFC PATCH V2 2/9] perf: Extend ABI to support post-processing
monotonic raw conversion
On 2023-02-14 3:11 p.m., John Stultz wrote:
> On Tue, Feb 14, 2023 at 9:00 AM Liang, Kan <kan.liang@...ux.intel.com> wrote:
>> On 2023-02-14 9:51 a.m., Liang, Kan wrote:
>>> If I understand correctly, the idea is to let the user space tool run
>>> the above interpoloation algorithm several times to 'guess' the atomic
>>> mapping. Using the mapping information to covert the TSC from the PEBS
>>> record. Is my understanding correct?
>>>
>>> If so, to be honest, I doubt we can get the accuracy we want.
>>>
>>
>> I implemented a simple test to evaluate the error.
>
> Very cool!
>
>> I collected TSC -> CLOCK_MONOTONIC_RAW mapping using the above algorithm
>> at the start and end of perf cmd.
>> MONO_RAW TSC
>> start 89553516545645 223619715214239
>> end 89562251233830 223641517000376
>>
>> Here is what I get via mult/shift conversion from this patch.
>> MONO_RAW TSC
>> PEBS 89555942691466 223625770878571
>>
>> Then I use the time information from start and end to create a linear
>> function and 'guess' the MONO_RAW of PEBS from the TSC. I get
>> 89555942692721.
>> There is a 1255 ns difference.
>> I tried several different PEBS records. The error is ~1000ns.
>> I think it should be an observable error.
>
> Interesting. That's a good bit higher than I'd expect as I'd expect a
> clock_gettime() call to take ~ double digit nanoseconds range on
> average, so the error should be within that.
>
> Can you share your logic?
>
I run the algorithm right before and after the perf command as below.
(The source code of time is attached.)
$./time
$perf record -e cycles:upp --clockid monotonic_raw $some_workaround
$./time
The time will dump both MONO_RAW and TSC. That's where "start" and "end"
from.
The perf command print out both TSC and converted MONO_RAW (using the
mul/shift from this patch series). That's where "PEBS" value from.
Than I use the below formula to calculate the guessed MONO_RAW of PEBS TSC.
Guessed_MONO_RAW = (PEBS_TSC - start_TSC) / (end_TSC - start_TSC) *
(end_MONO_RAW - start_MONO_RAW) + start_MONO_RAW.
The guessed_MONO_RAW is 89555942692721.
The PEBS_MONO_RAW is 89555942691466.
The difference is 1255.
Is the calculation correct?
Thanks,
Kan
View attachment "time.c" of type "text/plain" (741 bytes)
Powered by blists - more mailing lists