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
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