Date: Mon, 12 Mar 2012 14:39:26 +0200 From: Vitaly Magerya <vmagerya@gmail.com> To: Fabien Thomas <fabien.thomas@netasq.com> Cc: freebsd-hackers@freebsd.org Subject: Re: pmc(3): when are the counters updated? Message-ID: <4F5DEE7E.5030008@gmail.com> In-Reply-To: <C8C86488-254E-45B3-9636-9272DC67CD0C@netasq.com> References: <CAL409Kxng3Yzw=grvP=fvbdLrqcOG_bG_ajaO8thZEPJtk2YaQ@mail.gmail.com> <C8C86488-254E-45B3-9636-9272DC67CD0C@netasq.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4F5DEE7E.5030008>