diff --git a/app/benchmark/timing/all.sh b/app/benchmark/timing/all.sh index c6043ef81bfddccb40198a8cf4000a4bce0cb04e..6119197f9c723b845c636d6f487a2231e7401f12 100755 --- a/app/benchmark/timing/all.sh +++ b/app/benchmark/timing/all.sh @@ -12,8 +12,11 @@ export NO_HEADER=1 ./run bench-timing-interrupt_reaction 0 ./run bench-timing-wait_event 0 ./run bench-timing-simple_interrupt 1 +./run bench-timing-alarm 0 + +# Evaluationszenarien #1, #2 und #3 ./run bench-timing-tmr 0 ./run bench-timing-aborted_computation 0 -./run bench-timing-alarm 0 +./run bench-timing-computation_alarm 0 cd ${ALL_PWD} diff --git a/app/benchmark/timing/benchmarks.org b/app/benchmark/timing/benchmarks.org index e321872cbffe3cc7b61507bce75faae18300eebe..2fcfd3ea3e6582dc691c3faa9c540cc2450c0a06 100644 --- a/app/benchmark/timing/benchmarks.org +++ b/app/benchmark/timing/benchmarks.org @@ -1,6 +1,56 @@ * Legend TC(X): A time consumer with X loop iterations +* Evaluation #1: Triple Modular Redundancy + A higher priority task is activated in a bounded loop. + +** Code +0: timing_start() +1: for (i = 0; i < 3; i++) { +2: ActivateTask(Computation) +3: } +4: timing_end() + +Compuation: +10: TC(50) +11: TerminateTask() + +** Sequence +[0, 1, 2 10, 11, 3, 1, 10, 11, 3, 1, 10, 11, 3, 4] +** Results +#+begin_src sh +./run bench-timing-tmr 0 +#+end_src + +#+RESULTS: +| Name | GCFG Nodes | Bound | IRQs | Ticks | Alarms | +| bench-timing-tmr-0 | 9 | 3319 | 0 | 0 | 0 | +* Evaluation #2: Alarm-interrupted Compuation +Long Computation, Alarm that triggers three times. + +** Result +#+begin_src sh +./run bench-timing-computation_alarm 0 +#+end_src + +#+RESULTS: +| Name | GCFG Nodes | Bound | IRQs | Ticks | Alarms | +| bench-timing-computation_alarm-0 | 13 | 765667 | 8 | 8 | 3 | + +* Evaluation #3: Aborted Computation +A task activates a lower priority task, waits for its termination or +that an abort interrupt occurs. + +- Results + #+begin_src sh + ./run bench-timing-aborted_computation 0 + #+end_src + + #+RESULTS: + | Name | GCFG Nodes | Bound | IRQs | Ticks | Alarms | + | bench-timing-aborted_computation-0 | 35 | 56265 | 1 | 0 | 0 | + + * ActivateTask without Dispatch The ActivateTask activates a lower priority task, therefore, no redispatch is issued. @@ -230,43 +280,6 @@ ISR: - With Cycle Timing Model | GCFG Nodes | Bound | IRQs | Ticks | Alarms | | 9 | 5555 | 1 | 0 | 0 | -* Evaluation #1: Triple Modular Redundancy - A higher priority task is activated in a bounded loop. - -** Code -0: timing_start() -1: for (i = 0; i < 3; i++) { -2: ActivateTask(Computation) -3: } -4: timing_end() - -Compuation: -10: TC(50) -11: TerminateTask() - -** Sequence -[0, 1, 2 10, 11, 3, 1, 10, 11, 3, 1, 10, 11, 3, 4] -** Results -#+begin_src sh -./run bench-timing-tmr 0 -#+end_src - -#+RESULTS: -| GCFG Nodes | Bound | IRQs | Ticks | Alarms | -| 9 | 3331 | 0 | 0 | 0 | -* Evaluation #2: Aborted Computation -A task activates a lower priority task, waits for its termination or -that an abort interrupt occurs. - -- Results - #+begin_src sh - ./run bench-timing-aborted_computation 0 - #+end_src - - #+RESULTS: - | GCFG Nodes | Bound | IRQs | Ticks | Alarms | - | 32 | 56250 | 1 | 0 | 0 | - * Complex Interaction Patterns + Alarm In Task3, a loop activates a high-priority task Task1 30 times. Task1 diff --git a/app/benchmark/timing/computation-alarm.cc b/app/benchmark/timing/computation-alarm.cc index 22374ba0fa2c57cbf88fff0f86493f42a24b0630..b05ef80c79e0c4999f2a85b4d4aa5a4e81427d3b 100644 --- a/app/benchmark/timing/computation-alarm.cc +++ b/app/benchmark/timing/computation-alarm.cc @@ -18,6 +18,7 @@ GENERATE_TIME_CONSUMER(computation_0, 2300) GENERATE_TIME_CONSUMER(computation_1, 50) +int alarm_count; extern "C" { noinline void timing_entry(void) { @@ -37,6 +38,7 @@ TASK(Task3) { EnableAllInterrupts(); /* Dump Timing and shutdown machine. */ + kout << "alarm count " << alarm_count << endl; timing_dump(); TerminateTask(); @@ -44,6 +46,7 @@ TASK(Task3) { TASK(Task4) { + alarm_count++; computation_1(); TerminateTask(); }