Hi Javi,
On 13 July 2016 at 15:07, Javi Merino javi.merino@arm.com wrote:
The runtime event emulates the execution of a load for a specific amount of time irrespective of the compute capacity of the CPU it is run on or the frequency.
Thanks for adding this kind of event. It was on the TODO list
doc/tutorial.txt | 5 +++++ src/rt-app.c | 20 ++++++++++++++++++++ src/rt-app_parse_config.c | 3 +++ src/rt-app_types.h | 1 + 4 files changed, 29 insertions(+)
diff --git a/doc/tutorial.txt b/doc/tutorial.txt index 6dc9a44..100a2df 100644 --- a/doc/tutorial.txt +++ b/doc/tutorial.txt @@ -217,6 +217,11 @@ number of loop thanks to the ns per loop value (see calibration). This way of working enables to emulate a load with a duration that will vary with the frequency or the compute capacity of the CPU.
+* runtime : Integer. The duration is define in usec. Similar to the +run event, it emulates the execution of a load. Unlike run, runtime +runs for a specific amount of time irrespective of the compute +capacity of the CPU or the frequency.
- sleep : Integer. Emulate the sleep of a task. The duration is defined in
usec.
diff --git a/src/rt-app.c b/src/rt-app.c index 679d39a..5283ac7 100644 --- a/src/rt-app.c +++ b/src/rt-app.c @@ -274,6 +274,26 @@ static int run_event(event_data_t *event, int dry_run, *duration += timespec_to_usec(&t_end); } break;
case rtapp_runtime:
{
struct timespec t_start, t_end;
int64_t diff_ns;
log_debug("runtime %d ", event->duration);
clock_gettime(CLOCK_MONOTONIC, &t_start);
do {
/* Do work for 32usec */
I'm curious to know why you choose the value 32usec ? This value seems to be a bit long for me. 10usec should be enough
*perf += loadwait(32);
clock_gettime(CLOCK_MONOTONIC, &t_end);
diff_ns = timespec_sub_to_ns(&t_end, &t_start);
} while ((diff_ns / 1000) < event->duration);
t_end = timespec_sub(&t_end, &t_start);
*duration += timespec_to_usec(&t_end);
}
break; case rtapp_timer: { struct timespec t_period, t_now;
diff --git a/src/rt-app_parse_config.c b/src/rt-app_parse_config.c index 99b0e5e..c59b562 100644 --- a/src/rt-app_parse_config.c +++ b/src/rt-app_parse_config.c @@ -348,6 +348,8 @@ parse_thread_event_data(char *name, struct json_object *obj,
if (!strncmp(name, "sleep", strlen("sleep"))) data->type = rtapp_sleep;
else if (!strncmp(name, "runtime", strlen("runtime")))
data->type = rtapp_runtime; else data->type = rtapp_run;
@@ -558,6 +560,7 @@ static char *events[] = { "broad", "sync", "sleep",
"runtime",
Please move it after "run" to keep the same order as in run_event function
"run", "timer", "suspend",
diff --git a/src/rt-app_types.h b/src/rt-app_types.h index 2ce9c9d..57fb80d 100644 --- a/src/rt-app_types.h +++ b/src/rt-app_types.h @@ -67,6 +67,7 @@ typedef enum resource_t rtapp_resume, rtapp_mem, rtapp_iorun,
rtapp_runtime,
} resource_t;
struct _rtapp_mutex {
1.9.1