mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
70 lines
2.5 KiB
Text
70 lines
2.5 KiB
Text
Hi,
|
|
|
|
I'm sending you the modifications I made to your Dbug routines to
|
|
allow profiling in a (relatively) machine independent fashion.
|
|
I use your Dbug routines fairly extensively. Unfortunately, it's
|
|
a royal pain to have to keep profiled versions of various libraries
|
|
around. The modifications allow profiling without the need for this.
|
|
|
|
How it works.
|
|
------------
|
|
|
|
Basically, I just added code in the dbug routines to write out a file
|
|
called dbugmon.out (by default). This is an ascii file containing lines
|
|
of the form:
|
|
|
|
<function-name> E <time-entered>
|
|
<function-name> X <time-exited>
|
|
|
|
A second program (analyze) reads this file, and produces a report on
|
|
standard output.
|
|
|
|
Profiling is enabled through the `g' flag. It can take a list of
|
|
procedure names for which profiling is enabled. By default, it
|
|
profiles all procedures.
|
|
|
|
The code in ``dbug.c'' opens the profile file for appending. This
|
|
is in order that one can run a program several times, and get the
|
|
sum total of all the times, etc.
|
|
|
|
The only system dependent part that I'm aware of is the routine
|
|
Clock() at the end of dbug.c. This returns the elapsed user time
|
|
in milliseconds. The version which I have is for 4.3 BSD. As I
|
|
don't have access to other systems, I'm not certain how this would
|
|
change.
|
|
|
|
An example of the report generated follows:
|
|
|
|
Profile of Execution
|
|
Execution times are in milliseconds
|
|
|
|
Calls Time
|
|
----- ----
|
|
Times Percentage Time Spent Percentage
|
|
Function Called of total in Function of total Importance
|
|
======== ====== ========== =========== ========== ==========
|
|
factorial 5 83.33 30 100.00 8333
|
|
main 1 16.67 0 0.00 0
|
|
======== ====== ========== =========== ==========
|
|
Totals 6 100.00 30 100.00
|
|
|
|
|
|
As you can see, it's quite self-evident. The ``Importance'' column is a
|
|
metric obtained by multiplying the percentage of the calls and the percentage
|
|
of the time. Functions with higher 'importance' benefit the most from
|
|
being sped up.
|
|
|
|
I'm really not certain how to add support for setjmp/longjmp, or for
|
|
child processes, so I've ignored that for the time being. In most of
|
|
the code that I write, it isn't necessary. If you have any good ideas,
|
|
feel free to add them.
|
|
|
|
This has been very useful to me. If you can use it as part of your
|
|
dbug distribution, please feel free to do so.
|
|
|
|
Regards,
|
|
|
|
Binayak Banerjee
|
|
{allegra | astrovax | bpa | burdvax}!sjuvax!bbanerje
|
|
bbanerje%sjuvax.sju.edu@relay.cs.net
|
|
July 9, 1987
|