aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-04-13 09:56:03 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-04-13 09:56:03 +0000
commit339c8e993d31bc1585ade9d6b1e04d4bdceae630 (patch)
tree38c1453d954cd8c71294dbc27089a69d42fb6d75 /test
parentf140302b0b3e9f7c84fede1120e3bb15c2c4322a (diff)
downloadChibiOS-339c8e993d31bc1585ade9d6b1e04d4bdceae630.tar.gz
ChibiOS-339c8e993d31bc1585ade9d6b1e04d4bdceae630.tar.bz2
ChibiOS-339c8e993d31bc1585ade9d6b1e04d4bdceae630.zip
New benchmark added.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@900 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'test')
-rw-r--r--test/testbmk.c139
1 files changed, 98 insertions, 41 deletions
diff --git a/test/testbmk.c b/test/testbmk.c
index 8d02b8ae5..ad7f528e4 100644
--- a/test/testbmk.c
+++ b/test/testbmk.c
@@ -141,26 +141,51 @@ const struct testcase testbmk3 = {
static char *bmk4_gettest(void) {
- return "Benchmark, threads creation/termination, worst case";
+ return "Benchmark, context switch #4, naked";
+}
+
+msg_t thread4(void *p) {
+ msg_t msg;
+ Thread *self = chThdSelf();
+
+ chSysLock();
+ do {
+ chSchGoSleepS(PRSUSPENDED);
+ msg = self->p_rdymsg;
+ } while (msg == RDY_OK);
+ chSysUnlock();
+ return 0;
}
static void bmk4_execute(void) {
+ Thread *tp;
+ tp = threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()+1, thread4, NULL);
uint32_t n = 0;
- void *wap = wa[0];
- tprio_t prio = chThdGetPriority() - 1;
test_wait_tick();
test_start_timer(1000);
do {
- chThdWait(chThdCreateStatic(wap, WA_SIZE, prio, thread2, NULL));
- n++;
+ chSysLock();
+ chSchWakeupS(tp, RDY_OK);
+ chSchWakeupS(tp, RDY_OK);
+ chSchWakeupS(tp, RDY_OK);
+ chSchWakeupS(tp, RDY_OK);
+ chSysUnlock();
+ n += 4;
#if defined(WIN32)
ChkIntSources();
#endif
} while (!test_timer_done);
+ chSysLock();
+ chSchWakeupS(tp, RDY_TIMEOUT);
+ chSysUnlock();
+
+ test_wait_threads();
test_print("--- Score : ");
test_printn(n);
- test_println(" threads/S");
+ test_print(" msgs/S, ");
+ test_printn(n << 1);
+ test_println(" ctxswc/S");
}
const struct testcase testbmk4 = {
@@ -172,18 +197,18 @@ const struct testcase testbmk4 = {
static char *bmk5_gettest(void) {
- return "Benchmark, threads creation/termination, optimal";
+ return "Benchmark, threads creation/termination, worst case";
}
static void bmk5_execute(void) {
uint32_t n = 0;
void *wap = wa[0];
- tprio_t prio = chThdGetPriority() + 1;
+ tprio_t prio = chThdGetPriority() - 1;
test_wait_tick();
test_start_timer(1000);
do {
- chThdCreateStatic(wap, WA_SIZE, prio, thread2, NULL);
+ chThdWait(chThdCreateStatic(wap, WA_SIZE, prio, thread2, NULL));
n++;
#if defined(WIN32)
ChkIntSources();
@@ -201,6 +226,37 @@ const struct testcase testbmk5 = {
bmk5_execute
};
+static char *bmk6_gettest(void) {
+
+ return "Benchmark, threads creation/termination, optimal";
+}
+
+static void bmk6_execute(void) {
+
+ uint32_t n = 0;
+ void *wap = wa[0];
+ tprio_t prio = chThdGetPriority() + 1;
+ test_wait_tick();
+ test_start_timer(1000);
+ do {
+ chThdCreateStatic(wap, WA_SIZE, prio, thread2, NULL);
+ n++;
+#if defined(WIN32)
+ ChkIntSources();
+#endif
+ } while (!test_timer_done);
+ test_print("--- Score : ");
+ test_printn(n);
+ test_println(" threads/S");
+}
+
+const struct testcase testbmk6 = {
+ bmk6_gettest,
+ NULL,
+ NULL,
+ bmk6_execute
+};
+
static msg_t thread3(void *p) {
while (!chThdShouldTerminate())
@@ -208,17 +264,17 @@ static msg_t thread3(void *p) {
return 0;
}
-static char *bmk6_gettest(void) {
+static char *bmk7_gettest(void) {
return "Benchmark, mass reschedulation, 5 threads";
}
-static void bmk6_setup(void) {
+static void bmk7_setup(void) {
chSemInit(&sem1, 0);
}
-static void bmk6_execute(void) {
+static void bmk7_execute(void) {
uint32_t n;
threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()+1, thread3, NULL);
@@ -248,19 +304,19 @@ static void bmk6_execute(void) {
test_println(" ctxswc/S");
}
-const struct testcase testbmk6 = {
- bmk6_gettest,
- bmk6_setup,
+const struct testcase testbmk7 = {
+ bmk7_gettest,
+ bmk7_setup,
NULL,
- bmk6_execute
+ bmk7_execute
};
-static char *bmk7_gettest(void) {
+static char *bmk8_gettest(void) {
return "Benchmark, I/O Queues throughput";
}
-static void bmk7_execute(void) {
+static void bmk8_execute(void) {
static uint8_t ib[16];
static Queue iq;
@@ -287,21 +343,21 @@ static void bmk7_execute(void) {
test_println(" bytes/S");
}
-const struct testcase testbmk7 = {
- bmk7_gettest,
+const struct testcase testbmk8 = {
+ bmk8_gettest,
NULL,
NULL,
- bmk7_execute
+ bmk8_execute
};
-static char *bmk8_gettest(void) {
+static char *bmk9_gettest(void) {
return "Benchmark, virtual timers set/reset";
}
static void tmo(void *param) {}
-static void bmk8_execute(void) {
+static void bmk9_execute(void) {
static VirtualTimer vt1, vt2;
uint32_t n = 0;
@@ -324,24 +380,24 @@ static void bmk8_execute(void) {
test_println(" timers/S");
}
-const struct testcase testbmk8 = {
- bmk8_gettest,
+const struct testcase testbmk9 = {
+ bmk9_gettest,
NULL,
NULL,
- bmk8_execute
+ bmk9_execute
};
-static char *bmk9_gettest(void) {
+static char *bmk10_gettest(void) {
return "Benchmark, semaphores wait/signal";
}
-static void bmk9_setup(void) {
+static void bmk10_setup(void) {
chSemInit(&sem1, 1);
}
-static void bmk9_execute(void) {
+static void bmk10_execute(void) {
uint32_t n = 0;
test_wait_tick();
@@ -365,25 +421,25 @@ static void bmk9_execute(void) {
test_println(" wait+signal/S");
}
-const struct testcase testbmk9 = {
- bmk9_gettest,
- bmk9_setup,
+const struct testcase testbmk10 = {
+ bmk10_gettest,
+ bmk10_setup,
NULL,
- bmk9_execute
+ bmk10_execute
};
#if CH_USE_MUTEXES
-static char *bmk10_gettest(void) {
+static char *bmk11_gettest(void) {
return "Benchmark, mutexes lock/unlock";
}
-static void bmk10_setup(void) {
+static void bmk11_setup(void) {
chMtxInit(&mtx1);
}
-static void bmk10_execute(void) {
+static void bmk11_execute(void) {
uint32_t n = 0;
test_wait_tick();
@@ -407,11 +463,11 @@ static void bmk10_execute(void) {
test_println(" lock+unlock/S");
}
-const struct testcase testbmk10 = {
- bmk10_gettest,
- bmk10_setup,
+const struct testcase testbmk11 = {
+ bmk11_gettest,
+ bmk11_setup,
NULL,
- bmk10_execute
+ bmk11_execute
};
#endif
@@ -429,8 +485,9 @@ const struct testcase * const patternbmk[] = {
&testbmk7,
&testbmk8,
&testbmk9,
-#if CH_USE_MUTEXES
&testbmk10,
+#if CH_USE_MUTEXES
+ &testbmk11,
#endif
#endif
NULL