Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
From: zhaolei@cn.fujitsu.com (Zhaolei)
Subject: [ltt-dev] lttng development plan
Date: Wed, 11 Feb 2009 14:33:43 +0800	[thread overview]
Message-ID: <49927147.9010909@cn.fujitsu.com> (raw)
In-Reply-To: <20090203051144.GA23739@Krystal>

* Mathieu Desnoyers Wrote:
> 
>   - Create an in-kernel event filtering module which connects on
>     LTTng.
> 
> Well, I think this last item would be a generalization of the filtering
> module I created for ext4 and jbd2 recently. The one I did provided
> basic filtering for inode and device number.
Hello, Matuieu

I readed filter code of ext4 and jbd2 module,
and I have some questions of generalization filter implementation.

> 
> The idea would be to extend this and to connect it as a filter callback
> with 
> ltt_module_register(LTT_FUNCTION_RUN_FILTER, filter_callback,
>                     THIS_MODULE);
Now ltt_module_register can only register one filter_callback.
But I think when we make one filter for all types of tracepoint, it is hard to
maintenance.

Maybe it is better to make each filter for each type of event, for ex:
ltt-ext4-filter for ext4, ltt-jbd2-filter for jbd2, ...

We can select to add filter code into ltt/probes/XXX_trace.c, and call
ltt_module_register on modile_init, or write filter code in a module alone.
Each way is ok, but integrate filter code into ltt/probes/XXX_trace.c seems
more readable.

Another thing needs consider is call which filter on a event.
1: Call every filter for one event.
   If one filter say "no", this event is ignore.
   It is simple to write, and each filter can do every thing(flexible).
   But this way is inefficient because it needs more cpu cycles.
2: Call only filter for current event type.
   Filter register a event type on ltt_module_register, and only used to
   process that type.
I think 2 is better because it uses less CPU.

> 
> This module would be called by ltt_vtrace and _ltt_specialized_trace
> with this test :
> 
>                 if (unlikely(!ltt_run_filter(trace, eID)))
>                         continue;
> 
> for each active trace.
I think call filter in tracepoint's callback as probe_jbd2_checkpoint is
more efficient than this way.
Consider that a event which is filtered(don't send to relay), more
unnecessary process is done before ltt_vtrace if we call filter in ltt_vtrace.

So, in generalization filter:
1: call filter in ltt_vtrace(_ltt_specialized_trace)
2: call filter in probe_XXX_checkpoint()
I think 2 is better.

Which is your opinion about this?

B.R.
Zhaolei

> 
> This filter would receive the trace information and the event ID.
> We may have to add or change some parameters to this to support
> filtering by fields. For the filter called from ltt_vtrace, passing :
> 
> const struct marker *mdata
> and
> const char *fmt, va_list *args
> 
> Should be more than enough to filter generically by
> - channel name
> - event name
> - field name -> typed field data.
> 
> Filtering should be pre-computed as much as possible and be O(1) when
> executed. Creating callbacks for each expected data type to filter will
> probably be requried. A technique similar to what we have done in lttv
> filter.c should be considered.
> 
> For specialized probes, it might be more difficult to do this
> generically, because _ltt_specialized_trace has no knowledge of the
> event fields. I guess we would have to create "specialized" filtering
> callbacks for those custom trace points. It's their nature anyway.
> 
> Please ask if anything is unclear. Comments/ideas are welcome.
> 
> Mathieu
> 





  reply	other threads:[~2009-02-11  6:33 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <49646F42.5040003@cn.fujitsu.com>
2009-01-07 17:05 ` Mathieu Desnoyers
2009-01-19  3:43   ` Lai Jiangshan
2009-01-20  1:55     ` Mathieu Desnoyers
2009-01-20  6:58       ` Lai Jiangshan
2009-01-23  3:21         ` KOSAKI Motohiro
2009-01-23  3:21       ` KOSAKI Motohiro
2009-01-23  4:49         ` Mathieu Desnoyers
2009-02-02  4:59   ` Gui Jianfeng
2009-02-03  5:11     ` Mathieu Desnoyers
2009-02-11  6:33       ` Zhaolei [this message]
2009-02-11  6:50         ` Mathieu Desnoyers
2009-02-11  7:24           ` Zhaolei
2009-02-11  7:37             ` Mathieu Desnoyers
2009-02-19  8:17               ` Zhaolei
2009-03-02  7:01                 ` Zhaolei
2009-03-03 19:25                   ` Mathieu Desnoyers
2009-03-29  8:41                     ` [ltt-dev] [PATCH 0/3] In-kernel filter module Zhaolei
2009-03-29  8:42                       ` [ltt-dev] [PATCH 1/3] Remove old per-type filter Zhaolei
2009-03-29  8:43                       ` [ltt-dev] [PATCH 2/3] Change ltt_run_filter_functor arguments to support in-kernel filter Zhaolei
2009-03-29  8:44                       ` [ltt-dev] [PATCH 3/3] In-kernel filter module Zhaolei
2009-04-06 17:52                         ` Mathieu Desnoyers
2009-04-07  5:45                           ` Zhaolei
2009-04-07 16:48                             ` Mathieu Desnoyers
2009-04-08  3:19                               ` Zhaolei

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=49927147.9010909@cn.fujitsu.com \
    --to=zhaolei@cn.fujitsu.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox