All of lore.kernel.org
 help / color / mirror / Atom feed
From: Frederic Weisbecker <fweisbec@gmail.com>
To: Vaibhav Nagarnaik <vnagarnaik@google.com>
Cc: Paul Menage <menage@google.com>, Li Zefan <lizf@cn.fujitsu.com>,
	Stephane Eranian <eranian@google.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	David Sharp <dhsharp@google.com>,
	Michael Rubin <mrubin@google.com>, Ken Chen <kenchen@google.com>,
	linux-kernel@vger.kernel.org,
	containers@lists.linux-foundation.org
Subject: Re: [RFC] tracing: Adding cgroup aware tracing functionality
Date: Thu, 7 Apr 2011 14:06:11 +0200	[thread overview]
Message-ID: <20110407120608.GB1798@nowhere> (raw)
In-Reply-To: <BANLkTinKsYqkEEUu98t+Gn9ciPn_bmsMFQ@mail.gmail.com>

On Wed, Apr 06, 2011 at 08:17:33PM -0700, Vaibhav Nagarnaik wrote:
> On Wed, Apr 6, 2011 at 6:33 PM, Frederic Weisbecker <fweisbec@gmail.com> wrote:
> > On Wed, Apr 06, 2011 at 11:50:21AM -0700, Vaibhav Nagarnaik wrote:
> >> All
> >> The cgroup functionality is being used widely in different scenarios. It also
> >> is being integrated with other parts of kernel to take advantage of its
> >> features. One of the areas that is not yet aware of cgroup functionality is
> >> the ftrace framework.
> >>
> >> Although ftrace provides a way to filter based on PIDs of tasks to be traced,
> >> it is restricted to specific tracers, like function tracer. Also it becomes
> >> difficult to keep track of all PIDs in a dynamic environment with processes
> >> being created and destroyed in a short amount of time.
> >>
> >> An application that creates many processes/tasks is convenient to track and
> >> control with cgroups, but it is difficult to track these processes for the
> >> purposes of tracing. And if child processes are moved to another cgroup, it
> >> makes sense to trace only the original cgroup.
> >>
> >> This proposal is to create a file in the tracing directory called
> >> set_trace_cgroup to which a user can write the path of an active cgroup, one
> >> at a time. If no cgroups are specified, no filtering is done and all tasks are
> >> traced. When a cgroup path is added in, it sets a boolean tracing_enabled for
> >> the enabled cgroup in all the hierarchies, which enables tracing for all the
> >> assigned tasks under the specified cgroup.
> >>
> >> Though creating a new file in the directory is not desirable, but this
> >> interface seems the most appropriate change required to implement the new
> >> feature.
> >>
> >> This tracing_enabled flag is also exported in the cgroupfs directory structure
> >> which can be turned on/off for a specific hierarchy/cgroup combination. This
> >> gives control to enable/disable tracing over a cgroup in a specific hierarchy
> >> only.
> >>
> >> This gives more fine-grained control over the tasks being traced. I would like
> >> to know your thoughts on this interface and the approach to make tracing
> >> cgroup aware.
> >
> > So I have to ask, why can't you use perf events to do tracing limited on cgroups?
> > It has this cgroup context awareness.
> >
> 
> The perf event cgroup awareness comes from creating a different hierarchy for
> perf events. When the events and the current task's cgroup match, the events
> are logged. So the changes are pretty specific to the perf events.
> 
> Even in the case where changes are made to handle trace events, the interface
> files are still needed. The interface used to specify perf events uses the
> perf_event syscall which isn't available to specify trace events.
> 
> This is based on my limited understanding of the perf_events cgroup awareness
> patch. Please correct me if I am missing anything.


Ah but perf events can do much more than counting and sampling
hardware events. Trace events can be used as perf events too.

List the events:

	perf list -e tracepoints

List of pre-defined events (to be used in -e):

  skb:kfree_skb                              [Tracepoint event]
  skb:consume_skb                            [Tracepoint event]
  skb:skb_copy_datagram_iovec                [Tracepoint event]
  net:net_dev_xmit                           [Tracepoint event]
  net:net_dev_queue                          [Tracepoint event]
  net:netif_receive_skb                      [Tracepoint event]
  net:netif_rx                               [Tracepoint event]
  napi:napi_poll                             [Tracepoint event]
  scsi:scsi_dispatch_cmd_start               [Tracepoint event]
  scsi:scsi_dispatch_cmd_error               [Tracepoint event]
  scsi:scsi_dispatch_cmd_done                [Tracepoint event]
  scsi:scsi_dispatch_cmd_timeout             [Tracepoint event]
  scsi:scsi_eh_wakeup                        [Tracepoint event]
  drm:drm_vblank_event                       [Tracepoint event]
  drm:drm_vblank_event_queued                [Tracepoint event]
  drm:drm_vblank_event_delivered             [Tracepoint event]
  block:block_rq_abort                       [Tracepoint event]
  block:block_rq_requeue                     [Tracepoint event]
  block:block_rq_complete                    [Tracepoint event]
  block:block_rq_insert                      [Tracepoint event]
  etc...


