Messages in this thread | | | From | John Stultz <> | Date | Fri, 17 Feb 2023 15:11:47 -0800 | Subject | Re: [RFC PATCH V2 2/9] perf: Extend ABI to support post-processing monotonic raw conversion |
| |
On Tue, Feb 14, 2023 at 12:38 PM Liang, Kan <kan.liang@linux.intel.com> wrote: > On 2023-02-14 3:11 p.m., John Stultz wrote: > > On Tue, Feb 14, 2023 at 9:00 AM Liang, Kan <kan.liang@linux.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 for sharing it. The equation you have there looks ok at a high level for the values you captured (there's small tweaks like doing the mult before the div to make sure you don't hit integer precision issues, but I didn't see that with your results).
I've got a todo to try to see how the calculation changes if we do provide atomic TSC/RAW stamps, here but I got a little busy with other work and haven't gotten to it. So my apologies, but I'll try to get back to this soon.
thanks -john
| |