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. |