Re: perf: rdpmc bug when viewing all procs on remote cpu

From: Vince Weaver
Date: Fri Jan 18 2019 - 09:09:16 EST


On Fri, 18 Jan 2019, Peter Zijlstra wrote:

> On Fri, Jan 11, 2019 at 04:52:22PM -0500, Vince Weaver wrote:
> > On Thu, 10 Jan 2019, Vince Weaver wrote:
> >
> > > On Thu, 10 Jan 2019, Vince Weaver wrote:
> > >
> > > > On Thu, 10 Jan 2019, Vince Weaver wrote:
> > > >
> > > > > However if you create an all-process attached to CPU event:
> > > > > perf_event_open(attr, -1, X, -1, 0);
> > > > > the mmap event index is set as if this were a valid event and so the rdpmc
> > > > > succeeds even though it shouldn't (we're trying to read an event value
> > > > > on a remote cpu with a local rdpmc).
> >
> > so on further looking at the code, it doesn't appear that rdpmc events are
> > explicitly marked as unavailable in the attach-cpu or attach-pid case,
> > it's just by luck the check for PERF_EVENT_STATE_ACTIVE catches most of
> > the cases?
> >
> > should an explicit check be added to zero out userpg->index in cases where
> > the event being measured is running on a different core?
>
> And how would we konw? We don't know what CPU will be observing the
> mmap().
>
> RDPMC fundamentally only makes sense on 'self' (either task or CPU).

so is this a "don't do that then" thing and I should have PAPI
userspace avoid using rdpmc() whenever a proc/cpu was attached to?

Or is there a way to have the kernel indicate this? Does the kernel track
current CPU and original CPU of the mmap and could zero out the index
field in this case? Or would that add too much overhead?

Vince