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...
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
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
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/158https://lkml.org/lkml/2011/2/27/159
David
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