summaryrefslogtreecommitdiffstats
path: root/cddl/contrib/dtracetoolkit/Examples/dapptrace_example.txt
diff options
context:
space:
mode:
Diffstat (limited to 'cddl/contrib/dtracetoolkit/Examples/dapptrace_example.txt')
-rw-r--r--cddl/contrib/dtracetoolkit/Examples/dapptrace_example.txt215
1 files changed, 215 insertions, 0 deletions
diff --git a/cddl/contrib/dtracetoolkit/Examples/dapptrace_example.txt b/cddl/contrib/dtracetoolkit/Examples/dapptrace_example.txt
new file mode 100644
index 0000000..f19606c
--- /dev/null
+++ b/cddl/contrib/dtracetoolkit/Examples/dapptrace_example.txt
@@ -0,0 +1,215 @@
+The following is a demonstration of the dapptrace command,
+
+This is the usage for version 0.60,
+
+ # dapptrace -h
+ USAGE: dapptrace [-acdeholFLU] [-u lib] { -p PID | command }
+
+ -p PID # examine this PID
+ -a # print all details
+ -c # print syscall counts
+ -d # print relative times (us)
+ -e # print elapsed times (us)
+ -F # print flow indentation
+ -l # print pid/lwpid
+ -o # print CPU on cpu times
+ -u lib # trace this library instead
+ -U # trace all libraries + user funcs
+ -b bufsize # dynamic variable buf size
+ eg,
+ dapptrace df -h # run and examine "df -h"
+ dapptrace -p 1871 # examine PID 1871
+ dapptrace -Fp 1871 # print using flow indents
+ dapptrace -eop 1871 # print elapsed and CPU times
+
+
+
+The following is an example of the default output. We run dapptrace with
+the "banner hello" command,
+
+ # dapptrace banner hi
+
+ # # #
+ # # #
+ ###### #
+ # # #
+ # # #
+ # # #
+
+ CALL(args) = return
+ -> __fsr(0x2, 0x8047D7C, 0x8047D88)
+ <- __fsr = 122
+ -> main(0x2, 0x8047D7C, 0x8047D88)
+ -> banner(0x8047E3B, 0x80614C2, 0x8047D38)
+ -> banset(0x20, 0x80614C2, 0x8047DCC)
+ <- banset = 36
+ -> convert(0x68, 0x8047DCC, 0x2)
+ <- convert = 319
+ -> banfil(0x8061412, 0x80614C2, 0x8047DCC)
+ <- banfil = 57
+ -> convert(0x69, 0x8047DCC, 0x2)
+ <- convert = 319
+ -> banfil(0x8061419, 0x80614CA, 0x8047DCC)
+ <- banfil = 57
+ <- banner = 118
+ -> banprt(0x80614C2, 0x8047D38, 0xD27FB824)
+ <- banprt = 74
+
+The default output shows user function calls. An entry is prefixed
+with a "->", and the return has a "<-".
+
+
+
+Here we run dapptrace with the -F for flow indent option,
+
+ # dapptrace -F banner hi
+
+ # # #
+ # # #
+ ###### #
+ # # #
+ # # #
+ # # #
+
+ CALL(args) = return
+ -> __fsr(0x2, 0x8047D7C, 0x8047D88)
+ <- __fsr = 122
+ -> main(0x2, 0x8047D7C, 0x8047D88)
+ -> banner(0x8047E3B, 0x80614C2, 0x8047D38)
+ -> banset(0x20, 0x80614C2, 0x8047DCC)
+ <- banset = 36
+ -> convert(0x68, 0x8047DCC, 0x2)
+ <- convert = 319
+ -> banfil(0x8061412, 0x80614C2, 0x8047DCC)
+ <- banfil = 57
+ -> convert(0x69, 0x8047DCC, 0x2)
+ <- convert = 319
+ -> banfil(0x8061419, 0x80614CA, 0x8047DCC)
+ <- banfil = 57
+ <- banner = 118
+ -> banprt(0x80614C2, 0x8047D38, 0xD27FB824)
+ <- banprt = 74
+
+The above output illustrates the flow of the program, which functions
+call which other functions.
+
+
+
+Now the same command is run with -d to display relative timestamps,
+
+ # dapptrace -dF banner hi
+
+ # # #
+ # # #
+ ###### #
+ # # #
+ # # #
+ # # #
+
+ RELATIVE CALL(args) = return
+ 2512 -> __fsr(0x2, 0x8047D7C, 0x8047D88)
+ 2516 <- __fsr = 122
+ 2518 -> main(0x2, 0x8047D7C, 0x8047D88)
+ 2863 -> banner(0x8047E3B, 0x80614C2, 0x8047D38)
+ 2865 -> banset(0x20, 0x80614C2, 0x8047DCC)
+ 2872 <- banset = 36
+ 2874 -> convert(0x68, 0x8047DCC, 0x2)
+ 2877 <- convert = 319
+ 2879 -> banfil(0x8061412, 0x80614C2, 0x8047DCC)
+ 2882 <- banfil = 57
+ 2883 -> convert(0x69, 0x8047DCC, 0x2)
+ 2885 <- convert = 319
+ 2886 -> banfil(0x8061419, 0x80614CA, 0x8047DCC)
+ 2888 <- banfil = 57
+ 2890 <- banner = 118
+ 2892 -> banprt(0x80614C2, 0x8047D38, 0xD27FB824)
+ 3214 <- banprt = 74
+
+The relative times are in microseconds since the program's invocation. Great!
+
+
+
+Even better is if we use the -eo options, to print elapsed times and on-cpu
+times,
+
+ # dapptrace -eoF banner hi
+
+ # # #
+ # # #
+ ###### #
+ # # #
+ # # #
+ # # #
+
+ ELAPSD CPU CALL(args) = return
+ . . -> __fsr(0x2, 0x8047D7C, 0x8047D88)
+ 41 4 <- __fsr = 122
+ . . -> main(0x2, 0x8047D7C, 0x8047D88)
+ . . -> banner(0x8047E3B, 0x80614C2, 0x8047D38)
+ . . -> banset(0x20, 0x80614C2, 0x8047DCC)
+ 29 6 <- banset = 36
+ . . -> convert(0x68, 0x8047DCC, 0x2)
+ 26 3 <- convert = 319
+ . . -> banfil(0x8061412, 0x80614C2, 0x8047DCC)
+ 25 2 <- banfil = 57
+ . . -> convert(0x69, 0x8047DCC, 0x2)
+ 23 1 <- convert = 319
+ . . -> banfil(0x8061419, 0x80614CA, 0x8047DCC)
+ 23 1 <- banfil = 57
+ 309 28 <- banner = 118
+ . . -> banprt(0x80614C2, 0x8047D38, 0xD27FB824)
+ 349 322 <- banprt = 74
+
+Now it is easy to see which functions take the longest (elapsed), and
+which consume the most CPU cycles.
+
+
+
+The following demonstrates the -U option, to trace all libraries,
+
+ # dapptrace -U banner hi
+
+ # # #
+ # # #
+ ###### #
+ # # #
+ # # #
+ # # #
+
+ CALL(args) = return
+ -> ld.so.1:_rt_boot(0x8047E34, 0x8047E3B, 0x0)
+ -> ld.so.1:_setup(0x8047D38, 0x20AE4, 0x3)
+ -> ld.so.1:setup(0x8047D88, 0x8047DCC, 0x0)
+ -> ld.so.1:fmap_setup(0x0, 0xD27FB2E4, 0xD27FB824)
+ <- ld.so.1:fmap_setup = 125
+ -> ld.so.1:addfree(0xD27FD3C0, 0xC40, 0x0)
+ <- ld.so.1:addfree = 65
+ -> ld.so.1:security(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)
+ <- ld.so.1:security = 142
+ -> ld.so.1:readenv_user(0x8047D88, 0xD27FB204, 0xD27FB220)
+ -> ld.so.1:ld_str_env(0x8047E3E, 0xD27FB204, 0xD27FB220)
+ <- ld.so.1:ld_str_env = 389
+ -> ld.so.1:ld_str_env(0x8047E45, 0xD27FB204, 0xD27FB220)
+ <- ld.so.1:ld_str_env = 389
+ -> ld.so.1:ld_str_env(0x8047E49, 0xD27FB204, 0xD27FB220)
+ <- ld.so.1:ld_str_env = 389
+ -> ld.so.1:ld_str_env(0x8047E50, 0xD27FB204, 0xD27FB220)
+ -> ld.so.1:strncmp(0x8047E53, 0xD27F7BEB, 0x4)
+ <- ld.so.1:strncmp = 113
+ -> ld.so.1:rd_event(0xD27FB1F8, 0x3, 0x0)
+ [...4486 lines deleted...]
+ -> ld.so.1:_lwp_mutex_unlock(0xD27FD380, 0xD27FB824, 0x8047C04)
+ <- ld.so.1:_lwp_mutex_unlock = 47
+ <- ld.so.1:rt_mutex_unlock = 34
+ -> ld.so.1:rt_bind_clear(0x1, 0xD279ECC0, 0xD27FDB2C)
+ <- ld.so.1:rt_bind_clear = 34
+ <- ld.so.1:leave = 210
+ <- ld.so.1:elf_bndr = 803
+ <- ld.so.1:elf_rtbndr = 35
+
+The output was huge, around 4500 lines long. Function names are prefixed
+with their library name, eg "ld.so.1".
+
+This full output should be used with caution, as it enables so many probes
+it could well be a burden on the system.
+
OpenPOWER on IntegriCloud