Trace sched switch events:

	perf record -e sched:sched_switch -a
	^C


Print them:

	perf script

         swapper     0 [000]  1132.964598: sched_switch: prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> next_comm
     kworker/0:1  4358 [000]  1132.964641: sched_switch: prev_comm=kworker/0:1 prev_pid=4358 prev_prio=120 prev_state=S ==> ne
         syslogd  2703 [000]  1132.964720: sched_switch: prev_comm=syslogd prev_pid=2703 prev_prio=120 prev_state=D ==> next_c
         swapper     0 [000]  1132.965100: sched_switch: prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> next_comm
            perf  4725 [001]  1132.965178: sched_switch: prev_comm=perf prev_pid=4725 prev_prio=120 prev_state=D ==> next_comm
         swapper     0 [001]  1132.965227: sched_switch: prev_comm=kworker/0:0 prev_pid=0 prev_prio=120 prev_state=R ==> next_
            perf  4725 [001]  1132.965246: sched_switch: prev_comm=perf prev_pid=4725 prev_prio=120 prev_state=D ==> next_comm
	etc...


  reply	other threads:[~2011-04-07 12:06 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-06 18:50 [RFC] tracing: Adding cgroup aware tracing functionality Vaibhav Nagarnaik
2011-04-07  1:33 ` Frederic Weisbecker
2011-04-07  3:17   ` Vaibhav Nagarnaik
2011-04-07  3:17   ` Vaibhav Nagarnaik
2011-04-07 12:06     ` Frederic Weisbecker [this message]
2011-04-07 20:22       ` David Sharp
2011-04-07 21:32         ` Frederic Weisbecker
2011-04-07 22:42           ` David Sharp
2011-04-08  0:28             ` Frederic Weisbecker
2011-04-08  7:37               ` Steven Rostedt
2011-04-08  7:37               ` Steven Rostedt
2011-04-08 13:45                 ` Frederic Weisbecker
2011-04-08 13:45                 ` Frederic Weisbecker
2011-04-08 14:07                   ` Peter Zijlstra
2011-04-08 18:32                     ` Michael Rubin
2011-04-08 20:27                       ` Justin TerAvest
     [not found]                       ` <BANLkTikOi1Y_5RH1juPmchWHjW8f=ynuRA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-04-08 20:27                         ` Justin TerAvest
2011-04-08 18:32                     ` Michael Rubin
2011-04-08 14:07                   ` Peter Zijlstra
2011-04-08 14:07                 ` Peter Zijlstra
2011-04-08 14:07                 ` Peter Zijlstra
2011-04-08 17:02                   ` Steven Rostedt
2011-04-08 17:02                   ` Steven Rostedt
2011-04-09 11:08                     ` Peter Zijlstra
2011-04-09 11:08                     ` Peter Zijlstra
2011-04-08 19:00                 ` Frederic Weisbecker
2011-04-08 20:38                   ` Frederic Weisbecker
2011-04-08 20:38                   ` Frederic Weisbecker
2011-04-08 21:41                     ` David Sharp
2011-04-08 21:41                     ` David Sharp
2011-04-12 21:38                       ` Frederic Weisbecker
     [not found]                       ` <BANLkTikg+RE5YqxmnYY5-L6tZ=aMY+6HSw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-04-12 21:38                         ` Frederic Weisbecker
2011-04-08 19:00                 ` Frederic Weisbecker
     [not found]             ` <BANLkTimOvWYgiRc6cviB6iiUt9MH-Au1qw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-04-08  0:28               ` Frederic Weisbecker
2011-04-07 22:42           ` David Sharp
     [not found]         ` <BANLkTim70Ef0gy+W+4h76PABn32wDRvTtw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-04-07 21:32           ` Frederic Weisbecker
2011-04-07 20:22       ` David Sharp
     [not found]     ` <BANLkTinKsYqkEEUu98t+Gn9ciPn_bmsMFQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-04-07 12:06       ` Frederic Weisbecker
     [not found] ` <BANLkTik_jtjWTsOueUzfdQXRx17OcgyDgA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-04-07  1:33   ` Frederic Weisbecker
  -- strict thread matches above, loose matches on Subject: below --
2011-04-06 18:50 Vaibhav Nagarnaik

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=20110407120608.GB1798@nowhere \
    --to=fweisbec@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=containers@lists.linux-foundation.org \
    --cc=dhsharp@google.com \
    --cc=eranian@google.com \
    --cc=kenchen@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizf@cn.fujitsu.com \
    --cc=menage@google.com \
    --cc=mrubin@google.com \
    --cc=rostedt@goodmis.org \
    --cc=vnagarnaik@google.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 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.