diff options
author | hunt <hunt> | 2005-07-28 17:33:09 +0000 |
---|---|---|
committer | hunt <hunt> | 2005-07-28 17:33:09 +0000 |
commit | 42ee08b55b2f7a12b26f2049d672a1b563f064a4 (patch) | |
tree | 080aa7516d0b19de5c606833f98444d252494f51 | |
parent | 377b88310b59601c0d967c55bd6a46ec024dc2de (diff) | |
download | systemtap-steved-42ee08b55b2f7a12b26f2049d672a1b563f064a4.tar.gz systemtap-steved-42ee08b55b2f7a12b26f2049d672a1b563f064a4.tar.xz systemtap-steved-42ee08b55b2f7a12b26f2049d672a1b563f064a4.zip |
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().
-rw-r--r-- | runtime/probes/bench/README | 10 | ||||
-rw-r--r-- | runtime/probes/bench/bench.c | 12 | ||||
-rw-r--r-- | runtime/probes/bench/bench_io1.c | 16 | ||||
-rw-r--r-- | runtime/probes/bench/bench_io2.c | 15 | ||||
-rw-r--r-- | runtime/probes/bench/bench_multi.c | 36 | ||||
-rw-r--r-- | runtime/probes/bench/bench_ret.c | 18 | ||||
-rw-r--r-- | runtime/probes/bench/ttest.c | 24 |
7 files changed, 58 insertions, 73 deletions
diff --git a/runtime/probes/bench/README b/runtime/probes/bench/README index 5eaded78..04801a74 100644 --- a/runtime/probes/bench/README +++ b/runtime/probes/bench/README @@ -1,15 +1,11 @@ This is a benchmark program for the SystemTap Runtime. -It works by instrumenting sys_read() and sys_write(). It calls each a million -times and times that. Then it puts an empty kprobe on one and jprobe on the -other and times that. Subtracting the difference between the two runs gives +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. -Any system has some background activity going on that will generate sys_read -and sys_write calls. However, unless some major activity is going on, it -should be statistically insignificant. - To Start: 1. Build the test program. diff --git a/runtime/probes/bench/bench.c b/runtime/probes/bench/bench.c index bbdc3170..cc0e81f6 100644 --- a/runtime/probes/bench/bench.c +++ b/runtime/probes/bench/bench.c @@ -7,28 +7,28 @@ MODULE_DESCRIPTION("SystemTap probe: bench"); MODULE_AUTHOR("Martin Hunt"); -asmlinkage ssize_t inst_sys_write (unsigned int fd, const char __user * buf, size_t count) +asmlinkage ssize_t inst_sys_getgid (unsigned int fd, const char __user * buf, size_t count) { jprobe_return(); return 0; } -static int inst_sys_read (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getuid (struct kprobe *p, struct pt_regs *regs) { return 0; } static struct jprobe jp[] = { { - .kp.addr = (kprobe_opcode_t *)"sys_write", - .entry = (kprobe_opcode_t *) inst_sys_write + .kp.addr = (kprobe_opcode_t *)"sys_getgid", + .entry = (kprobe_opcode_t *) inst_sys_getgid }, }; static struct kprobe kp[] = { { - .addr = "sys_read", - .pre_handler = inst_sys_read + .addr = "sys_getuid", + .pre_handler = inst_sys_getuid } }; diff --git a/runtime/probes/bench/bench_io1.c b/runtime/probes/bench/bench_io1.c index a0a44d34..89be7f06 100644 --- a/runtime/probes/bench/bench_io1.c +++ b/runtime/probes/bench/bench_io1.c @@ -4,10 +4,10 @@ #include "runtime.h" #include "probes.c" -MODULE_DESCRIPTION("SystemTap probe: bench_io"); +MODULE_DESCRIPTION("SystemTap probe: bench_io1"); MODULE_AUTHOR("Martin Hunt"); -static int inst_sys_read (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getuid (struct kprobe *p, struct pt_regs *regs) { /* print 100 chars */ _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); @@ -15,7 +15,7 @@ static int inst_sys_read (struct kprobe *p, struct pt_regs *regs) return 0; } -static int inst_sys_write (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getgid (struct kprobe *p, struct pt_regs *regs) { /* print 100 chars */ _stp_print_cstr ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); @@ -25,12 +25,12 @@ static int inst_sys_write (struct kprobe *p, struct pt_regs *regs) static struct kprobe kp[] = { { - .addr = "sys_read", - .pre_handler = inst_sys_read + .addr = "sys_getuid", + .pre_handler = inst_sys_getuid }, { - .addr = "sys_write", - .pre_handler = inst_sys_write + .addr = "sys_getgid", + .pre_handler = inst_sys_getgid } }; @@ -44,6 +44,4 @@ int probe_start(void) static void probe_exit (void) { _stp_unregister_kprobes (kp, NUM_KPROBES); - _stp_printf("dropped %d packets\n", atomic_read(&_stp_transport_failures)); - _stp_print_flush(); } diff --git a/runtime/probes/bench/bench_io2.c b/runtime/probes/bench/bench_io2.c index 14ef747b..cc31fc85 100644 --- a/runtime/probes/bench/bench_io2.c +++ b/runtime/probes/bench/bench_io2.c @@ -4,10 +4,10 @@ #include "runtime.h" #include "probes.c" -MODULE_DESCRIPTION("SystemTap probe: bench_io"); +MODULE_DESCRIPTION("SystemTap probe: bench_io2"); MODULE_AUTHOR("Martin Hunt"); -static int inst_sys_read (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getuid (struct kprobe *p, struct pt_regs *regs) { /* print 100 chars */ _stp_printf ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); @@ -15,7 +15,7 @@ static int inst_sys_read (struct kprobe *p, struct pt_regs *regs) return 0; } -static int inst_sys_write (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getgid (struct kprobe *p, struct pt_regs *regs) { /* print 100 chars */ _stp_print_cstr ("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n"); @@ -25,12 +25,12 @@ static int inst_sys_write (struct kprobe *p, struct pt_regs *regs) static struct kprobe kp[] = { { - .addr = "sys_read", - .pre_handler = inst_sys_read + .addr = "sys_getuid", + .pre_handler = inst_sys_getuid }, { - .addr = "sys_write", - .pre_handler = inst_sys_write + .addr = "sys_getgid", + .pre_handler = inst_sys_getgid } }; @@ -44,5 +44,4 @@ int probe_start(void) static void probe_exit (void) { _stp_unregister_kprobes (kp, NUM_KPROBES); - _stp_print_flush(); } diff --git a/runtime/probes/bench/bench_multi.c b/runtime/probes/bench/bench_multi.c index eab75878..ca7d251f 100644 --- a/runtime/probes/bench/bench_multi.c +++ b/runtime/probes/bench/bench_multi.c @@ -7,56 +7,56 @@ MODULE_DESCRIPTION("SystemTap probe: bench_multi"); MODULE_AUTHOR("Martin Hunt"); -static int inst_sys_read1 (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getuid1 (struct kprobe *p, struct pt_regs *regs) { return 0; } -static int inst_sys_read2 (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getuid2 (struct kprobe *p, struct pt_regs *regs) { return 0; } -static int inst_sys_write1 (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getgid1 (struct kprobe *p, struct pt_regs *regs) { return 0; } -static int inst_sys_write2 (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getgid2 (struct kprobe *p, struct pt_regs *regs) { return 0; } -static int inst_sys_write3 (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getgid3 (struct kprobe *p, struct pt_regs *regs) { return 0; } -static int inst_sys_write4 (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getgid4 (struct kprobe *p, struct pt_regs *regs) { return 0; } static struct kprobe kp[] = { { - .addr = "sys_read", - .pre_handler = inst_sys_read1 + .addr = "sys_getuid", + .pre_handler = inst_sys_getuid1 }, { - .addr = "sys_read", - .pre_handler = inst_sys_read2 + .addr = "sys_getuid", + .pre_handler = inst_sys_getuid2 }, { - .addr = "sys_write", - .pre_handler = inst_sys_write1 + .addr = "sys_getgid", + .pre_handler = inst_sys_getgid1 }, { - .addr = "sys_write", - .pre_handler = inst_sys_write2 + .addr = "sys_getgid", + .pre_handler = inst_sys_getgid2 }, { - .addr = "sys_write", - .pre_handler = inst_sys_write3 + .addr = "sys_getgid", + .pre_handler = inst_sys_getgid3 }, { - .addr = "sys_write", - .pre_handler = inst_sys_write4 + .addr = "sys_getgid", + .pre_handler = inst_sys_getgid4 } }; diff --git a/runtime/probes/bench/bench_ret.c b/runtime/probes/bench/bench_ret.c index d70f0ee1..a14548e1 100644 --- a/runtime/probes/bench/bench_ret.c +++ b/runtime/probes/bench/bench_ret.c @@ -8,36 +8,36 @@ MODULE_DESCRIPTION("SystemTap probe: bench_ret"); MODULE_AUTHOR("Martin Hunt"); -static int inst_sys_read (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getuid (struct kprobe *p, struct pt_regs *regs) { return 0; } -static int inst_sys_write_ret (struct kretprobe_instance *ri, struct pt_regs *regs) +static int inst_sys_getgid_ret (struct kretprobe_instance *ri, struct pt_regs *regs) { return 0; } -static int inst_sys_write (struct kprobe *p, struct pt_regs *regs) +static int inst_sys_getgid (struct kprobe *p, struct pt_regs *regs) { return 0; } static struct kretprobe kpr[] = { { - .kp.addr = "sys_read", - .handler = inst_sys_read + .kp.addr = "sys_getuid", + .handler = inst_sys_getuid }, { - .kp.addr = "sys_write", - .handler = inst_sys_write_ret + .kp.addr = "sys_getgid", + .handler = inst_sys_getgid_ret } }; static struct kprobe kp[] = { { - .addr = "sys_write", - .pre_handler = inst_sys_write + .addr = "sys_getgid", + .pre_handler = inst_sys_getgid } }; diff --git a/runtime/probes/bench/ttest.c b/runtime/probes/bench/ttest.c index eed641da..93b37c84 100644 --- a/runtime/probes/bench/ttest.c +++ b/runtime/probes/bench/ttest.c @@ -37,8 +37,7 @@ void usage(char *name) int main(int argc, char *argv[]) { - int fd, i, n = 1; - char buf[1024]; + int i, n = 1; uint64 nsecs; if (argc > 2) @@ -50,33 +49,26 @@ int main(int argc, char *argv[]) usage(argv[0]); } - fd = open ("foo", O_CREAT | O_RDWR); - /* large warmup time */ for (i = 0; i < n * 1000000; i++) { - if (write (fd, buf, 0) < 0) - perror("write"); + getuid(); } start(); - for (i = 0; i < n * 1000000; i++) { - if (read (fd, buf, 0) < 0) - perror("read"); - } + for (i = 0; i < n * 1000000; i++) + getuid(); + nsecs = stop() / (n * 1000); printf("%lld ", nsecs); start(); - for (i = 0; i < n * 1000000; i++) { - if (write (fd, buf, 0) < 0) - perror("write"); - } + for (i = 0; i < n * 1000000; i++) + getgid(); + nsecs = stop() / (n * 1000); - close (fd); printf("%lld\n", nsecs); - unlink("foo"); return 0; } |