diff options
Diffstat (limited to 'testsuite/systemtap.examples')
7 files changed, 104 insertions, 12 deletions
diff --git a/testsuite/systemtap.examples/general/inodewatch-simple.stp b/testsuite/systemtap.examples/general/inodewatch-simple.stp new file mode 100644 index 00000000..5f81008d --- /dev/null +++ b/testsuite/systemtap.examples/general/inodewatch-simple.stp @@ -0,0 +1,11 @@ +probe kernel.function ("vfs_write"),
+ kernel.function ("vfs_read")
+{
+ dev_nr = $file->f_dentry->d_inode->i_sb->s_dev
+ inode_nr = $file->f_dentry->d_inode->i_ino
+ if (dev_nr == ($1 << 20 | $2) # major/minor device
+ && inode_nr == $3)
+ printf ("%s(%d) %s 0x%x/%u\n",
+ execname(), pid(), probefunc(), dev_nr, inode_nr)
+}
+ stap -p4 para-callgraph.stp sys_read '*@fs/*.c' diff --git a/testsuite/systemtap.examples/general/inodewatch2-simple.stp b/testsuite/systemtap.examples/general/inodewatch2-simple.stp new file mode 100644 index 00000000..4fea18e6 --- /dev/null +++ b/testsuite/systemtap.examples/general/inodewatch2-simple.stp @@ -0,0 +1,12 @@ +global ATTR_MODE = 1
+
+probe kernel.function("inode_setattr") {
+ dev_nr = $inode->i_sb->s_dev
+ inode_nr = $inode->i_ino
+
+ if (dev_nr == ($1 << 20 | $2) # major/minor device
+ && inode_nr == $3
+ && $attr->ia_valid & ATTR_MODE)
+ printf ("%s(%d) %s 0x%x/%u %o %d\n",
+ execname(), pid(), probefunc(), dev_nr, inode_nr, $attr->ia_mode, uid())
+}
diff --git a/testsuite/systemtap.examples/general/para-callgraph-simple.meta b/testsuite/systemtap.examples/general/para-callgraph-simple.meta new file mode 100644 index 00000000..4a0bb251 --- /dev/null +++ b/testsuite/systemtap.examples/general/para-callgraph-simple.meta @@ -0,0 +1,7 @@ +title: Callgraph tracing with arguments +name: para-callgraph.stp +keywords: trace callgraph +subsystem: general +description: Print a timed per-thread callgraph, complete with function parameters and return values. The first parameter names the function probe points to trace. The optional second parameter names the probe points for trigger functions, which acts to enable tracing for only those functions that occur while the current thread is nested within the trigger. +test_check: stap -p4 para-callgraph.stp sys_read '*@fs/*.c' +test_installcheck: TBD diff --git a/testsuite/systemtap.examples/general/para-callgraph-simple.stp b/testsuite/systemtap.examples/general/para-callgraph-simple.stp new file mode 100755 index 00000000..17cf50a5 --- /dev/null +++ b/testsuite/systemtap.examples/general/para-callgraph-simple.stp @@ -0,0 +1,40 @@ +function trace(entry_p) {
+ if(tid() in trace)
+ printf("%s%s%s\n",thread_indent(entry_p),
+ (entry_p>0?"->":"<-"),
+ probefunc())
+}
+
+global trace
+probe kernel.function(@1).call {
+ if (execname() == "stapio") next # skip our own helper process
+ trace[tid()] = 1
+ trace(1)
+}
+probe kernel.function(@1).return {
+ trace(-1)
+ delete trace[tid()]
+}
+
+probe kernel.function(@2).call { trace(1) }
+probe kernel.function(@2).return { trace(-1) }
+function trace(entry_p) {
+ if(tid() in trace)
+ printf("%s%s%s\n",thread_indent(entry_p),
+ (entry_p>0?"->":"<-"),
+ probefunc())
+}
+
+global trace
+probe kernel.function(@1).call {
+ if (execname() == "stapio") next # skip our own helper process
+ trace[tid()] = 1
+ trace(1)
+}
+probe kernel.function(@1).return {
+ trace(-1)
+ delete trace[tid()]
+}
+
+probe kernel.function(@2).call { trace(1) }
+probe kernel.function(@2).return { trace(-1) }
diff --git a/testsuite/systemtap.examples/io/disktop.stp b/testsuite/systemtap.examples/io/disktop.stp index 20462f0a..fcfe79ed 100755 --- a/testsuite/systemtap.examples/io/disktop.stp +++ b/testsuite/systemtap.examples/io/disktop.stp @@ -14,8 +14,11 @@ global io_stat,device global read_bytes,write_bytes -probe vfs.read.return { +probe kernel.function("vfs_read").return { if ($return>0) { + dev = __file_dev($file) + devname = __find_bdevname(dev,__file_bdev($file)) + if (devname!="N/A") {/*skip read from cache*/ io_stat[pid(),execname(),uid(),ppid(),"R"] += $return device[pid(),execname(),uid(),ppid(),"R"] = devname @@ -24,8 +27,11 @@ probe vfs.read.return { } } -probe vfs.write.return { +probe kernel.function("vfs_write").return { if ($return>0) { + dev = __file_dev($file) + devname = __find_bdevname(dev,__file_bdev($file)) + if (devname!="N/A") { /*skip update cache*/ io_stat[pid(),execname(),uid(),ppid(),"W"] += $return device[pid(),execname(),uid(),ppid(),"W"] = devname @@ -37,21 +43,16 @@ probe vfs.write.return { probe timer.ms(5000) { /* skip non-read/write disk */ if (read_bytes+write_bytes) { - printf("\n%-25s, %-8s%4dKb/sec, %-7s%6dKb, %-7s%6dKb\n\n", - ctime(gettimeofday_s()),"Average:", - ((read_bytes+write_bytes)/1024)/5,"Read:", - read_bytes/1024,"Write:",write_bytes/1024) + + printf("\n%-25s, %-8s%4dKb/sec, %-7s%6dKb, %-7s%6dKb\n\n",ctime(gettimeofday_s()),"Average:", + ((read_bytes+write_bytes)/1024)/5,"Read:",read_bytes/1024,"Write:",write_bytes/1024) /* print header */ - printf("%8s %8s %8s %25s %8s %4s %12s\n", - "UID","PID","PPID","CMD","DEVICE","T","BYTES") + printf("%8s %8s %8s %25s %8s %4s %12s\n","UID","PID","PPID","CMD","DEVICE","T","BYTES") } /* print top ten I/O */ foreach ([process,cmd,userid,parent,action] in io_stat- limit 10) - printf("%8d %8d %8d %25s %8s %4s %12d\n", - userid,process,parent,cmd, - device[process,cmd,userid,parent,action], - action,io_stat[process,cmd,userid,parent,action]) + printf("%8d %8d %8d %25s %8s %4s %12d\n",userid,process,parent,cmd,device[process,cmd,userid,parent,action], action,io_stat[process,cmd,userid,parent,action]) /* clear data */ delete io_stat diff --git a/testsuite/systemtap.examples/io/traceio2-simple.meta b/testsuite/systemtap.examples/io/traceio2-simple.meta new file mode 100644 index 00000000..558539e3 --- /dev/null +++ b/testsuite/systemtap.examples/io/traceio2-simple.meta @@ -0,0 +1,13 @@ +title: Watch I/O Activity on a Particular Device Simplified +name: traceio2-simple.stp +version: 1.0 +author: Red Hat +keywords: io +subsystem: io +status: production +exit: user-controlled +output: trace +scope: system-wide +description: Print out the executable name and process number as reads and writes to the specified device occur. +test_check: stap -p4 traceio2.stp 8 5 +test_installcheck: stap traceio2.stp 8 5 -c "sleep 1" diff --git a/testsuite/systemtap.examples/io/traceio2-simple.stp b/testsuite/systemtap.examples/io/traceio2-simple.stp new file mode 100755 index 00000000..ed5efdd1 --- /dev/null +++ b/testsuite/systemtap.examples/io/traceio2-simple.stp @@ -0,0 +1,8 @@ +probe kernel.function ("vfs_write"), +kernel.function ("vfs_read") +{ +dev_nr = $file->f_dentry->d_inode->i_sb->s_dev +inode_nr = $file->f_dentry->d_inode->i_ino +if (dev_nr == ($1 << 20 | $2)) +printf ("%s(%d) %s 0x%x\n", execname(), pid(), probefunc(), dev_nr) +} |