From: telleriam Date: Wed, 28 Nov 2007 09:31:19 +0000 (+0000) Subject: Accelerating testbench of long_jump in FOSA X-Git-Url: https://rtime.felk.cvut.cz/gitweb/frescor/fosa.git/commitdiff_plain/b5a24fe101259f619304c56f8efbb37dc6c7b363 Accelerating testbench of long_jump in FOSA git-svn-id: http://www.frescor.org/private/svn/frescor/fosa/trunk@908 35b4ef3e-fd22-0410-ab77-dab3279adceb --- diff --git a/src_marte/tests/test_non_local_jump/Makefile b/src_marte/tests/test_non_local_jump/Makefile index f450c2f..d2539bf 100644 --- a/src_marte/tests/test_non_local_jump/Makefile +++ b/src_marte/tests/test_non_local_jump/Makefile @@ -7,9 +7,10 @@ CFLAGS += -I$(FRSH_PATH)/src_ads # Quick hack for frsh_error frsh_error.o: frsh_error.c -testbench_long_jump.exe: testbench_long_jump.c frsh_error.o +testbench_long_jump.exe: testbench_long_jump.c frsh_error.o libfosa + +test_fosa_long_jump.exe: test_fosa_long_jump.c frsh_error.o libfosa -test_fosa_long_jump.exe: test_fosa_long_jump.c frsh_error.o diff --git a/src_marte/tests/test_non_local_jump/testbench_long_jump.c b/src_marte/tests/test_non_local_jump/testbench_long_jump.c index 8b8199a..302ea8f 100644 --- a/src_marte/tests/test_non_local_jump/testbench_long_jump.c +++ b/src_marte/tests/test_non_local_jump/testbench_long_jump.c @@ -36,14 +36,16 @@ #define PERIODIC_THREAD_PRIORITY (fosa_get_priority_min() + 5) #define MAIN_THREAD_PRIORITY (fosa_get_priority_min() + 3) -#define NUMBER_OF_JUMPS 5 +#define NUMBER_OF_JUMPS 100 typedef struct _results_t { double first_jump_interval_ms; double average_jump_interval_ms; double min_jump_interval_ms; + int iteration_min_jump_interval; double max_jump_interval_ms; + int iteration_max_jump_interval; double total_jump_interval_ms; int number_of_jumps; } results_t; @@ -94,8 +96,9 @@ int main() results.average_jump_interval_ms = results.total_jump_interval_ms/results.number_of_jumps; printf("------------ RESULTS -------------\n"); - printf("First Time: %6.3f ms Max Time: %6.3f ms Min Time: %6.3f ms\n", - results.first_jump_interval_ms, results.max_jump_interval_ms, results.min_jump_interval_ms); + printf("First Time: %6.3f ms\n Max Time: %6.3f ms Iteration %d Min Time: %6.3f ms Iteration %d\n", + results.first_jump_interval_ms, results.max_jump_interval_ms, results.iteration_max_jump_interval, + results.min_jump_interval_ms, results.iteration_min_jump_interval); printf("Average_time: %6.3f ms Total jumps: %d\n", results.average_jump_interval_ms, results.number_of_jumps); printf("End of test\n"); @@ -157,10 +160,8 @@ static void *periodic_code(void *thread_arg) while (results->number_of_jumps < NUMBER_OF_JUMPS) { int jumped = -1; - struct timespec budget = {1, 400000000}; // 1.4 secs + struct timespec budget = {0, 20000000}; // 20 ms - struct timespec old_activation_timestamp = {-1, -1}; - struct timespec activation_timestamp = {-1, -1}; struct timespec after_jump_timestamp = {-1, -1 }; double jump_interval_ms = 0.0; @@ -170,8 +171,6 @@ static void *periodic_code(void *thread_arg) jumped = 0; memset(&before_jump_timestamp, 0, sizeof(before_jump_timestamp) ); - /* For statistical purposes we read the activation time */ - fosa_clock_get_time(FOSA_CLOCK_REALTIME, &old_activation_timestamp); /* Start of the interruptible block */ /************************************/ @@ -179,6 +178,7 @@ static void *periodic_code(void *thread_arg) /* We arm the jump_timer */ fosa_timer_arm(jump_timer, false, &budget); + /* This is the point where the jump returns */ fosa_long_jump_save_context(&context); @@ -202,8 +202,12 @@ static void *periodic_code(void *thread_arg) if (first_time) { results->first_jump_interval_ms = jump_interval_ms; + results->max_jump_interval_ms = jump_interval_ms; + results->iteration_max_jump_interval = results->number_of_jumps; + results->min_jump_interval_ms = jump_interval_ms; + results->iteration_min_jump_interval = results->number_of_jumps; first_time = 0; } @@ -212,31 +216,20 @@ static void *periodic_code(void *thread_arg) if (jump_interval_ms > results->max_jump_interval_ms) { results->max_jump_interval_ms = jump_interval_ms; + results->iteration_max_jump_interval = results->number_of_jumps; } if (jump_interval_ms < results->min_jump_interval_ms) { results->min_jump_interval_ms = jump_interval_ms; + results->iteration_min_jump_interval = results->number_of_jumps; } - printf("Jump Iteration: %d\n", results->number_of_jumps); + printf("Jump Iteration: %d\r", results->number_of_jumps); } - /* End of interruptible work */ /*****************************/ - printf("After interruptible block\n"); - - /* Now we measure the time duration of the block */ - /*************************************************/ - fosa_clock_get_time(FOSA_CLOCK_REALTIME, &activation_timestamp); - decr_timespec(&activation_timestamp, &old_activation_timestamp); - printf("Execution time: %6.3f\n", t2d(activation_timestamp) ); - - /* And we program the next loop */ - incr_timespec(&old_activation_timestamp, &period); - clock_nanosleep(FOSA_CLOCK_REALTIME, TIMER_ABSTIME, &activation_timestamp, - &old_activation_timestamp); } @@ -249,12 +242,6 @@ static void *periodic_code(void *thread_arg) static void work_under_a_interruptible_budget() { - struct timespec exec_time = {1, 0}; // 1 seg - - printf("Start regular work\n"); - - frsh_eat(&exec_time); - /* This must be measured */ while(1) {