summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.examples/profiling
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2008-08-11 17:34:47 -0400
committerFrank Ch. Eigler <fche@elastic.org>2008-08-11 17:34:47 -0400
commit42e740602dbb7960e11b0bbf9053e95e8a1cb1e5 (patch)
treeaa32f56c7c5b1838e9d80bec2c15325c71742660 /testsuite/systemtap.examples/profiling
parent3213d0891c826f16ba727a3e863075e2922666a0 (diff)
parent79640c29c5bcf8de20f013dcc80e1a9c7a93811f (diff)
downloadsystemtap-steved-42e740602dbb7960e11b0bbf9053e95e8a1cb1e5.tar.gz
systemtap-steved-42e740602dbb7960e11b0bbf9053e95e8a1cb1e5.tar.xz
systemtap-steved-42e740602dbb7960e11b0bbf9053e95e8a1cb1e5.zip
Merge commit 'origin/master' into pr4225
* commit 'origin/master': (34 commits) PR5049: fix overbroad effects of naive "*" prefixing; instead use optional "*/" only. stap-serverd was incorectly determining that the server could stapprobes man page: clarify statement(NUM).absolute and process("path") searching PR5049: prefix with "*" any filenames given in "fn@filename:line" probes Indentation fix. Redirect stderr gets redircted so warnings don't let example script run fail. PR6835. io/io_submit.stp: Fix #! start. Convert to normal line-ending. PR2895. Add proper #! /usr/bin/env stap line. Make example scripts executable. Use INSTALL_PROGRAM, not INSTALL_DATA for executable .stp scripts. example index: only warn if old, do not regenerate Start/stop the systemtap server from systemtap.exp and not in the top level Makefile. Lower statement wildcard test matching threshold. Moved details of utrace detach to stap_utrace_detach(). Saves thread vma information. Always generate examples indexes and install examples from srcdir. Refer to srcdir spec file Makefile so make rpm works when builddir != srcdir. Add index of subsystem and keywords at top of HTML indexes. Don't output output, exits, status line in indexes (mentioned in descriptions). Disable chmodding of samples/kmalloc-top in spec file since it isn't installed. Make sure examples indexes are always generated in builddir. ...
Diffstat (limited to 'testsuite/systemtap.examples/profiling')
-rw-r--r--testsuite/systemtap.examples/profiling/functioncallcount.meta13
-rwxr-xr-xtestsuite/systemtap.examples/profiling/functioncallcount.stp17
-rw-r--r--testsuite/systemtap.examples/profiling/thread-times.meta13
-rwxr-xr-xtestsuite/systemtap.examples/profiling/thread-times.stp32
4 files changed, 75 insertions, 0 deletions
diff --git a/testsuite/systemtap.examples/profiling/functioncallcount.meta b/testsuite/systemtap.examples/profiling/functioncallcount.meta
new file mode 100644
index 00000000..4d419528
--- /dev/null
+++ b/testsuite/systemtap.examples/profiling/functioncallcount.meta
@@ -0,0 +1,13 @@
+title: Count Times Functions Called
+name: functioncallcount.stp
+version: 1.0
+author: anonymous
+keywords: profiling functions
+subsystem: kernel
+status: production
+exit: user-controlled
+output: sorted-list on-exit
+scope: system-wide
+description: The functioncallcount.stp script takes one argument, a list of functions to probe. The script will run and count the number of times that each of the functions on the list is called. On exit the script will print a sorted list from most frequently to least frequently called function.
+test_check: stap -p4 functioncallcount.stp "*@mm/*.c"
+test_installcheck: stap functioncallcount.stp "*@mm/*.c" -c "sleep 1"
diff --git a/testsuite/systemtap.examples/profiling/functioncallcount.stp b/testsuite/systemtap.examples/profiling/functioncallcount.stp
new file mode 100755
index 00000000..e393b612
--- /dev/null
+++ b/testsuite/systemtap.examples/profiling/functioncallcount.stp
@@ -0,0 +1,17 @@
+# The following line command will probe all the functions
+# in kernel's memory management code:
+#
+# stap functioncallcount.stp "*@mm/*.c"
+
+probe kernel.function(@1) { # probe functions listed on commandline
+ called[probefunc()] <<< 1 # add a count efficiently
+}
+
+global called
+
+probe end {
+ foreach (fn in called-) # Sort by call count (in decreasing order)
+ # (fn+ in called) # Sort by function name
+ printf("%s %d\n", fn, @count(called[fn]))
+ exit()
+}
diff --git a/testsuite/systemtap.examples/profiling/thread-times.meta b/testsuite/systemtap.examples/profiling/thread-times.meta
new file mode 100644
index 00000000..fcbf062e
--- /dev/null
+++ b/testsuite/systemtap.examples/profiling/thread-times.meta
@@ -0,0 +1,13 @@
+title: Profile kernel functions
+name: thread-times.stp
+version: 1.0
+author: anonymous
+keywords: profiling
+subsystem: kernel
+status: production
+exit: user-controlled
+output: sorted-list
+scope: system-wide
+description: The thread-times.stp script sets up time-based sampling. Every five seconds it prints out a sorted list with the top twenty processes with samples broken down into percentage total time spent in user-space and kernel-space.
+test_check: stap -p4 thread-times.stp
+test_installcheck: stap thread-times.stp -c "sleep 1"
diff --git a/testsuite/systemtap.examples/profiling/thread-times.stp b/testsuite/systemtap.examples/profiling/thread-times.stp
new file mode 100755
index 00000000..1aeb2037
--- /dev/null
+++ b/testsuite/systemtap.examples/profiling/thread-times.stp
@@ -0,0 +1,32 @@
+#! /usr/bin/stap
+
+probe timer.profile {
+ tid=tid()
+ if (!user_mode())
+ kticks[tid] <<< 1
+ else
+ uticks[tid] <<< 1
+ ticks <<< 1
+ tids[tid] <<< 1
+}
+
+global uticks, kticks, ticks
+
+global tids
+
+probe timer.s(5), end {
+ allticks = @count(ticks)
+ printf ("%5s %7s %7s (of %d ticks)\n", "tid", "%user", "%kernel", allticks)
+ foreach (tid in tids- limit 20) {
+ uscaled = @count(uticks[tid])*10000/allticks
+ kscaled = @count(kticks[tid])*10000/allticks
+ printf ("%5d %3d.%02d%% %3d.%02d%%\n",
+ tid, uscaled/100, uscaled%100, kscaled/100, kscaled%100)
+ }
+ printf("\n")
+
+ delete uticks
+ delete kticks
+ delete ticks
+ delete tids
+}