From 421991b0c6236144b860c9791f18546aad552a4c Mon Sep 17 00:00:00 2001 From: compudj Date: Tue, 10 Jul 2007 06:58:42 +0000 Subject: [PATCH] update tests git-svn-id: http://ltt.polymtl.ca/svn@2547 04897980-b3bd-0310-b5e0-8ef037075253 --- tests/kernel/Makefile | 22 +++-- tests/kernel/marker-example.c | 5 +- tests/kernel/probe-example.c | 9 +- tests/kernel/test-cmpxchg-nolock2.c | 126 ++++++++++++++++++++++++++++ tests/kernel/test-compact.c | 2 +- 5 files changed, 146 insertions(+), 18 deletions(-) create mode 100644 tests/kernel/test-cmpxchg-nolock2.c diff --git a/tests/kernel/Makefile b/tests/kernel/Makefile index 5b943163..af5ffd81 100644 --- a/tests/kernel/Makefile +++ b/tests/kernel/Makefile @@ -3,20 +3,27 @@ ifneq ($(CONFIG_LTT),) #obj-m += ltt-facility-loader-tests.o # #obj-m += test-time-probe.o #obj-m += test-time-probe2.o - obj-m += test-compact.o + #obj-m += test-compact.o # obj-m += ltt-facility-loader-compact.o # obj-m += test-instrument-size-small.o # obj-m += test-instrument-size-med.o # obj-m += test-instrument-size-big.o # obj-m += test-printk-effect.o - obj-m += ltt-probe-tests.o - obj-m += test-time-probe3.o + #obj-m += ltt-probe-tests.o + #obj-m += test-time-probe3.o endif - obj-m += probe-example.o - obj-m += marker-example.o + #obj-m += cond_call.o + #obj-m += cond_call2.o + obj-m += test-irq-latency.o + #obj-m += list-mark.o + #obj-m += test-rodata.o + #obj-m += test-tlb.o + #obj-m += test-init.o + #obj-m += probe-example.o + #obj-m += marker-example.o # obj-m += test-async-tsc.o - obj-m += test-tsc-sync.o - obj-m += test-tsc.o + #obj-m += test-tsc-sync.o + #obj-m += test-tsc.o # obj-m += test-hpet.o #obj-m += test-debugfs.o # obj-m += test-mod.o @@ -27,6 +34,7 @@ endif #obj-m += test-ser.o # obj-m += test-cmpxchg.o # obj-m += test-cmpxchg-nolock.o + obj-m += test-cmpxchg-nolock2.o # obj-m += test-spinlock.o # obj-m += test-inc.o # obj-m += test-inc-nolock.o diff --git a/tests/kernel/marker-example.c b/tests/kernel/marker-example.c index 9ae10d9e..13c49b7b 100644 --- a/tests/kernel/marker-example.c +++ b/tests/kernel/marker-example.c @@ -19,10 +19,9 @@ static int my_open(struct inode *inode, struct file *file) { int i; - MARK(subsystem_event, "%d %s %*.*r", 123, "example string", - sizeof(current), __alignof__(current), current); + trace_mark(subsystem_event, "%d %s", 123, "example string"); for (i=0; i<10; i++) { - MARK(subsystem_eventb, MARK_NOARGS); + trace_mark(subsystem_eventb, MARK_NOARGS); } return -EPERM; } diff --git a/tests/kernel/probe-example.c b/tests/kernel/probe-example.c index 5e7093c7..e3d9a300 100644 --- a/tests/kernel/probe-example.c +++ b/tests/kernel/probe-example.c @@ -29,19 +29,14 @@ void probe_subsystem_event(const struct __mark_marker_c *mdata, /* Declare args */ unsigned int value; const char *mystr; - int task_size, task_alignment; - struct task_struct *task; /* Assign args */ va_start(ap, format); value = va_arg(ap, typeof(value)); mystr = va_arg(ap, typeof(mystr)); - task_size = va_arg(ap, typeof(task_size)); - task_alignment = va_arg(ap, typeof(task_alignment)); - task = va_arg(ap, typeof(task)); /* Call printk */ - printk("Value %u, string %s, current ptr %p\n", value, mystr, current); + printk("Value %u, string %s\n", value, mystr); /* or count, check rights, serialize data in a buffer */ @@ -60,7 +55,7 @@ void probe_subsystem_eventb(const struct __mark_marker_c *mdata, static struct probe_data probe_array[] = { { .name = "subsystem_event", - .format = "%d %s %*.*r", + .format = "%d %s", .probe_func = probe_subsystem_event }, { .name = "subsystem_eventb", .format = MARK_NOARGS, diff --git a/tests/kernel/test-cmpxchg-nolock2.c b/tests/kernel/test-cmpxchg-nolock2.c new file mode 100644 index 00000000..96992115 --- /dev/null +++ b/tests/kernel/test-cmpxchg-nolock2.c @@ -0,0 +1,126 @@ +/* test-cmpxchg-nolock.c + * + * Compare local cmpxchg with irq disable / enable. + */ + + +#include +#include +#include +#include +#include +#include +#include + +#define NR_LOOPS 20000 + +int test_val; + +static void do_test_cmpxchg(void) +{ + int ret; + long flags; + unsigned int i; + cycles_t time1, time2, time; + long rem; + + local_irq_save(flags); + preempt_disable(); + time1 = get_cycles(); + for (i = 0; i < NR_LOOPS; i++) { + ret = cmpxchg_local(&test_val, 0, 0); + } + time2 = get_cycles(); + local_irq_restore(flags); + preempt_enable(); + time = time2 - time1; + + printk(KERN_ALERT "test results: time for non locked cmpxchg\n"); + printk(KERN_ALERT "number of loops: %d\n", NR_LOOPS); + printk(KERN_ALERT "total time: %llu\n", time); + time = div_long_long_rem(time, NR_LOOPS, &rem); + printk(KERN_ALERT "-> non locked cmpxchg takes %llu cycles\n", time); + printk(KERN_ALERT "test end\n"); +} + +/* + * This test will have a higher standard deviation due to incoming interrupts. + */ +static void do_test_enable_int(void) +{ + long flags; + unsigned int i; + cycles_t time1, time2, time; + long rem; + + local_irq_save(flags); + preempt_disable(); + time1 = get_cycles(); + for (i = 0; i < NR_LOOPS; i++) { + local_irq_restore(flags); + } + time2 = get_cycles(); + local_irq_restore(flags); + preempt_enable(); + time = time2 - time1; + + printk(KERN_ALERT "test results: time for enabling interrupts (STI)\n"); + printk(KERN_ALERT "number of loops: %d\n", NR_LOOPS); + printk(KERN_ALERT "total time: %llu\n", time); + time = div_long_long_rem(time, NR_LOOPS, &rem); + printk(KERN_ALERT "-> enabling interrupts (STI) takes %llu cycles\n", + time); + printk(KERN_ALERT "test end\n"); +} + +static void do_test_disable_int(void) +{ + unsigned long flags, flags2; + unsigned int i; + cycles_t time1, time2, time; + long rem; + + local_irq_save(flags); + preempt_disable(); + time1 = get_cycles(); + for ( i = 0; i < NR_LOOPS; i++) { + local_irq_save(flags2); + } + time2 = get_cycles(); + local_irq_restore(flags); + preempt_enable(); + time = time2 - time1; + + printk(KERN_ALERT "test results: time for disabling interrupts (CLI)\n"); + printk(KERN_ALERT "number of loops: %d\n", NR_LOOPS); + printk(KERN_ALERT "total time: %llu\n", time); + time = div_long_long_rem(time, NR_LOOPS, &rem); + printk(KERN_ALERT "-> disabling interrupts (CTI) takes %llu cycles\n", + time); + printk(KERN_ALERT "test end\n"); +} + + + +static int ltt_test_init(void) +{ + printk(KERN_ALERT "test init\n"); + + do_test_cmpxchg(); + do_test_enable_int(); + do_test_disable_int(); + return -EAGAIN; /* Fail will directly unload the module */ +} + +static void ltt_test_exit(void) +{ + printk(KERN_ALERT "test exit\n"); +} + +module_init(ltt_test_init) +module_exit(ltt_test_exit) + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Mathieu Desnoyers"); +MODULE_DESCRIPTION("Cmpxchg vs int Test"); + diff --git a/tests/kernel/test-compact.c b/tests/kernel/test-compact.c index d3f4472e..0658a864 100644 --- a/tests/kernel/test-compact.c +++ b/tests/kernel/test-compact.c @@ -6,7 +6,7 @@ #include #include -#include +#include #include #include #include -- 2.34.1