* Profiling
@ 2002-06-25 17:03 Scott Dattalo
2002-06-25 18:37 ` Profiling Frank Ch. Eigler
0 siblings, 1 reply; 5+ messages in thread
From: Scott Dattalo @ 2002-06-25 17:03 UTC (permalink / raw)
To: sid
I'm trying to collect profile info on my ARM-based application. I followed
the directions on the SID web page regarding profiling. Basically, I added
the two options "--gprof" and "--trace-counter" to the arm-elf-sid
invocation. I also created a .conf script. According to the SID
documentation, the two lines:
connect-pin main perform-activity -> gprof sample
connect-pin main stopping -> gprof store
should be in the .conf file. I tried the conf file with and without these
lines.
Now when I run the simulator (arm-elf-gdb which is built from the Insight
5.2 sources), connect to sid, simulate, and exit, the file gmon.out is
created. Cool.
Now when I run gprof:
$ gprof --flat-profile gmon.out
I get the error:
gprof: gmon.out: not in a.out format
Hmm. After reading the gprof docs, I added -pg to my CFLAGS options in my
make files. Unfortunately, there is no profile library with which I can
link. So my project doesn't build. Bummer.
Question: How *do* you profile? Do I need to build an arm-elf-gprof? Is
there some other gprof option I need to add? Did I misunderstand the SID
instructions?
Scott
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Profiling
2002-06-25 17:03 Profiling Scott Dattalo
@ 2002-06-25 18:37 ` Frank Ch. Eigler
2002-06-25 19:01 ` Profiling Scott Dattalo
0 siblings, 1 reply; 5+ messages in thread
From: Frank Ch. Eigler @ 2002-06-25 18:37 UTC (permalink / raw)
To: Scott Dattalo; +Cc: sid
Hi -
On Tue, Jun 25, 2002 at 05:03:05PM -0700, Scott Dattalo wrote:
> I'm trying to collect profile info on my ARM-based application. [...]
> connect-pin main perform-activity -> gprof sample
> connect-pin main stopping -> gprof store
The "perform-activity" pin may signal infrequently compared to
CPU instruction rates, so you will get a relatively low sample rate.
You could connect that gprof sample pin from another source, such as
the scheduler's CPU-bound NNN-output signal.
> [...]
> Now when I run gprof:
> $ gprof --flat-profile gmon.out
> I get the error:
> gprof: gmon.out: not in a.out format
This is a simple gprof usage error. gprof implicitly looks for the
file named gmon.out, but it doesn't know what *target executable* to
relate it to. gprof needs to process the executable in order to
extract its symbol table, so that the PC sample addresses in gmon.out
can become sensible. So, all you need to do is build the cross-gprof,
and run
arm-elf-gprof file.exe
By the way, the "--flat-profile" option is not always needed any more,
as sid can collect call-graph profiling information from cooperating
cpu models. (They need to drive a special c-call from subroutine
call semantics.) I don't recall if the ARM cpu model includes the
few lines of code for this. If you're interested in fuller profiling,
I'd be happy to give pointers for completing that few-minute job.
> Hmm. After reading the gprof docs, I added -pg to my CFLAGS options in my
> make files. [...]
Right - this requests gcc to instrument the target code.
sid can profile uninstrumented target code.
(In some cases, sid can execute -pg-instrumented code and
produce a gmon.out file, but this requires many more pieces
of target software, and has some different properties.)
- FChE
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Profiling
2002-06-25 18:37 ` Profiling Frank Ch. Eigler
@ 2002-06-25 19:01 ` Scott Dattalo
2002-06-25 19:08 ` Profiling Frank Ch. Eigler
0 siblings, 1 reply; 5+ messages in thread
From: Scott Dattalo @ 2002-06-25 19:01 UTC (permalink / raw)
Cc: sid
On Tue, 25 Jun 2002, Frank Ch. Eigler wrote:
> Hi -
>
>
> On Tue, Jun 25, 2002 at 05:03:05PM -0700, Scott Dattalo wrote:
> > I'm trying to collect profile info on my ARM-based application. [...]
> > connect-pin main perform-activity -> gprof sample
> > connect-pin main stopping -> gprof store
>
> The "perform-activity" pin may signal infrequently compared to
> CPU instruction rates, so you will get a relatively low sample rate.
> You could connect that gprof sample pin from another source, such as
> the scheduler's CPU-bound NNN-output signal.
>
> > [...]
> > Now when I run gprof:
> > $ gprof --flat-profile gmon.out
> > I get the error:
> > gprof: gmon.out: not in a.out format
>
> This is a simple gprof usage error. gprof implicitly looks for the
> file named gmon.out, but it doesn't know what *target executable* to
> relate it to. gprof needs to process the executable in order to
> extract its symbol table, so that the PC sample addresses in gmon.out
> can become sensible. So, all you need to do is build the cross-gprof,
> and run
>
> arm-elf-gprof file.exe
Yes, I surmised as much when I saw the SID screen shot with this command.
But the question I have is how do you build arm-elf-gprof (I posed this
question to the eCos list as well, BTW)? When I follow the arm-elf tool
chain build instructions, I get a whole lot of arm-elf-* files, but no
gprof. I tried --enable-gprof as part of the binutil ./configure, but that
didn't do it. Of course, I'm just guessing at this point...
BTW, this is where I got the arm-elf build instructions:
http://sources.redhat.com/ecos/tools/linux-arm-elf.html
Scott
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Profiling
2002-06-25 19:01 ` Profiling Scott Dattalo
@ 2002-06-25 19:08 ` Frank Ch. Eigler
2002-06-26 10:41 ` Profiling Scott Dattalo
0 siblings, 1 reply; 5+ messages in thread
From: Frank Ch. Eigler @ 2002-06-25 19:08 UTC (permalink / raw)
To: Scott Dattalo; +Cc: sid
Hi -
On Tue, Jun 25, 2002 at 07:01:39PM -0700, Scott Dattalo wrote:
> [...]
> But the question I have is how do you build arm-elf-gprof [...]
The gprof program, for historical reasons, is sometimes excluded
from a cross-targeted toolchain. If you have a source tree with
a Cygnus configure script at the top level, or a gcc source tree,
then look for the "native_only" variable from the top-level
configure.in, remove "gprof". Then reconfigure the build tree,
and run "make" in the gprof subdirectory.
- FChE
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Profiling
2002-06-25 19:08 ` Profiling Frank Ch. Eigler
@ 2002-06-26 10:41 ` Scott Dattalo
0 siblings, 0 replies; 5+ messages in thread
From: Scott Dattalo @ 2002-06-26 10:41 UTC (permalink / raw)
To: Frank Ch. Eigler; +Cc: sid
On Tue, 25 Jun 2002, Frank Ch. Eigler wrote:
> Hi -
>
> On Tue, Jun 25, 2002 at 07:01:39PM -0700, Scott Dattalo wrote:
> > [...]
> > But the question I have is how do you build arm-elf-gprof [...]
>
> The gprof program, for historical reasons, is sometimes excluded
> from a cross-targeted toolchain. If you have a source tree with
> a Cygnus configure script at the top level, or a gcc source tree,
> then look for the "native_only" variable from the top-level
> configure.in, remove "gprof". Then reconfigure the build tree,
> and run "make" in the gprof subdirectory.
That did it!
Just to be clear, this is what I did:
I untar'd the binutils-2.12.1 tar ball and edited
binutils-2.12.1/configure.in. There's a line containing "native_only" that
several packages (like gprof, sed,...); I removed gprof from that list.
I then followed the instructions here for building binutils:
http://sources.redhat.com/ecos/tools/linux-arm-elf.html
and arm-elf-gprof was created! Score!
---
Now for profiling...
My application uses the eCos RTOS and consequently is linked with it. I
discovered that you *can't* compile the source for profiling by adding -pg
option as part of the CFLAGS. Okay, I'm lying; you can compile with the
-pg option, but you get unresolved references when you link. I don't know
if eCos can be configured for profiling or not. I'll check into that
later. For the time being though, I don't need it. I was able to extract
profiling info just fine without compiling the sources with -pg. Here's
what I did:
1) Configured SID for profiling. I followed the instructions in the SID
documentation. Essentially, I added --gprof and --trace-counter to the SID
invocation. BTW, I also told SID to creat a configuration file by adding
--save-temps and --no-run to the invocation. Once you have a configuration
file, you can invoke SID by: sid configuration_file.conf.
2) Run the application. Again, following the instructions on the SID web
page, I started sid and ran my application:
sid myconf.conf &
arm-elf-gdb myexecutable
in gdb, add these commands:
(gdb) target remote localhost:2000
(gdb) load
(gdb) break main
(gdb) cont
(note that this is a copy-n-paste from the SID faq)
I then stepped through my code and exited gdb when I was done.
3) looking at the results. Upon exiting gdb, the file "gmon.prof" is
created. This contains the profile information. Use gprof to look at it:
arm-elf-gprof --flat-profile myexecutable
Without --flat-profile, gprof reports:
arm-elf-gprof: gmon.out file is missing call-graph data
Also, you need to specify the executable to gprof and not the gmon.out
file.
The first few lines of my profile look like this:
Flat profile:
Each sample counts as 1 tick.
% cumulative self self total
time tick tick calls Tt/call Tt/call name
16.87 1009.00 1009.00 __unpack_f
16.57 2000.00 991.00 __pack_f
13.21 2790.00 790.00 _fpadd_parts
9.73 3372.00 582.00 __floatsisf
------
And now I can go off and do some work!
Thanks for the info Frank.
Scott
PS. Sorry about the abruptly ending e-mail I sent to you privately. I was
composing it for the whole list, but ran out of time. I shouldn't of even
sent it.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2002-06-26 17:41 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-06-25 17:03 Profiling Scott Dattalo
2002-06-25 18:37 ` Profiling Frank Ch. Eigler
2002-06-25 19:01 ` Profiling Scott Dattalo
2002-06-25 19:08 ` Profiling Frank Ch. Eigler
2002-06-26 10:41 ` Profiling Scott Dattalo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).