diff options
Diffstat (limited to 'runtime/probes')
51 files changed, 0 insertions, 2185 deletions
diff --git a/runtime/probes/ChangeLog b/runtime/probes/ChangeLog deleted file mode 100644 index 47976f5c..00000000 --- a/runtime/probes/ChangeLog +++ /dev/null @@ -1,113 +0,0 @@ -2006-09-26 David Smith <dsmith@redhat.com> - - * bench/run_bench: Changed 'stpd' references to 'staprun'. - * bench/trans_bench: Ditto. - * where_func/README: Ditto. - -2005-11-08 Martin Hunt <hunt@redhat.com> - - * shellsnoop/shellsnoop.c: Updated to use new map API. - * where_func/kprobe_where_funct.c: Ditto. - * os_timer/os_timer.c (probe_start): Ditto. - * test4/test4.c: Ditto. - * scf/scf.c: Ditto. - -2005-09-08 Martin Hunt <hunt@redhat.com> - - * scf/scf.c (inst_smp_call_function): Add new verbose arg - to _stp_stack_sprint() call. - -2005-08-31 Martin Hunt <hunt@redhat.com> - - * Makefile.template: Remove KTA, KALLSYMS_LOOKUP, - and KALLSYMS_LOOKUP_NAME - -2005-08-19 Martin Hunt <hunt@redhat.com> - - * shellsnoop/shellsnoop.c: Remove STP_NETLINK_ONLY. - * stp: Deleted. Use stpd directly. - - -2005-08-01 Martin Hunt <hunt@redhat.com> - - * agg/stat1.c (probe_exit): Remove "static" - * agg/count1.c (probe_exit): Ditto. - * agg/count2.c (probe_exit): Ditto. - * bench/bench_io2.c (probe_exit): Ditto. - * bench/bench_io1.c (probe_exit): Ditto. - * bench/bench.c (probe_exit): Ditto. - * bench/bench_ret.c (probe_exit): Ditto. - * bench/bench_multi.c (probe_exit): Ditto. - * where_func/kprobe_where_funct.c (probe_exit): Ditto. - * test4/test4.c (probe_exit): Ditto. - * tasklet/stp_tasklet.c (probe_exit): Ditto. - * os_timer/os_timer.c (probe_exit): Ditto. - * scf/scf.c (probe_exit): Ditto. - -2005-07-28 Martin Hunt <hunt@redhat.com> - - * bench/ALL: Chnage to probe sys_getuid() and sys_getgid() - because those aren't used by stpd, unlike sys_read() and sys_write(). - -2005-07-11 Martin Hunt <hunt@redhat.com> - - * build_probe: Set RELAYFS correctly. - - * Makefile.template: Fix for RELAYFS. - - * stp: Moved here. All probes now use this copy. - - * ALL/stp: source the master copy of stp. - -2005-07-08 Martin Hunt <hunt@redhat.com> - - * ALL: Use new runtime.h. Change init_module() - to probe_start() and don't do transport calls. - Remove MODULE_LICENSE and cleanup_module(). - -2005-07-01 Martin Hunt <hunt@redhat.com> - - * Makefile.template (debug): New target. - - * build: Support "debug" target. - - * build_probe: Ditto. - -2005-06-28 Martin Hunt <hunt@redhat.com> - - * bench/bench_ret.c (inst_sys_write_ret): Fix prototype. - - * bench: New probe to do benchmarks. - -2005-06-23 Martin Hunt <hunt@redhat.com> - - * all probes: Modified to use latest changes to transport.h. - -2005-06-21 Martin Hunt <hunt@redhat.com> - - * build_probe (build): Add relay_flush and relay_switch_subbuf to the - list of undefines to ignore. - -2005-06-20 Tom Zanussi <zanussi@us.ibm.com> - - * added transport_mode, subbuf_size, n_subbufs to all - probes and changed _stp_transport_open() calls. - - * removed all obsolete params from stp scripts. - -2005-06-18 Martin Hunt <hunt@redhat.com> - - * build: Modified to use build_probe. - - * build_probe: New file. This does the work of building - a single probe or set of probes in a directory. - - * Makefile.template: New file. Template used by - build_probe to create Makefiles. - - * agg: New set of probes to test/demonstrate - Counter and Stat aggregations. - - * all probes modified for latest changes and new build - process. - diff --git a/runtime/probes/Makefile.template b/runtime/probes/Makefile.template deleted file mode 100644 index 5d770e95..00000000 --- a/runtime/probes/Makefile.template +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile -PWD := $(shell pwd) -RT := $(PWD)/../.. -KVERSION := $(shell uname -r) -KDIR := /lib/modules/$(KVERSION)/build include - -FLAGS := -I $(RT) RELAYFS - -DFLAGS := $(FLAGS) -D DEBUG - -obj-m := XXX.o - -default: - $(MAKE) V=1 -C $(KDIR) M=$(PWD) RT=$(RT) EXTRA_CFLAGS="$(FLAGS)" modules - -debug: - $(MAKE) V=1 -C $(KDIR) M=$(PWD) RT=$(RT) EXTRA_CFLAGS="$(DFLAGS)" modules - - -clean: - /bin/rm -rf *.o *.o.d *.ko *~ *.mod.c .*.cmd .tmp_versions diff --git a/runtime/probes/README b/runtime/probes/README deleted file mode 100644 index f3cd9fb2..00000000 --- a/runtime/probes/README +++ /dev/null @@ -1,10 +0,0 @@ -/** @dir probes -This directory contains working example probes that demonstrate and test -the runtime library. They are tested on i386 and x86_64. -*/ - -To build all probes, just type "./build" -To clean up, "./build clean" -To see a verbose build "./build -v" - -The same commands work in any probe subdirectory. diff --git a/runtime/probes/agg/README b/runtime/probes/agg/README deleted file mode 100644 index b48db1b8..00000000 --- a/runtime/probes/agg/README +++ /dev/null @@ -1,3 +0,0 @@ -/** @dir agg -Test probes to use the Counter and Stat aggregations. -*/ diff --git a/runtime/probes/agg/build b/runtime/probes/agg/build deleted file mode 100755 index f3e83244..00000000 --- a/runtime/probes/agg/build +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -../build_probe $* diff --git a/runtime/probes/agg/count1.c b/runtime/probes/agg/count1.c deleted file mode 100644 index 731b236b..00000000 --- a/runtime/probes/agg/count1.c +++ /dev/null @@ -1,102 +0,0 @@ -#define STP_NETLINK_ONLY -#define STP_NUM_STRINGS 1 - -#include "runtime.h" - -#include "counter.c" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: count1"); -MODULE_AUTHOR("Martin Hunt <hunt@redhat.com>"); - -Counter opens; -Counter reads; -Counter writes; -Counter sched; -Counter idle; - -static int inst_sys_open (struct kprobe *p, struct pt_regs *regs) -{ - _stp_counter_add (opens, 1); - return 0; -} - -static int inst_sys_read (struct kprobe *p, struct pt_regs *regs) -{ - _stp_counter_add (reads, 1); - return 0; -} - -static int inst_sys_write (struct kprobe *p, struct pt_regs *regs) -{ - _stp_counter_add (writes, 1); - return 0; -} - -static int inst_schedule(struct kprobe *p, struct pt_regs *regs) -{ - _stp_counter_add (sched, 1); - return 0; -} - -static int inst_idle_cpu(struct kprobe *p, struct pt_regs *regs) -{ - _stp_counter_add (idle, 1); - return 0; -} - -static struct kprobe stp_probes[] = { - { - .addr = "sys_open", - .pre_handler = inst_sys_open - }, - { - .addr = "sys_read", - .pre_handler = inst_sys_read - }, - { - .addr = "sys_write", - .pre_handler = inst_sys_write - }, - { - .addr = "schedule", - .pre_handler = inst_schedule - }, - { - .addr = "idle_cpu", - .pre_handler = inst_idle_cpu - }, -}; - -#define MAX_STP_ROUTINE (sizeof(stp_probes)/sizeof(struct kprobe)) - -int probe_start(void) -{ - opens = _stp_counter_init(); - reads = _stp_counter_init(); - writes = _stp_counter_init(); - sched = _stp_counter_init(); - idle = _stp_counter_init(); - - return _stp_register_kprobes (stp_probes, MAX_STP_ROUTINE); -} - -void probe_exit (void) -{ - int i; - - _stp_unregister_kprobes (stp_probes, MAX_STP_ROUTINE); - - for_each_cpu(i) - _stp_printf ("sched calls for cpu %d = %lld\n", i, _stp_counter_get_cpu(sched, i, 0)); - - _stp_print ("\n\n"); - - _stp_printf ("open calls: %lld\n", _stp_counter_get(opens, 0)); - _stp_printf ("read calls: %lld\n", _stp_counter_get(reads, 0)); - _stp_printf ("write calls: %lld\n", _stp_counter_get(writes, 0)); - _stp_printf ("sched calls: %lld\n", _stp_counter_get(sched, 0)); - _stp_printf ("idle calls: %lld\n", _stp_counter_get(idle, 0)); - _stp_print_flush(); -} - diff --git a/runtime/probes/agg/count2.c b/runtime/probes/agg/count2.c deleted file mode 100644 index 23987759..00000000 --- a/runtime/probes/agg/count2.c +++ /dev/null @@ -1,81 +0,0 @@ -#define STP_NETLINK_ONLY -#define STP_NUM_STRINGS 1 -#include "runtime.h" - -#include "counter.c" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: count2"); -MODULE_AUTHOR("Martin Hunt <hunt@redhat.com>"); - -Counter opens; -Counter reads; -Counter writes; -Counter read_bytes; -Counter write_bytes; - -asmlinkage long inst_sys_open (const char __user * filename, int flags, int mode) -{ - _stp_counter_add (opens, 1); - jprobe_return(); - return 0; -} - -asmlinkage ssize_t inst_sys_read (unsigned int fd, char __user * buf, size_t count) -{ - _stp_counter_add (reads, 1); - _stp_counter_add (read_bytes, count); - jprobe_return(); - return 0; -} - -asmlinkage ssize_t inst_sys_write (unsigned int fd, const char __user * buf, size_t count) -{ - _stp_counter_add (writes, 1); - _stp_counter_add (write_bytes, count); - jprobe_return(); - return 0; -} - -static struct jprobe stp_probes[] = { - { - .kp.addr = (kprobe_opcode_t *)"sys_open", - .entry = (kprobe_opcode_t *) inst_sys_open - }, - { - .kp.addr = (kprobe_opcode_t *)"sys_read", - .entry = (kprobe_opcode_t *) inst_sys_read - }, - { - .kp.addr = (kprobe_opcode_t *)"sys_write", - .entry = (kprobe_opcode_t *) inst_sys_write - }, -}; - -#define MAX_STP_ROUTINE (sizeof(stp_probes)/sizeof(struct jprobe)) - -int probe_start(void) -{ - opens = _stp_counter_init(); - reads = _stp_counter_init(); - writes = _stp_counter_init(); - read_bytes = _stp_counter_init(); - write_bytes = _stp_counter_init(); - - return _stp_register_jprobes (stp_probes, MAX_STP_ROUTINE); -} - -void probe_exit (void) -{ - int i; - - _stp_unregister_jprobes (stp_probes, MAX_STP_ROUTINE); - - _stp_printf ("open calls: %lld\n", _stp_counter_get(opens, 0)); - _stp_printf ("read calls: %lld\n", _stp_counter_get(reads, 0)); - _stp_printf ("read bytes: %lld\n", _stp_counter_get(read_bytes, 0)); - _stp_printf ("write calls: %lld\n", _stp_counter_get(writes, 0)); - _stp_printf ("write bytes: %lld\n", _stp_counter_get(write_bytes, 0)); - - _stp_print_flush(); -} diff --git a/runtime/probes/agg/stat1.c b/runtime/probes/agg/stat1.c deleted file mode 100644 index 4e0cf961..00000000 --- a/runtime/probes/agg/stat1.c +++ /dev/null @@ -1,72 +0,0 @@ -#define STP_NETLINK_ONLY -#define STP_NUM_STRINGS 1 -#include "runtime.h" -#include "stat.c" -#include "counter.c" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: stat1"); -MODULE_AUTHOR("Martin Hunt <hunt@redhat.com>"); - - -Counter opens; -Stat reads; -Stat writes; - -asmlinkage long inst_sys_open (const char __user * filename, int flags, int mode) -{ - _stp_counter_add (opens, 1); - jprobe_return(); - return 0; -} - -asmlinkage ssize_t inst_sys_read (unsigned int fd, char __user * buf, size_t count) -{ - _stp_stat_add (reads, count); - jprobe_return(); - return 0; -} - -asmlinkage ssize_t inst_sys_write (unsigned int fd, const char __user * buf, size_t count) -{ - _stp_stat_add (writes, count); - jprobe_return(); - return 0; -} - -static struct jprobe stp_probes[] = { - { - .kp.addr = (kprobe_opcode_t *)"sys_open", - .entry = (kprobe_opcode_t *) inst_sys_open - }, - { - .kp.addr = (kprobe_opcode_t *)"sys_read", - .entry = (kprobe_opcode_t *) inst_sys_read - }, - { - .kp.addr = (kprobe_opcode_t *)"sys_write", - .entry = (kprobe_opcode_t *) inst_sys_write - }, -}; - -#define MAX_STP_ROUTINE (sizeof(stp_probes)/sizeof(struct jprobe)) - -int probe_start(void) -{ - opens = _stp_counter_init(); - reads = _stp_stat_init(HIST_LOG,24); - writes = _stp_stat_init(HIST_LINEAR,0,1000,50); - - return _stp_register_jprobes (stp_probes, MAX_STP_ROUTINE); -} - -void probe_exit (void) -{ - _stp_unregister_jprobes (stp_probes, MAX_STP_ROUTINE); - - _stp_printf ("OPENS: %lld\n", _stp_counter_get(opens, 0)); - _stp_stat_print (reads, "READS: count:%C sum:%S avg:%A min:%m max:%M\n%H", 0); - _stp_stat_print (writes, "WRITES: count:%C sum:%S avg:%A min:%m max:%M\n%H", 0); - - _stp_print_flush(); -} diff --git a/runtime/probes/agg/targets b/runtime/probes/agg/targets deleted file mode 100644 index 614a00d2..00000000 --- a/runtime/probes/agg/targets +++ /dev/null @@ -1,3 +0,0 @@ -count1 -count2 -stat1 diff --git a/runtime/probes/bench/Makefile b/runtime/probes/bench/Makefile deleted file mode 100644 index 9154e3dc..00000000 --- a/runtime/probes/bench/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -all: ttest itest - -ttest: ttest.c - gcc -Wall -O3 -o ttest ttest.c - -itest: itest.c - gcc -Wall -O3 -o itest itest.c - -clean: - /bin/rm -f itest ttest stpd_cpu* xxx* diff --git a/runtime/probes/bench/README b/runtime/probes/bench/README deleted file mode 100644 index 04801a74..00000000 --- a/runtime/probes/bench/README +++ /dev/null @@ -1,18 +0,0 @@ -This is a benchmark program for the SystemTap Runtime. - -It works by instrumenting sys_uid() and sys_gid(). It calls each a million -times and measures how long it takes. Then it puts an empty kprobe on one and jprobe on the -other and measures that. Subtracting the difference between the two runs gives -the kprobe and jprobe overhead. The process is then repeated for more -complicated probes. - -To Start: - -1. Build the test program. -> gcc -O3 -o time time.c - -2. Run the benchmarks -> ./run_bench - - - diff --git a/runtime/probes/bench/bench.c b/runtime/probes/bench/bench.c deleted file mode 100644 index a00efa05..00000000 --- a/runtime/probes/bench/bench.c +++ /dev/null @@ -1,51 +0,0 @@ -#define STP_NETLINK_ONLY -#define STP_NUM_STRINGS 1 - -#include "runtime.h" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: bench"); -MODULE_AUTHOR("Martin Hunt"); - -asmlinkage ssize_t inst_sys_getgid (unsigned int fd, const char __user * buf, size_t count) -{ - jprobe_return(); - return 0; -} - -static int inst_sys_getuid (struct kprobe *p, struct pt_regs *regs) -{ - return 0; -} - -static struct jprobe jp[] = { - { - .kp.addr = (kprobe_opcode_t *)"sys_getgid", - .entry = (kprobe_opcode_t *) inst_sys_getgid - }, -}; - -static struct kprobe kp[] = { - { - .addr = "sys_getuid", - .pre_handler = inst_sys_getuid - } -}; - -#define NUM_JPROBES (sizeof(jp)/sizeof(struct jprobe)) -#define NUM_KPROBES (sizeof(kp)/sizeof(struct kprobe)) - -int probe_start(void) -{ - int ret = _stp_register_jprobes (jp, NUM_JPROBES); - if (ret >= 0) - if ((ret = _stp_register_kprobes (kp, NUM_KPROBES)) < 0) - _stp_unregister_jprobes (jp, NUM_JPROBES); - return ret; -} - -void probe_exit (void) -{ - _stp_unregister_jprobes (jp, NUM_JPROBES); - _stp_unregister_kprobes (kp, NUM_KPROBES); -} diff --git a/runtime/probes/bench/bench_io1.c b/runtime/probes/bench/bench_io1.c deleted file mode 100644 index 8bdc4018..00000000 --- a/runtime/probes/bench/bench_io1.c +++ /dev/null @@ -1,46 +0,0 @@ -#define STP_NUM_STRINGS 1 - -#include "runtime.h" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: bench_io1"); -MODULE_AUTHOR("Martin Hunt"); - -static int inst_sys_getuid (struct kprobe *p, struct pt_regs *regs) -{ - /* print 100 chars */ - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_print_flush(); - return 0; -} - -static int inst_sys_getgid (struct kprobe *p, struct pt_regs *regs) -{ - /* print 100 chars */ - _stp_print_cstr ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_print_flush(); - return 0; -} - -static struct kprobe kp[] = { - { - .addr = "sys_getuid", - .pre_handler = inst_sys_getuid - }, - { - .addr = "sys_getgid", - .pre_handler = inst_sys_getgid - } -}; - -#define NUM_KPROBES (sizeof(kp)/sizeof(struct kprobe)) - -int probe_start(void) -{ - return _stp_register_kprobes (kp, NUM_KPROBES); -} - -void probe_exit (void) -{ - _stp_unregister_kprobes (kp, NUM_KPROBES); -} diff --git a/runtime/probes/bench/bench_io2.c b/runtime/probes/bench/bench_io2.c deleted file mode 100644 index 14216913..00000000 --- a/runtime/probes/bench/bench_io2.c +++ /dev/null @@ -1,47 +0,0 @@ -#define STP_RELAYFS -#define STP_NUM_STRINGS 1 - -#include "runtime.h" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: bench_io2"); -MODULE_AUTHOR("Martin Hunt"); - -static int inst_sys_getuid (struct kprobe *p, struct pt_regs *regs) -{ - /* print 100 chars */ - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_print_flush(); - return 0; -} - -static int inst_sys_getgid (struct kprobe *p, struct pt_regs *regs) -{ - /* print 100 chars */ - _stp_print_cstr ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_print_flush(); - return 0; -} - -static struct kprobe kp[] = { - { - .addr = "sys_getuid", - .pre_handler = inst_sys_getuid - }, - { - .addr = "sys_getgid", - .pre_handler = inst_sys_getgid - } -}; - -#define NUM_KPROBES (sizeof(kp)/sizeof(struct kprobe)) - -int probe_start(void) -{ - return _stp_register_kprobes (kp, NUM_KPROBES); -} - -void probe_exit (void) -{ - _stp_unregister_kprobes (kp, NUM_KPROBES); -} diff --git a/runtime/probes/bench/bench_io3.c b/runtime/probes/bench/bench_io3.c deleted file mode 100644 index a491edd9..00000000 --- a/runtime/probes/bench/bench_io3.c +++ /dev/null @@ -1,44 +0,0 @@ -#define STP_NUM_STRINGS 1 - -#include "runtime.h" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: bench_io3"); -MODULE_AUTHOR("Martin Hunt"); - -static int inst_sys_getuid (struct kprobe *p, struct pt_regs *regs) -{ - /* print 1000 chars */ - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_print_flush(); - return 0; -} - - -static struct kprobe kp[] = { - { - .addr = "sys_getuid", - .pre_handler = inst_sys_getuid - }, -}; - -#define NUM_KPROBES (sizeof(kp)/sizeof(struct kprobe)) - -int probe_start(void) -{ - return _stp_register_kprobes (kp, NUM_KPROBES); -} - -void probe_exit (void) -{ - _stp_unregister_kprobes (kp, NUM_KPROBES); -} diff --git a/runtime/probes/bench/bench_io4.c b/runtime/probes/bench/bench_io4.c deleted file mode 100644 index a6b19ab5..00000000 --- a/runtime/probes/bench/bench_io4.c +++ /dev/null @@ -1,45 +0,0 @@ -#define STP_RELAYFS -#define STP_NUM_STRINGS 1 - -#include "runtime.h" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: bench_io3"); -MODULE_AUTHOR("Martin Hunt"); - -static int inst_sys_getuid (struct kprobe *p, struct pt_regs *regs) -{ - /* print 1000 chars */ - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); - _stp_print_flush(); - return 0; -} - - -static struct kprobe kp[] = { - { - .addr = "sys_getuid", - .pre_handler = inst_sys_getuid - }, -}; - -#define NUM_KPROBES (sizeof(kp)/sizeof(struct kprobe)) - -int probe_start(void) -{ - return _stp_register_kprobes (kp, NUM_KPROBES); -} - -void probe_exit (void) -{ - _stp_unregister_kprobes (kp, NUM_KPROBES); -} diff --git a/runtime/probes/bench/bench_multi.c b/runtime/probes/bench/bench_multi.c deleted file mode 100644 index a6dc38a4..00000000 --- a/runtime/probes/bench/bench_multi.c +++ /dev/null @@ -1,73 +0,0 @@ -#define STP_NETLINK_ONLY -#define STP_NUM_STRINGS 1 - -#include "runtime.h" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: bench_multi"); -MODULE_AUTHOR("Martin Hunt"); - -static int inst_sys_getuid1 (struct kprobe *p, struct pt_regs *regs) -{ - return 0; -} -static int inst_sys_getuid2 (struct kprobe *p, struct pt_regs *regs) -{ - return 0; -} - -static int inst_sys_getgid1 (struct kprobe *p, struct pt_regs *regs) -{ - return 0; -} -static int inst_sys_getgid2 (struct kprobe *p, struct pt_regs *regs) -{ - return 0; -} -static int inst_sys_getgid3 (struct kprobe *p, struct pt_regs *regs) -{ - return 0; -} -static int inst_sys_getgid4 (struct kprobe *p, struct pt_regs *regs) -{ - return 0; -} - -static struct kprobe kp[] = { - { - .addr = "sys_getuid", - .pre_handler = inst_sys_getuid1 - }, - { - .addr = "sys_getuid", - .pre_handler = inst_sys_getuid2 - }, - { - .addr = "sys_getgid", - .pre_handler = inst_sys_getgid1 - }, - { - .addr = "sys_getgid", - .pre_handler = inst_sys_getgid2 - }, - { - .addr = "sys_getgid", - .pre_handler = inst_sys_getgid3 - }, - { - .addr = "sys_getgid", - .pre_handler = inst_sys_getgid4 - } -}; - -#define NUM_KPROBES (sizeof(kp)/sizeof(struct kprobe)) - -int probe_start(void) -{ - return _stp_register_kprobes (kp, NUM_KPROBES); -} - -void probe_exit (void) -{ - _stp_unregister_kprobes (kp, NUM_KPROBES); -} diff --git a/runtime/probes/bench/bench_ret.c b/runtime/probes/bench/bench_ret.c deleted file mode 100644 index 40f2ddad..00000000 --- a/runtime/probes/bench/bench_ret.c +++ /dev/null @@ -1,61 +0,0 @@ -#define STP_NETLINK_ONLY -#define STP_NUM_STRINGS 1 -#define USE_RET_PROBES - -#include "runtime.h" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: bench_ret"); -MODULE_AUTHOR("Martin Hunt"); - -static int inst_sys_getuid (struct kprobe *p, struct pt_regs *regs) -{ - return 0; -} - -static int inst_sys_getgid_ret (struct kretprobe_instance *ri, struct pt_regs *regs) -{ - return 0; -} - -static int inst_sys_getgid (struct kprobe *p, struct pt_regs *regs) -{ - return 0; -} - -static struct kretprobe kpr[] = { - { - .kp.addr = "sys_getuid", - .handler = inst_sys_getuid - }, - { - .kp.addr = "sys_getgid", - .handler = inst_sys_getgid_ret - } -}; - -static struct kprobe kp[] = { - { - .addr = "sys_getgid", - .pre_handler = inst_sys_getgid - } -}; - - -#define NUM_KPROBES (sizeof(kpr)/sizeof(struct kretprobe)) - -int probe_start(void) -{ - int ret = _stp_register_kretprobes (kpr, NUM_KPROBES); - if (ret >= 0) { - if ((ret = _stp_register_kprobes (kp, 1)) < 0) - _stp_unregister_kretprobes (kpr, NUM_KPROBES); - } - return ret; -} - -void probe_exit (void) -{ - _stp_unregister_kretprobes (kpr, NUM_KPROBES); - _stp_unregister_kprobes (kp, 1); -} diff --git a/runtime/probes/bench/build b/runtime/probes/bench/build deleted file mode 100755 index f3e83244..00000000 --- a/runtime/probes/bench/build +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -../build_probe $* diff --git a/runtime/probes/bench/check_modules b/runtime/probes/bench/check_modules deleted file mode 100755 index c3ab9ac3..00000000 --- a/runtime/probes/bench/check_modules +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -RELAYFS=`grep " relayfs_poll" /boot/System.map-\`uname -r\`` -if [ -z "$RELAYFS" ] -then - RELAYFS=`lsmod | grep relayfs` - if [ -z "$RELAYFS" ] - then - /sbin/insmod ../../relayfs/relayfs.ko - fi -fi - -if [ ! -d "/mnt/relay" ] -then - mkdir /mnt/relay -fi - -MOUNT=`mount | grep relayfs |awk '{print $1}'` -if [ "$MOUNT" != "relayfs" ] -then - mount -t relayfs relayfs /mnt/relay -fi - -STP_CONTROL=`lsmod | grep stp_control |awk '{print $1}'` -if [ "$STP_CONTROL" != "stp_control" ] -then - /sbin/insmod ../../transport/stp-control.ko -fi diff --git a/runtime/probes/bench/itest.c b/runtime/probes/bench/itest.c deleted file mode 100644 index 8ac11b8f..00000000 --- a/runtime/probes/bench/itest.c +++ /dev/null @@ -1,71 +0,0 @@ -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <sys/time.h> -#include <stdlib.h> -#include <sys/resource.h> -#include <unistd.h> - -typedef unsigned long long uint64; -struct rusage rstart; -struct timeval tstart, tstop; -uint64 ttime = 0; - -void start() -{ - gettimeofday (&tstart, NULL); - getrusage (RUSAGE_SELF, &rstart); -} - -uint64 usecs (struct timeval *tv) -{ - return tv->tv_sec * 1000000 + tv->tv_usec; -} - -uint64 stop() -{ - struct rusage rend; - getrusage (RUSAGE_SELF, &rend); - gettimeofday (&tstop, NULL); - uint64 utime = usecs(&rend.ru_utime) - usecs(&rstart.ru_utime); - uint64 stime = usecs(&rend.ru_stime) - usecs(&rstart.ru_stime); - ttime = usecs(&tstop) - usecs(&tstart); - return utime + stime; -} - -void usage(char *name) -{ - printf ("Usage %s [time]\nWhere \"time\" is millions of times to loop.\n", name); - exit(1); -} - -int main(int argc, char *argv[]) -{ - int i, n = 1; - uint64 nsecs; - - if (argc > 2) - usage(argv[0]); - - if (argc == 2) { - n = strtol(argv[1], NULL, 10); - if (n == 0) - usage(argv[0]); - } - - - start(); - for (i = 0; i < n * 1000000; i++) - getuid(); - - nsecs = stop() / (n * 1000); - - /* returns - nanosecs per call (user + system time) - elapsed usecs (real time) - */ - printf("%lld %.2f\n", nsecs, ttime/1000000.0); - - return 0; -} diff --git a/runtime/probes/bench/run_bench b/runtime/probes/bench/run_bench deleted file mode 100755 index a9442d3b..00000000 --- a/runtime/probes/bench/run_bench +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/tclsh -# -*- tcl -*- - -proc do_time {module n} { - global Failures - - # start kprobes - if {[catch {exec ../../stpd/staprun -rmq $module.ko > xxx &} pid]} { - puts $pid - exit -1 - } - - exec sleep 2 - - # get the timings while kprobes running - if {[catch {exec ./ttest $n} res2]} { - puts $res2 - exit -1 - } - - # terminate kprobes - if {[catch {exec kill -s SIGINT $pid} res]} { - puts $res - } - - exec sleep 2 - - # look for warnings - exec tail xxx >xxx.tail - if {[catch {open xxx.tail r} fd]} { - puts "Cannot open test output\n" - exit -1 - } - - set Failures 0 - while {[gets $fd line] >= 0} { - if {[regexp {^\033\[33mWARNING: \033\[0mThere were ([0-9]*) transport failures.} $line match var]} { - set Failures $var - break - } - } - close $fd - exec /bin/rm -f xxx xxx.out - return $res2 -} - -######## START HERE ########### - - -set nproc [exec grep ^processor /proc/cpuinfo | wc -l] -if {![catch {exec grep "physical id" /proc/cpuinfo} phyid]} { - foreach phy [split $phyid \n] { - set cpu($phy) 1 - } -} -set model [exec grep "model name" /proc/cpuinfo] -set model [lindex [split $model \n] 0] -set model [string range $model [expr [string first : $model]+1] end] -set model [string trimleft $model] - -puts "STP BENCH for [exec uname -r] on [exec uname -m]" -if {[file exists /etc/redhat-release]} { - puts [exec cat /etc/redhat-release] -} -puts "[exec uname -n]: [exec uptime]" -if {$nproc > 1} { - puts "processors: $nproc ([array size cpu] physical) $model" -} else { - puts "processors: $nproc $model" -} -set mem [split [exec cat /proc/meminfo] \n] -puts "[lindex $mem 0] [lindex $mem 1]" -puts "--------------------------------------" - -# get the timings without kprobes -if {[catch {exec ./ttest 4} res1]} { - puts $res1 - exit -1 -} - -set r_overhead [lindex $res1 0] -set w_overhead [lindex $res1 1] - -puts "function call overhead = $r_overhead ns" -puts "--------------------------------------" - -set res2 [do_time bench 4] -set t_kprobe [expr [lindex $res2 0] - $r_overhead] -set t_jprobe [expr [lindex $res2 1] - $w_overhead] - -puts "Jprobes overhead = $t_jprobe ns" -puts "Kprobes overhead = $t_kprobe ns" -puts "--------------------------------------" - -if {[file exists bench_ret.ko]} { - set res2 [do_time bench_ret 4] - set t_ret [expr [lindex $res2 0] - $r_overhead] - set t_entret [expr [lindex $res2 1] - $w_overhead] - - puts "Return probe overhead = $t_ret ns" - puts "Entry+Return probe overhead = $t_entret ns" - puts "--------------------------------------" -} - -set res2 [do_time bench_multi 4] -set t_k2 [expr [lindex $res2 0] - $r_overhead] -set t_k4 [expr [lindex $res2 1] - $w_overhead] - -puts "2 kprobes on same func = $t_k2 ns" -puts "4 kprobes on same func = $t_k4 ns" -puts "--------------------------------------" - -set res2 [do_time bench_io1 1] -# subtract function call overhead and kprobe overhead -set t_printf [expr [lindex $res2 0] - $r_overhead - $t_kprobe] -set t_print [expr [lindex $res2 1] - $w_overhead - $t_kprobe] - -puts "PROCFS" -puts "_stp_printf on 100 chars = $t_printf ns." -puts "_stp_print on 100 chars = $t_print ns." -puts "Transport failures: $Failures" -puts "--------------------------------------" -exec sleep 4 - -set res2 [do_time bench_io2 1] -# subtract function call overhead and kprobe overhead -set t_printf [expr [lindex $res2 0] - $r_overhead - $t_kprobe] -set t_print [expr [lindex $res2 1] - $w_overhead - $t_kprobe] - -puts "RELAYFS" -puts "_stp_printf on 100 chars = $t_printf ns." -puts "_stp_print on 100 chars = $t_print ns." -puts "Transport failures: $Failures" -puts "--------------------------------------" - -exec /bin/rm -f stpd_cpu* diff --git a/runtime/probes/bench/targets b/runtime/probes/bench/targets deleted file mode 100644 index 6c89c8d7..00000000 --- a/runtime/probes/bench/targets +++ /dev/null @@ -1,7 +0,0 @@ -bench -bench_io1 -bench_io2 -bench_io3 -bench_io4 -bench_ret -bench_multi diff --git a/runtime/probes/bench/trans_bench b/runtime/probes/bench/trans_bench deleted file mode 100755 index 12adbaff..00000000 --- a/runtime/probes/bench/trans_bench +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/tclsh -# -*- tcl -*- - -proc do_time {module n buf} { - global Failures Filesize - - # start kprobes - if {[catch {exec ../../stpd/staprun -b $buf $module.ko > xxx &} pid]} { - puts $pid - exit -1 - } - - exec sleep 2 - - # get the timings while kprobes running - if {[catch {exec ./itest $n} res2]} { - puts "itest failed: $res2" - exit -1 - } - - exec sleep 4 - # terminate kprobes - if {[catch {exec kill -s SIGINT $pid} res]} { - puts "Kill failed: $res" - } - - exec sleep 4 - - # look for warnings - exec tail xxx >xxx.tail - if {[catch {open xxx.tail r} fd]} { - puts "Cannot open test output\n" - exit -1 - } - - set Failures 0 - while {[gets $fd line] >= 0} { - if {[regexp {^\033\[33mWARNING: \033\[0mThere were ([0-9]*) transport failures.} $line match var]} { - set Failures $var - break - } - } - close $fd - - set Filesize [file size xxx] - exec /bin/rm -f xxx xxx.out - return $res2 -} - -######## START HERE ########### - - -set nproc [exec grep ^processor /proc/cpuinfo | wc -l] -if {![catch {exec grep "physical id" /proc/cpuinfo} phyid]} { - foreach phy [split $phyid \n] { - set cpu($phy) 1 - } -} -set model [exec grep "model name" /proc/cpuinfo] -set model [lindex [split $model \n] 0] -set model [string range $model [expr [string first : $model]+1] end] -set model [string trimleft $model] - -puts "TRANS BENCH for [exec uname -r] on [exec uname -m]" -if {[file exists /etc/redhat-release]} { - puts [exec cat /etc/redhat-release] -} -puts "[exec uname -n]: [exec uptime]" -if {$nproc > 1} { - puts "processors: $nproc ([array size cpu] physical) $model" -} else { - puts "processors: $nproc $model" -} -set mem [split [exec cat /proc/meminfo] \n] -puts "[lindex $mem 0] [lindex $mem 1]" -puts "--------------------------------------" - -# load the modules -if {[catch {exec stp_check} res]} { - puts $res - exit -1 -} - -# warmup -exec ./itest 20 > /dev/null - -set res1 [do_time bench 1 1] -set call_overhead [lindex $res1 0] - -puts "Function call plus kprobe overhead = $call_overhead ns per call" -puts "--------------------------------------" - - -set max 5 -set n 1 -set buf 1 -while {$buf <= 64 && $n < $max} { - set Failures 0 - while {!$Failures && $n < $max} { - set res2 [do_time bench_io1 $n $buf] - set t_printf [expr [lindex $res2 0] - $call_overhead] - set total_print [lindex $res2 1] - puts "PROCFS with ${buf}MB buffers" - puts "_stp_printf on 100 chars = $t_printf ns / call system + user time." - if {$t_printf < 0} { - puts "res2=$res2" - exit - } - puts "_stp_printf of [expr $n * 100]MB in $total_print secs real time." - puts "Transfer rate = [format "%6.2f" [expr ($n * 100)/$total_print]] MB/sec" - puts "Transport failures: $Failures" - if {$Filesize != [expr $n * 100000000]} { - puts "WARNING: file size was $Filesize (expected [expr $n * 100000000])." - } - puts "--------------------------------------" - if {$Failures == 0} {incr n} - } - set buf [expr $buf + $buf] -} - -set max 5 -set n 1 -set buf 1 -while {$buf <= 64 && $n < $max} { - set Failures 0 - while {!$Failures && $n < $max} { - set res2 [do_time bench_io2 $n $buf] - set t_printf [expr [lindex $res2 0] - $call_overhead] - set total_print [lindex $res2 1] - puts "RELAYFS with ${buf}MB buffers" - puts "_stp_printf on 100 chars = $t_printf ns / call system + user time." - if {$t_printf < 0} { - puts "res2=$res2" - exit - } - puts "_stp_printf of [expr $n * 100]MB in $total_print secs real time." - puts "Transfer rate = [format "%6.2f" [expr ($n * 100)/$total_print]] MB/sec" - puts "Transport failures: $Failures" - if {$Filesize != [expr $n * 100000000]} { - puts "WARNING: file size was $Filesize (expected [expr $n * 100000000])." - } - puts "--------------------------------------" - if {$Failures == 0} {incr n} - } - set buf [expr $buf + $buf] -} - -set Failures 0 -set buf 1 -set res2 [do_time bench_io3 1 $buf] -set t_printf [expr [lindex $res2 0] - $call_overhead] -set total_print [lindex $res2 1] -puts "PROCFS with ${buf}MB buffers" -puts "_stp_printf on 1000 chars = $t_printf ns / call system + user time." -if {$t_printf < 0} { - puts "res2=$res2" - exit -} -puts "_stp_printf of 1GB in $total_print secs real time." -puts "Transfer rate = [format "%6.2f" [expr 1000/$total_print]] MB/sec" -puts "Transport failures: $Failures" -if {$Filesize != 1000000000} { - puts "WARNING: file size was $Filesize (expected 1000000000)." -} -puts "--------------------------------------" - -set Failures 0 -set buf 1 -set res2 [do_time bench_io4 1 $buf] -set t_printf [expr [lindex $res2 0] - $call_overhead] -set total_print [lindex $res2 1] -puts "RELAYFS with ${buf}MB buffers" -puts "_stp_printf on 1000 chars = $t_printf ns / call system + user time." -if {$t_printf < 0} { - puts "res2=$res2" - exit -} -puts "_stp_printf of 1GB in $total_print secs real time." -puts "Transfer rate = [format "%6.2f" [expr 1000/$total_print]] MB/sec" -puts "Transport failures: $Failures" -if {$Filesize != 1000000000} { - puts "WARNING: file size was $Filesize (expected 1000000000)." -} -puts "--------------------------------------" - -exec /bin/rm -f stpd_cpu* diff --git a/runtime/probes/bench/ttest.c b/runtime/probes/bench/ttest.c deleted file mode 100644 index 93b37c84..00000000 --- a/runtime/probes/bench/ttest.c +++ /dev/null @@ -1,74 +0,0 @@ -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <sys/time.h> -#include <stdlib.h> -#include <sys/resource.h> -#include <unistd.h> - -typedef unsigned long long uint64; -struct rusage rstart; - -void start() -{ - getrusage (RUSAGE_SELF, &rstart); -} - -uint64 usecs (struct timeval *tv) -{ - return tv->tv_sec * 1000000 + tv->tv_usec; -} - -uint64 stop() -{ - struct rusage rend; - getrusage (RUSAGE_SELF, &rend); - uint64 utime = usecs(&rend.ru_utime) - usecs(&rstart.ru_utime); - uint64 stime = usecs(&rend.ru_stime) - usecs(&rstart.ru_stime); - return utime + stime; -} - -void usage(char *name) -{ - printf ("Usage %s [time]\nWhere \"time\" is millions of times to loop.\n", name); - exit(1); -} - -int main(int argc, char *argv[]) -{ - int i, n = 1; - uint64 nsecs; - - if (argc > 2) - usage(argv[0]); - - if (argc == 2) { - n = strtol(argv[1], NULL, 10); - if (n == 0) - usage(argv[0]); - } - - /* large warmup time */ - for (i = 0; i < n * 1000000; i++) { - getuid(); - } - - start(); - for (i = 0; i < n * 1000000; i++) - getuid(); - - nsecs = stop() / (n * 1000); - - printf("%lld ", nsecs); - - start(); - for (i = 0; i < n * 1000000; i++) - getgid(); - - nsecs = stop() / (n * 1000); - - printf("%lld\n", nsecs); - - return 0; -} diff --git a/runtime/probes/build b/runtime/probes/build deleted file mode 100755 index ad65b0dc..00000000 --- a/runtime/probes/build +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/tclsh -# -*- tcl -*- - -# simple script to build each probe directory - -proc usage {} { - puts "Usage: build \[-v\] \[clean\] \[debug\]" - exit -} - -set clean "" -set verbose "" -set debug "" - -foreach arg $argv { - if {$arg == "clean"} { - set clean $arg - } elseif {$arg == "-v"} { - set verbose $arg - } elseif {$arg == "debug"} { - set debug $arg - } else { - usage - } -} - -set cmd "exec ../build_probe $verbose $clean" - -foreach filename [lsort [glob *]] { - if {$filename != "CVS" && [file isdirectory $filename]} { - cd $filename - if {[catch {exec ../build_probe $verbose $clean $debug} res]} { - puts $res - exit - } - puts $res - cd .. - } -} - diff --git a/runtime/probes/build_probe b/runtime/probes/build_probe deleted file mode 100755 index 7e3207b1..00000000 --- a/runtime/probes/build_probe +++ /dev/null @@ -1,154 +0,0 @@ -#!/usr/bin/tclsh -# -*- tcl -*- - -proc usage {} { - puts "Usage: build \[-v\] \[clean\]" - exit -1 -} - -# use Makefile.template to generate a Makefile -proc create_makefile {target relayfs} { - if {[catch {open ../Makefile.template r} fd]} { - puts "ERROR opening ../Makefile.template" - exit -1 - } - if {[catch {open Makefile w} mfd]} { - puts "ERROR creating Makefile" - exit -1 - } - while {[gets $fd line] >= 0} { - if {[regsub XXX $line $target newline]} { - set line $newline - } - if {[regsub RELAYFS $line $relayfs newline]} { - set line $newline - } - puts $mfd $line - } - close $fd - close $mfd -} - -proc build {{target ""}} { - global clean verbose debug - if {$target == ""} { - set target [file tail [pwd]] - } - if {$clean} { - puts "Cleaning $target" - if {[catch {exec make clean >& compile.errors} res]} { - [exec cat compile.errors] - exit -1 - } - } else { - puts "Building $target" - - if {$debug == ""} { - if {[catch {exec make >& compile.errors} res]} { - puts "\n------------ Compile error in $target -------------------\n" - if {[catch {open compile.errors r} fd]} { - puts "Compile failed for unknown reasons" - exit -1 - } - while {[gets $fd line] >= 0} { - puts $line - } - close $fd - exit -1 - } - } else { - if {[catch {exec make debug >& compile.errors} res]} { - puts "\n------------ Compile error in $target -------------------\n" - if {[catch {open compile.errors r} fd]} { - puts "Compile failed for unknown reasons" - exit -1 - } - while {[gets $fd line] >= 0} { - puts $line - } - close $fd - exit -1 - } - } - - if {![catch {open compile.errors r} fd]} { - # search for warnings - set bad 0 - while {[gets $fd line] >= 0} { - if {$verbose} { - puts $line - } else { - if {[regexp {[^W]*([A-Za-z][A-Za-z0-9_]*)[^\"]*\"([^\"]*)} $line match warn var]} { - if {$warn == "Warning"} { - switch $var { - _stp_ctrl_unregister - - _stp_ctrl_register - - relay_subbufs_consumed - - _stp_ctrl_send - - relay_open - - relayfs_create_dir - - relayfs_remove_dir - - relay_flush - - relay_switch_subbuf - - relay_close {} - default { - if {$bad == 0} { - puts "\n------------ Unexpected Warnings in $target -------------------\n" - } - puts $line - set bad 1 - } - } - } - } - } - } - close $fd - } - if {$bad} { - exit -1 - } - } -} - -set clean 0 -set verbose 0 -set debug "" -foreach arg $argv { - if {$arg == "clean"} { - set clean 1 - } elseif {$arg == "-v"} { - set verbose 1 - } elseif {$arg == "debug"} { - set debug $arg - } elseif {$arg != ""} { - usage - } -} - -set relayfs "" -if {![file exists /lib/modules/[exec uname -r]/build/include/linux/relayfs_fs.h]} { - set relayfs {-I $(RT)/relayfs} -} - -if {![catch {open targets r} tfd]} { - while {[gets $tfd line] >= 0} { - set target [lindex $line 0] - create_makefile $target $relayfs - build $target - catch {exec /bin/rm Makefile} - } - close $tfd -} else { - if {![file exists Makefile]} { - puts "Now in [pwd]" - puts "ERROR: No targets file found and no Makefile either" - exit -1 - } - build -} - -puts "Done" -catch {exec /bin/rm compile.errors} - - diff --git a/runtime/probes/os_timer/build b/runtime/probes/os_timer/build deleted file mode 100755 index f3e83244..00000000 --- a/runtime/probes/os_timer/build +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -../build_probe $* diff --git a/runtime/probes/os_timer/os_timer.c b/runtime/probes/os_timer/os_timer.c deleted file mode 100644 index 4a80d02b..00000000 --- a/runtime/probes/os_timer/os_timer.c +++ /dev/null @@ -1,126 +0,0 @@ -/* Use the os timer as a poor-man's time based profiler for a UP system */ - -/* Demonstrates the beginnings of a generic framework for */ -/* asynchronous probes using the runtime */ - -/* @todo NOTE: the statement: regs = task_pt_regs(current); */ -/* isn't working in the way I would expect. The timer callback */ -/* happens, but I don't get a reasonable value in regs->eip */ -/* Can this routine be called during the timer callback? */ - -/* os includes */ -#include "linux/timer.h" - -/* How many strings to allocate. see strings.c. Default is 0. */ -#define STP_NUM_STRINGS 1 - -/* maximum size for a string. default is 2048 */ -#define STP_STRING_SIZE 2048 - -/* size of strings saved in maps */ -#define MAP_STRING_LENGTH 256 - -/* width of histograms. Default 50 */ -#define HIST_WIDTH 50 - -/* always include this. Put all non-map defines above it. */ -#include "runtime.h" - -/* @todo since we don't have aggregation maps yet, try regular maps */ -#define VALUE_TYPE INT64 -#define KEY1_TYPE STRING -#define KEY2_TYPE INT64 -#include "map-gen.c" - -#include "map.c" - -#include "stat.c" -#include "stack.c" - -MODULE_DESCRIPTION("SystemTap probe: os_timer"); -MODULE_AUTHOR("Charles Spirakis <charles.spirakis@intel.com>"); - -Stat timing; -MAP cur_addr; - -/* A generic asynchorous probe entry point */ -void inst_async(struct pt_regs *regs) -{ - u64 start; - u64 end; - unsigned long ip; - - rdtscll(start); - ip = REG_IP(regs); - - /* Create a map of interrupted addresses seen */ - /* really want a map of image name / address */ - _stp_map_add_sii(cur_addr, current->comm, ip, 1); - - /* Need _stp_stack() and _stp_ustack()? */ - /* _stp_image() and aggregation maps */ - - rdtscll(end); - _stp_stat_add(timing, end - start); -} - -static struct timer_list timer; - -/* Helper function to convert from os timer callback into */ -/* generic asynchronous entry point form */ -static void os_timer_callback(unsigned long val) -{ - struct pt_regs *regs; - - /* setup the next timeout now so it doesn't drift */ - /* due to processing the async probe code */ - mod_timer(&timer, jiffies + val); - - /* determine pt_regs from the kernel stack */ - /* @todo This doesn't seem to get a reasonable pt_regs pointer */ - /* based on the value of regs->eip. However, KSTK_EIP() in */ - /* include/asm/processor.h implies regs->eip is valid... */ - regs = task_pt_regs(current); - - /* Call the asynchronous probe with a ptregs struct */ - inst_async(regs); -} - -/* called when the module loads. */ -int probe_start(void) -{ - timing = _stp_stat_init(HIST_LINEAR, 0, 5000, 250); - - cur_addr = _stp_map_new_sii(1000); - - /* register the os_timer */ - init_timer(&timer); - - timer.expires = jiffies + 50; - timer.function = os_timer_callback; - - /* data is usd for defining when the next timeout shoud occur */ - timer.data = 50; - - add_timer(&timer); - return 0; -} - -void probe_exit (void) -{ - /* unregister the os_timer */ - del_timer_sync(&timer); - - /* print out any colledted data, etc */ - _stp_printf ("os timer done.\n"); - _stp_printf ("WARNING: Currently using task_pt_regs() to get the pt_regs struct\n"); - _stp_printf ("during the timer interrupt, but there seems to be issues with that...\n\n"); - _stp_stat_print (timing, "timing (cpu cycles): # calls:%C avg:%A min:%m max:%M\n%H", 0); - - _stp_print("Process\tIp\tCount\n"); - _stp_map_print (cur_addr, "%1s\t%2P\t%d"); - _stp_map_del(cur_addr); - - _stp_print_flush(); -} - diff --git a/runtime/probes/os_timer/stp b/runtime/probes/os_timer/stp deleted file mode 100755 index f3feee70..00000000 --- a/runtime/probes/os_timer/stp +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -source ../stp diff --git a/runtime/probes/os_timer/targets b/runtime/probes/os_timer/targets deleted file mode 100644 index 879d3afc..00000000 --- a/runtime/probes/os_timer/targets +++ /dev/null @@ -1 +0,0 @@ -os_timer diff --git a/runtime/probes/scf/README b/runtime/probes/scf/README deleted file mode 100644 index 39fcfda8..00000000 --- a/runtime/probes/scf/README +++ /dev/null @@ -1,12 +0,0 @@ -/** @dir scf -This example probe instruments smp_call_function(). - -It demonstrates using stack backtraces as map keys to compute the most -common path to a function. - -kernel.function("smp_call_function") -{ - traces[stack()] += 1 -} - -*/ diff --git a/runtime/probes/scf/build b/runtime/probes/scf/build deleted file mode 100755 index f3e83244..00000000 --- a/runtime/probes/scf/build +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -../build_probe $* diff --git a/runtime/probes/scf/scf.c b/runtime/probes/scf/scf.c deleted file mode 100644 index 0e29df43..00000000 --- a/runtime/probes/scf/scf.c +++ /dev/null @@ -1,50 +0,0 @@ -#define STP_NUM_STRINGS 1 -#include "runtime.h" - -#define MAP_STRING_LENGTH 512 - -#define VALUE_TYPE INT64 -#define KEY1_TYPE STRING -#include "map-gen.c" - -#include "map.c" -#include "sym.c" -#include "current.c" -#include "stack.c" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: scf"); -MODULE_AUTHOR("Martin Hunt <hunt@redhat.com>"); - -MAP map1; - -int inst_smp_call_function (struct kprobe *p, struct pt_regs *regs) -{ - String str = _stp_string_init (0); - _stp_stack_sprint (str, regs, 1); - _stp_map_add_si (map1, _stp_string_ptr(str), 1); - return 0; -} - -static struct kprobe stp_probes[] = { - { - .addr = (kprobe_opcode_t *)"smp_call_function", - .pre_handler = inst_smp_call_function - }, -}; - -#define MAX_STP_ROUTINE (sizeof(stp_probes)/sizeof(struct kprobe)) - -int probe_start(void) -{ - map1 = _stp_map_new_si (100); - return _stp_register_kprobes (stp_probes, MAX_STP_ROUTINE); -} - -void probe_exit (void) -{ - _stp_unregister_kprobes (stp_probes, MAX_STP_ROUTINE); - _stp_map_print (map1, "trace[%1s] = %d\n"); - _stp_map_del (map1); -} - diff --git a/runtime/probes/scf/targets b/runtime/probes/scf/targets deleted file mode 100644 index aafcca22..00000000 --- a/runtime/probes/scf/targets +++ /dev/null @@ -1 +0,0 @@ -scf diff --git a/runtime/probes/shellsnoop/README b/runtime/probes/shellsnoop/README deleted file mode 100644 index 70b5e614..00000000 --- a/runtime/probes/shellsnoop/README +++ /dev/null @@ -1,73 +0,0 @@ -/** @dir shellsnoop -Snoops on what commands are being run by shells. - -This is a translation of on an old dtr probe. It demonstrates maps, -lists, and how to use _stp_copy_argv_from_user() and _stp_strncpy_from_user(). - -Original dtr source: - -\verbatim -# shellsnoop.probe - snoop shell execution as it occurs. -# clone of dtrace shellsnoop example - -global { - long @pids[long]; -} - -probe do_execve:entry { - char __user *vstr; - char str[256]; - int len; - - /* watch shells only */ - /* FIXME: detect more shells, like csh, tcsh, zsh */ - - if (!strcmp(current->comm,"bash") || !strcmp(current->comm,"sh") || !strcmp(current->comm, "zsh") - || !strcmp(current->comm, "tcsh") || !strcmp(current->comm, "pdksh")) - { - dlog ("%d\t%d\t%d\t%s ", current->uid, current->pid, current->parent->pid, filename); - @pids[current->pid] = 1; - - /* print out argv, ignoring argv[0] */ - if (argv) argv++; - while (argv != NULL) - { - if (get_user (vstr, argv)) - break; - if (!vstr) - break; - len = dtr_strncpy_from_user(str, vstr, 256); - str[len] = 0; - printk ("%s ", str); - argv++; - } - printk ("\n"); - } -} - -# use filp_open because copy_from_user not needed there -probe filp_open:entry { - if (@pids[current->pid]) - dlog ("%d\t%d\t%s\tO %s\n", current->pid, current->parent->pid, current->comm, filename); -} - -probe sys_read:entry { - if (@pids[current->pid]) - dlog ("%d\t%d\t%s\tR %d\n", current->pid, current->parent->pid, current->comm, fd); -} - -probe sys_write:entry { - size_t len; - char str[256]; - if (@pids[current->pid]) - { - if (count < 64) len = count; - else len = 64; - if (len = dtr_strncpy_from_user(str, buf, len)) { - str[len] = 0; - dlog ("%d\t%d\t%s\tW %s\n", current->pid, current->parent->pid, current->comm, str); - } - } -} -\endverbatim -*/ diff --git a/runtime/probes/shellsnoop/build b/runtime/probes/shellsnoop/build deleted file mode 100755 index f3e83244..00000000 --- a/runtime/probes/shellsnoop/build +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -../build_probe $* diff --git a/runtime/probes/shellsnoop/shellsnoop.c b/runtime/probes/shellsnoop/shellsnoop.c deleted file mode 100644 index dd0c81b9..00000000 --- a/runtime/probes/shellsnoop/shellsnoop.c +++ /dev/null @@ -1,161 +0,0 @@ -//#define STP_RELAYFS -#define STP_NUM_STRINGS 1 -#define STP_STRING_SIZE 8192 -#include "runtime.h" - -#define VALUE_TYPE INT64 -#define KEY1_TYPE INT64 -#include "map-gen.c" - -#define VALUE_TYPE STRING -#define KEY1_TYPE INT64 -#include "map-gen.c" - -#include "map.c" -#include "copy.c" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: shellsnoop"); -MODULE_AUTHOR("Martin Hunt <hunt@redhat.com>"); - -MAP pids, arglist ; - -void _stp_copy_argv_from_user (MAP list, char __user *__user *argv) -{ - char str[128]; - char __user *vstr; - int len, i = 0; - - if (argv) - argv++; - - while (argv != NULL) { - if (get_user (vstr, argv)) - break; - - if (vstr == NULL) - break; - - len = _stp_strncpy_from_user(str, vstr, 128); - str[len] = 0; - _stp_map_set_is (list, i++, str); - argv++; - } -} - -int inst_do_execve (char * filename, char __user *__user *argv, char __user *__user *envp, struct pt_regs * regs) -{ - struct map_node *ptr; - - /* watch shells only */ - /* FIXME: detect more shells, like csh, tcsh, zsh */ - - if (!strcmp(current->comm,"bash") || !strcmp(current->comm,"sh") || !strcmp(current->comm, "zsh") - || !strcmp(current->comm, "tcsh") || !strcmp(current->comm, "pdksh")) - { - _stp_printf ("%d\t%d\t%d\t%s ", current->uid, current->pid, current->parent->pid, filename); - - _stp_map_set_ii (pids, current->pid, 1); - - _stp_map_clear (arglist); - _stp_copy_argv_from_user (arglist, argv); - - foreach (arglist, ptr) - _stp_printf ("%s ", _stp_get_str(ptr)); - _stp_print("\n"); - - _stp_print_flush(); - } - jprobe_return(); - return 0; -} - -struct file * inst_filp_open (const char * filename, int flags, int mode) -{ - if (_stp_map_get_ii (pids, current->pid)) { - _stp_printf ("%d\t%d\t%s\tO %s\n", current->pid, current->parent->pid, current->comm, filename); - _stp_print_flush(); - } - jprobe_return(); - return 0; -} - -asmlinkage ssize_t inst_sys_read (unsigned int fd, char __user * buf, size_t count) -{ - if (_stp_map_get_ii (pids, current->pid)) { - _stp_printf ("%d\t%d\t%s\tR %d\n", current->pid, current->parent->pid, current->comm, fd); - _stp_print_flush(); - } - jprobe_return(); - return 0; -} - -asmlinkage ssize_t inst_sys_write (unsigned int fd, const char __user * buf, size_t count) -{ - if (_stp_map_get_ii (pids, current->pid)) { - String str = _stp_string_init (0); - _stp_string_from_user(str, buf, count); - _stp_printf ("%d\t%d\t%s\tW %s", current->pid, current->parent->pid, - current->comm, _stp_string_ptr(str)); - _stp_print_flush(); - } - - jprobe_return(); - return 0; -} - -static struct jprobe stp_probes[] = { - { - .kp.addr = (kprobe_opcode_t *)"do_execve", - .entry = (kprobe_opcode_t *) inst_do_execve - }, - { - .kp.addr = (kprobe_opcode_t *)"filp_open", - .entry = (kprobe_opcode_t *) inst_filp_open - }, - { - .kp.addr = (kprobe_opcode_t *)"sys_read", - .entry = (kprobe_opcode_t *) inst_sys_read - }, - { - .kp.addr = (kprobe_opcode_t *)"sys_write", - .entry = (kprobe_opcode_t *) inst_sys_write - }, -}; - -#define MAX_STP_ROUTINE (sizeof(stp_probes)/sizeof(struct jprobe)) - - -int probe_start(void) -{ - int ret; - - /* now initialize any data or variables */ - pids = _stp_map_new_ii(10000); - arglist = _stp_map_new_is (10); - - /* now we are ready to enable the probes */ - ret = _stp_register_jprobes (stp_probes, MAX_STP_ROUTINE); - - if (ret < 0) { - _stp_map_del (pids); - _stp_map_del (arglist); - return ret; - } - - _stp_printf("instrumentation is enabled... %s\n", __this_module.name); - _stp_print_flush(); - return ret; -} - - -void probe_exit (void) -{ - _stp_unregister_jprobes (stp_probes, MAX_STP_ROUTINE); - _stp_map_del (pids); - _stp_map_del (arglist); - _stp_printf("\nDropped %d packets\n", atomic_read(&_stp_transport_failures)); - _stp_print_flush(); -} - - diff --git a/runtime/probes/shellsnoop/targets b/runtime/probes/shellsnoop/targets deleted file mode 100644 index fdd0d724..00000000 --- a/runtime/probes/shellsnoop/targets +++ /dev/null @@ -1 +0,0 @@ -shellsnoop diff --git a/runtime/probes/tasklet/README b/runtime/probes/tasklet/README deleted file mode 100644 index 8507ad9b..00000000 --- a/runtime/probes/tasklet/README +++ /dev/null @@ -1,9 +0,0 @@ -/** @dir tasklet -Sample probe in a tasklet. Useful for interrupt context testing. - -\verbatim -> make -> ./stp stp_tasklet.ko -\endverbatim - -*/ diff --git a/runtime/probes/tasklet/build b/runtime/probes/tasklet/build deleted file mode 100755 index f3e83244..00000000 --- a/runtime/probes/tasklet/build +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -../build_probe $* diff --git a/runtime/probes/tasklet/stp_tasklet.c b/runtime/probes/tasklet/stp_tasklet.c deleted file mode 100644 index f47fea9e..00000000 --- a/runtime/probes/tasklet/stp_tasklet.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Framework for putting a jprobe in a tasklet. */ -/* Useful for testing probes in interrupt context. */ -/* Doesn't do anything useful as is. Put test code in the inst func */ - -#define STP_NETLINK_ONLY -#define STP_NUM_STRINGS 1 - -#include "runtime.h" -#include "probes.c" - -MODULE_DESCRIPTION("test jprobes of tasklets"); -MODULE_AUTHOR("Martin Hunt <hunt@redhat.com>"); - -void inst__rcu_process_callbacks(struct rcu_ctrlblk *rcp, - struct rcu_state *rsp, struct rcu_data *rdp) -{ - _stp_printf ("count=%d irqs_disabled=%d in_interrupt=%d in_irq=%d", - preempt_count(), irqs_disabled(), in_interrupt(), in_irq()); - _stp_print_flush(); - jprobe_return(); -} - -static struct jprobe stp_probes[] = { - { - .kp.addr = (kprobe_opcode_t *)"__rcu_process_callbacks", - .entry = (kprobe_opcode_t *) inst__rcu_process_callbacks - }, -}; -#define MAX_STP_PROBES (sizeof(stp_probes)/sizeof(struct jprobe)) - -int probe_start(void) -{ - return _stp_register_jprobes (stp_probes, MAX_STP_PROBES); -} - -void probe_exit (void) -{ - _stp_unregister_jprobes (stp_probes, MAX_STP_PROBES); -} - diff --git a/runtime/probes/tasklet/targets b/runtime/probes/tasklet/targets deleted file mode 100644 index 236dbd95..00000000 --- a/runtime/probes/tasklet/targets +++ /dev/null @@ -1 +0,0 @@ -stp_tasklet diff --git a/runtime/probes/test4/README b/runtime/probes/test4/README deleted file mode 100644 index 75d4be10..00000000 --- a/runtime/probes/test4/README +++ /dev/null @@ -1,24 +0,0 @@ -/** @dir test4 -This example probe tracks file opens, reads and writes. -It demonstrates maps, stats, and iterators. - -This is a translation of on an old dtr probe. Original source is -\verbatim -global { - long @opens[string]; - sum @reads[string], @writes[string]; -} - -probe sys_open:entry { - @opens[current->comm]++; -} - -probe sys_read:entry { - @reads[current->comm] << count; -} - -probe sys_write:entry { - @writes[current->comm] << count; -} -\endverbatim -*/ diff --git a/runtime/probes/test4/build b/runtime/probes/test4/build deleted file mode 100755 index f3e83244..00000000 --- a/runtime/probes/test4/build +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -../build_probe $* diff --git a/runtime/probes/test4/targets b/runtime/probes/test4/targets deleted file mode 100644 index d234c5e0..00000000 --- a/runtime/probes/test4/targets +++ /dev/null @@ -1 +0,0 @@ -test4 diff --git a/runtime/probes/test4/test4.c b/runtime/probes/test4/test4.c deleted file mode 100644 index 56027186..00000000 --- a/runtime/probes/test4/test4.c +++ /dev/null @@ -1,79 +0,0 @@ -#define STP_NUM_STRINGS 1 -#include "runtime.h" - -#define VALUE_TYPE INT64 -#define KEY1_TYPE STRING -#include "map-gen.c" - -#define VALUE_TYPE STAT -#define KEY1_TYPE STRING -#include "map-gen.c" - -#include "map.c" -#include "probes.c" - -MODULE_DESCRIPTION("SystemTap probe: test4"); -MODULE_AUTHOR("Martin Hunt <hunt@redhat.com>"); - - -MAP opens, reads, writes; - -asmlinkage long inst_sys_open (const char __user * filename, int flags, int mode) -{ - _stp_map_add_si (opens, current->comm, 1); - jprobe_return(); - return 0; -} - -asmlinkage ssize_t inst_sys_read (unsigned int fd, char __user * buf, size_t count) -{ - _stp_map_add_sx (reads, current->comm, count); - jprobe_return(); - return 0; -} - -asmlinkage ssize_t inst_sys_write (unsigned int fd, const char __user * buf, size_t count) -{ - _stp_map_add_sx (writes, current->comm, count); - jprobe_return(); - return 0; -} - -static struct jprobe stp_probes[] = { - { - .kp.addr = (kprobe_opcode_t *)"sys_open", - .entry = (kprobe_opcode_t *) inst_sys_open - }, - { - .kp.addr = (kprobe_opcode_t *)"sys_read", - .entry = (kprobe_opcode_t *) inst_sys_read - }, - { - .kp.addr = (kprobe_opcode_t *)"sys_write", - .entry = (kprobe_opcode_t *) inst_sys_write - }, -}; - -#define MAX_STP_ROUTINE (sizeof(stp_probes)/sizeof(struct jprobe)) - -int probe_start(void) -{ - opens = _stp_map_new_si (1000); - reads = _stp_map_new_sx (1000, HIST_LOG, 12); - writes = _stp_map_new_sx (1000, HIST_LOG, 12); - return _stp_register_jprobes (stp_probes, MAX_STP_ROUTINE); -} - -void probe_exit (void) -{ - _stp_unregister_jprobes (stp_probes, MAX_STP_ROUTINE); - - _stp_map_print (opens,"%d opens by process \"%1s\""); - _stp_map_print (reads,"reads by process \"%1s\": %C. Total bytes=%S. Average: %A\n%H"); - _stp_map_print (writes,"writes by process \"%1s\": %C. Total bytes=%S. Average: %A\n%H"); - _stp_printf("\nDropped %d packets\n", atomic_read(&_stp_transport_failures)); - _stp_print_flush(); - _stp_map_del (opens); - _stp_map_del (reads); - _stp_map_del (writes); -} diff --git a/runtime/probes/where_func/README b/runtime/probes/where_func/README deleted file mode 100644 index 78009566..00000000 --- a/runtime/probes/where_func/README +++ /dev/null @@ -1,29 +0,0 @@ -/** @dir where_func -This is a silly little instrumentation routine to instrument functions -entry by name. It makes use of the SystemTap runtime libraries to break -down the number of times the function by caller. - -It demonstrates kprobes, passing a module parameter, using the print buffer, -and using _stp_print_symbol() to map the addresses back to locations -in functions. - -By default it instruments schedule(). - -The instrumentation module is built by having the kernel that is going -to be instrumented currently on the machine and doing -\code -./build -\endcode -The instrumentation is inserted as root with: -\code -/sbin/insmod kprobe_funct_where.ko funct_name=function_name -\endcode -The instrumentation is removed as root with: -\code -/sbin/rmmod kprobe_funct_where -\endcode --Will Cohen - -Note that this module is broken now because we don't pass the module parameter -tp staprun. FIXME -*/ diff --git a/runtime/probes/where_func/build b/runtime/probes/where_func/build deleted file mode 100755 index f3e83244..00000000 --- a/runtime/probes/where_func/build +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -../build_probe $* diff --git a/runtime/probes/where_func/kprobe_where_funct.c b/runtime/probes/where_func/kprobe_where_funct.c deleted file mode 100644 index 680dabd8..00000000 --- a/runtime/probes/where_func/kprobe_where_funct.c +++ /dev/null @@ -1,62 +0,0 @@ -/* kprobe_where_funct.c - this is a simple module to get information about calls to a function - that is passed as a module option - Will Cohen -*/ - -#define STP_NUM_STRINGS 1 - -#include "runtime.h" - -#define VALUE_TYPE INT64 -#define KEY1_TYPE INT64 -#include "map-gen.c" - -#include "map.c" -#include "probes.c" -#include "sym.c" -#include "current.c" - -MODULE_DESCRIPTION("SystemTap probe: where_func"); -MODULE_AUTHOR("Will Cohen and Martin Hunt"); - -static char default_name[] = "schedule"; -static char *funct_name = default_name; -module_param(funct_name, charp, 0); -MODULE_PARM_DESC(funct_name, "function entry name.\n"); - -MAP funct_locations; - -static int inst_funct(struct kprobe *p, struct pt_regs *regs) -{ - long ret_addr = _stp_ret_addr(regs); - _stp_map_add_ii(funct_locations, ret_addr, 1); - return 0; -} - -/*For each probe you need to allocate a kprobe structure*/ -static struct kprobe kp[] = { - { - .addr = default_name, - .pre_handler = inst_funct, - } -}; -#define MAX_KPROBES (sizeof(kp)/sizeof(struct kprobe)) - -int probe_start(void) -{ - funct_locations = _stp_map_new_ii (1000); - - if (funct_name) - kp[0].addr = funct_name; - - return _stp_register_kprobes (kp, MAX_KPROBES); -} - -void probe_exit (void) -{ - _stp_unregister_kprobes (kp, MAX_KPROBES); - - _stp_map_print (funct_locations, "Count: %d\tCaller: %1P"); - _stp_map_del(funct_locations); -} diff --git a/runtime/probes/where_func/targets b/runtime/probes/where_func/targets deleted file mode 100644 index 7e8e4cf1..00000000 --- a/runtime/probes/where_func/targets +++ /dev/null @@ -1 +0,0 @@ -kprobe_where_funct |