summaryrefslogtreecommitdiff
path: root/Examples/dtruss_example.txt
diff options
context:
space:
mode:
authorGeorge V. Neville-Neil <gnn@FreeBSD.org>2012-05-12 20:38:18 +0000
committerGeorge V. Neville-Neil <gnn@FreeBSD.org>2012-05-12 20:38:18 +0000
commit055173dba4a263acf10325a49eebf82915369ed2 (patch)
treeaec2772e8855e6dbaea6d8136ed0c47bcb825dee /Examples/dtruss_example.txt
parent87c8f7aa3a46118212b99f0d58b18aa93c06b02a (diff)
Notes
Diffstat (limited to 'Examples/dtruss_example.txt')
-rw-r--r--Examples/dtruss_example.txt120
1 files changed, 120 insertions, 0 deletions
diff --git a/Examples/dtruss_example.txt b/Examples/dtruss_example.txt
new file mode 100644
index 000000000000..107fc1978426
--- /dev/null
+++ b/Examples/dtruss_example.txt
@@ -0,0 +1,120 @@
+The following demonstrates the dtruss command - a DTrace version of truss.
+This version is designed to be less intrusive and safer than running truss.
+
+dtruss has many options. Here is the help for version 0.70,
+
+ USAGE: dtruss [-acdefholL] [-t syscall] { -p PID | -n name | command }
+
+ -p PID # examine this PID
+ -n name # examine this process name
+ -t syscall # examine this syscall only
+ -a # print all details
+ -c # print syscall counts
+ -d # print relative times (us)
+ -e # print elapsed times (us)
+ -f # follow children
+ -l # force printing pid/lwpid
+ -o # print on cpu times
+ -L # don't print pid/lwpid
+ -b bufsize # dynamic variable buf size
+ eg,
+ dtruss df -h # run and examine "df -h"
+ dtruss -p 1871 # examine PID 1871
+ dtruss -n tar # examine all processes called "tar"
+ dtruss -f test.sh # run test.sh and follow children
+
+
+
+For example, here we dtruss any process with the name "ksh" - the Korn shell,
+
+ # dtruss -n ksh
+ PID/LWP SYSCALL(args) = return
+ 27547/1: llseek(0x3F, 0xE4E, 0x0) = 3662 0
+ 27547/1: read(0x3F, "\0", 0x400) = 0 0
+ 27547/1: llseek(0x3F, 0x0, 0x0) = 3662 0
+ 27547/1: write(0x3F, "ls -l\n\0", 0x8) = 8 0
+ 27547/1: fdsync(0x3F, 0x10, 0xFEC1D444) = 0 0
+ 27547/1: lwp_sigmask(0x3, 0x20000, 0x0) = 0xFFBFFEFF 0
+ 27547/1: stat64("/usr/bin/ls\0", 0x8047A00, 0xFEC1D444) = 0 0
+ 27547/1: lwp_sigmask(0x3, 0x0, 0x0) = 0xFFBFFEFF 0
+ [...]
+
+The output for each system call does not yet evaluate as much as truss does.
+
+
+
+In the following example, syscall elapsed and overhead times are measured.
+Elapsed times represent the time from syscall start to finish; overhead
+times measure the time spent on the CPU,
+
+ # dtruss -eon bash
+ PID/LWP ELAPSD CPU SYSCALL(args) = return
+ 3911/1: 41 26 write(0x2, "l\0", 0x1) = 1 0
+ 3911/1: 1001579 43 read(0x0, "s\0", 0x1) = 1 0
+ 3911/1: 38 26 write(0x2, "s\0", 0x1) = 1 0
+ 3911/1: 1019129 43 read(0x0, " \001\0", 0x1) = 1 0
+ 3911/1: 38 26 write(0x2, " \0", 0x1) = 1 0
+ 3911/1: 998533 43 read(0x0, "-\0", 0x1) = 1 0
+ 3911/1: 38 26 write(0x2, "-\001\0", 0x1) = 1 0
+ 3911/1: 1094323 42 read(0x0, "l\0", 0x1) = 1 0
+ 3911/1: 39 27 write(0x2, "l\001\0", 0x1) = 1 0
+ 3911/1: 1210496 44 read(0x0, "\r\0", 0x1) = 1 0
+ 3911/1: 40 28 write(0x2, "\n\001\0", 0x1) = 1 0
+ 3911/1: 9 1 lwp_sigmask(0x3, 0x2, 0x0) = 0xFFBFFEFF 0
+ 3911/1: 70 63 ioctl(0x0, 0x540F, 0x80F6D00) = 0 0
+
+A bash command was in another window, where the "ls -l" command was being
+typed. The keystrokes can be seen above, along with the long elapsed times
+(keystroke delays), and short overhead times (as the bash process blocks
+on the read and leaves the CPU).
+
+
+
+Now dtruss is put to the test. Here we truss a test program that runs several
+hundred smaller programs, which in turn generate thousands of system calls.
+
+First, as a "control" we run the program without a truss or dtruss running,
+
+ # time ./test
+ real 0m38.508s
+ user 0m5.299s
+ sys 0m25.668s
+
+Now we try truss,
+
+ # time truss ./test 2> /dev/null
+ real 0m41.281s
+ user 0m0.558s
+ sys 0m1.351s
+
+Now we try dtruss,
+
+ # time dtruss ./test 2> /dev/null
+ real 0m46.226s
+ user 0m6.771s
+ sys 0m31.703s
+
+In the above test, truss slowed the program from 38 seconds to 41. dtruss
+slowed the program from 38 seconds to 46, slightly slower that truss...
+
+Now we try follow mode "-f". The test program does run several hundred
+smaller programs, so now there are plenty more system calls to track,
+
+ # time truss -f ./test 2> /dev/null
+ real 2m28.317s
+ user 0m0.893s
+ sys 0m3.527s
+
+Now we try dtruss,
+
+ # time dtruss -f ./test 2> /dev/null
+ real 0m56.179s
+ user 0m10.040s
+ sys 0m38.185s
+
+Wow, the difference is huge! truss slows the program from 38 to 148 seconds;
+but dtruss has only slowed the program from 38 to 56 seconds.
+
+
+
+