From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S967109AbbDXVjL (ORCPT ); Fri, 24 Apr 2015 17:39:11 -0400 Received: from mail.efficios.com ([78.47.125.74]:54288 "EHLO mail.efficios.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965514AbbDXVjG (ORCPT ); Fri, 24 Apr 2015 17:39:06 -0400 Date: Fri, 24 Apr 2015 21:39:07 +0000 (UTC) From: Mathieu Desnoyers To: Ron Rechenmacher Cc: linux-kernel@vger.kernel.org, Thomas Gleixner , Steven Rostedt Message-ID: <1990679701.35944.1429911547225.JavaMail.zimbra@efficios.com> In-Reply-To: <20150424172426.016da583@gandalf.local.home> References: <553571C3.1060505@fnal.gov> <20150424172426.016da583@gandalf.local.home> Subject: Re: [PATCH] tracing: Export key trace event symbols MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [192.222.194.238] X-Mailer: Zimbra 8.0.7_GA_6021 (ZimbraWebClient - FF37 (Linux)/8.0.7_GA_6021) Thread-Topic: tracing: Export key trace event symbols Thread-Index: 1Y4Y2PCw/Vdp+rM9H6IRFR4hK4n5ug== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ----- Original Message ----- > On Mon, 20 Apr 2015 16:38:11 -0500 > Ron Rechenmacher wrote: > > > If symbols are not exported, modules can no longer register additional > > (module specified) tracepoints like they use to be able to (i.e > > linux-3.15.x). > > Somewhere on or about commit de7b2973903c6cc50b31ee5682a69b2219b9919d > > (Author: Mathieu Desnoyers > > Date: Tue Apr 8 17:26:21 2014 -0400 > > tracepoint: Use struct pointer instead of name hash for reg/unreg > > tracepoints) > > modules which attempted to register additional tracing functions would > > get "Unknown symbol" errors. For example: "... Unknown symbol > > __tracepoint_sched_switch (err 0)" > > Symbols can be exported using the kernel's EXPORT_TRACEPOINT_SYMBOL_GPL > > macro > > to allow modules to once again register their own tracing functions (for at > > least some key points in the kernel as provided by this patch). > > > > Signed-off-by: Ron Rechenmacher > > Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=96051 > > Hi Ron, > > I was talking with Mathieu on IRC and asked him how LTTng gets its > kernel tracepoints, and he told me he uses > for_each_kernel_tracepoint(). That will iterate over all tracepoints > that have been added in the kernel (and is exported GPL). > > You can still use that to get the handle onto any tracepoint you need. > It's pretty straight forward (I just wrote a simple module to test it > out), and just compare against the tp->name, to find what you want. > > I still would like to get more usage out of the internal code, but this > is your work around you wanted. No need to export new symbols. Just a > little more setup time on module load. Hi Ron, Quoting a snippet of your earlier emails: "ftrace (if one considers ltt-ng) is probably capable of doing what my trace does except that the timestamp is not TOD (Time Of Day) -- but probably/maybe could be made to do so???" FYI, LTTng and Ftrace are two different projects. LTTng features am out-of-tree kernel and a user-space tracer, whereas Ftrace features a kernel tracer, readily available from the Linux kernel sources. The timestamps can now be the monotonic clock for each of perf, ftrace, and lttng, thanks to the work on nmi-safe clock source done by Thomas Gleixner (merged in 3.17). With the nmi-safe clocks, you'll be able to correlate samples and traces taken by perf, ftrace, and lttng-modules with LTTng userspace traces (LTTng-UST). This has been one of the goals of the Common Trace Format (CTF) since its creation. You might want to look at the perf-to-ctf conversion feature merged in Linux 4.0. Best regards, Mathieu > > -- Steve > > Here's my mod.... > > > #include > #include > #include > > static func(struct tracepoint *tp, void *ignore) > { > printk("tracepoint: %s\n", tp->name); > } > > static int __init my_tp_init(void) > { > for_each_kernel_tracepoint(func, NULL); > return 0; > } > > static void __exit my_tp_exit(void) > { > } > > module_init(my_tp_init); > module_exit(my_tp_exit); > > MODULE_AUTHOR("My name here"); > MODULE_DESCRIPTION("Me!"); > MODULE_LICENSE("GPL"); > -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com