diff options
author | hunt <hunt> | 2005-05-17 07:04:25 +0000 |
---|---|---|
committer | hunt <hunt> | 2005-05-17 07:04:25 +0000 |
commit | d1c9c59b3c4c6b5af9e64eaa1596edeb7e5da90d (patch) | |
tree | aa3f005d523d222880acd8c1fe2f945e51a739e3 | |
parent | ca7d122b7b3fb57d6cabdbdc5da9c1ecc60de5d8 (diff) | |
download | systemtap-steved-d1c9c59b3c4c6b5af9e64eaa1596edeb7e5da90d.tar.gz systemtap-steved-d1c9c59b3c4c6b5af9e64eaa1596edeb7e5da90d.tar.xz systemtap-steved-d1c9c59b3c4c6b5af9e64eaa1596edeb7e5da90d.zip |
*** empty log message ***
-rw-r--r-- | runtime/probes/test4/Makefile | 22 | ||||
-rwxr-xr-x | runtime/probes/test4/build | 17 | ||||
-rw-r--r-- | runtime/probes/test4/dtr.c | 169 | ||||
-rw-r--r-- | runtime/probes/test4/test4.c | 110 |
4 files changed, 127 insertions, 191 deletions
diff --git a/runtime/probes/test4/Makefile b/runtime/probes/test4/Makefile index 613eff1f..8b973baa 100644 --- a/runtime/probes/test4/Makefile +++ b/runtime/probes/test4/Makefile @@ -1,11 +1,23 @@ # Makefile -# -# -# make -C path/to/kernel/src M=`pwd` modules STP_RUNTIME=path_to_systemtap_rt + +PWD := $(shell pwd) +KVERSION := $(shell uname -r) +KDIR := /lib/modules/$(KVERSION)/build include + +KALLSYMS_LOOKUP_NAME := $(firstword $(shell grep " kallsyms_lookup_name" /boot/System.map-$(KVERSION))) +KALLSYMS_LOOKUP := $(firstword $(shell grep " kallsyms_lookup$$" /boot/System.map-$(KVERSION))) +KTA := $(firstword $(shell grep "__kernel_text_address" /boot/System.map-$(KVERSION))) CFLAGS += -I $(STP_RUNTIME) -I $(STP_RUNTIME)/relayfs -D KALLSYMS_LOOKUP_NAME=$(KALLSYMS_LOOKUP_NAME) \ - -D KALLSYMS_LOOKUP=$(KALLSYMS_LOOKUP) -D KTA=$(KTA) -obj-m := dtr.o + -D KALLSYMS_LOOKUP=$(KALLSYMS_LOOKUP) + +obj-m := test4.o + +default: + $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules \ + KALLSYMS_LOOKUP_NAME=0x$(KALLSYMS_LOOKUP_NAME) \ + KALLSYMS_LOOKUP=0x$(KALLSYMS_LOOKUP) KTA=0x$(KTA)\ + STP_RUNTIME=$(PWD)/../.. clean: /bin/rm -rf *.o *.ko *~ *.mod.c .*.cmd .tmp_versions diff --git a/runtime/probes/test4/build b/runtime/probes/test4/build deleted file mode 100755 index fb344b37..00000000 --- a/runtime/probes/test4/build +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -KVERSION=`uname -r` -echo $KVERSION -KALLSYMS_LOOKUP_NAME=`grep " kallsyms_lookup_name" /boot/System.map-$KVERSION |awk '{print $1}'` -KALLSYMS_LOOKUP=`grep " kallsyms_lookup$" /boot/System.map-$KVERSION |awk '{print $1}'` -KTA=`grep "__kernel_text_address" /boot/System.map-$KVERSION |awk '{print $1}'` - -make V=1 -C /lib/modules/`uname -r`/build M=`pwd` modules \ - KALLSYMS_LOOKUP_NAME=0x$KALLSYMS_LOOKUP_NAME \ - KALLSYMS_LOOKUP=0x$KALLSYMS_LOOKUP KTA=0x$KTA\ - STP_RUNTIME=`pwd`/../.. - - - - - diff --git a/runtime/probes/test4/dtr.c b/runtime/probes/test4/dtr.c deleted file mode 100644 index 09b0f52d..00000000 --- a/runtime/probes/test4/dtr.c +++ /dev/null @@ -1,169 +0,0 @@ -#define HASH_TABLE_BITS 8 -#define HASH_TABLE_SIZE (1<<HASH_TABLE_BITS) -#define BUCKETS 16 /* largest histogram width */ - -#define STP_NETLINK_ONLY -#define STP_NUM_STRINGS 1 - -#include <linux/module.h> -#include <linux/interrupt.h> -#include <net/sock.h> -#include <linux/netlink.h> - -#include "runtime.h" -#include "map.c" -#include "probes.c" -#include "stack.c" - -MODULE_DESCRIPTION("SystemTap probe: test4"); -MODULE_AUTHOR("Martin Hunt <hunt@redhat.com>"); - - -MAP opens, reads, writes, traces; - -asmlinkage long inst_sys_open (const char __user * filename, int flags, int mode) -{ - _stp_map_key_str (opens, current->comm); - _stp_map_add_int64 (opens, 1); - jprobe_return(); - return 0; -} - -asmlinkage ssize_t inst_sys_read (unsigned int fd, char __user * buf, size_t count) -{ - _stp_map_key_str (reads, current->comm); - _stp_map_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_map_key_str (writes, current->comm); - _stp_map_stat_add (writes, count); - jprobe_return(); - return 0; -} - -int inst_show_cpuinfo(struct seq_file *m, void *v) -{ - String str = _stp_string_init (0); - _stp_stack_print (0,0); - _stp_stack_print (1,0); - _stp_list_add (traces, _stp_stack_sprint(str, 0, 0)); - - jprobe_return(); - return 0; -} - - -static struct jprobe dtr_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 - }, - { - .kp.addr = (kprobe_opcode_t *)"show_cpuinfo", - .entry = (kprobe_opcode_t *) inst_show_cpuinfo, - }, -}; - -#define MAX_DTR_ROUTINE (sizeof(dtr_probes)/sizeof(struct jprobe)) - -static unsigned n_subbufs = 4; -module_param(n_subbufs, uint, 0); -MODULE_PARM_DESC(n_subbufs, "number of sub-buffers per per-cpu buffer"); - -static unsigned subbuf_size = 65536; -module_param(subbuf_size, uint, 0); -MODULE_PARM_DESC(subbuf_size, "size of each per-cpu sub-buffers"); - -static int pid; -module_param(pid, int, 0); -MODULE_PARM_DESC(pid, "daemon pid"); - -static int init_dtr(void) -{ - int ret; - - if (!pid) { - printk("init_dtr: Can't start without daemon pid\n"); - return -1; - } - - if (_stp_transport_open(n_subbufs, subbuf_size, pid) < 0) { - printk("init_dtr: Couldn't open transport\n"); - return -1; - } - - opens = _stp_map_new (1000, INT64); - reads = _stp_map_new (1000, STAT); - writes = _stp_map_new (1000, STAT); - traces = _stp_list_new (1000, STRING); - - ret = _stp_register_jprobes (dtr_probes, MAX_DTR_ROUTINE); - - _stp_log("instrumentation is enabled...\n"); - return ret; -} - -static int exited; /* FIXME: this is a stopgap - if we don't do this - * and are manually removed, bad things happen */ - -static void probe_exit (void) -{ - struct map_node_stat *st; - struct map_node_int64 *ptr; - struct map_node_str *sptr; - - exited = 1; - - _stp_unregister_jprobes (dtr_probes, MAX_DTR_ROUTINE); - - foreach (traces, sptr) { - _stp_printf ("trace: %s\n", sptr->str); - _stp_print_flush (); - } - - foreach (opens, ptr) { - _stp_printf ("opens[%s] = %lld\n", key1str(ptr), ptr->val); - _stp_print_flush (); - } - - foreach (reads, st) { - _stp_printf ("reads[%s] = [count=%lld sum=%lld min=%lld max=%lld]\n", key1str(st), - st->stats.count, st->stats.sum, st->stats.min, st->stats.max); - _stp_print_flush (); - } - - foreach (writes, st) { - _stp_printf ("writes[%s] = [count=%lld sum=%lld min=%lld max=%lld]\n", key1str(st), - st->stats.count, st->stats.sum, st->stats.min, st->stats.max); - _stp_print_flush(); - } - - _stp_map_del (opens); - _stp_map_del (reads); - _stp_map_del (writes); -} - -static void cleanup_dtr(void) -{ - if (!exited) - probe_exit(); - - _stp_transport_close(); -} - -module_init(init_dtr); -module_exit(cleanup_dtr); -MODULE_LICENSE("GPL"); - diff --git a/runtime/probes/test4/test4.c b/runtime/probes/test4/test4.c new file mode 100644 index 00000000..f4b6c9b0 --- /dev/null +++ b/runtime/probes/test4/test4.c @@ -0,0 +1,110 @@ +#define STP_NETLINK_ONLY +#define STP_NUM_STRINGS 1 +#include "runtime.h" + +#define KEY1_TYPE STRING +#include "map-keys.c" + +#define VALUE_TYPE INT64 +#include "map-values.c" + +#define VALUE_TYPE STAT +#include "map-values.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_key_str (opens, current->comm); + _stp_map_add_int64 (opens, 1); + jprobe_return(); + return 0; +} + +asmlinkage ssize_t inst_sys_read (unsigned int fd, char __user * buf, size_t count) +{ + _stp_map_key_str (reads, current->comm); + _stp_map_add_int64_stat (reads, count); + jprobe_return(); + return 0; +} + +asmlinkage ssize_t inst_sys_write (unsigned int fd, const char __user * buf, size_t count) +{ + _stp_map_key_str (writes, current->comm); + _stp_map_add_int64_stat (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)) + +static int pid; +module_param(pid, int, 0); +MODULE_PARM_DESC(pid, "daemon pid"); + +int init_module(void) +{ + int ret; + + if (!pid) { + printk("init: Can't start without daemon pid\n"); + return -1; + } + + if (_stp_transport_open(n_subbufs, subbuf_size, pid) < 0) { + printk("init: Couldn't open transport\n"); + return -1; + } + + opens = _stp_map_new_str (1000, INT64); + reads = _stp_map_new_str (1000, HSTAT_LOG, 8); + writes = _stp_map_new_str (1000, HSTAT_LOG, 8); + + ret = _stp_register_jprobes (stp_probes, MAX_STP_ROUTINE); + + return ret; +} + +static void probe_exit (void) +{ + _stp_unregister_jprobes (stp_probes, MAX_STP_ROUTINE); + + _stp_map_print (opens,"opens"); + _stp_map_print (reads,"reads"); + _stp_map_print (writes,"writes"); + + _stp_map_del (opens); + _stp_map_del (reads); + _stp_map_del (writes); +} + +void cleanup_module(void) +{ + _stp_transport_close(); +} + +MODULE_LICENSE("GPL"); + |