Port-powerpc archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: PMC strawman



At 06:46 PM 2/14/2003, Allen Briggs wrote:
On Fri, Feb 14, 2003 at 10:51:52AM -0800, Matt Thomas wrote:
> Note that to use perfctrs with individual pthreads we need
> to add a PMC glob to struct mcontext.  Does anyone have a
> problem with that?

You mean a glob to treat the PMC registers as part of the context?
If it's only conditionally restored, that seems reasonable to me.
It's what?  Another 44 bytes of mcontext overhead?  It might be
nice to perhaps have a way to avoid that for production system
code, though.  Maybe a compile-time knob?

There would be a bit to note whether that blob has info.  I'd
make the blob explicitly opaque to userspace.

> But what about the kernel?  I assume that doing performance
> of user processes and the kernel concurrently will be desired.
> If so, then on user traps and execptions, the user PM context
> will need to be saved in the trapframe and then the kernel's
> loaded from cpu_info (so it's per-cpu).

This is something that I kind of ignored with the XScale
implementation.  It would certainly be useful to have,
though I would certainly want to avoid the overhead unless
PERFCTRS is enabled.

Of course it would conditional.  I'd also prefer to have
separate contents for interrupt / non-interrupt code.

> Though the current PMC framework doesn't allow for it, it
> might be useful for multiple processes/threads to be able to
> share one PMC context.

What do you think this should look like?

Right now the pmc counters are per proc, not lwp, which needs to be
fixed.  I was thinking about creating a pmc context that a process
could establish and share among it's children (or all of its threads).
Make it refcnt'ed and on last reference, free it.
Then l_md.md_pmc would be a pointer to it.  To access it will be
fairly cheap, the adding of PMCs is not:

        mfmsr   r
        mtcr    r
        b       4,28,1f

        GET_INFO(r)
        lwz     r,CI_CURLWP(r)
        lwz     r,LWP_MD+MD_PMC(r)

        mfspr   s,SPR_PMC1
        lwz     hi,PMC_PMC1(r)
        lwz     lo,PMC_PMC1+4(r)
        add     lo,s,lo
        stw     lo,PMC_PMC1+4(r)
        addze   hi,hi
        stw     hi,PMC_PMC1(r)
1:

Note that it can't be in the PCB since PCB's are not shared.


--
Matt Thomas               Internet:   matt%3am-software.com@localhost
3am Software Foundry      WWW URL:    http://www.3am-software.com/bio/matt/
Cupertino, CA             Disclaimer: I avow all knowledge of this message




Home | Main Index | Thread Index | Old Index