From 8dd5f9aaad6a4d587a67500eca0449ec69b7d7bd Mon Sep 17 00:00:00 2001 From: compudj Date: Mon, 7 Apr 2008 15:00:21 +0000 Subject: [PATCH] runtest git-svn-id: http://ltt.polymtl.ca/svn@2841 04897980-b3bd-0310-b5e0-8ef037075253 --- markers-test/Makefile | 1 + markers-test/runtest.sh | 12 ++++ markers-test/test-mark-speed-empty.c | 103 +++++++++++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 markers-test/test-mark-speed-empty.c diff --git a/markers-test/Makefile b/markers-test/Makefile index 7b599935..a727d022 100644 --- a/markers-test/Makefile +++ b/markers-test/Makefile @@ -1,5 +1,6 @@ ifneq ($(KERNELRELEASE),) obj-m += test-mark-speed.o + obj-m += test-mark-speed-empty.o obj-m += test-mark-speed-edit.o obj-m += test-mark-speed-opt.o else diff --git a/markers-test/runtest.sh b/markers-test/runtest.sh index e62d589c..79b26b80 100644 --- a/markers-test/runtest.sh +++ b/markers-test/runtest.sh @@ -1,5 +1,10 @@ #!/bin/sh +insmod test-mark-speed-empty.ko +for a in `seq 1 10`; do cat /proc/testmark;done +rmmod test-mark-speed-empty +RESEMP=`dmesg |tail -n 10 |sed 's/^\[.*\] cycles : \(.*\)$/\1/'` + insmod test-mark-speed.ko for a in `seq 1 10`; do cat /proc/testmark;done rmmod test-mark-speed @@ -17,6 +22,13 @@ RESNOP=`dmesg |tail -n 10|sed 's/^\[.*\] cycles : \(.*\)$/\1/'` echo "20000 iterations" +echo "Numbers for empty loop" + +SUM="0" +for a in $RESEMP; do SUM=$[$SUM + $a]; done +RESEMP=$[$SUM / 10] + + echo "Numbers for normal marker" SUM="0" diff --git a/markers-test/test-mark-speed-empty.c b/markers-test/test-mark-speed-empty.c new file mode 100644 index 00000000..943af27d --- /dev/null +++ b/markers-test/test-mark-speed-empty.c @@ -0,0 +1,103 @@ +/* test-mark.c + * + */ + +#include +#include +#include +#include +#include +#include +static void noinline test2(const struct marker *mdata, + void *call_private, ...) +{ + /* not called */ + printk("blah\n"); +} + +/* + * Generic marker flavor always available. + * Note : the empty asm volatile with read constraint is used here instead of a + * "used" attribute to fix a gcc 4.1.x bug. + * Make sure the alignment of the structure in the __markers section will + * not add unwanted padding between the beginning of the section and the + * structure. Force alignment to the same alignment as the section start. + */ +#define __my_trace_mark(generic, name, call_private, format, args...) \ + do { \ + static const char __mstrtab_##name[] \ + __attribute__((section("__markers_strings"))) \ + = #name "\0" format; \ + static struct marker __mark_##name \ + __attribute__((section("__markers"), aligned(8))) = \ + { __mstrtab_##name, &__mstrtab_##name[sizeof(#name)], \ + 0, 0, marker_probe_cb, \ + { __mark_empty_function, NULL}, NULL }; \ + __mark_check_format(format, ## args); \ + if (!generic) { \ + if (unlikely(imv_read(__mark_##name.state))) \ + test2 \ + (&__mark_##name, call_private, \ + ## args); \ + } else { \ + if (unlikely(_imv_read(__mark_##name.state))) \ + test2 \ + (&__mark_##name, call_private, \ + ## args); \ + } \ + } while (0) + + //asm volatile (""); +struct proc_dir_entry *pentry = NULL; + +static inline void test(unsigned long arg, unsigned long arg2) +{ + asm volatile (""); + //__my_trace_mark(1, kernel_debug_test, NULL, "%d %d %ld %ld", 2, current->pid, arg, arg2); + //__my_trace_mark(0, kernel_debug_test, NULL, "%d %d %ld %ld", 2, current->pid, arg, arg2); +} + +static int my_open(struct inode *inode, struct file *file) +{ + unsigned int i; + cycles_t cycles1, cycles2; + unsigned long flags; + + local_irq_save(flags); + rdtsc_barrier(); + cycles1 = get_cycles(); + rdtsc_barrier(); + for(i=0; i<20000; i++) { + test(i, i); + } + rdtsc_barrier(); + cycles2 = get_cycles(); + rdtsc_barrier(); + local_irq_restore(flags); + printk("cycles : %llu\n", cycles2-cycles1); + return -EPERM; +} + + +static struct file_operations my_operations = { + .open = my_open, +}; + +int init_module(void) +{ + pentry = create_proc_entry("testmark", 0444, NULL); + if (pentry) + pentry->proc_fops = &my_operations; + + return 0; +} + +void cleanup_module(void) +{ + remove_proc_entry("testmark", NULL); +} + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Mathieu Desnoyers"); +MODULE_DESCRIPTION("Marker Test"); + -- 2.34.1