2017-03-15 03:41:16

by Vince Weaver

[permalink] [raw]
Subject: perf: rdpmc mmap page time_enabled issue


So another obscure rdpmc problem, turned up by the PAPI regression tests.

If you use rdpmc, and your event is attached measuring another process,
and then you ENABLE/DISABLE/ENABLE/rdpmc the event

somehow the userpg->time_enabled field gets a weird value and that
completely confuses code expecting enabled!=running to mean multiplexing
is happening.

Example:

Trying attach:
* RDPMC 1 Event 0 -- count: 1058381 enabled ffe6935332c70240 running: 9d14f
* RDPMC 1 Event 1 -- count: 623980 enabled ffe6935332c829b3 running: 9d350

the rdpmc count and running values are expected, but the enabled value is way
off, it should match the running value.

If you want to test this out, I have a test case in perf_event_tests,
(github.com/deater/perf_event_tests.git)
tests/rdpmc/rdpmc_multiattach_papi

Vince


2017-03-17 14:39:04

by Vince Weaver

[permalink] [raw]
Subject: Re: perf: negative time_enabled issue

On Tue, 14 Mar 2017, Vince Weaver wrote:

> So another obscure rdpmc problem, turned up by the PAPI regression tests.
>
> If you use rdpmc, and your event is attached measuring another process,
> and then you ENABLE/DISABLE/ENABLE/rdpmc the event
>
> somehow the userpg->time_enabled field gets a weird value and that
> completely confuses code expecting enabled!=running to mean multiplexing
> is happening.

Still working on this issue. It turns out it's not rdpmc specific, you
can see it with a regular read() too.

So far I've traced it back far enough to see that shadow_ctx_time is
ending up negative for some reason if you do an enable/disable/enable on
an event attached to another process. I'm trying to trace it back further
but it's a slow process.

Vince