diff mbox

[v6,2/3] linux-generic: odp_timer: warn if tick is late

Message ID 1447943403-24803-3-git-send-email-ivan.khoronzhuk@linaro.org
State Accepted
Commit 56e6043816ecbe954e804004f0b13cdad5915341
Headers show

Commit Message

Ivan Khoronzhuk Nov. 19, 2015, 2:30 p.m. UTC
If tick is late then application should be warned about this.
It means that actual timer resolution is worse than expected.
The default timer resolution is set 10ms, that is equal to jiffy
on most systems. The default resolution is set bearing in mind
that on a CPU runs maximum two threads that ideally fits in 10ms.
But user can change it to be smaller, in case if CPU0 is isolated
and it handles only the timer ticks. This patch helps user to set
correct timer resolution.

Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
---
 platform/linux-generic/odp_timer.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Ola Liljedahl Nov. 27, 2015, 7:01 p.m. UTC | #1
On 19 November 2015 at 15:30, Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
wrote:

> If tick is late then application should be warned about this.

> It means that actual timer resolution is worse than expected.

> The default timer resolution is set 10ms, that is equal to jiffy

> on most systems. The default resolution is set bearing in mind

> that on a CPU runs maximum two threads that ideally fits in 10ms.

> But user can change it to be smaller, in case if CPU0 is isolated

> and it handles only the timer ticks. This patch helps user to set

> correct timer resolution.

>

> Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

>

Reviewed-by: Ola Liljedahl <ola.liljedahl@linaro.org>



> ---

>  platform/linux-generic/odp_timer.c | 7 +++++++

>  1 file changed, 7 insertions(+)

>

> diff --git a/platform/linux-generic/odp_timer.c

> b/platform/linux-generic/odp_timer.c

> index e8f0267..407ccc1 100644

> --- a/platform/linux-generic/odp_timer.c

> +++ b/platform/linux-generic/odp_timer.c

> @@ -632,7 +632,14 @@ static unsigned

> odp_timer_pool_expire(odp_timer_pool_t tpid, uint64_t tick)

>

>  static void timer_notify(sigval_t sigval)

>  {

> +       int overrun;

>         odp_timer_pool *tp = (odp_timer_pool *)sigval.sival_ptr;

> +

> +       overrun = timer_getoverrun(tp->timerid);

> +       if (overrun)

> +               ODP_ERR("\n\t%d ticks overrun on timer pool \"%s\", timer

> resolution too high\n",

> +                       overrun, tp->name);

> +

>  #ifdef __ARM_ARCH

>         odp_timer *array = &tp->timers[0];

>         uint32_t i;

> --

> 1.9.1

>

> _______________________________________________

> lng-odp mailing list

> lng-odp@lists.linaro.org

> https://lists.linaro.org/mailman/listinfo/lng-odp

>
diff mbox

Patch

diff --git a/platform/linux-generic/odp_timer.c b/platform/linux-generic/odp_timer.c
index e8f0267..407ccc1 100644
--- a/platform/linux-generic/odp_timer.c
+++ b/platform/linux-generic/odp_timer.c
@@ -632,7 +632,14 @@  static unsigned odp_timer_pool_expire(odp_timer_pool_t tpid, uint64_t tick)
 
 static void timer_notify(sigval_t sigval)
 {
+	int overrun;
 	odp_timer_pool *tp = (odp_timer_pool *)sigval.sival_ptr;
+
+	overrun = timer_getoverrun(tp->timerid);
+	if (overrun)
+		ODP_ERR("\n\t%d ticks overrun on timer pool \"%s\", timer resolution too high\n",
+			overrun, tp->name);
+
 #ifdef __ARM_ARCH
 	odp_timer *array = &tp->timers[0];
 	uint32_t i;