Sometimes we need a create load that can run in any CPU of the
system for a given period of time, regardless of their compute
capacity. Add a runtime event to be able to generate such a load.
Changes since v1:
- Change runtime granularity to 10usec
- Reorder run and runtime in run_event() and in the tutorial.txt
Javi Merino (2):
rt-parse: avoid repetition in obj_is_event()
rt-app: add a runtime event
doc/tutorial.txt | 5 +++++
src/rt-app.c | 20 +++++++++++++++++
src/rt-app_parse_config.c | 57 ++++++++++++++++++++++++-----------------------
src/rt-app_types.h | 1 +
4 files changed, 55 insertions(+), 28 deletions(-)
--
1.9.1
Hi Javi,
On 13 July 2016 at 15:07, Javi Merino <javi.merino(a)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
>
Hi Javi,
+Adding sched-tools list
Vincent
On 13 July 2016 at 15:07, Javi Merino <javi.merino(a)arm.com> wrote:
> Sometimes we need a create load that can run in any CPU of the
> system for a given period of time, regardless of their compute
> capacity. Add a runtime event to be able to generate such a load.
>
> Javi Merino (2):
> rt-parse: avoid repetition in obj_is_event()
> rt-app: add a runtime event
>
> doc/tutorial.txt | 5 +++++
> src/rt-app.c | 20 +++++++++++++++++
> src/rt-app_parse_config.c | 57 ++++++++++++++++++++++++-----------------------
> src/rt-app_types.h | 1 +
> 4 files changed, 55 insertions(+), 28 deletions(-)
>
> --
> 1.9.1
>