From mboxrd@z Thu Jan 1 00:00:00 1970 From: compudj@krystal.dyndns.org (Mathieu Desnoyers) Date: Mon, 20 Oct 2008 11:49:11 -0400 Subject: [ltt-dev] (forw) [RFC patch 08/15] LTTng - Timestamping In-Reply-To: <48FA5F56.9050100@redhat.com> References: <20081017165731.GI5696@Krystal> <48FA5F56.9050100@redhat.com> Message-ID: <20081020154911.GA28562@Krystal> Yeah, well I had this stuff in the LTTng tree for about 3 years, so I kept everything under my own namespace. I like Ingo's idea of "trace_clock()". I'll probably change the namespace to this, and move the files from /ltt/* to /kernel/trace/*. Mathieu * Masami Hiramatsu (mhiramat at redhat.com) wrote: > Hi Mathieu, > > These patches seems generally good. However, I wonder why you added > "ltt_" prefix. if it was useful for other parts of the kernel > (I think so), more general name(generic_timestamp?) would be preferable :) > > Thank you, > > Mathieu Desnoyers wrote: >> Hello, >> Too many CCs on this last post. I should probably have added some, but >> here is a link to the thread : >> http://lkml.org/lkml/2008/10/16/511 >> Comments are welcome. >> Mathieu >> ----- Forwarded message from Mathieu Desnoyers >> ----- >> Date: Thu, 16 Oct 2008 19:27:37 -0400 >> To: Linus Torvalds , >> Andrew Morton , >> Ingo Molnar , linux-kernel at vger.kernel.org, >> linux-arch at vger.kernel.org, Steven Rostedt , >> Peter Zijlstra , >> Thomas Gleixner >> Cc: David Miller , >> Mathieu Desnoyers , >> Ralf Baechle , benh at kernel.crashing.org, >> paulus at samba.org, Ingo Molnar >> User-Agent: quilt/0.46-1 >> From: Mathieu Desnoyers >> Subject: [RFC patch 08/15] LTTng - Timestamping >> Wrapper to use the lower level clock sources available on the systems. >> Fall-back >> on jiffies or'd with a logical clock for architectures lacking CPU >> timestamp >> counters. Fall-back on a mixed TSC-logical clock on architectures lacking >> synchronized TSC on SMP. >> A generic fallback based on a logical clock and the timer interrupt is >> available. >> generic - Uses jiffies or'd with a logical clock extended to 64 bits by >> ltt-timestamp.c. >> i386 - Uses TSC. If detects non synchronized TSC, uses mixed TSC-logical >> clock. >> mips - Uses TSC extended atomically from 32 to 64 bits by ltt-heartbeat.c. >> powerpc - Uses TSC or generic ltt clock. >> x86_64 - Uses TSC. If detects non synchronized TSC, uses mixed TSC-logical >> clock >> Signed-off-by: Mathieu Desnoyers >> CC: Ralf Baechle >> CC: benh at kernel.crashing.org >> CC: paulus at samba.org >> CC: David Miller >> CC: Linus Torvalds >> CC: Andrew Morton >> CC: Ingo Molnar >> CC: Peter Zijlstra >> CC: Thomas Gleixner >> CC: Steven Rostedt >> CC: linux-arch at vger.kernel.org >> --- >> include/asm-generic/ltt.h | 53 >> ++++++++++++++++++++++++++++++++++++++++++++++ >> include/linux/ltt.h | 27 +++++++++++++++++++++++ >> kernel/timer.c | 2 + >> 3 files changed, 82 insertions(+) >> Index: linux-2.6-lttng/kernel/timer.c >> =================================================================== >> --- linux-2.6-lttng.orig/kernel/timer.c 2008-09-16 14:50:15.000000000 >> -0400 >> +++ linux-2.6-lttng/kernel/timer.c 2008-09-16 14:59:17.000000000 -0400 >> @@ -37,6 +37,7 @@ >> #include >> #include >> #include >> +#include >> #include >> #include >> @@ -1066,6 +1067,7 @@ void do_timer(unsigned long ticks) >> { >> jiffies_64 += ticks; >> update_times(ticks); >> + ltt_add_timestamp(ticks); >> } >> #ifdef __ARCH_WANT_SYS_ALARM >> Index: linux-2.6-lttng/include/linux/ltt.h >> =================================================================== >> --- /dev/null 1970-01-01 00:00:00.000000000 +0000 >> +++ linux-2.6-lttng/include/linux/ltt.h 2008-09-16 14:58:47.000000000 >> -0400 >> @@ -0,0 +1,27 @@ >> +#ifndef _LINUX_LTT_H >> +#define _LINUX_LTT_H >> + >> +/* >> + * Generic LTT clock. >> + * >> + * Chooses between an architecture specific clock or an atomic logical >> clock. >> + * >> + * Copyright (C) 2007 Mathieu Desnoyers (mathieu.desnoyers at polymtl.ca) >> + */ >> + >> +#ifdef CONFIG_LTT_TIMESTAMP >> +#ifdef CONFIG_HAVE_LTT_CLOCK >> +#include >> +#else >> +#include >> + >> +#define ltt_get_timestamp32 ltt_get_timestamp32_generic >> +#define ltt_get_timestamp64 ltt_get_timestamp64_generic >> +#define ltt_add_timestamp ltt_add_timestamp_generic >> +#define ltt_frequency ltt_frequency_generic >> +#define ltt_freq_scale ltt_freq_scale_generic >> +#endif /* CONFIG_HAVE_LTT_CLOCK */ >> +#else >> +#define ltt_add_timestamp(ticks) >> +#endif /* CONFIG_LTT_TIMESTAMP */ >> +#endif /* _LINUX_LTT_H */ >> Index: linux-2.6-lttng/include/asm-generic/ltt.h >> =================================================================== >> --- /dev/null 1970-01-01 00:00:00.000000000 +0000 >> +++ linux-2.6-lttng/include/asm-generic/ltt.h 2008-09-16 >> 14:58:47.000000000 -0400 >> @@ -0,0 +1,53 @@ >> +#ifndef _ASM_GENERIC_LTT_H >> +#define _ASM_GENERIC_LTT_H >> + >> +/* >> + * linux/include/asm-generic/ltt.h >> + * >> + * Copyright (C) 2007 - Mathieu Desnoyers (mathieu.desnoyers at polymtl.ca) >> + * >> + * Generic definitions for LTT >> + * Architectures without TSC >> + */ >> + >> +#include /* For HZ */ >> +#include >> + >> +#define LTT_GENERIC_CLOCK_SHIFT 13 >> + >> +u64 ltt_read_synthetic_tsc(void); >> + >> +extern atomic_t lttng_generic_clock; >> + >> +static inline u32 ltt_get_timestamp32_generic(void) >> +{ >> + return atomic_add_return(1, <tng_generic_clock); >> +} >> + >> +static inline u64 ltt_get_timestamp64_generic(void) >> +{ >> + return ltt_read_synthetic_tsc(); >> +} >> + >> +static inline void ltt_add_timestamp_generic(unsigned long ticks) >> +{ >> + int old_clock, new_clock; >> + >> + do { >> + old_clock = atomic_read(<tng_generic_clock); >> + new_clock = (old_clock + (ticks << LTT_GENERIC_CLOCK_SHIFT)) >> + & (~((1 << LTT_GENERIC_CLOCK_SHIFT) - 1)); >> + } while (atomic_cmpxchg(<tng_generic_clock, old_clock, new_clock) >> + != old_clock); >> +} >> + >> +static inline unsigned int ltt_frequency_generic(void) >> +{ >> + return HZ << LTT_GENERIC_CLOCK_SHIFT; >> +} >> + >> +static inline u32 ltt_freq_scale_generic(void) >> +{ >> + return 1; >> +} >> +#endif /* _ASM_GENERIC_LTT_H */ > > -- > Masami Hiramatsu > > Software Engineer > Hitachi Computer Products (America) Inc. > Software Solutions Division > > e-mail: mhiramat at redhat.com > > > _______________________________________________ > ltt-dev mailing list > ltt-dev at lists.casi.polymtl.ca > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev > -- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68