From: Segher Boessenkool <segher@koffie•nl>
To: Albert Cahalan <albert@users•sourceforge.net>
Cc: oprofile-list@lists•sourceforge.net, linuxppc-dev@lists•linuxppc.org
Subject: Re: porting oprofile to ppc
Date: Mon, 03 Mar 2003 02:49:56 +0100 [thread overview]
Message-ID: <3E62B4C4.6030306@koffie.nl> (raw)
In-Reply-To: <1046474835.1090.303.camel@cube>
Albert Cahalan wrote:
> I'm considering a port to the MPC7400 ("G4") PowerPC.
> This is out of desperation, since there isn't anything
> beyond gprof available for Linux/ppc users.
Great to hear someone's willing to work on this!
I currently use the following hack to use the pmc's:
I have a trivial kernel module that accepts as parameters
the events to count on each pmc (like, insmod pmc.o 1 2 3 4),
sets the PMCn and MMCRn regs, and fails to load. This sets
the counters running, and then I instrument the program
to be profiled to read the PMC's at interesting program
locations. I wrote this years ago and never got around
to finish any better tools.
> I could use some advice. Where do I even start?
> Anybody else doing this or interested in helping?
I'll answer any questions you have -- feel free to email
me in private about this.
> On the 7xx and 74xx chips, I get a user-readable 64-bit
> counter that ticks at 1/16 of the memory bus clock. So on
You are talking about the time base? It runs at 1/4th
the cpu clock. It can be disabled by means of a hardware
pin (GPIO9 on most Mac's); default is running and that's
just what you want, I think ;)
> my 450 MHz Mac with a 100 MHz bus, it ticks at 6.25 MHz.
25MHz.
> There's also a privileged 32-bit count-down register that
> gives an interrupt.
The decrementer; same frequency as the time base on all
G3 and G4 cpu's.
> There isn't a CPU core cycle counter,
> unless you have a 7400 (or above?) and are willing to
> devote a performance counter to that purpose.
Actually, all G3 and G4 cpu's have event 1 on all pmc's
as such a counter.
> The 7400 chip additionally gives me a set of performance
> monitoring registers, with read-only access from user code.
> There are four counters, PMC1 to PMC4, and control registers.
750 has four pmc's as well, 7450 has six of-em.
> I can freeze the counters in kernel mode, in user mode,
> and according to a flag that may be used to mark a process.
There's no mark flag on the 750.
> There's a threshold value for some of the performance
> counters, taking on values from 0..63 times 2 or 32.
> (0,2,4,...,124,126,128,160,192,...,1952,1984,2016)
> So for example, I could count loads that stall for more
> than 1952 ticks.
>
> I can enable counters PMC2..PMC4 when PMC1 goes negative.
> I can freeze all the counters (or cause an interrupt)
> when one of PMC2...PMC4 goes negative.
Or both; the most useful mode, imho.
> There are ways for external hardware to mask counting or
> interrupt generation. I'm not about to solder a button
> onto my CPU for this, but I guess it should be supported.
Luckily, GPIO8 is just what you need. It isn't all that
useful, though. [Beware: always check the device tree
for the exact gpio number on your box -- this can vary].
> All four counters can count:
>
> core cycles
> completed instructions, excluding folded branches
> memory cycles divided by 32, 8k, 128k, or 2M
This one should read "time base ticks".
> instructions dispatched (0, 1, or 2 per core cycle)
>
> Then of course each register has a selection of other
> choices. Of interest:
>
> instruction breakpoint matches, with a bit mask
> (could be abused to count system calls or interrupts)
> various cache things, loads, stores, etc.
>
> There must be 60 to 240 choices, depending on how one
> counts duplicates.
Lots and lots more combo's, although not all combinations
are all that useful ;)
Also, all cpu's have different even assignments (and
different MMCRn registers, too).
Good luck and have fun,
Segher
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
next prev parent reply other threads:[~2003-03-03 1:49 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-02-28 23:27 porting oprofile to ppc Albert Cahalan
2003-03-01 0:22 ` John Levon
2003-03-03 1:49 ` Segher Boessenkool [this message]
2003-03-03 8:14 ` Albert Cahalan
2003-03-03 8:28 ` Benjamin Herrenschmidt
2003-03-04 3:44 ` Segher Boessenkool
2003-03-04 16:36 ` AW: " Oliver Oppitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3E62B4C4.6030306@koffie.nl \
--to=segher@koffie$(echo .)nl \
--cc=albert@users$(echo .)sourceforge.net \
--cc=linuxppc-dev@lists$(echo .)linuxppc.org \
--cc=oprofile-list@lists$(echo .)sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox