summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorhunt <hunt>2006-03-09 20:01:16 +0000
committerhunt <hunt>2006-03-09 20:01:16 +0000
commite4aab7c771fe2b08454c6c61a7887b0146f28f70 (patch)
treec96be27daf66922b54486abb5ebce892d93a058d /examples
parent438cd7ed199ae31e60c973d78c48d2923e344687 (diff)
downloadsystemtap-steved-e4aab7c771fe2b08454c6c61a7887b0146f28f70.tar.gz
systemtap-steved-e4aab7c771fe2b08454c6c61a7887b0146f28f70.tar.xz
systemtap-steved-e4aab7c771fe2b08454c6c61a7887b0146f28f70.zip
2006-03-09 Martin Hunt <hunt@redhat.com>
* key.stp: Toy example. * prof.stp: Example profiler. * top.stp: Print the top 20 syscalls.
Diffstat (limited to 'examples')
-rw-r--r--examples/click.wavbin0 -> 1290 bytes
-rwxr-xr-xexamples/key.stp22
-rwxr-xr-xexamples/prof.stp35
-rw-r--r--examples/return.wavbin0 -> 6584 bytes
-rwxr-xr-xexamples/top.stp28
5 files changed, 85 insertions, 0 deletions
diff --git a/examples/click.wav b/examples/click.wav
new file mode 100644
index 00000000..8214b229
--- /dev/null
+++ b/examples/click.wav
Binary files differ
diff --git a/examples/key.stp b/examples/key.stp
new file mode 100755
index 00000000..6334cbbf
--- /dev/null
+++ b/examples/key.stp
@@ -0,0 +1,22 @@
+#! /usr/bin/env stap
+
+# Useless, but amusing. Based on an idea I saw on a
+# dtrace site. (wav files are from emacs).
+
+// KEY_ENTER = 28
+probe kernel.function("kbd_keycode") {
+ if ($down) {
+ if ($keycode == 28)
+ system("play return.wav")
+ else
+ system("play click.wav")
+ }
+}
+
+probe begin {
+ printf("TYPEWRITER ON\n")
+}
+
+probe end {
+ printf("DONE\n")
+}
diff --git a/examples/prof.stp b/examples/prof.stp
new file mode 100755
index 00000000..db5bdf9b
--- /dev/null
+++ b/examples/prof.stp
@@ -0,0 +1,35 @@
+#!/usr/bin/env stap
+
+# This is an example of profiling a specific command or pid.
+# It works by recordind the time when a system call is entered
+# exited.
+
+# Usage: prof.stp -c "top -n5"
+# Will start up "top" and after 5 iterations, will exit.
+#
+# Usage: prof.stp -x 3323
+# Will profile pid 3323 until it ^c is hit.
+#
+
+probe kernel.function("sys_*") {
+ if (target() == tid())
+ calltime[tid()] = gettimeofday_us()
+}
+
+probe kernel.function("sys_*").return {
+ if (target() != tid()) next
+ now = gettimeofday_us()
+ c = calltime[tid()]
+ if (!c) next
+ ttime[probefunc()] <<< now - c
+ delete calltime[tid()]
+}
+
+probe end {
+ printf("\n")
+ foreach (x in ttime)
+ printf("%-20s\tcalls:%6d\tavg time (ms):%5d\ttotal(ms):%7d\n",
+ x, @count(ttime[x]), @avg(ttime[x]), @sum(ttime[x]))
+}
+
+global calltime, ttime
diff --git a/examples/return.wav b/examples/return.wav
new file mode 100644
index 00000000..20f978cc
--- /dev/null
+++ b/examples/return.wav
Binary files differ
diff --git a/examples/top.stp b/examples/top.stp
new file mode 100755
index 00000000..26d35ec8
--- /dev/null
+++ b/examples/top.stp
@@ -0,0 +1,28 @@
+#!/usr/bin/env stap
+#
+# This script continuously lists the top 20 systemcalls on the system
+#
+
+global syscalls
+
+function print_top () {
+ cnt=0
+ log ("SYSCALL\t\t\t\tCOUNT")
+ foreach ([name] in syscalls-) {
+ printf("%-20s\t\t%5d\n",name, syscalls[name])
+ if (cnt++ == 20)
+ break
+ }
+ printf("--------------------------------------\n")
+ delete syscalls
+}
+
+probe kernel.function("sys_*") {
+ syscalls[probefunc()]++
+}
+
+# print top syscalls every 5 seconds
+probe timer.ms(5000) {
+ print_top ()
+}
+