2011-06-24 21:03:50

by Vince Weaver

[permalink] [raw]
Subject: perf: is PERF_COUNT_SW_CONTEXT_SWITCHES a kernel or user event?

Hello

the commit included in 2.6.34:
perf: Use hot regs with software sched switch/migrate events
e49a5bd38159dfb1928fd25b173bc9de4bbadb21

Changes the behavior of the PERF_COUNT_SW_CONTEXT_SWITCHES
counter.

Before 2.6.34 all of the PERF_COUNT_SW_CONTEXT_SWITCHES events were
counted as happening in userspace (they show up in "perf stat -e cs:u")
but after the commit they always happen in kernelspace ("perf stat -e
cs:k").

Was this intended behavior?
I'm writing a validation test for this and want to make sure I get it
right.

This can be confusing if your tool defaults to userspace only counts (PAPI
does this).

Thanks,

Vince


2011-06-27 10:45:41

by Peter Zijlstra

[permalink] [raw]
Subject: Re: perf: is PERF_COUNT_SW_CONTEXT_SWITCHES a kernel or user event?

On Fri, 2011-06-24 at 17:03 -0400, Vince Weaver wrote:
> Hello
>
> the commit included in 2.6.34:
> perf: Use hot regs with software sched switch/migrate events
> e49a5bd38159dfb1928fd25b173bc9de4bbadb21
>
> Changes the behavior of the PERF_COUNT_SW_CONTEXT_SWITCHES
> counter.
>
> Before 2.6.34 all of the PERF_COUNT_SW_CONTEXT_SWITCHES events were
> counted as happening in userspace (they show up in "perf stat -e cs:u")
> but after the commit they always happen in kernelspace ("perf stat -e
> cs:k").
>
> Was this intended behavior?
> I'm writing a validation test for this and want to make sure I get it
> right.
>
> This can be confusing if your tool defaults to userspace only counts (PAPI
> does this).

hurm, difficult case, like the changelog explains the previous behaviour
wasn't ideal either. Seems like we want somewhat of a middle ground
there, but I'm not quite sure how to make that happen.

Let me ponder things for a bit.

2011-06-27 19:01:02

by Frederic Weisbecker

[permalink] [raw]
Subject: Re: perf: is PERF_COUNT_SW_CONTEXT_SWITCHES a kernel or user event?

On Mon, Jun 27, 2011 at 12:43:23PM +0200, Peter Zijlstra wrote:
> On Fri, 2011-06-24 at 17:03 -0400, Vince Weaver wrote:
> > Hello
> >
> > the commit included in 2.6.34:
> > perf: Use hot regs with software sched switch/migrate events
> > e49a5bd38159dfb1928fd25b173bc9de4bbadb21
> >
> > Changes the behavior of the PERF_COUNT_SW_CONTEXT_SWITCHES
> > counter.
> >
> > Before 2.6.34 all of the PERF_COUNT_SW_CONTEXT_SWITCHES events were
> > counted as happening in userspace (they show up in "perf stat -e cs:u")
> > but after the commit they always happen in kernelspace ("perf stat -e
> > cs:k").
> >
> > Was this intended behavior?
> > I'm writing a validation test for this and want to make sure I get it
> > right.
> >
> > This can be confusing if your tool defaults to userspace only counts (PAPI
> > does this).
>
> hurm, difficult case, like the changelog explains the previous behaviour
> wasn't ideal either. Seems like we want somewhat of a middle ground
> there, but I'm not quite sure how to make that happen.
>
> Let me ponder things for a bit.

If you consider the strict meaning of exclude_user/exclude_kernel, they exclude
events that _happen_ in user/kernel space. And context switches happen in kernel
space.

Using the resuming ip in userspace if exclude_kernel and the current kernel
ip if exclude_user or default no exclude is a pure arbitrary interpretation of the
exclude things. We could, but I believe it only makes the things confusing for people.

If some users want an option where the event can trigger everywhere but hists are
sorted by the resuming userspace ip, let's tweak the "perf report -s parent" thing
to take the resuming userspace ip from the callchain as the parent and you get
the desired result.

This will have the advantage to keep exclude_* behaviour consistent everywhere and
if we want to have that user resuming ip feature, it will be available for any kind of
events.

2011-06-28 17:31:46

by Vince Weaver

[permalink] [raw]
Subject: Re: perf: is PERF_COUNT_SW_CONTEXT_SWITCHES a kernel or user event?

On Mon, 27 Jun 2011, Frederic Weisbecker wrote:
>
> If you consider the strict meaning of exclude_user/exclude_kernel, they exclude
> events that _happen_ in user/kernel space. And context switches happen in kernel
> space.

I can see that it's somewhat arbitrary how context switches are
classified.

I just want some assurances that now that it's moved to being
a kernel event it stays that way.

As it is, people upgrading from 2.6.32 to 2.6.34 and using the "cs:u"
event will suddently start getting "0" results.

Possibly perf_events should just ignore exclude_kernel/exclude_user on an
event like this where there is no real distinction.

Vince
[email protected]