All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josh Stone <jistone@redhat.com>
To: "Frank Ch. Eigler" <fche@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>,
	Mel Gorman <mgorman@suse.de>, Ingo Molnar <mingo@kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	SystemTap <systemtap@sourceware.org>
Subject: Re: systemtap broken by removal of register_timer_hook
Date: Wed, 03 Apr 2013 11:38:24 -0700	[thread overview]
Message-ID: <515C7720.2020503@redhat.com> (raw)
In-Reply-To: <20130403144428.GA15432@redhat.com>

On 04/03/2013 07:44 AM, Frank Ch. Eigler wrote:
> Hi -
> 
> On Wed, Apr 03, 2013 at 02:49:53PM +0200, Frederic Weisbecker wrote:
> 
>> Sounds good, would you like to propose a version? We are also
>> interested in a timer tick event tracepoint for dynticks debugging.
> 
> How about this?
> 
> Author: Frank Ch. Eigler <fche@redhat.com>
> Date:   Wed Apr 3 10:35:21 2013 -0400
> 
>     profiling: add profile_tick tracepoint
>     
>     Commit ba6fdda4 removed the timer_hook mechanism for modules to listen
>     to profiling timer ticks (without having to set up more complicated
>     perf mechanisms).  To reduce the impact on out-of-tree users, a
>     TRACE_EVENT-flavoured tracepoint is added in its place.  Tested with
>     perf and systemtap.

One nice benefit over register_timer_hook() is that a tracepoint allows
multiple consumers, like the old register_profile_notifier() did.

>     
>     Cc: Frederic Weisbecker <fweisbec@gmail.com>
>     Cc: Ingo Molnar <mingo@kernel.org>
>     Cc: Mel Gorman <mgorman@suse.de>
>     Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
> 
> diff --git a/include/trace/events/profile.h b/include/trace/events/profile.h
> new file mode 100644
> index 0000000..b48b6fe
> --- /dev/null
> +++ b/include/trace/events/profile.h
> @@ -0,0 +1,35 @@
> +#undef TRACE_SYSTEM
> +#define TRACE_SYSTEM profile
> +
> +#if !defined(_TRACE_PROFILE_H) || defined(TRACE_HEADER_MULTI_READ)
> +#define _TRACE_PROFILE_H
> +
> +#include <linux/tracepoint.h>
> +
> +
> +struct pt_regs;
> +
> +/**
> + * profile_tick - called when the profiling timer ticks
> + * @regs:	pointer to struct pt_regs*
> + */
> +
> +TRACE_EVENT(profile_tick,
> +	TP_PROTO(int type, struct pt_regs *regs),
> +	TP_ARGS(type, regs),
> +	TP_STRUCT__entry(
> +		__field( int,			type	)
> +		__field( struct pt_regs*,	regs	)
> +	),
> +	TP_fast_assign(
> +		__entry->type	= type;
> +		__entry->regs	= regs;
> +	),
> +	TP_printk("type=%d regs=%p", __entry->type, __entry->regs)
> +);

I agree that full regs are good for the tracepoint in general, but I
doubt that this pointer is useful for the printk.  Maybe instead print
instruction_pointer(__entry->regs)?

> +
> +
> +#endif /*  _TRACE_PROFILE_H */
> +
> +/* This part must be outside protection */
> +#include <trace/define_trace.h>
> diff --git a/kernel/profile.c b/kernel/profile.c
> index dc3384e..d61f921 100644
> --- a/kernel/profile.c
> +++ b/kernel/profile.c
> @@ -29,6 +29,9 @@
>  #include <asm/irq_regs.h>
>  #include <asm/ptrace.h>
>  
> +#define CREATE_TRACE_POINTS
> +#include <trace/events/profile.h>
> +
>  struct profile_hit {
>  	u32 pc, hits;
>  };
> @@ -414,6 +417,8 @@ void profile_tick(int type)
>  {
>  	struct pt_regs *regs = get_irq_regs();
>  
> +	trace_profile_tick(type, regs);
> +
>  	if (!user_mode(regs) && prof_cpu_mask != NULL &&
>  	    cpumask_test_cpu(smp_processor_id(), prof_cpu_mask))
>  		profile_hit(type, (void *)profile_pc(regs));
> 


  reply	other threads:[~2013-04-03 18:39 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-03  7:50 systemtap broken by removal of register_timer_hook Mel Gorman
2013-04-03 11:01 ` Frederic Weisbecker
     [not found] ` <CAFTL4hyYezB2ZxM-GJ70VoxOeRSG64V6u+nX2hTuhF30R-GdPg__32168.962484184$1364986928$gmane$org@mail.gmail.com>
2013-04-03 12:29   ` Frank Ch. Eigler
2013-04-03 12:49     ` Frederic Weisbecker
2013-04-03 14:44       ` Frank Ch. Eigler
2013-04-03 18:38         ` Josh Stone [this message]
2013-04-04 12:46         ` Frederic Weisbecker
2013-04-19 14:46           ` Frank Ch. Eigler
2013-04-30  0:19             ` Frederic Weisbecker
2013-04-30 17:27               ` Frank Ch. Eigler
2013-05-06 23:12                 ` Frederic Weisbecker
2013-04-10 11:24         ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=515C7720.2020503@redhat.com \
    --to=jistone@redhat.com \
    --cc=fche@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@kernel.org \
    --cc=systemtap@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.