pmc(3): when are the counters updated?
Vitaly Magerya
vmagerya at gmail.com
Mon Mar 12 12:40:03 UTC 2012
Fabien Thomas wrote:
>> So, what's going on here? Is this the intended behavior, or can it
>> be changed? And how do I get accurate readings?
>
> If i remember well:
> The current code will get real HW PMC if the PMC is running and attached to owner.
> The first case is not true in your code so you get the saved value which is updated at
> process switch out time.
>
> I think you can do:
> pmc_read
> pmc_stop.
Changing the code to this:
[...]
pmc_read(pmcid, &value);
pmc_stop(pmcid);
printf("reading #1: %lu\n", (unsigned long)value);
pmc_read(pmcid, &value);
printf("reading #2: %lu\n", (unsigned long)value);
sleep(1);
pmc_read(pmcid, &value);
printf("reading #3: %lu\n", (unsigned long)value);
[...]
Gives me this output:
reading #1: 15039441
reading #2: 0
reading #3: 15084037
So, it seems that you are correct; pmc_read reports current values if
the PMC is not stopped, after which it's updated on context switches.
More information about the freebsd-hackers
mailing list