2009-10-19 17:04:56

by Tim Blechmann

[permalink] [raw]
Subject: pref record question

i am trying to do some profiling with perf (2.6.31.4). while
thread-level profiling works fine, i haven't been able to record
profiling data of a whole process (i.e. main thread + child threads).
from my understanding, this should be enabled by running 'perf record
-i' on the main thread. this does only collect the data from the main
thread, though.

is this an issue with perf or with my understanding of perf?

thanks, tim

--
[email protected]
http://tim.klingt.org

art is short - life is long
Jack Kerouac



Attachments:
signature.asc (197.00 B)
OpenPGP digital signature

2009-10-20 04:26:52

by Peter Zijlstra

[permalink] [raw]
Subject: Re: pref record question

On Mon, 2009-10-19 at 19:04 +0200, Tim Blechmann wrote:
> i am trying to do some profiling with perf (2.6.31.4). while
> thread-level profiling works fine, i haven't been able to record
> profiling data of a whole process (i.e. main thread + child threads).
> from my understanding, this should be enabled by running 'perf record
> -i' on the main thread. this does only collect the data from the main
> thread, though.
>
> is this an issue with perf or with my understanding of perf?

-i will only inherit the counters on new fork()/clone() calls, so an
existing process/task tree will not automagically get the counters.

2009-10-20 06:00:51

by Ingo Molnar

[permalink] [raw]
Subject: Re: pref record question


* Peter Zijlstra <[email protected]> wrote:

> On Mon, 2009-10-19 at 19:04 +0200, Tim Blechmann wrote:
>
> > i am trying to do some profiling with perf (2.6.31.4). while
> > thread-level profiling works fine, i haven't been able to record
> > profiling data of a whole process (i.e. main thread + child
> > threads). from my understanding, this should be enabled by running
> > 'perf record -i' on the main thread. this does only collect the data
> > from the main thread, though.
> >
> > is this an issue with perf or with my understanding of perf?
>
> -i will only inherit the counters on new fork()/clone() calls, so an
> existing process/task tree will not automagically get the counters.

Looks like something very much worth fixing.

Ingo

2009-10-20 09:20:08

by Peter Zijlstra

[permalink] [raw]
Subject: Re: pref record question

On Tue, 2009-10-20 at 08:00 +0200, Ingo Molnar wrote:
> * Peter Zijlstra <[email protected]> wrote:
>
> > On Mon, 2009-10-19 at 19:04 +0200, Tim Blechmann wrote:
> >
> > > i am trying to do some profiling with perf (2.6.31.4). while
> > > thread-level profiling works fine, i haven't been able to record
> > > profiling data of a whole process (i.e. main thread + child
> > > threads). from my understanding, this should be enabled by running
> > > 'perf record -i' on the main thread. this does only collect the data
> > > from the main thread, though.
> > >
> > > is this an issue with perf or with my understanding of perf?
> >
> > -i will only inherit the counters on new fork()/clone() calls, so an
> > existing process/task tree will not automagically get the counters.
>
> Looks like something very much worth fixing.

Well, maybe.

There's two ways to go about this, either iterate the tasks in userspace
and attach a counter to each one (repeat until there's no new ones
left).

Or add a new flag in perf_event_attr to iterate the tasks on attach in
an atomic manner.

We cannot simply extend the current attach behaviour as that would make
it impossible to attach to a single thread in a thread group.

Also, if you extend the interface, it would make sense to allow
automatically attaching to a process group, not only a thread group,
etc.


2009-10-20 12:46:18

by Ingo Molnar

[permalink] [raw]
Subject: Re: pref record question


* Peter Zijlstra <[email protected]> wrote:

> On Tue, 2009-10-20 at 08:00 +0200, Ingo Molnar wrote:
> > * Peter Zijlstra <[email protected]> wrote:
> >
> > > On Mon, 2009-10-19 at 19:04 +0200, Tim Blechmann wrote:
> > >
> > > > i am trying to do some profiling with perf (2.6.31.4). while
> > > > thread-level profiling works fine, i haven't been able to record
> > > > profiling data of a whole process (i.e. main thread + child
> > > > threads). from my understanding, this should be enabled by running
> > > > 'perf record -i' on the main thread. this does only collect the data
> > > > from the main thread, though.
> > > >
> > > > is this an issue with perf or with my understanding of perf?
> > >
> > > -i will only inherit the counters on new fork()/clone() calls, so an
> > > existing process/task tree will not automagically get the counters.
> >
> > Looks like something very much worth fixing.
>
> Well, maybe.
>
> There's two ways to go about this, either iterate the tasks in
> userspace and attach a counter to each one (repeat until there's no
> new ones left).
>
> Or add a new flag in perf_event_attr to iterate the tasks on attach in
> an atomic manner.
>
> We cannot simply extend the current attach behaviour as that would
> make it impossible to attach to a single thread in a thread group.

Correct.

> Also, if you extend the interface, it would make sense to allow
> automatically attaching to a process group, not only a thread group,
> etc.

Indeed. This more automated approach sounds like the better solution to
me.

Ingo