Messages in this thread | | | Subject | Re: [PATCH v4 3/3] perf: Sample additional clock value | From | Pawel Moll <> | Date | Fri, 23 Jan 2015 17:06:07 +0000 |
| |
On Mon, 2015-01-05 at 13:45 +0000, Peter Zijlstra wrote: > Also, one would expect something like: > > default: { > struct k_clock *kc = clockid_to_kclock(event->attr.clock); > struct timespec ts; > if (kc) { > kc->clock_get(event->attr.clock, &ts); > data->clock = ktime_to_ns(timespec_to_ktime(ts)); > } else { > data->clock = 0; > } > } > > Albeit preferably slightly less horrible -- of course, one would first > need to deal with the NMI issue.
I was thinking about it... Maybe the solution is approaching the problem in a completely different way.
As far as I understand (John?) POSIX timers can be used on any clockid? So it would be possible to obtain a dynamic clock id, for example for my exotic trace hardware (by any means necessary, like opening a char device) and create a timer firing every 1 ms (in the trace time domain). Than this event would be somehow associated with a perf session (for example, by passing the timerid via perf's ioctl) and then, every when timer fires, a perf record (something like PERF_RECORD_TIMER?) containing the timer/clock's value *and* the normal perf timestamp, would be injected into the circular buffer.
No issue with NMI, no issue with passing clockid through perf_event_attr...
Does it make any sense to anyone else but me? ;-)
Pawel
| |