Skip site navigation (1)Skip section navigation (2)
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>