AnubisProfiling

Version 1 (Anonymous, 08/29/2007 09:51 AM)

1 1 Anonymous
= Anubis Profiling =
2 1 Anonymous
Profiling functionnalities have been added to Anubis 1.8.
3 1 Anonymous
4 1 Anonymous
== Documentation ==
5 1 Anonymous
To use them, you fist have to compile your ADM with the profiling instructions, using '''-profile''' option into the command line. A good idea is to use the '''-sc''' option to, as it can help you to iddentify the different functions and their location into source code.
6 1 Anonymous
7 1 Anonymous
Once compiled, you juste have to start your ADM with the VirtualMachine. At the end of the execution (youy can use CTRL + C to end your ADM), the VM will output (on stderr) plain text information about profiling. On big software, that a good idea to redirect stderr to a file (using '2> filename' on command line).
8 1 Anonymous
9 1 Anonymous
Some options are available to format the output :
10 1 Anonymous
||-profile:csv ||Use CSV (Comma Separated Values) output insteed of plain text||
11 1 Anonymous
||-csv_sep:<sep> ||Allows to define a separator for CSV output (ex: '-csv_sep:;' to have a semi-colon insteed a comma)||
12 1 Anonymous
13 1 Anonymous
== Examples ==
14 1 Anonymous
15 1 Anonymous
Plain text output for fibonnacci.anubis[[BR]]
16 1 Anonymous
Command line : ''anbexec fib 29''
17 1 Anonymous
{{{
18 1 Anonymous
*** PROFILING DATA ***
19 1 Anonymous
*** Full executing time = 10.362 s
20 1 Anonymous
Function fib() [offset = 541]:
21 1 Anonymous
   hits = 1
22 1 Anonymous
   time (excluding children) = 0.002 s (0.0%)
23 1 Anonymous
   max  (including children) = 10.361 s (100.0%)
24 1 Anonymous
Function fib() [offset = 173]:
25 1 Anonymous
   hits = 1664079
26 1 Anonymous
   time (excluding children) = 10.360 s (100.0%)
27 1 Anonymous
   max  (including children) = 10.360 s (100.0%)
28 1 Anonymous
Function +() [offset = 89]:
29 1 Anonymous
   hits = 1
30 1 Anonymous
   time (excluding children) = 0.000 s (0.0%)
31 1 Anonymous
   max  (including children) = 0.000 s (0.0%)
32 1 Anonymous
}}}
33 1 Anonymous
34 1 Anonymous
CSV output for fibonnacci.anubis[[BR]]
35 1 Anonymous
Command line : ''anbexec fib 29 --profile:csv''
36 1 Anonymous
||Function||Offset||Hits||Time (excl. children)||Time %||Max (inc. children)||Max %||
37 1 Anonymous
||fib||541||1||0.001657||0.0||10.623458||100.0||
38 1 Anonymous
||fib||173||1664079||10.621774||100.0||10.621774||100.0||
39 1 Anonymous
||+||89||1||0.000027||0.0||0.000027||0.0||
40 1 Anonymous
41 1 Anonymous
== About Terminal Calls ==
42 1 Anonymous
Terminal calls can be a problem for profiling. 
43 1 Anonymous
44 1 Anonymous
First, they can't be representated by recursive calls because we can have an infinite succession of these calls.
45 1 Anonymous
46 1 Anonymous
Other approach is to do a 'fake' return just before a TerminalCall. But resulting profiling information is not really usable because the calls arborescence is broken.
47 1 Anonymous
48 1 Anonymous
So the choosen approach was to consider that all subsequent TerminalCalls made from a function are simply like if this was the same function. Helped by some examples, I will try to show you how it works.
Redmine Appliance - Powered by TurnKey Linux