Re: [PATCH v2 3/3] X86: Add a thread cpu time implementation to vDSO

From: David Ahern
Date: Fri Jan 02 2015 - 12:09:18 EST


On 1/2/15 10:02 AM, Shaohua Li wrote:
On Fri, Jan 02, 2015 at 08:31:33AM -0700, David Ahern wrote:
On 1/1/15 7:59 PM, Shaohua Li wrote:
I'm wondering how we could use the perf to implament a clock_gettime.
reading the perf fd or using ioctl is slow so reading the mmap
ringbuffer is the only option. But as far as I know the ringbuffer has
data only when an event is generated. Between two events, there is
nothing we can read from the ringbuffer. Then how can application get
time info in the interval?

Are you wanting to read perf_clock from userspace?

Yep, in some sort of form. Basically I want to read the time a task
runs. Peter suggests we can read the activation time of a perf event.
But I don't want to use any system call, as it's slow and likes
clock_gettime.

Since we cannot get the capability committed upstream a number of folks are using this method:

https://github.com/dsahern/linux/blob/perf-full-monty/README.ahern

ie., a KLM exports perf_clock and apps can use:

#define CLOCK_PERF 14
if (clock_gettime(CLOCK_PERF, &ts) != 0) {
}

No vdso acceleration, but works with an unmodified kernel.

David
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/