From: mathieu.desnoyers@polymtl.ca (Mathieu Desnoyers)
Subject: [ltt-dev] lttng development plan
Date: Wed, 11 Feb 2009 02:37:19 -0500 [thread overview]
Message-ID: <20090211073719.GC10376@Krystal> (raw)
In-Reply-To: <49927D46.6010508@cn.fujitsu.com>
* Zhaolei (zhaolei at cn.fujitsu.com) wrote:
> * Mathieu Desnoyers Wrote:
> > * Zhaolei (zhaolei at cn.fujitsu.com) wrote:
> >> * 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.
> >>
> >
> > Not exactly. That would be one filter for all types of markers. And it
> > would iterate on the marker format string to filter by field name. So I
> > don't see where the maintenant burden is ?
> >
> Hello, Mathieu
>
> Thanks for your response.
>
> Do you means we only need one filter callback function in all lttng source,
> and this callback is used for every event in one trace?
>
> And programmer of ltt/probes/* don't need to consider about filter function
> as ext4 and jbd2?
>
Exactly.
Mathieu
> B.R.
> Zhaolei
>
> >> 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.
> >>
> >
> > Yes, filters definitely have to be called only for their own event ID
> > for performance reasons.
> >
> >>> 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?
> >>
> >
> > There is a feature of LTTng which would benefit of 1 : lttng can have
> > multiple trace sessions active at once. Therefore, if one trace session
> > needs a subset of events and another trace session need a different set,
> > then they could each have their own filter structure associated with
> > them. I think having this level of flexibility is more important than
> > the few cycles we could save by doing (2). Also, we already have the
> > tracepoints and markers to deactivate the event source at the kernel
> > level when we need to have nearly-zero overhead.
> >
> > Mathieu
> >
> >> 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
> >>>
> >>
> >> _______________________________________________
> >> 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
next prev parent reply other threads:[~2009-02-11 7:37 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
2009-02-11 6:50 ` Mathieu Desnoyers
2009-02-11 7:24 ` Zhaolei
2009-02-11 7:37 ` Mathieu Desnoyers [this message]
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=20090211073719.GC10376@Krystal \
--to=mathieu.desnoyers@polymtl.ca \
/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