Re: [PATCH v2 1/2] perf: Add sampling of the raw monotonic clock

5 messages, 3 authors, 2014-09-29 · open the first message on its own page

Re: [PATCH v2 1/2] perf: Add sampling of the raw monotonic clock

From: Pawel Moll <hidden>
Date: 2014-09-26 10:58:34

On Fri, 2014-09-26 at 07:16 +0100, Namhyung Kim wrote:
quoted
It would be doable, I guess, but what
if someone *wants* to have sched clock as the timestamps source (because
it's cheap) but still be able to correlate them with userspace? In this
case two separate timestamps are required to do the approximation.
But by collecting two timestamps, you'll loose the win of the first
timestamp, no?
But I can ask for both timestamps only being collected on "low
bandwidth" events, in particular context switches and/or periodic (eg.
10ms hrtimer) software events.

Then I have loads of normal normal samples, timestamped with sched clock
only, and every now and then one with both timestamps which then I can
use for time correlation. The whole point is that the frequency of such
"synchronisation" event can be much (much!) lower than of the normal
samples, but it still allows pretty good approximation (I was getting
accuracy of ~1 microsecond and better with sched_switch trace event
marked with additional raw monotonic timestamp).

Pawel

PS. Have you sent a couple of the messages via some kind of gmane's
proxy? All the mail addresses got rather messed up...

Re: [PATCH v2 1/2] perf: Add sampling of the raw monotonic clock

From: Namhyung Kim <namhyung@kernel.org>
Date: 2014-09-26 14:38:37

2014-09-26 (금), 11:58 +0100, Pawel Moll:
On Fri, 2014-09-26 at 07:16 +0100, Namhyung Kim wrote:
quoted
quoted
It would be doable, I guess, but what
if someone *wants* to have sched clock as the timestamps source (because
it's cheap) but still be able to correlate them with userspace? In this
case two separate timestamps are required to do the approximation.
But by collecting two timestamps, you'll loose the win of the first
timestamp, no?
But I can ask for both timestamps only being collected on "low
bandwidth" events, in particular context switches and/or periodic (eg.
10ms hrtimer) software events.

Then I have loads of normal normal samples, timestamped with sched clock
only, and every now and then one with both timestamps which then I can
use for time correlation. The whole point is that the frequency of such
"synchronisation" event can be much (much!) lower than of the normal
samples, but it still allows pretty good approximation (I was getting
accuracy of ~1 microsecond and better with sched_switch trace event
marked with additional raw monotonic timestamp).
Okay.  But in that case wouldn't it be enough to use just a single
timestamp for each event - sched_clock for cpu-cycles and monotonic raw
for sched_switch?

Pawel

PS. Have you sent a couple of the messages via some kind of gmane's
proxy? All the mail addresses got rather messed up...
Yes, I use gnus to communicate with lkml, but it seems it messed up mail
addresses if it contains some list (like linux-api ?).  Sorry about
that.

Thanks,
Namhyung

Re: [PATCH v2 1/2] perf: Add sampling of the raw monotonic clock

From: Pawel Moll <hidden>
Date: 2014-09-26 15:06:12

On Fri, 2014-09-26 at 15:38 +0100, Namhyung Kim wrote:
quoted
Then I have loads of normal normal samples, timestamped with sched clock
only, and every now and then one with both timestamps which then I can
use for time correlation. The whole point is that the frequency of such
"synchronisation" event can be much (much!) lower than of the normal
samples, but it still allows pretty good approximation (I was getting
accuracy of ~1 microsecond and better with sched_switch trace event
marked with additional raw monotonic timestamp).
Okay.  But in that case wouldn't it be enough to use just a single
timestamp for each event - sched_clock for cpu-cycles and monotonic raw
for sched_switch?
To do the correlation you need both timestamps to be "taken"
simultaneously:

        perf event     user event
       -----O--------------+-------------O------> t_mono
            :              |             :
            :              V             :
       -----O----------------------------O------> t_perf

Of course it's not possible get both values literally at the same time,
but placing them in a atomic context a couple of instructions from each
other still gives pretty good results. The larger this distance is, the
lower the accuracy will be. I must admit I haven't done such
experiments, but let me remind that I in my test I was getting results
in the range of 1000ns, with a single cycle of a 2GHz taking 0.5ns, so
moving the t_mono/t_perf value sampling further aside will reduce it
significantly...

Pawel

Pawel

Re: [PATCH v2 1/2] perf: Add sampling of the raw monotonic clock

From: David Ahern <hidden>
Date: 2014-09-26 19:25:20

On 9/26/14, 9:05 AM, Pawel Moll wrote:
To do the correlation you need both timestamps to be "taken"
simultaneously:

         perf event     user event
        -----O--------------+-------------O------> t_mono
             :              |             :
             :              V             :
        -----O----------------------------O------> t_perf

Of course it's not possible get both values literally at the same time,
but placing them in a atomic context a couple of instructions from each
other still gives pretty good results. The larger this distance is, the
An early patchset on this topic added the realtime clock as an event and 
an ioctl was used to push a sample into the event stream. In that case 
you have wall clock and perf-clock samples taken in the same kernel 
context and about as close together as you can get.

https://lkml.org/lkml/2011/2/27/158
https://lkml.org/lkml/2011/2/27/159

David

Re: [PATCH v2 1/2] perf: Add sampling of the raw monotonic clock

From: Pawel Moll <hidden>
Date: 2014-09-29 14:47:46

On Fri, 2014-09-26 at 20:25 +0100, David Ahern wrote:
On 9/26/14, 9:05 AM, Pawel Moll wrote:
quoted
To do the correlation you need both timestamps to be "taken"
simultaneously:

         perf event     user event
        -----O--------------+-------------O------> t_mono
             :              |             :
             :              V             :
        -----O----------------------------O------> t_perf

Of course it's not possible get both values literally at the same time,
but placing them in a atomic context a couple of instructions from each
other still gives pretty good results. The larger this distance is, the
An early patchset on this topic added the realtime clock as an event and 
an ioctl was used to push a sample into the event stream. 
Yeah, I remember. If I remember correctly correctly the pushback was on
a custom event type, right?

Generally speaking I don't mind any solution that we'll get us to the
place both you and I want to be (just being able to time stamp some
performance data in userspace, how difficult can this be! ;-) but I like
the flexibility of an extra sample - one can pick and mix events and
samples at one's leisure.
In that case 
you have wall clock and perf-clock samples taken in the same kernel 
context and about as close together as you can get.
Yep, that's what I was saying - we can't quite get two timestamps at the
*same*, but getting them within a single atomic block of instructions
gives reasonable accuracy.

Thanks!

Pawel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help