All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-help] AT91SAM9260 latency
@ 2008-01-23  6:52 Juan Antonio Garcia Redondo
  2008-01-23 10:04 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 27+ messages in thread
From: Juan Antonio Garcia Redondo @ 2008-01-23  6:52 UTC (permalink / raw)
  To: xenomai; +Cc: jagarcia

Hi list,

These are my latency results over a custom board based on AT91SAM9260.

Environment:
	kernel 2.6.20 + xenomai 2.4.0
	Load: dd if=/dev/zero of=/dev/null plus an external ping -f to
	stress the ethernet.

The results:
running: ./run -- -p 500 -T 60 -t0 # latency

== Sampling period: 500 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT|  00:00:01  (periodic user-mode task, 500 us period, priority 99)
RTH|-----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat worst
RTD|      45.747|      62.177|      78.286|       0|      45.747|      78.286
.............................................................................
RTD|      39.948|      61.211|      78.286|       0|      39.304|      88.273
---|------------|------------|------------|--------|-------------------------
RTS|      39.304|      61.855|      88.273|       0|    00:01:00/00:01:00

Thu Mar 30 01:51:36 UTC 2000
running: ./run -- -p 500 -T 60 -t1 # latency
== Sampling period: 500 us
== Test mode: in-kernel periodic task
== All results in microseconds
warming up...
RTT|  00:00:01  (in-kernel periodic task, 500 us period, priority 99)
RTH|-----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat worst
RTD|      19.007|      31.731|      43.813|       0|      19.007|      43.813
.............................................................................
---|------------|------------|------------|--------|-------------------------
RTS|      13.501|      31.126|      71.188|       0|    00:01:00/00:01:00

Thu Mar 30 01:52:52 UTC 2000
running: ./run -- -p 500 -T 60 -t2 # latency
*
*
* Type ^C to stop this application.
*
*
== Sampling period: 500 us
== Test mode: in-kernel timer handler
== All results in microseconds
warming up...
RTT|  00:00:01  (in-kernel timer handler, 500 us period, priority 99)
RTH|-----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat worst
.............................................................................
---|------------|------------|------------|--------|-------------------------
RTS|      -0.977|       8.521|      28.337|       0|    00:01:00/00:01:00

Thu Mar 30 01:54:07 UTC 2000
running: ./run -- -T 120 # switchtest
== Testing FPU check routines...
== FPU check routines: unimplemented, skipping FPU switches tests.
== Threads: sleeper-0 rtk-1 rtk-2 rtup-3 rtup-4 rtus-5 rtus-6 rtuo-7 rtuo-8
RTT|  00:00:01
RTH|ctx switches|-------total
RTD|         756|         756
..............................
RTD|         723|       87717
RTD|         762|       88479
RTD|         750|       89229
RTD|          42|       89271

Thu Mar 30 01:56:22 UTC 2000
running: ./run -- -p500 -h # switchbench
== Sampling period: 500 us
== Do not interrupt this program
RTH|     lat min|     lat avg|     lat max|        lost
RTD|      47.358|      52.512|      68.298|           0
---|---range-|---samples
HSD| 47 - 48 |          1
HSD| 48 - 49 |          5
HSD| 49 - 50 |          6
HSD| 50 - 51 |       2065
HSD| 51 - 52 |      22440
HSD| 52 - 53 |      41582
HSD| 53 - 54 |      19749
HSD| 54 - 55 |      11696
HSD| 55 - 56 |       2131
HSD| 56 - 57 |          1
HSD| 60 - 61 |          1
HSD| 62 - 63 |          1
HSD| 63 - 64 |         21
HSD| 64 - 65 |         95
HSD| 65 - 66 |        107
HSD| 66 - 67 |         63
HSD| 67 - 68 |         29
HSD| 68 - 69 |          3
HSS|     99996|     52.271|      1.278

Thu Mar 30 01:57:25 UTC 2000
running: ./run -- -p 10 -n -l 1000 # cyclictest

T: 0 (    0) P:10 I:    1000 C:       0 Min: 1000000 Act:       0 Avg:       0 Max:-1000000
^[[3A1.30 1.01 0.63 2/33 2107          

...........................................................................................

T: 0 ( 2107) P:10 I:    1000 C:       0 Min: 1000000 Act:       0 Avg:       0 Max:-1000000
^[[3A1.30 1.01 0.63 2/33 2107          

T: 0 ( 2107) P:10 I:    1000 C:       0 Min: 1000000 Act:       0 Avg:       0 Max:-1000000
^[[3A1.30 1.01 0.63 2/33 2107          

T: 0 ( 2107) P:10 I:    1000 C:       0 Min: 1000000 Act:       0 Avg:       0 Max:-1000000
^[[3A1.30 1.01 0.63 2/33 2107          

T: 0 ( 2107) P:10 I:    1000 C:      19 Min:      45 Act:      45 Avg:      69 Max:      78
^[[3A1.30 1.01 0.63 2/33 2107          

...........................................................................................

T: 0 ( 2107) P:10 I:    1000 C:     999 Min:      39 Act:      48 Avg:      65 Max:      84

I see everything OK except for the first samples of cyclictests. Any comments ?

Gilles, I've read your comments on adeos list about the performance
problems which you have to solve before upgrading to 2.6.23. Any news ?
Could you tell me if the above numbers shows the perfomance problem or
if I have to do another kind of test to reproduce it ?

Regards,
	Juan Antonio


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-23  6:52 [Xenomai-help] AT91SAM9260 latency Juan Antonio Garcia Redondo
@ 2008-01-23 10:04 ` Gilles Chanteperdrix
  2008-01-23 13:15   ` Gilles Chanteperdrix
  0 siblings, 1 reply; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-01-23 10:04 UTC (permalink / raw)
  To: Juan Antonio Garcia Redondo; +Cc: jagarcia, xenomai

On Jan 23, 2008 7:52 AM, Juan Antonio Garcia Redondo
<juan-antonio.garcia@domain.hid> wrote:
> Hi list,
>
> These are my latency results over a custom board based on AT91SAM9260.
>
> Environment:
>         kernel 2.6.20 + xenomai 2.4.0
>         Load: dd if=/dev/zero of=/dev/null plus an external ping -f to
>         stress the ethernet.
>
> The results:
> running: ./run -- -p 500 -T 60 -t0 # latency
>
> == Sampling period: 500 us
> == Test mode: periodic user-mode task
> == All results in microseconds
> warming up...
> RTT|  00:00:01  (periodic user-mode task, 500 us period, priority 99)
> RTH|-----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat worst
> RTD|      45.747|      62.177|      78.286|       0|      45.747|      78.286
> .............................................................................
> RTD|      39.948|      61.211|      78.286|       0|      39.304|      88.273
> ---|------------|------------|------------|--------|-------------------------
> RTS|      39.304|      61.855|      88.273|       0|    00:01:00/00:01:00
>
> Thu Mar 30 01:51:36 UTC 2000
> running: ./run -- -p 500 -T 60 -t1 # latency
> == Sampling period: 500 us
> == Test mode: in-kernel periodic task
> == All results in microseconds
> warming up...
> RTT|  00:00:01  (in-kernel periodic task, 500 us period, priority 99)
> RTH|-----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat worst
> RTD|      19.007|      31.731|      43.813|       0|      19.007|      43.813
> .............................................................................
> ---|------------|------------|------------|--------|-------------------------
> RTS|      13.501|      31.126|      71.188|       0|    00:01:00/00:01:00
>
> Thu Mar 30 01:52:52 UTC 2000
> running: ./run -- -p 500 -T 60 -t2 # latency
> *
> *
> * Type ^C to stop this application.
> *
> *
> == Sampling period: 500 us
> == Test mode: in-kernel timer handler
> == All results in microseconds
> warming up...
> RTT|  00:00:01  (in-kernel timer handler, 500 us period, priority 99)
> RTH|-----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat worst
> .............................................................................
> ---|------------|------------|------------|--------|-------------------------
> RTS|      -0.977|       8.521|      28.337|       0|    00:01:00/00:01:00
>
> Thu Mar 30 01:54:07 UTC 2000
> running: ./run -- -T 120 # switchtest
> == Testing FPU check routines...
> == FPU check routines: unimplemented, skipping FPU switches tests.
> == Threads: sleeper-0 rtk-1 rtk-2 rtup-3 rtup-4 rtus-5 rtus-6 rtuo-7 rtuo-8
> RTT|  00:00:01
> RTH|ctx switches|-------total
> RTD|         756|         756
> ..............................
> RTD|         723|       87717
> RTD|         762|       88479
> RTD|         750|       89229
> RTD|          42|       89271
>
> Thu Mar 30 01:56:22 UTC 2000
> running: ./run -- -p500 -h # switchbench
> == Sampling period: 500 us
> == Do not interrupt this program
> RTH|     lat min|     lat avg|     lat max|        lost
> RTD|      47.358|      52.512|      68.298|           0
> ---|---range-|---samples
> HSD| 47 - 48 |          1
> HSD| 48 - 49 |          5
> HSD| 49 - 50 |          6
> HSD| 50 - 51 |       2065
> HSD| 51 - 52 |      22440
> HSD| 52 - 53 |      41582
> HSD| 53 - 54 |      19749
> HSD| 54 - 55 |      11696
> HSD| 55 - 56 |       2131
> HSD| 56 - 57 |          1
> HSD| 60 - 61 |          1
> HSD| 62 - 63 |          1
> HSD| 63 - 64 |         21
> HSD| 64 - 65 |         95
> HSD| 65 - 66 |        107
> HSD| 66 - 67 |         63
> HSD| 67 - 68 |         29
> HSD| 68 - 69 |          3
> HSS|     99996|     52.271|      1.278
>
> Thu Mar 30 01:57:25 UTC 2000
> running: ./run -- -p 10 -n -l 1000 # cyclictest
>
> T: 0 (    0) P:10 I:    1000 C:       0 Min: 1000000 Act:       0 Avg:       0 Max:-1000000
>  [3A1.30 1.01 0.63 2/33 2107
>
> ...........................................................................................
>
> T: 0 ( 2107) P:10 I:    1000 C:       0 Min: 1000000 Act:       0 Avg:       0 Max:-1000000
>  [3A1.30 1.01 0.63 2/33 2107
>
> T: 0 ( 2107) P:10 I:    1000 C:       0 Min: 1000000 Act:       0 Avg:       0 Max:-1000000
>  [3A1.30 1.01 0.63 2/33 2107
>
> T: 0 ( 2107) P:10 I:    1000 C:       0 Min: 1000000 Act:       0 Avg:       0 Max:-1000000
>  [3A1.30 1.01 0.63 2/33 2107
>
> T: 0 ( 2107) P:10 I:    1000 C:      19 Min:      45 Act:      45 Avg:      69 Max:      78
>  [3A1.30 1.01 0.63 2/33 2107
>
> ...........................................................................................
>
> T: 0 ( 2107) P:10 I:    1000 C:     999 Min:      39 Act:      48 Avg:      65 Max:      84
>
> I see everything OK except for the first samples of cyclictests. Any comments ?

The load you apply does not load the cache, which is a source of
jitter. You should run the cache calibrator (I do not find the cache
calibrator URL, but it is somewhere in Xenomai distribution or wiki).

>
> Gilles, I've read your comments on adeos list about the performance
> problems which you have to solve before upgrading to 2.6.23. Any news ?
> Could you tell me if the above numbers shows the perfomance problem or
> if I have to do another kind of test to reproduce it ?

I gave news about this issue on xenomai-core mailing list.
Unfortunately, there is no spurious masking section, the big masking
section is the one which takes place around Xenomai user-space context
switches. So, we can only improve interrupt latency, the only way to
improve scheduling latency is to avoid user-space real-time.

>
> Regards,
>         Juan Antonio
>
> _______________________________________________
> Xenomai-help mailing list
> Xenomai-help@domain.hid
> https://mail.gna.org/listinfo/xenomai-help
>



-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-23 10:04 ` Gilles Chanteperdrix
@ 2008-01-23 13:15   ` Gilles Chanteperdrix
  2008-01-24  9:41     ` Juan Antonio Garcia Redondo
  0 siblings, 1 reply; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-01-23 13:15 UTC (permalink / raw)
  To: Juan Antonio Garcia Redondo; +Cc: jagarcia, xenomai

On Jan 23, 2008 11:04 AM, Gilles Chanteperdrix
<gilles.chanteperdrix@xenomai.org> wrote:
> On Jan 23, 2008 7:52 AM, Juan Antonio Garcia Redondo
>
> <juan-antonio.garcia@domain.hid> wrote:
> > I see everything OK except for the first samples of cyclictests. Any comments ?
>
> The load you apply does not load the cache, which is a source of
> jitter. You should run the cache calibrator (I do not find the cache
> calibrator URL, but it is somewhere in Xenomai distribution or wiki).

It is in the TROUBLESHOOTING guide, question "How do I adequately stress test".

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-23 13:15   ` Gilles Chanteperdrix
@ 2008-01-24  9:41     ` Juan Antonio Garcia Redondo
  2008-01-24 10:02       ` Gilles Chanteperdrix
  2008-02-10 20:31       ` [Xenomai-core] " Gilles Chanteperdrix
  0 siblings, 2 replies; 27+ messages in thread
From: Juan Antonio Garcia Redondo @ 2008-01-24  9:41 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

On 23/01/08 14:15, Gilles Chanteperdrix wrote:
> On Jan 23, 2008 11:04 AM, Gilles Chanteperdrix
> <gilles.chanteperdrix@xenomai.org> wrote:
> > On Jan 23, 2008 7:52 AM, Juan Antonio Garcia Redondo
> >
> > <juan-antonio.garcia@domain.hid> wrote:
> > > I see everything OK except for the first samples of cyclictests. Any comments ?
> >
> > The load you apply does not load the cache, which is a source of
> > jitter. You should run the cache calibrator (I do not find the cache
> > calibrator URL, but it is somewhere in Xenomai distribution or wiki).
> 
> It is in the TROUBLESHOOTING guide, question "How do I adequately stress test".
> 
> -- 
>                                                Gilles Chanteperdrix

Thanks Gilles, I've done more tests using the cache calibrator from
http://www.cwi.nl/~manegold/Calibrator. The latency numbers are very
similar althought I've found an strange behaviour related to telnet
sessions.

Environment:
	o Tests running from console over atmel serial port.
	o A telnet session over on-chip ethernet. 
        o System without load.

./latency -p 500 -t0
== All results in microseconds
warming up...
RTT|  00:00:01  (periodic user-mode task, 500 us period, priority 99)
RTH|-RTH----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat
worst
RTD|      49.613|      52.190|      62.822|       0|      49.613| 62.822
RTD|      42.203|      52.512|      66.365|       0|      42.203| 66.365


Now If hit a key on the telnet session :

RTD|      36.726|      57.989|     109.536|       0|      31.572| 109.536  <-------- Here I've hit the key.
RTD|      36.404|      51.868|      69.587|       0|      31.572| 109.536
RTD|      35.760|      51.868|      73.775|       0|      31.572| 109.536

Now, I launch an script which executes four instances of cache
calibrator.

RTD|      45.103|      57.667|      75.708|       0|      32.538| 122.422
RTD|      45.425|      57.023|      76.030|       0|      32.538| 122.422
RTD|      46.069|      57.023|      75.708|       0|      32.538| 122.422

Now, I can hit a key on the telnet session without effects over latency
numbers:

RTD|      44.136|      57.989|      75.386|       0|      27.384| 128.221
RTD|      46.713|      57.345|      76.353|       0|      27.384| 128.221
RTD|      44.780|      57.345|      76.675|       0|      27.384| 128.221
RTD|      43.492|      56.701|      76.997|       0|      27.384| 128.221

Now I stop the calibrator process and launch 'ping -f -s2048 192.168.2.82' from an external
machine.

RTD|      40.270|      68.621|      90.850|       0|      27.384| 128.221
RTD|      36.082|      68.621|      88.273|       0|      27.384| 128.221
RTD|      40.592|      67.976|      91.494|       0|      27.384| 128.221
RTD|      41.237|      68.298|      89.239|       0|      27.384| 128.221


Now If hit a key on the telnet session :

RTD|      42.203|      67.976|      88.273|       0|      27.384| 128.221
RTD|      32.216|      93.427|     128.543|       0|      27.384| 128.543 <---------- Here I've hit the key.
RTD|      42.203|      68.298|      87.628|       0|      27.384| 128.543

And again the calibrator execution results on eliminate the strange
behaviour whith the telnet session.

Any clues ?

BTW, if finally the bad numbers on ARM are user-context switches related,
are you considering the ipipe upgrading to 2.6.23 ? 

Regards,
	Juan Antonio


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-24  9:41     ` Juan Antonio Garcia Redondo
@ 2008-01-24 10:02       ` Gilles Chanteperdrix
  2008-01-25 10:04         ` Juan Antonio Garcia Redondo
  2008-02-10 20:31       ` [Xenomai-core] " Gilles Chanteperdrix
  1 sibling, 1 reply; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-01-24 10:02 UTC (permalink / raw)
  To: Juan Antonio Garcia Redondo; +Cc: jagarcia, xenomai

On Jan 24, 2008 10:41 AM, Juan Antonio Garcia Redondo
<juan-antonio.garcia@domain.hid> wrote:
>
> On 23/01/08 14:15, Gilles Chanteperdrix wrote:
> > On Jan 23, 2008 11:04 AM, Gilles Chanteperdrix
> > <gilles.chanteperdrix@xenomai.org> wrote:
> > > On Jan 23, 2008 7:52 AM, Juan Antonio Garcia Redondo
> > >
> > > <juan-antonio.garcia@domain.hid> wrote:
> > > > I see everything OK except for the first samples of cyclictests. Any comments ?
> > >
> > > The load you apply does not load the cache, which is a source of
> > > jitter. You should run the cache calibrator (I do not find the cache
> > > calibrator URL, but it is somewhere in Xenomai distribution or wiki).
> >
> > It is in the TROUBLESHOOTING guide, question "How do I adequately stress test".
> >
> > --
> >                                                Gilles Chanteperdrix
>
> Thanks Gilles, I've done more tests using the cache calibrator from
> http://www.cwi.nl/~manegold/Calibrator. The latency numbers are very
> similar althought I've found an strange behaviour related to telnet
> sessions.

Are you kidding ? In the first results you posted, the latency was
around 80us whereas now, you get a latency around 130us. And from I
read, you did not run the tests for long period. If you want reliable
results, you should let the test run, under load, for hours.

>
> Environment:
>         o Tests running from console over atmel serial port.
>         o A telnet session over on-chip ethernet.
>         o System without load.
>
> ./latency -p 500 -t0
> == All results in microseconds
> warming up...
> RTT|  00:00:01  (periodic user-mode task, 500 us period, priority 99)
> RTH|-RTH----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat
> worst
> RTD|      49.613|      52.190|      62.822|       0|      49.613| 62.822
> RTD|      42.203|      52.512|      66.365|       0|      42.203| 66.365
>
>
> Now If hit a key on the telnet session :
>
> RTD|      36.726|      57.989|     109.536|       0|      31.572| 109.536  <-------- Here I've hit the key.
> RTD|      36.404|      51.868|      69.587|       0|      31.572| 109.536
> RTD|      35.760|      51.868|      73.775|       0|      31.572| 109.536
>
> Now, I launch an script which executes four instances of cache
> calibrator.
>
> RTD|      45.103|      57.667|      75.708|       0|      32.538| 122.422
> RTD|      45.425|      57.023|      76.030|       0|      32.538| 122.422
> RTD|      46.069|      57.023|      75.708|       0|      32.538| 122.422
>
> Now, I can hit a key on the telnet session without effects over latency
> numbers:
>
> RTD|      44.136|      57.989|      75.386|       0|      27.384| 128.221
> RTD|      46.713|      57.345|      76.353|       0|      27.384| 128.221
> RTD|      44.780|      57.345|      76.675|       0|      27.384| 128.221
> RTD|      43.492|      56.701|      76.997|       0|      27.384| 128.221
>
> Now I stop the calibrator process and launch 'ping -f -s2048 192.168.2.82' from an external
> machine.
>
> RTD|      40.270|      68.621|      90.850|       0|      27.384| 128.221
> RTD|      36.082|      68.621|      88.273|       0|      27.384| 128.221
> RTD|      40.592|      67.976|      91.494|       0|      27.384| 128.221
> RTD|      41.237|      68.298|      89.239|       0|      27.384| 128.221
>
>
> Now If hit a key on the telnet session :
>
> RTD|      42.203|      67.976|      88.273|       0|      27.384| 128.221
> RTD|      32.216|      93.427|     128.543|       0|      27.384| 128.543 <---------- Here I've hit the key.
> RTD|      42.203|      68.298|      87.628|       0|      27.384| 128.543
>
> And again the calibrator execution results on eliminate the strange
> behaviour whith the telnet session.
>
> Any clues ?

No mystery: hitting a key on a telnet session causes an interrupt
masking section of 110us, you see it as the maximum if you never
observed longer masking sections, but it is not the maximum if you
observed longer masking sections.

>
> BTW, if finally the bad numbers on ARM are user-context switches related,
> are you considering the ipipe upgrading to 2.6.23 ?

No comment. I have already answered this question.

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-24 10:02       ` Gilles Chanteperdrix
@ 2008-01-25 10:04         ` Juan Antonio Garcia Redondo
  2008-01-25 17:00           ` Gilles Chanteperdrix
  0 siblings, 1 reply; 27+ messages in thread
From: Juan Antonio Garcia Redondo @ 2008-01-25 10:04 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

On 24/01/08 11:02, Gilles Chanteperdrix wrote:
> On Jan 24, 2008 10:41 AM, Juan Antonio Garcia Redondo
> <juan-antonio.garcia@domain.hid> wrote:
> >
> > On 23/01/08 14:15, Gilles Chanteperdrix wrote:
> > > On Jan 23, 2008 11:04 AM, Gilles Chanteperdrix
> > > <gilles.chanteperdrix@xenomai.org> wrote:
> > > > On Jan 23, 2008 7:52 AM, Juan Antonio Garcia Redondo
> > > >
> > > > <juan-antonio.garcia@domain.hid> wrote:
> > > > > I see everything OK except for the first samples of cyclictests. Any comments ?
> > > >
> > > > The load you apply does not load the cache, which is a source of
> > > > jitter. You should run the cache calibrator (I do not find the cache
> > > > calibrator URL, but it is somewhere in Xenomai distribution or wiki).
> > >
> > > It is in the TROUBLESHOOTING guide, question "How do I adequately stress test".
> > >
> > > --
> > >                                                Gilles Chanteperdrix
> >
> > Thanks Gilles, I've done more tests using the cache calibrator from
> > http://www.cwi.nl/~manegold/Calibrator. The latency numbers are very
> > similar althought I've found an strange behaviour related to telnet
> > sessions.
> 
> Are you kidding ? In the first results you posted, the latency was
> around 80us whereas now, you get a latency around 130us. And from I
> read, you did not run the tests for long period. If you want reliable
> results, you should let the test run, under load, for hours.

Well, after several tests, (one of them 4 hours long), I can't see
latencies above 100 us. Anyway I'll do more tests this weekend. The
latency around 130us occurs with telnet activity.
> 
> >
> > Environment:
> >         o Tests running from console over atmel serial port.
> >         o A telnet session over on-chip ethernet.
> >         o System without load.
> >
> > ./latency -p 500 -t0
> > == All results in microseconds
> > warming up...
> > RTT|  00:00:01  (periodic user-mode task, 500 us period, priority 99)
> > RTH|-RTH----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat
> > worst
> > RTD|      49.613|      52.190|      62.822|       0|      49.613| 62.822
> > RTD|      42.203|      52.512|      66.365|       0|      42.203| 66.365
> >
> >
> > Now If hit a key on the telnet session :
> >
> > RTD|      36.726|      57.989|     109.536|       0|      31.572| 109.536  <-------- Here I've hit the key.
> > RTD|      36.404|      51.868|      69.587|       0|      31.572| 109.536
> > RTD|      35.760|      51.868|      73.775|       0|      31.572| 109.536
> >
> > Now, I launch an script which executes four instances of cache
> > calibrator.
> >
> > RTD|      45.103|      57.667|      75.708|       0|      32.538| 122.422
> > RTD|      45.425|      57.023|      76.030|       0|      32.538| 122.422
> > RTD|      46.069|      57.023|      75.708|       0|      32.538| 122.422
> >
> > Now, I can hit a key on the telnet session without effects over latency
> > numbers:
> >
> > RTD|      44.136|      57.989|      75.386|       0|      27.384| 128.221
> > RTD|      46.713|      57.345|      76.353|       0|      27.384| 128.221
> > RTD|      44.780|      57.345|      76.675|       0|      27.384| 128.221
> > RTD|      43.492|      56.701|      76.997|       0|      27.384| 128.221
> >
> > Now I stop the calibrator process and launch 'ping -f -s2048 192.168.2.82' from an external
> > machine.
> >
> > RTD|      40.270|      68.621|      90.850|       0|      27.384| 128.221
> > RTD|      36.082|      68.621|      88.273|       0|      27.384| 128.221
> > RTD|      40.592|      67.976|      91.494|       0|      27.384| 128.221
> > RTD|      41.237|      68.298|      89.239|       0|      27.384| 128.221
> >
> >
> > Now If hit a key on the telnet session :
> >
> > RTD|      42.203|      67.976|      88.273|       0|      27.384| 128.221
> > RTD|      32.216|      93.427|     128.543|       0|      27.384| 128.543 <---------- Here I've hit the key.
> > RTD|      42.203|      68.298|      87.628|       0|      27.384| 128.543
> >
> > And again the calibrator execution results on eliminate the strange
> > behaviour whith the telnet session.
> >
> > Any clues ?
> 
> No mystery: hitting a key on a telnet session causes an interrupt
> masking section of 110us, you see it as the maximum if you never
> observed longer masking sections, but it is not the maximum if you
> observed longer masking sections.

OK, but why the masking section on linux side affects to xenomai side ?
Another thing I don't understand is why when the system has load (above
I'm talking about calibrator but the same occurs with dd if=/dev/zero
of=/dev/null), the effect seems to dissapear.  

> 
> >
> > BTW, if finally the bad numbers on ARM are user-context switches related,
> > are you considering the ipipe upgrading to 2.6.23 ?
> 
> No comment. I have already answered this question.

Sorry, I missed the last entries on "High latencies on ARM" from
xenomai-core list.

Regards,
	Juan Antonio



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-25 10:04         ` Juan Antonio Garcia Redondo
@ 2008-01-25 17:00           ` Gilles Chanteperdrix
  2008-01-28  8:51             ` Juan Antonio Garcia Redondo
  0 siblings, 1 reply; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-01-25 17:00 UTC (permalink / raw)
  To: Juan Antonio Garcia Redondo; +Cc: jagarcia, xenomai

On Jan 25, 2008 11:04 AM, Juan Antonio Garcia Redondo
<juan-antonio.garcia@domain.hid> wrote:
> On 24/01/08 11:02, Gilles Chanteperdrix wrote:
> Well, after several tests, (one of them 4 hours long), I can't see
> latencies above 100 us. Anyway I'll do more tests this weekend. The
> latency around 130us occurs with telnet activity.

This contradicts what you told us in previous posts. You told us that
the maximum latency went up to 130us when starting the calibrator.


> > No mystery: hitting a key on a telnet session causes an interrupt
> > masking section of 110us, you see it as the maximum if you never
> > observed longer masking sections, but it is not the maximum if you
> > observed longer masking sections.
>
> OK, but why the masking section on linux side affects to xenomai side ?
> Another thing I don't understand is why when the system has load (above
> I'm talking about calibrator but the same occurs with dd if=/dev/zero
> of=/dev/null), the effect seems to dissapear.

It is probably not a masking section on linux side but rather a
masking section on I-pipe side. Anyway, the effect does not disappear:
it means that the cache effects cause larger latencies than the
ethernet interrupt, but maybe I did not understand what you explained.
The results you obtain with no load are simply irrelevant.

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-25 17:00           ` Gilles Chanteperdrix
@ 2008-01-28  8:51             ` Juan Antonio Garcia Redondo
  2008-01-28  9:21               ` Juan Antonio Garcia Redondo
  2008-01-28 13:19               ` Gilles Chanteperdrix
  0 siblings, 2 replies; 27+ messages in thread
From: Juan Antonio Garcia Redondo @ 2008-01-28  8:51 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

On 25/01/08 18:00, Gilles Chanteperdrix wrote:
> On Jan 25, 2008 11:04 AM, Juan Antonio Garcia Redondo
> <juan-antonio.garcia@domain.hid> wrote:
> > On 24/01/08 11:02, Gilles Chanteperdrix wrote:
> > Well, after several tests, (one of them 4 hours long), I can't see
> > latencies above 100 us. Anyway I'll do more tests this weekend. The
> > latency around 130us occurs with telnet activity.
> 
> This contradicts what you told us in previous posts. You told us that
> the maximum latency went up to 130us when starting the calibrator.

I guess that there has been a misunderstanding. In the mail
https://mail.gna.org/public/xenomai-help/2008-01/msg00108.html I
wanted to point to the fact that the telnet activity had a direct and
reproducible efect on lat_max field. So my test was:
1) From a minicom terminal run 'latency -t0 -p500'
2) From a telnet terminal launch calibrator, kill calibrator etc.

So, the lat_worst numbers I showed in that email has no value. I
launched the calibrator process during several minutes, and, while I
was doing the tests I saw the telnet behaviour and I thought that could be
interesting to report it.

I've done more tests this weekend. I've switched to at91sam9260_ek
development plattform because I can hold it doing xenomai tests without affect
my current work.  

My numbers:

o Test xenomai-2.4.0 + 5 * (dd if=/dev/sda of=/dev/null) + 5 * (calibrator 180
4M calibra) + ping -f -s2048

./latency -p 500 -t0 

RTD|      47.358|      67.976|      93.105|       0|      28.672| 122.422
RTD|      47.680|      68.298|      91.817|       0|      28.672| 122.422
RTD|      49.291|      68.298|      91.494|       0|      28.672| 122.422
RTD|      45.747|      68.621|      90.528|       0|      28.672| 122.422
RTD|      47.358|      68.621|      90.206|       0|      28.672| 122.422
RTD|      47.358|      68.621|      91.172|       0|      28.672| 122.422
RTD|      37.048|      68.621|      92.139|       0|      28.672| 122.422
RTT|  07:35:22  (periodic user-mode task, 500 us period, priority 99)

> 
> 
> > > No mystery: hitting a key on a telnet session causes an interrupt
> > > masking section of 110us, you see it as the maximum if you never
> > > observed longer masking sections, but it is not the maximum if you
> > > observed longer masking sections.
> >
> > OK, but why the masking section on linux side affects to xenomai side ?
> > Another thing I don't understand is why when the system has load (above
> > I'm talking about calibrator but the same occurs with dd if=/dev/zero
> > of=/dev/null), the effect seems to dissapear.
> 
> It is probably not a masking section on linux side but rather a
> masking section on I-pipe side. Anyway, the effect does not disappear:
> it means that the cache effects cause larger latencies than the
> ethernet interrupt, but maybe I did not understand what you explained.
> The results you obtain with no load are simply irrelevant.

I'll try to explain it better:

o Without load I run ./latency -t0 -p500.
RTD|      33.182|      53.479|      67.976|       0|      31.250| 77.319
RTD|      43.170|      53.479|      67.654|       0|      31.250| 77.319
RTD|      41.881|      53.479|      67.332|       0|      31.250| 77.319
RTT|  00:02:07  (periodic user-mode task, 500 us period, priority 99)

o Each time I press a key (over a telnet session) I can see the lat_max field increase on 40 to 50 us aprox.
RTD|      33.505|      53.479|      71.842|       0|      26.739| 77.319
RTD|      40.592|      62.177|     123.067|       0|      26.739| 123.067
                                   -------
                                      \_________: Key pressed 
RTD|      50.579|      53.479|      73.775|       0|      26.739| 123.067


o Stop the latency test.
o run dd if=/dev/zero of=/dev/null
o run ./latency -t0 -p 500
RTD|      44.780|      55.734|      89.884|       0|      36.082| 93.105
RTD|      45.425|      55.412|      89.561|       0|      36.082| 93.105
RTD|      44.458|      55.734|      90.206|       0|      36.082| 93.105
RTD|      45.103|      55.412|      90.206|       0|      36.082| 93.105
RTD|      45.425|      55.734|      88.273|       0|      36.082| 93.105
RTT|  00:02:07  (periodic user-mode task, 500 us period, priority 99)

o I can't see any effect on lat_max field when I press a key on the
telnet session.

RTD|      44.136|      55.734|      92.461|       0|      36.082| 94.394
                                   -------
                                      \_________: Key pressed 
RTD|      43.814|      55.734|      90.528|       0|      36.082| 94.394
                                   -------
                                      \_________: Key pressed 
RTD|      45.103|      55.412|      89.239|       0|      36.082| 94.394
                                   -------
                                      \_________: Key pressed 
RTT|  00:03:31  (periodic user-mode task, 500 us period, priority 99)

As you can see the lat_max numbers are under the 100 us while I can go
up 120 us easily whith the former test.

Regards,
	Juan Antonio


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-28  8:51             ` Juan Antonio Garcia Redondo
@ 2008-01-28  9:21               ` Juan Antonio Garcia Redondo
  2008-01-28 13:19               ` Gilles Chanteperdrix
  1 sibling, 0 replies; 27+ messages in thread
From: Juan Antonio Garcia Redondo @ 2008-01-28  9:21 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

On 28/01/08 09:51, Juan Antonio Garcia Redondo wrote:
> On 25/01/08 18:00, Gilles Chanteperdrix wrote:
> > On Jan 25, 2008 11:04 AM, Juan Antonio Garcia Redondo
> > <juan-antonio.garcia@domain.hid> wrote:
> > > On 24/01/08 11:02, Gilles Chanteperdrix wrote:
> > > Well, after several tests, (one of them 4 hours long), I can't see
> > > latencies above 100 us. Anyway I'll do more tests this weekend. The
> > > latency around 130us occurs with telnet activity.
> > 
> > This contradicts what you told us in previous posts. You told us that
> > the maximum latency went up to 130us when starting the calibrator.
> 
> I guess that there has been a misunderstanding. In the mail
> https://mail.gna.org/public/xenomai-help/2008-01/msg00108.html I
> wanted to point to the fact that the telnet activity had a direct and
> reproducible efect on lat_max field. So my test was:
> 1) From a minicom terminal run 'latency -t0 -p500'
> 2) From a telnet terminal launch calibrator, kill calibrator etc.
> 
> So, the lat_worst numbers I showed in that email has no value. I
> launched the calibrator process during several minutes, and, while I
> was doing the tests I saw the telnet behaviour and I thought that could be
> interesting to report it.
> 
> I've done more tests this weekend. I've switched to at91sam9260_ek
> development plattform because I can hold it doing xenomai tests without affect
> my current work.  
> 
> My numbers:
> 
> o Test xenomai-2.4.0 + 5 * (dd if=/dev/sda of=/dev/null) + 5 * (calibrator 180
> 4M calibra) + ping -f -s2048
> 
> ./latency -p 500 -t0 
> 
> RTD|      47.358|      67.976|      93.105|       0|      28.672| 122.422
> RTD|      47.680|      68.298|      91.817|       0|      28.672| 122.422
> RTD|      49.291|      68.298|      91.494|       0|      28.672| 122.422
> RTD|      45.747|      68.621|      90.528|       0|      28.672| 122.422
> RTD|      47.358|      68.621|      90.206|       0|      28.672| 122.422
> RTD|      47.358|      68.621|      91.172|       0|      28.672| 122.422
> RTD|      37.048|      68.621|      92.139|       0|      28.672| 122.422
> RTT|  07:35:22  (periodic user-mode task, 500 us period, priority 99)
> 
> > 
> > 
> > > > No mystery: hitting a key on a telnet session causes an interrupt
> > > > masking section of 110us, you see it as the maximum if you never
> > > > observed longer masking sections, but it is not the maximum if you
> > > > observed longer masking sections.
> > >
> > > OK, but why the masking section on linux side affects to xenomai side ?
> > > Another thing I don't understand is why when the system has load (above
> > > I'm talking about calibrator but the same occurs with dd if=/dev/zero
> > > of=/dev/null), the effect seems to dissapear.
> > 
> > It is probably not a masking section on linux side but rather a
> > masking section on I-pipe side. Anyway, the effect does not disappear:
> > it means that the cache effects cause larger latencies than the
> > ethernet interrupt, but maybe I did not understand what you explained.
> > The results you obtain with no load are simply irrelevant.
> 
> I'll try to explain it better:
> 
> o Without load I run ./latency -t0 -p500.
> RTD|      33.182|      53.479|      67.976|       0|      31.250| 77.319
> RTD|      43.170|      53.479|      67.654|       0|      31.250| 77.319
> RTD|      41.881|      53.479|      67.332|       0|      31.250| 77.319
> RTT|  00:02:07  (periodic user-mode task, 500 us period, priority 99)
> 
> o Each time I press a key (over a telnet session) I can see the lat_max field increase on 40 to 50 us aprox.
> RTD|      33.505|      53.479|      71.842|       0|      26.739| 77.319
> RTD|      40.592|      62.177|     123.067|       0|      26.739| 123.067
>                                    -------
>                                       \_________: Key pressed 
> RTD|      50.579|      53.479|      73.775|       0|      26.739| 123.067
> 
> 
> o Stop the latency test.
> o run dd if=/dev/zero of=/dev/null
> o run ./latency -t0 -p 500
> RTD|      44.780|      55.734|      89.884|       0|      36.082| 93.105
> RTD|      45.425|      55.412|      89.561|       0|      36.082| 93.105
> RTD|      44.458|      55.734|      90.206|       0|      36.082| 93.105
> RTD|      45.103|      55.412|      90.206|       0|      36.082| 93.105
> RTD|      45.425|      55.734|      88.273|       0|      36.082| 93.105
> RTT|  00:02:07  (periodic user-mode task, 500 us period, priority 99)
> 
> o I can't see any effect on lat_max field when I press a key on the
> telnet session.
> 
> RTD|      44.136|      55.734|      92.461|       0|      36.082| 94.394
>                                    -------
>                                       \_________: Key pressed 
> RTD|      43.814|      55.734|      90.528|       0|      36.082| 94.394
>                                    -------
>                                       \_________: Key pressed 
> RTD|      45.103|      55.412|      89.239|       0|      36.082| 94.394
>                                    -------
>                                       \_________: Key pressed 
> RTT|  00:03:31  (periodic user-mode task, 500 us period, priority 99)
> 
> As you can see the lat_max numbers are under the 100 us while I can go
> up 120 us easily whith the former test.
> 

Just to say that the test were done with xenomai-2.4.1 (ipipe 1.8-03).

Regards,
	Juan Antonio


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-28  8:51             ` Juan Antonio Garcia Redondo
  2008-01-28  9:21               ` Juan Antonio Garcia Redondo
@ 2008-01-28 13:19               ` Gilles Chanteperdrix
  2008-01-28 13:34                 ` Jan Kiszka
  2008-01-29  8:09                 ` Juan Antonio Garcia Redondo
  1 sibling, 2 replies; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-01-28 13:19 UTC (permalink / raw)
  To: Juan Antonio Garcia Redondo; +Cc: jagarcia, xenomai

On Jan 28, 2008 9:51 AM, Juan Antonio Garcia Redondo
<juan-antonio.garcia@domain.hid> wrote:
> On 25/01/08 18:00, Gilles Chanteperdrix wrote:
> > On Jan 25, 2008 11:04 AM, Juan Antonio Garcia Redondo
> > <juan-antonio.garcia@domain.hid> wrote:
> > > On 24/01/08 11:02, Gilles Chanteperdrix wrote:
> > > Well, after several tests, (one of them 4 hours long), I can't see
> > > latencies above 100 us. Anyway I'll do more tests this weekend. The
> > > latency around 130us occurs with telnet activity.
> >
> > This contradicts what you told us in previous posts. You told us that
> > the maximum latency went up to 130us when starting the calibrator.
>
> I guess that there has been a misunderstanding. In the mail
> https://mail.gna.org/public/xenomai-help/2008-01/msg00108.html I
> wanted to point to the fact that the telnet activity had a direct and
> reproducible efect on lat_max field. So my test was:
> 1) From a minicom terminal run 'latency -t0 -p500'
> 2) From a telnet terminal launch calibrator, kill calibrator etc.
>
> So, the lat_worst numbers I showed in that email has no value. I
> launched the calibrator process during several minutes, and, while I
> was doing the tests I saw the telnet behaviour and I thought that could be
> interesting to report it.
>
> I've done more tests this weekend. I've switched to at91sam9260_ek
> development plattform because I can hold it doing xenomai tests without affect
> my current work.
>
> My numbers:
>
> o Test xenomai-2.4.0 + 5 * (dd if=/dev/sda of=/dev/null) + 5 * (calibrator 180
> 4M calibra) + ping -f -s2048
>
> ./latency -p 500 -t0
>
> RTD|      47.358|      67.976|      93.105|       0|      28.672| 122.422
> RTD|      47.680|      68.298|      91.817|       0|      28.672| 122.422
> RTD|      49.291|      68.298|      91.494|       0|      28.672| 122.422
> RTD|      45.747|      68.621|      90.528|       0|      28.672| 122.422
> RTD|      47.358|      68.621|      90.206|       0|      28.672| 122.422
> RTD|      47.358|      68.621|      91.172|       0|      28.672| 122.422
> RTD|      37.048|      68.621|      92.139|       0|      28.672| 122.422
> RTT|  07:35:22  (periodic user-mode task, 500 us period, priority 99)

Ok, so worst case latency is around 130us, as I thought I understood.

>
> >
> >
> > > > No mystery: hitting a key on a telnet session causes an interrupt
> > > > masking section of 110us, you see it as the maximum if you never
> > > > observed longer masking sections, but it is not the maximum if you
> > > > observed longer masking sections.
> > >
> > > OK, but why the masking section on linux side affects to xenomai side ?
> > > Another thing I don't understand is why when the system has load (above
> > > I'm talking about calibrator but the same occurs with dd if=/dev/zero
> > > of=/dev/null), the effect seems to dissapear.
> >
> > It is probably not a masking section on linux side but rather a
> > masking section on I-pipe side. Anyway, the effect does not disappear:
> > it means that the cache effects cause larger latencies than the
> > ethernet interrupt, but maybe I did not understand what you explained.
> > The results you obtain with no load are simply irrelevant.
>
> I'll try to explain it better:
>
> o Without load I run ./latency -t0 -p500.
> RTD|      33.182|      53.479|      67.976|       0|      31.250| 77.319
> RTD|      43.170|      53.479|      67.654|       0|      31.250| 77.319
> RTD|      41.881|      53.479|      67.332|       0|      31.250| 77.319
> RTT|  00:02:07  (periodic user-mode task, 500 us period, priority 99)
>
> o Each time I press a key (over a telnet session) I can see the lat_max field increase on 40 to 50 us aprox.
> RTD|      33.505|      53.479|      71.842|       0|      26.739| 77.319
> RTD|      40.592|      62.177|     123.067|       0|      26.739| 123.067
>                                    -------
>                                       \_________: Key pressed
> RTD|      50.579|      53.479|      73.775|       0|      26.739| 123.067

This is where you are wrong:
- first, let me repeat it: test made without load are irrelevant;
- second, an event has no relative effect on max latency, its effect
is absolute: pressing a key over a telnet session causes, for unknown
reason,  a masking section of around 130us, which happens to also be
the worst case latency that we measured properly with a loaded system.

Now, if you want to know why you get such a masking section, you are
free to investigate.

>
>
> o Stop the latency test.
> o run dd if=/dev/zero of=/dev/null
> o run ./latency -t0 -p 500
> RTD|      44.780|      55.734|      89.884|       0|      36.082| 93.105
> RTD|      45.425|      55.412|      89.561|       0|      36.082| 93.105
> RTD|      44.458|      55.734|      90.206|       0|      36.082| 93.105
> RTD|      45.103|      55.412|      90.206|       0|      36.082| 93.105
> RTD|      45.425|      55.734|      88.273|       0|      36.082| 93.105
> RTT|  00:02:07  (periodic user-mode task, 500 us period, priority 99)
>
> o I can't see any effect on lat_max field when I press a key on the
> telnet session.
>
> RTD|      44.136|      55.734|      92.461|       0|      36.082| 94.394
>                                    -------
>                                       \_________: Key pressed
> RTD|      43.814|      55.734|      90.528|       0|      36.082| 94.394
>                                    -------
>                                       \_________: Key pressed
> RTD|      45.103|      55.412|      89.239|       0|      36.082| 94.394
>                                    -------
>                                       \_________: Key pressed
> RTT|  00:03:31  (periodic user-mode task, 500 us period, priority 99)
>
> As you can see the lat_max numbers are under the 100 us while I can go
> up 120 us easily whith the former test.

The worst case latency of your system is above 120us, so, the results
you get when not running the calibrator are not really significant.

The behaviour you get may be due, for instance, to the fact that the
processor goes into some sleep mode when idle and to a wake-up
latency; if you run some load, there is no wake-up latency. It is hard
to say anything. In order to investigate, I would instrument the
kernel to trace the irq masking sections.


-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-28 13:19               ` Gilles Chanteperdrix
@ 2008-01-28 13:34                 ` Jan Kiszka
  2008-01-28 13:35                   ` Gilles Chanteperdrix
  2008-01-29  8:09                 ` Juan Antonio Garcia Redondo
  1 sibling, 1 reply; 27+ messages in thread
From: Jan Kiszka @ 2008-01-28 13:34 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

Gilles Chanteperdrix wrote:
> ...
> The behaviour you get may be due, for instance, to the fact that the
> processor goes into some sleep mode when idle and to a wake-up
> latency; if you run some load, there is no wake-up latency. It is hard
> to say anything. In order to investigate, I would instrument the
> kernel to trace the irq masking sections.

Don't we have the I-pipe tracer on this platform?

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-28 13:34                 ` Jan Kiszka
@ 2008-01-28 13:35                   ` Gilles Chanteperdrix
  2008-01-28 13:46                     ` Jan Kiszka
  0 siblings, 1 reply; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-01-28 13:35 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: jagarcia, xenomai

On Jan 28, 2008 2:34 PM, Jan Kiszka <jan.kiszka@domain.hid> wrote:
> Gilles Chanteperdrix wrote:
> > ...
> > The behaviour you get may be due, for instance, to the fact that the
> > processor goes into some sleep mode when idle and to a wake-up
> > latency; if you run some load, there is no wake-up latency. It is hard
> > to say anything. In order to investigate, I would instrument the
> > kernel to trace the irq masking sections.
>
> Don't we have the I-pipe tracer on this platform?

Unfortunately, the tracer on arm has too much overhead to give
meaningful results.

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-28 13:35                   ` Gilles Chanteperdrix
@ 2008-01-28 13:46                     ` Jan Kiszka
  2008-01-28 13:51                       ` Gilles Chanteperdrix
  0 siblings, 1 reply; 27+ messages in thread
From: Jan Kiszka @ 2008-01-28 13:46 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

Gilles Chanteperdrix wrote:
> On Jan 28, 2008 2:34 PM, Jan Kiszka <jan.kiszka@domain.hid> wrote:
>> Gilles Chanteperdrix wrote:
>>> ...
>>> The behaviour you get may be due, for instance, to the fact that the
>>> processor goes into some sleep mode when idle and to a wake-up
>>> latency; if you run some load, there is no wake-up latency. It is hard
>>> to say anything. In order to investigate, I would instrument the
>>> kernel to trace the irq masking sections.
>> Don't we have the I-pipe tracer on this platform?
> 
> Unfortunately, the tracer on arm has too much overhead to give
> meaningful results.

Hmm. Unless the system becomes unusable while running the tracer, I
don't see the show-stopper yet. We are looking for an increase of the
latency when triggering a certain event. That should remain measurable
even if the base latency is far higher than usually.

Do you know what makes the tracer so slow? My "lowest-end" experience
with it are based on a 133 MHz Pentium where the tracer doubled the
worst-case latencies, but the results remained useful for spotting long
paths.

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-28 13:46                     ` Jan Kiszka
@ 2008-01-28 13:51                       ` Gilles Chanteperdrix
  2008-01-28 14:10                         ` Jan Kiszka
  0 siblings, 1 reply; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-01-28 13:51 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: jagarcia, xenomai

On Jan 28, 2008 2:46 PM, Jan Kiszka <jan.kiszka@domain.hid> wrote:
> Gilles Chanteperdrix wrote:
> > On Jan 28, 2008 2:34 PM, Jan Kiszka <jan.kiszka@domain.hid> wrote:
> >> Gilles Chanteperdrix wrote:
> >>> ...
> >>> The behaviour you get may be due, for instance, to the fact that the
> >>> processor goes into some sleep mode when idle and to a wake-up
> >>> latency; if you run some load, there is no wake-up latency. It is hard
> >>> to say anything. In order to investigate, I would instrument the
> >>> kernel to trace the irq masking sections.
> >> Don't we have the I-pipe tracer on this platform?
> >
> > Unfortunately, the tracer on arm has too much overhead to give
> > meaningful results.
>
> Hmm. Unless the system becomes unusable while running the tracer, I
> don't see the show-stopper yet. We are looking for an increase of the
> latency when triggering a certain event. That should remain measurable
> even if the base latency is far higher than usually.
>
> Do you know what makes the tracer so slow?
>

I suspected the fact that we disabled and enabled hardware irqs in
ipipe_get_tsc, but I reimplemented ipipe_get_tsc to not shut
interrupts off and the overhead of the tracer remains high.

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-28 13:51                       ` Gilles Chanteperdrix
@ 2008-01-28 14:10                         ` Jan Kiszka
  0 siblings, 0 replies; 27+ messages in thread
From: Jan Kiszka @ 2008-01-28 14:10 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

Gilles Chanteperdrix wrote:
> On Jan 28, 2008 2:46 PM, Jan Kiszka <jan.kiszka@domain.hid> wrote:
>> Gilles Chanteperdrix wrote:
>>> On Jan 28, 2008 2:34 PM, Jan Kiszka <jan.kiszka@domain.hid> wrote:
>>>> Gilles Chanteperdrix wrote:
>>>>> ...
>>>>> The behaviour you get may be due, for instance, to the fact that the
>>>>> processor goes into some sleep mode when idle and to a wake-up
>>>>> latency; if you run some load, there is no wake-up latency. It is hard
>>>>> to say anything. In order to investigate, I would instrument the
>>>>> kernel to trace the irq masking sections.
>>>> Don't we have the I-pipe tracer on this platform?
>>> Unfortunately, the tracer on arm has too much overhead to give
>>> meaningful results.
>> Hmm. Unless the system becomes unusable while running the tracer, I
>> don't see the show-stopper yet. We are looking for an increase of the
>> latency when triggering a certain event. That should remain measurable
>> even if the base latency is far higher than usually.
>>
>> Do you know what makes the tracer so slow?
>>
> 
> I suspected the fact that we disabled and enabled hardware irqs in
> ipipe_get_tsc, but I reimplemented ipipe_get_tsc to not shut
> interrupts off and the overhead of the tracer remains high.

The tracer itself is built upon atomicity through irq disabling, so the
issue is broader - if only playing with irq flags is the problem.

Are there any trivial functions needlessly instrumented that cause too
much overhead? Maybe spending some more "notrace" would help then.

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-28 13:19               ` Gilles Chanteperdrix
  2008-01-28 13:34                 ` Jan Kiszka
@ 2008-01-29  8:09                 ` Juan Antonio Garcia Redondo
  2008-01-29  8:35                   ` Gilles Chanteperdrix
  2008-01-29 17:19                   ` Gilles Chanteperdrix
  1 sibling, 2 replies; 27+ messages in thread
From: Juan Antonio Garcia Redondo @ 2008-01-29  8:09 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

On 28/01/08 14:19, Gilles Chanteperdrix wrote:
> > >
> > >
> > > > > No mystery: hitting a key on a telnet session causes an interrupt
> > > > > masking section of 110us, you see it as the maximum if you never
> > > > > observed longer masking sections, but it is not the maximum if you
> > > > > observed longer masking sections.
> > > >
> > > > OK, but why the masking section on linux side affects to xenomai side ?
> > > > Another thing I don't understand is why when the system has load (above
> > > > I'm talking about calibrator but the same occurs with dd if=/dev/zero
> > > > of=/dev/null), the effect seems to dissapear.
> > >
> > > It is probably not a masking section on linux side but rather a
> > > masking section on I-pipe side. Anyway, the effect does not disappear:
> > > it means that the cache effects cause larger latencies than the
> > > ethernet interrupt, but maybe I did not understand what you explained.
> > > The results you obtain with no load are simply irrelevant.
> >
> > I'll try to explain it better:
> >
> > o Without load I run ./latency -t0 -p500.
> > RTD|      33.182|      53.479|      67.976|       0|      31.250| 77.319
> > RTD|      43.170|      53.479|      67.654|       0|      31.250| 77.319
> > RTD|      41.881|      53.479|      67.332|       0|      31.250| 77.319
> > RTT|  00:02:07  (periodic user-mode task, 500 us period, priority 99)
> >
> > o Each time I press a key (over a telnet session) I can see the lat_max field increase on 40 to 50 us aprox.
> > RTD|      33.505|      53.479|      71.842|       0|      26.739| 77.319
> > RTD|      40.592|      62.177|     123.067|       0|      26.739| 123.067
> >                                    -------
> >                                       \_________: Key pressed
> > RTD|      50.579|      53.479|      73.775|       0|      26.739| 123.067
> 
> This is where you are wrong:
> - first, let me repeat it: test made without load are irrelevant;
I can't agree with you. When we stress a system with load is, as far as
I know, because usually, the large latencies don't appear on a quiet
system. Here we have a case where a large latency (the lat_worst number
I've gotten after more than 7 hours with the system fully loaded is even
less than this) appears on a quiet system and directly related to an
external event.

> - second, an event has no relative effect on max latency, its effect
> is absolute: pressing a key over a telnet session causes, for unknown
> reason,  a masking section of around 130us, which happens to also be
> the worst case latency that we measured properly with a loaded system.
I pointed out the lat_max field because, if you keep the latency test
running and hit a key on a telnet session, you can easily see how the  
lat_max increase each time you hit the key, while the lat_worst increase
depends on the former history.

> 
> Now, if you want to know why you get such a masking section, you are
> free to investigate.

I'll try to do it.

Regards,
	Juan Antonio


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-29  8:09                 ` Juan Antonio Garcia Redondo
@ 2008-01-29  8:35                   ` Gilles Chanteperdrix
  2008-01-29 17:19                   ` Gilles Chanteperdrix
  1 sibling, 0 replies; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-01-29  8:35 UTC (permalink / raw)
  To: Juan Antonio Garcia Redondo; +Cc: jagarcia, xenomai

On Jan 29, 2008 9:09 AM, Juan Antonio Garcia Redondo
<juan-antonio.garcia@domain.hid> wrote:
>
> On 28/01/08 14:19, Gilles Chanteperdrix wrote:
> > > >
> > > >
> > > > > > No mystery: hitting a key on a telnet session causes an interrupt
> > > > > > masking section of 110us, you see it as the maximum if you never
> > > > > > observed longer masking sections, but it is not the maximum if you
> > > > > > observed longer masking sections.
> > > > >
> > > > > OK, but why the masking section on linux side affects to xenomai side ?
> > > > > Another thing I don't understand is why when the system has load (above
> > > > > I'm talking about calibrator but the same occurs with dd if=/dev/zero
> > > > > of=/dev/null), the effect seems to dissapear.
> > > >
> > > > It is probably not a masking section on linux side but rather a
> > > > masking section on I-pipe side. Anyway, the effect does not disappear:
> > > > it means that the cache effects cause larger latencies than the
> > > > ethernet interrupt, but maybe I did not understand what you explained.
> > > > The results you obtain with no load are simply irrelevant.
> > >
> > > I'll try to explain it better:
> > >
> > > o Without load I run ./latency -t0 -p500.
> > > RTD|      33.182|      53.479|      67.976|       0|      31.250| 77.319
> > > RTD|      43.170|      53.479|      67.654|       0|      31.250| 77.319
> > > RTD|      41.881|      53.479|      67.332|       0|      31.250| 77.319
> > > RTT|  00:02:07  (periodic user-mode task, 500 us period, priority 99)
> > >
> > > o Each time I press a key (over a telnet session) I can see the lat_max field increase on 40 to 50 us aprox.
> > > RTD|      33.505|      53.479|      71.842|       0|      26.739| 77.319
> > > RTD|      40.592|      62.177|     123.067|       0|      26.739| 123.067
> > >                                    -------
> > >                                       \_________: Key pressed
> > > RTD|      50.579|      53.479|      73.775|       0|      26.739| 123.067
> >
> > This is where you are wrong:
> > - first, let me repeat it: test made without load are irrelevant;
> I can't agree with you. When we stress a system with load is, as far as
> I know, because usually, the large latencies don't appear on a quiet
> system.

Wrong: they are less likely to appear, but may appear as well.

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-29  8:09                 ` Juan Antonio Garcia Redondo
  2008-01-29  8:35                   ` Gilles Chanteperdrix
@ 2008-01-29 17:19                   ` Gilles Chanteperdrix
  2008-01-30  9:03                     ` Juan Antonio Garcia Redondo
  1 sibling, 1 reply; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-01-29 17:19 UTC (permalink / raw)
  To: Juan Antonio Garcia Redondo; +Cc: jagarcia, xenomai

On Jan 29, 2008 9:09 AM, Juan Antonio Garcia Redondo
<juan-antonio.garcia@domain.hid> wrote:
>
> On 28/01/08 14:19, Gilles Chanteperdrix wrote:
> > > >
> > > >
> > > > > > No mystery: hitting a key on a telnet session causes an interrupt
> > > > > > masking section of 110us, you see it as the maximum if you never
> > > > > > observed longer masking sections, but it is not the maximum if you
> > > > > > observed longer masking sections.
> > > > >
> > > > > OK, but why the masking section on linux side affects to xenomai side ?
> > > > > Another thing I don't understand is why when the system has load (above
> > > > > I'm talking about calibrator but the same occurs with dd if=/dev/zero
> > > > > of=/dev/null), the effect seems to dissapear.
> > > >
> > > > It is probably not a masking section on linux side but rather a
> > > > masking section on I-pipe side. Anyway, the effect does not disappear:
> > > > it means that the cache effects cause larger latencies than the
> > > > ethernet interrupt, but maybe I did not understand what you explained.
> > > > The results you obtain with no load are simply irrelevant.
> > >
> > > I'll try to explain it better:
> > >
> > > o Without load I run ./latency -t0 -p500.
> > > RTD|      33.182|      53.479|      67.976|       0|      31.250| 77.319
> > > RTD|      43.170|      53.479|      67.654|       0|      31.250| 77.319
> > > RTD|      41.881|      53.479|      67.332|       0|      31.250| 77.319
> > > RTT|  00:02:07  (periodic user-mode task, 500 us period, priority 99)
> > >
> > > o Each time I press a key (over a telnet session) I can see the lat_max field increase on 40 to 50 us aprox.
> > > RTD|      33.505|      53.479|      71.842|       0|      26.739| 77.319
> > > RTD|      40.592|      62.177|     123.067|       0|      26.739| 123.067
> > >                                    -------
> > >                                       \_________: Key pressed
> > > RTD|      50.579|      53.479|      73.775|       0|      26.739| 123.067
> >
> > This is where you are wrong:
> > - first, let me repeat it: test made without load are irrelevant;
> I can't agree with you. When we stress a system with load is, as far as
> I know, because usually, the large latencies don't appear on a quiet
> system. Here we have a case where a large latency (the lat_worst number
> I've gotten after more than 7 hours with the system fully loaded is even
> less than this) appears on a quiet system and directly related to an
> external event.
>
> > - second, an event has no relative effect on max latency, its effect
> > is absolute: pressing a key over a telnet session causes, for unknown
> > reason,  a masking section of around 130us, which happens to also be
> > the worst case latency that we measured properly with a loaded system.
> I pointed out the lat_max field because, if you keep the latency test
> running and hit a key on a telnet session, you can easily see how the
> lat_max increase each time you hit the key, while the lat_worst increase
> depends on the former history.
>
> >
> > Now, if you want to know why you get such a masking section, you are
> > free to investigate.
>
> I'll try to do it.

Does the network driver use the AT91 PDC ? If yes, and if it is
possible to disable it, could you try disabling it ?

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-help] AT91SAM9260 latency
  2008-01-29 17:19                   ` Gilles Chanteperdrix
@ 2008-01-30  9:03                     ` Juan Antonio Garcia Redondo
  0 siblings, 0 replies; 27+ messages in thread
From: Juan Antonio Garcia Redondo @ 2008-01-30  9:03 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

On 29/01/08 18:19, Gilles Chanteperdrix wrote:
> On Jan 29, 2008 9:09 AM, Juan Antonio Garcia Redondo
> <juan-antonio.garcia@domain.hid> wrote:
> >
> > On 28/01/08 14:19, Gilles Chanteperdrix wrote:
> > > > >
> > > > >
> > > > > > > No mystery: hitting a key on a telnet session causes an interrupt
> > > > > > > masking section of 110us, you see it as the maximum if you never
> > > > > > > observed longer masking sections, but it is not the maximum if you
> > > > > > > observed longer masking sections.
> > > > > >
> > > > > > OK, but why the masking section on linux side affects to xenomai side ?
> > > > > > Another thing I don't understand is why when the system has load (above
> > > > > > I'm talking about calibrator but the same occurs with dd if=/dev/zero
> > > > > > of=/dev/null), the effect seems to dissapear.
> > > > >
> > > > > It is probably not a masking section on linux side but rather a
> > > > > masking section on I-pipe side. Anyway, the effect does not disappear:
> > > > > it means that the cache effects cause larger latencies than the
> > > > > ethernet interrupt, but maybe I did not understand what you explained.
> > > > > The results you obtain with no load are simply irrelevant.
> > > >
> > > > I'll try to explain it better:
> > > >
> > > > o Without load I run ./latency -t0 -p500.
> > > > RTD|      33.182|      53.479|      67.976|       0|      31.250| 77.319
> > > > RTD|      43.170|      53.479|      67.654|       0|      31.250| 77.319
> > > > RTD|      41.881|      53.479|      67.332|       0|      31.250| 77.319
> > > > RTT|  00:02:07  (periodic user-mode task, 500 us period, priority 99)
> > > >
> > > > o Each time I press a key (over a telnet session) I can see the lat_max field increase on 40 to 50 us aprox.
> > > > RTD|      33.505|      53.479|      71.842|       0|      26.739| 77.319
> > > > RTD|      40.592|      62.177|     123.067|       0|      26.739| 123.067
> > > >                                    -------
> > > >                                       \_________: Key pressed
> > > > RTD|      50.579|      53.479|      73.775|       0|      26.739| 123.067
> > >
> > > This is where you are wrong:
> > > - first, let me repeat it: test made without load are irrelevant;
> > I can't agree with you. When we stress a system with load is, as far as
> > I know, because usually, the large latencies don't appear on a quiet
> > system. Here we have a case where a large latency (the lat_worst number
> > I've gotten after more than 7 hours with the system fully loaded is even
> > less than this) appears on a quiet system and directly related to an
> > external event.
> >
> > > - second, an event has no relative effect on max latency, its effect
> > > is absolute: pressing a key over a telnet session causes, for unknown
> > > reason,  a masking section of around 130us, which happens to also be
> > > the worst case latency that we measured properly with a loaded system.
> > I pointed out the lat_max field because, if you keep the latency test
> > running and hit a key on a telnet session, you can easily see how the
> > lat_max increase each time you hit the key, while the lat_worst increase
> > depends on the former history.
> >
> > >
> > > Now, if you want to know why you get such a masking section, you are
> > > free to investigate.
> >
> > I'll try to do it.
> 
> Does the network driver use the AT91 PDC ? If yes, and if it is
> possible to disable it, could you try disabling it ?

Yes, the network driver uses DMA and is not easy to disable it. Anyway I
have, in my custom board, an additional ethernet chip (smc91x). I've
done the former tests with the smc91x (LAN91C111), which can't use DMA,
and the behaviour is similar.

Regards,
	Juan Antonio


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-core] [Xenomai-help] AT91SAM9260 latency
  2008-01-24  9:41     ` Juan Antonio Garcia Redondo
  2008-01-24 10:02       ` Gilles Chanteperdrix
@ 2008-02-10 20:31       ` Gilles Chanteperdrix
  2008-02-11 13:41         ` Jan Kiszka
  1 sibling, 1 reply; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-02-10 20:31 UTC (permalink / raw)
  To: Juan Antonio Garcia Redondo; +Cc: jagarcia, xenomai

Juan Antonio Garcia Redondo wrote:
 > On 23/01/08 14:15, Gilles Chanteperdrix wrote:
 > > On Jan 23, 2008 11:04 AM, Gilles Chanteperdrix
 > > <gilles.chanteperdrix@xenomai.org> wrote:
 > > > On Jan 23, 2008 7:52 AM, Juan Antonio Garcia Redondo
 > > >
 > > > <juan-antonio.garcia@domain.hid> wrote:
 > > > > I see everything OK except for the first samples of cyclictests. Any comments ?
 > > >
 > > > The load you apply does not load the cache, which is a source of
 > > > jitter. You should run the cache calibrator (I do not find the cache
 > > > calibrator URL, but it is somewhere in Xenomai distribution or wiki).
 > > 
 > > It is in the TROUBLESHOOTING guide, question "How do I adequately stress test".
 > > 
 > > -- 
 > >                                                Gilles Chanteperdrix
 > 
 > Thanks Gilles, I've done more tests using the cache calibrator from
 > http://www.cwi.nl/~manegold/Calibrator. The latency numbers are very
 > similar althought I've found an strange behaviour related to telnet
 > sessions.
 > 
 > Environment:
 > 	o Tests running from console over atmel serial port.
 > 	o A telnet session over on-chip ethernet. 
 >         o System without load.
 > 
 > ./latency -p 500 -t0
 > == All results in microseconds
 > warming up...
 > RTT|  00:00:01  (periodic user-mode task, 500 us period, priority 99)
 > RTH|-RTH----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat
 > worst
 > RTD|      49.613|      52.190|      62.822|       0|      49.613| 62.822
 > RTD|      42.203|      52.512|      66.365|       0|      42.203| 66.365
 > 
 > 
 > Now If hit a key on the telnet session :
 > 
 > RTD|      36.726|      57.989|     109.536|       0|      31.572| 109.536  <-------- Here I've hit the key.
 > RTD|      36.404|      51.868|      69.587|       0|      31.572| 109.536
 > RTD|      35.760|      51.868|      73.775|       0|      31.572| 109.536
 > 
 > Now, I launch an script which executes four instances of cache
 > calibrator.
 > 
 > RTD|      45.103|      57.667|      75.708|       0|      32.538| 122.422
 > RTD|      45.425|      57.023|      76.030|       0|      32.538| 122.422
 > RTD|      46.069|      57.023|      75.708|       0|      32.538| 122.422
 > 
 > Now, I can hit a key on the telnet session without effects over latency
 > numbers:
 > 
 > RTD|      44.136|      57.989|      75.386|       0|      27.384| 128.221
 > RTD|      46.713|      57.345|      76.353|       0|      27.384| 128.221
 > RTD|      44.780|      57.345|      76.675|       0|      27.384| 128.221
 > RTD|      43.492|      56.701|      76.997|       0|      27.384| 128.221
 > 
 > Now I stop the calibrator process and launch 'ping -f -s2048 192.168.2.82' from an external
 > machine.
 > 
 > RTD|      40.270|      68.621|      90.850|       0|      27.384| 128.221
 > RTD|      36.082|      68.621|      88.273|       0|      27.384| 128.221
 > RTD|      40.592|      67.976|      91.494|       0|      27.384| 128.221
 > RTD|      41.237|      68.298|      89.239|       0|      27.384| 128.221
 > 
 > 
 > Now If hit a key on the telnet session :
 > 
 > RTD|      42.203|      67.976|      88.273|       0|      27.384| 128.221
 > RTD|      32.216|      93.427|     128.543|       0|      27.384| 128.543 <---------- Here I've hit the key.
 > RTD|      42.203|      68.298|      87.628|       0|      27.384| 128.543
 > 
 > And again the calibrator execution results on eliminate the strange
 > behaviour whith the telnet session.
 > 
 > Any clues ?

Here is an update, follow-up on xenomai-core. I was finally able to
reproduce this behaviour: I run latency in the background and hit the
"Enter" key on my serial console, and get high latency figures.

I enabled the tracer, set xenomai latency to 300us and managed to get a
trace (220us latency). However, I do not understand what is going wrong
from reading the trace, so I post it here in case someone sees something.

Ah, and I added an ipipe_trace_special in ipipe_grab_irq to log the
number of the received irq. 1 is serial interrupt 18 (0x12) is timer
interrupt.

Inline, so that Jan can comment it.

-- 


					    Gilles Chanteperdrix.
---|------------|------------|------------|--------|-------------------------
RTS|    -221.527|    -152.777|     220.833|       0|    00:00:25/00:00:25
# cat /p\b\b# cat /proc/ipip# cat /proc/ipipe/tr# cat /proc/ipipe/trace/fr# cat /proc/ipipe/trace/frozen 
I-pipe frozen back-tracing service on 2.6.20/ipipe-1.8-04
------------------------------------------------------------
CPU: 0, Freeze: 450692973 cycles, Trace Points: 1000 (+10)
Calibrated minimum trace-point overhead: 1.000 us

 +----- Hard IRQs ('|': locked)
 |+---- <unused>
 ||+--- <unused>
 |||+-- Xenomai
 ||||+- Linux ('*': domain stalled, '+': current, '#': current+stalled)
 |||||                        +---------- Delay flag ('+': > 1 us, '!': > 10 us)
 |||||                        |        +- NMI noise ('N')
 |||||                        |        |
      Type    User Val.   Time    Delay  Function (Parent)
:|   +func               -10487+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -10485+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -10482+   4.000  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -10478+   2.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -10476+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -10466+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -10463+   4.500  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -10459!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -10444+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -10437+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -10433+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -10430!  59.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -10370!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -10352+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -10349+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -10345!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -10333+   8.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -10325!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -10304+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -10301+   1.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -10300+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -10296+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -10294+   6.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -10288+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -10286+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -10283+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -10281+   2.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -10278+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -10273+   3.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -10269+   8.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -10261!  50.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -10211!  19.500  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -10191+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -10184+   5.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -10179+   2.500  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -10176+   6.500  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -10170+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -10167+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -10164+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -10162+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -10160+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -10159+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -10157+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -10155! 363.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -9791+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -9790+   3.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -9786+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -9782+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -9779+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -9777+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -9774+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -9772+   1.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -9770+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -9767+   2.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -9764+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -9762+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -9758+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -9755+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -9745+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -9742+   3.500  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -9739!  15.500  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -9723+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -9717+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -9713+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -9709!  59.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -9650!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -9632+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -9629+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -9625!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -9613+   8.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -9605!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -9584+   2.500  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -9581+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -9579+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -9575+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -9573+   6.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -9567+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -9565+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -9563+   2.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -9561+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -9558+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -9552+   3.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -9549+   8.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -9540!  50.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -9490!  19.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -9471+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -9464+   5.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -9459+   2.500  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -9456+   6.500  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -9450+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -9447+   3.000  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -9444+   2.000  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -9442+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -9441+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -9439+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -9437+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -9435! 364.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -9071+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -9070+   3.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -9066+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -9062+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -9059+   3.000  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -9056+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -9054+   1.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -9052+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -9050+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -9046+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -9044+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -9042+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -9038+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -9035+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -9026+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -9023+   3.500  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -9019!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -9004+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -8998+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -8994+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -8990!  59.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -8931!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -8913+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -8909+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -8905!  12.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -8893+   8.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -8885!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -8864+   2.500  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -8861+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -8859+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -8855+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -8853+   6.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -8847+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -8845+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -8843+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -8840+   2.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -8838+   6.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -8832+   3.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -8829+   8.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -8820!  51.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -8769!  19.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -8750+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -8743+   3.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +func               -8740+   3.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -8737+   7.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -8730+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -8725+   3.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -8722+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -8720+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -8717+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -8715+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -8713+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -8710+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -8708+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -8705+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -8701+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -8698!  15.000  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -8683+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -8677+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -8672+   2.500  rthal_irq_host_pend+0x10 (xnintr_clock_handler+0xbc)
:|  # func               -8670+   4.000  __ipipe_schedule_irq+0x10 (rthal_irq_host_pend+0x20)
:|  # func               -8666+   4.000  __ipipe_set_irq_pending+0x10 (__ipipe_schedule_irq+0xa4)
:|   +func               -8662+   2.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +func               -8660+   6.000  __ipipe_sync_stage+0x14 (__ipipe_walk_pipeline+0xa8)
:|   #end     0x80000000 -8654+   2.500  __ipipe_sync_stage+0x250 (__ipipe_walk_pipeline+0xa8)
:    #func               -8651+   3.000  asm_do_IRQ+0x10 (__ipipe_sync_stage+0x284)
:    #func               -8648+   2.000  handle_level_irq+0x10 (asm_do_IRQ+0x50)
:    #func               -8646+   2.500  _spin_lock+0x10 (handle_level_irq+0x24)
:    #func               -8644+   3.000  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -8641+   5.000  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -8636+   1.500  _spin_unlock+0x10 (handle_level_irq+0x88)
:    #func               -8634+   3.500  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -8631+   2.000  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:    #func               -8629+   3.000  handle_IRQ_event+0x10 (handle_level_irq+0x94)
:    #func               -8626+   2.000  at91_timer_interrupt+0x10 (handle_IRQ_event+0x3c)
:    #func               -8624+   1.500  _spin_lock+0x10 (at91_timer_interrupt+0x1c)
:    #func               -8622+   2.000  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -8620+   3.500  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -8617+   2.000  timer_tick+0x10 (at91_timer_interrupt+0x50)
:    #func               -8615+   6.500  profile_tick+0x10 (timer_tick+0x18)
:    #func               -8608+   6.500  do_timer+0x14 (timer_tick+0xe0)
:    #func               -8602+   7.500  current_tick_length+0x10 (do_timer+0x144)
:    #func               -8594+   2.000  update_process_times+0x10 (timer_tick+0xfc)
:    #func               -8592+   5.000  account_system_time+0x10 (update_process_times+0x44)
:    #func               -8587+   2.000  run_local_timers+0x10 (update_process_times+0x48)
:    #func               -8585+   2.000  raise_softirq+0x10 (run_local_timers+0x18)
:|   #begin   0x80000001 -8583+   1.500  raise_softirq+0x34 (run_local_timers+0x18)
:|   #end     0x80000001 -8582+   3.500  raise_softirq+0x54 (run_local_timers+0x18)
:    #func               -8578+   2.000  __ipipe_restore_root+0x10 (raise_softirq+0xb4)
:|   #begin   0x80000001 -8576+   2.500  __ipipe_restore_root+0x38 (raise_softirq+0xb4)
:|   #end     0x80000001 -8574+   2.000  __ipipe_restore_root+0x58 (raise_softirq+0xb4)
:    #func               -8572+   4.500  softlockup_tick+0x14 (run_local_timers+0x1c)
:    #func               -8567+   2.000  rcu_pending+0x10 (update_process_times+0x50)
:    #func               -8565+   3.500  __rcu_pending+0x10 (rcu_pending+0x1c)
:    #func               -8562+   3.000  __rcu_pending+0x10 (rcu_pending+0x34)
:    #func               -8559+   2.000  scheduler_tick+0x10 (update_process_times+0x64)
:    #func               -8557+   4.000  sched_clock+0x10 (scheduler_tick+0x14)
:    #func               -8553+   5.000  run_posix_cpu_timers+0x14 (update_process_times+0x6c)
:    #func               -8548+   1.500  _spin_unlock+0x10 (at91_timer_interrupt+0xc0)
:    #func               -8546+   1.500  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -8545+   3.000  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:|   #begin   0x80000001 -8542+   2.000  handle_IRQ_event+0x84 (handle_level_irq+0x94)
:|   #end     0x80000001 -8540+   2.000  handle_IRQ_event+0xa4 (handle_level_irq+0x94)
:    #func               -8538+   3.500  note_interrupt+0x14 (handle_level_irq+0xb0)
:    #func               -8534+   1.500  _spin_lock+0x10 (handle_level_irq+0xb8)
:    #func               -8533+   1.500  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -8531+   2.000  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -8529+   2.000  at91_aic_unmask_irq+0x10 (handle_level_irq+0xe4)
:    #func               -8527+   1.500  _spin_unlock+0x10 (handle_level_irq+0xec)
:    #func               -8526+   2.000  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -8524+   2.000  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:    #func               -8522+   2.500  irq_exit+0x10 (asm_do_IRQ+0x54)
:    #func               -8519+   3.000  __do_softirq+0x10 (irq_exit+0x44)
:    #func               -8516+   2.000  __ipipe_unstall_root+0x10 (__do_softirq+0x40)
:|   #begin   0x80000000 -8514+   1.500  __ipipe_unstall_root+0x30 (__do_softirq+0x40)
:|   +end     0x80000000 -8513+   3.000  __ipipe_unstall_root+0x64 (__do_softirq+0x40)
:    +func               -8510+   2.500  run_timer_softirq+0x14 (__do_softirq+0x58)
:    +func               -8507+   6.000  hrtimer_run_queues+0x10 (run_timer_softirq+0x24)
:    +func               -8501+   1.500  _spin_lock_irq+0x10 (run_timer_softirq+0x40)
:|   +begin   0x80000001 -8500+   2.500  _spin_lock_irq+0x34 (run_timer_softirq+0x40)
:|   #end     0x80000001 -8497+   2.000  _spin_lock_irq+0x54 (run_timer_softirq+0x40)
:    #func               -8495+   1.500  ipipe_check_context+0x10 (_spin_lock_irq+0x60)
:    #func               -8494+   4.500  _raw_spin_lock+0x14 (_spin_lock_irq+0x68)
:    #func               -8489+   1.500  _spin_unlock_irq+0x10 (run_timer_softirq+0x1ac)
:    #func               -8488+   1.500  _raw_spin_unlock+0x10 (_spin_unlock_irq+0x14)
:    #func               -8486+   1.500  __ipipe_unstall_root+0x10 (_spin_unlock_irq+0x18)
:|   #begin   0x80000000 -8485+   2.000  __ipipe_unstall_root+0x30 (_spin_unlock_irq+0x18)
:|   +end     0x80000000 -8483+   2.000  __ipipe_unstall_root+0x64 (_spin_unlock_irq+0x18)
:    +func               -8481+   2.500  ipipe_check_context+0x10 (_spin_unlock_irq+0x20)
:|   +begin   0x80000001 -8478+   2.000  __do_softirq+0x90 (irq_exit+0x44)
:|   #end     0x80000001 -8476+   2.500  __do_softirq+0xb0 (irq_exit+0x44)
:    #func               -8474+   3.000  _local_bh_enable+0x10 (__do_softirq+0xe8)
:    #func               -8471+   2.500  ipipe_check_context+0x10 (irq_exit+0x4c)
:|   #begin   0x80000000 -8468+   3.500  __ipipe_sync_stage+0x31c (__ipipe_walk_pipeline+0xa8)
:|   +end     0xffffffff -8465+   3.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -8462+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -8460+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -8458+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -8456+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -8453+   3.000  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -8450+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -8449+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -8447+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -8445+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -8444!  92.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -8352+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -8350+   1.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -8348+   1.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -8347+   2.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -8345+   1.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -8343+   1.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -8342+   1.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -8340+   1.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -8339+   2.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -8337+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -8335+   1.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -8334+   2.000  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -8332+   1.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -8330+   4.000  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -8326+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -8323+   3.500  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -8320!  10.500  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -8309+   3.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -8306+   2.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -8304+   4.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -8300!  66.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -8234!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -8216+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -8212+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -8208!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -8196+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -8189!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -8168+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -8165+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -8163+   3.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -8159+   2.500  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -8157+   6.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -8151+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -8149+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -8146+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -8144+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -8141+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -8135+   3.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -8132+   8.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -8124!  50.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -8074!  19.500  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -8054+   6.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -8048+   5.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -8042+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -8039+   6.500  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -8033+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -8030+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -8028+   3.000  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -8025+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -8023+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -8021+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -8019+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -8017! 382.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -7635+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -7633+   3.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -7630+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -7626+   3.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -7623+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -7620+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -7618+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -7616+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -7614+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -7610+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -7608+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -7605+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -7602+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -7599+   9.000  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -7590+   3.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -7586+   3.500  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -7583!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -7568+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -7561+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -7557+   3.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -7554!  60.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -7494!  17.500  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -7476+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -7473+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -7469!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -7457+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -7449!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -7428+   2.500  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -7426+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -7424+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -7420+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -7418+   6.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -7412+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -7410+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -7407+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -7405+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -7402+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -7397+   4.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -7393+   8.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -7385!  50.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -7334!  19.500  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -7315+   6.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -7308+   5.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -7303+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -7300+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -7294+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -7291+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -7288+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -7286+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -7284+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -7283+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -7281+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -7279! 367.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -6912+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -6910+   3.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -6907+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -6902+   3.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -6899+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -6897+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -6894+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -6892+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -6890+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -6887+   2.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -6884+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -6882+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -6878+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -6875+   9.000  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -6866+   3.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -6863+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -6859!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -6844+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -6837+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -6833+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -6830!  59.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -6771!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -6753+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -6749+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -6745!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -6734+   8.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -6726!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -6705+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -6702+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -6700+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -6696+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -6694+   6.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -6688+   1.500  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -6686+   3.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -6683+   2.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -6681+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -6678+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -6673+   3.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -6669+   8.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -6661!  50.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -6610!  19.500  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -6591+   6.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -6584+   5.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -6579+   2.500  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -6576+   6.500  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -6570+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -6567+   3.000  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -6564+   2.000  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -6562+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -6561+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -6559+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -6557+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -6555! 363.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -6192+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -6190+   3.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -6187+   4.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -6183+   3.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -6180+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -6177+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -6175+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -6173+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -6171+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -6167+   2.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -6165+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -6162+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -6159+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -6156+   9.000  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -6147+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -6144+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -6140!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -6125+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -6118+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -6114+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -6111!  59.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -6052!  17.500  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -6034+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -6031+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -6027!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -6015+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -6007!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -5986+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -5983+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -5981+   3.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -5978+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -5976+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -5969+   1.500  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -5968+   3.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -5965+   2.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -5963+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -5960+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -5954+   3.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -5951+   8.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -5942!  50.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -5892!  19.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -5873+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -5866+   5.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -5861+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -5858+   6.500  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -5851+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -5849+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -5846+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -5844+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -5842+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -5840+   1.500  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -5839+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -5837! 365.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -5472+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -5470+   3.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -5467+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -5462+   3.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -5459+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -5457+   2.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -5455+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -5452+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -5450+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -5447+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -5445+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -5442+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -5438+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -5435+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -5426+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -5423+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -5419!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -5404+   6.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -5398+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -5393+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -5390!  60.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -5330!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -5312+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -5308+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -5304!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -5292+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -5285!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -5264+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -5261+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -5259+   3.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -5255+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -5253+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -5247+   1.500  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -5245+   3.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -5242+   2.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -5240+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -5237+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -5232+   3.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -5228+   8.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -5220!  51.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -5169!  19.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -5150+   6.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -5143+   5.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -5138+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -5135+   6.500  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -5128+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -5126+   3.000  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -5123+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -5120+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -5119+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -5117+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -5115+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -5114! 362.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -4751+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -4750+   3.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -4747+   5.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -4742+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -4739+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -4737+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -4734+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -4732+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -4730+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -4727+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -4725+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -4722+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -4718+   2.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -4716+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -4706+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -4703+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -4699!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -4684+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -4678+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -4674+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -4670!  59.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -4611!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -4593+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -4589+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -4585!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -4574+   8.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -4566!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -4545+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -4542+   1.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -4541+   4.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -4536+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -4534+   6.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -4528+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -4526+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -4524+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -4521+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -4518+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -4513+   3.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -4510+   8.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -4501!  50.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -4451!  20.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -4431+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -4424+   5.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -4419+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -4416+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -4410+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -4407+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -4405+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -4402+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -4401+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -4399+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -4397+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -4395! 363.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -4032+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -4030+   3.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -4027+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -4022+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -4020+   3.000  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -4017+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -4014+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -4012+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -4010+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -4007+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -4005+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -4002+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -3998+   2.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -3996+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -3986+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -3983+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -3979!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -3964+   7.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -3957+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -3953+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -3950!  59.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -3891!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -3873+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -3869+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -3865!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -3854+   8.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -3845!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -3824+   2.500  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -3822+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -3820+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -3816+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -3814+   6.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -3808+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -3806+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -3803+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -3801+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -3798+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -3792+   3.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -3789+   8.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -3781!  50.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -3731!  20.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -3711+   6.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -3704+   5.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -3699+   2.500  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -3696+   6.500  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -3690+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -3687+   3.000  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -3684+   2.000  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -3682+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -3681+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -3679+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -3677+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -3675! 364.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -3311+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -3309+   3.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -3306+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -3302+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -3299+   3.000  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -3296+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -3294+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -3292+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -3290+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -3286+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -3284+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -3281+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -3278+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -3275+   9.000  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -3266+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -3263+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -3259!  15.500  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -3243+   6.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -3237+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -3233+   4.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -3229!  60.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -3169!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -3151+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -3148+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -3144!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -3132+   8.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -3124!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -3103+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -3100+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -3098+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -3094+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -3092+   6.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -3086+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -3084+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -3082+   2.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -3080+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -3077+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -3071+   3.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -3068+   8.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -3060!  50.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -3009!  19.500  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -2990+   6.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -2983+   5.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -2978+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -2975+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -2969+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -2966+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -2964+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -2961+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -2960+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -2958+   1.500  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -2956+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -2954! 362.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -2592+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -2590+   3.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -2587+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -2582+   3.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -2579+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -2577+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -2574+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -2572+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -2570+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -2567+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -2565+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -2562+   4.000  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -2558+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -2555+   9.000  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -2546+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -2543+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -2539!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -2524+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -2518+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -2514+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -2510!  59.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -2451!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -2433+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -2429+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -2425!  12.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -2413+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -2405!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -2384+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -2381+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -2379+   3.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -2376+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -2374+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -2367+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -2365+   2.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -2363+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -2361+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -2358+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -2352+   3.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -2349+   8.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -2340!  50.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -2290!  19.500  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -2270+   6.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -2264+   5.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -2259+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -2256+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -2250+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -2247+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -2244+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -2242+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -2240+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -2238+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -2236+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -2235! 363.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -1871+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -1870+   3.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -1867+   5.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -1862+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -1859+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -1857+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -1854+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -1852+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -1850+   3.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -1847+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -1845+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -1842+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -1838+   2.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -1836+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -1826+   3.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -1823+   3.500  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -1819!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -1804+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -1798+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -1794+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -1790!  59.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -1731!  17.500  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -1714+   3.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -1710+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -1706!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -1695+   8.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -1687!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -1666+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func               -1663+   1.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -1661+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -1657+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -1655+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -1649+   1.500  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -1647+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -1645+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -1642+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -1639+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -1634+   3.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99 -1630+   8.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func               -1622!  50.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1 -1571!  19.500  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func               -1552+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -1545+   4.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +func               -1541+   2.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -1538+   6.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -1532+   5.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -1527+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -1524+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -1522+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -1519+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -1517+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -1515+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -1511+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -1510+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -1507+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -1503+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -1500!  14.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -1485+   7.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -1478+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -1474+   2.500  rthal_irq_host_pend+0x10 (xnintr_clock_handler+0xbc)
:|  # func               -1471+   3.500  __ipipe_schedule_irq+0x10 (rthal_irq_host_pend+0x20)
:|  # func               -1468+   4.500  __ipipe_set_irq_pending+0x10 (__ipipe_schedule_irq+0xa4)
:|   +func               -1463+   2.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +func               -1461+   6.000  __ipipe_sync_stage+0x14 (__ipipe_walk_pipeline+0xa8)
:|   #end     0x80000000 -1455+   2.000  __ipipe_sync_stage+0x250 (__ipipe_walk_pipeline+0xa8)
:    #func               -1453+   3.000  asm_do_IRQ+0x10 (__ipipe_sync_stage+0x284)
:    #func               -1450+   2.000  handle_level_irq+0x10 (asm_do_IRQ+0x50)
:    #func               -1448+   2.500  _spin_lock+0x10 (handle_level_irq+0x24)
:    #func               -1446+   3.000  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -1443+   5.000  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -1438+   2.000  _spin_unlock+0x10 (handle_level_irq+0x88)
:    #func               -1436+   3.000  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -1433+   2.000  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:    #func               -1431+   3.000  handle_IRQ_event+0x10 (handle_level_irq+0x94)
:    #func               -1428+   2.000  at91_timer_interrupt+0x10 (handle_IRQ_event+0x3c)
:    #func               -1426+   2.000  _spin_lock+0x10 (at91_timer_interrupt+0x1c)
:    #func               -1424+   1.500  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -1422+   3.500  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -1419+   2.000  timer_tick+0x10 (at91_timer_interrupt+0x50)
:    #func               -1417+   6.500  profile_tick+0x10 (timer_tick+0x18)
:    #func               -1410+   6.500  do_timer+0x14 (timer_tick+0xe0)
:    #func               -1404+   7.500  current_tick_length+0x10 (do_timer+0x144)
:    #func               -1396+   2.500  update_process_times+0x10 (timer_tick+0xfc)
:    #func               -1394+   5.000  account_system_time+0x10 (update_process_times+0x44)
:    #func               -1389+   2.000  run_local_timers+0x10 (update_process_times+0x48)
:    #func               -1387+   2.000  raise_softirq+0x10 (run_local_timers+0x18)
:|   #begin   0x80000001 -1385+   2.500  raise_softirq+0x34 (run_local_timers+0x18)
:|   #end     0x80000001 -1382+   3.000  raise_softirq+0x54 (run_local_timers+0x18)
:    #func               -1379+   2.000  __ipipe_restore_root+0x10 (raise_softirq+0xb4)
:|   #begin   0x80000001 -1377+   2.500  __ipipe_restore_root+0x38 (raise_softirq+0xb4)
:|   #end     0x80000001 -1375+   2.500  __ipipe_restore_root+0x58 (raise_softirq+0xb4)
:    #func               -1372+   4.000  softlockup_tick+0x14 (run_local_timers+0x1c)
:    #func               -1368+   2.000  rcu_pending+0x10 (update_process_times+0x50)
:    #func               -1366+   4.000  __rcu_pending+0x10 (rcu_pending+0x1c)
:    #func               -1362+   3.000  __rcu_pending+0x10 (rcu_pending+0x34)
:    #func               -1359+   1.500  scheduler_tick+0x10 (update_process_times+0x64)
:    #func               -1358+   4.000  sched_clock+0x10 (scheduler_tick+0x14)
:    #func               -1354+   5.000  run_posix_cpu_timers+0x14 (update_process_times+0x6c)
:    #func               -1349+   1.500  _spin_unlock+0x10 (at91_timer_interrupt+0xc0)
:    #func               -1347+   1.500  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -1346+   3.000  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:|   #begin   0x80000001 -1343+   2.000  handle_IRQ_event+0x84 (handle_level_irq+0x94)
:|   #end     0x80000001 -1341+   2.000  handle_IRQ_event+0xa4 (handle_level_irq+0x94)
:    #func               -1339+   3.500  note_interrupt+0x14 (handle_level_irq+0xb0)
:    #func               -1335+   1.500  _spin_lock+0x10 (handle_level_irq+0xb8)
:    #func               -1334+   1.500  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -1332+   2.000  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -1330+   2.000  at91_aic_unmask_irq+0x10 (handle_level_irq+0xe4)
:    #func               -1328+   1.500  _spin_unlock+0x10 (handle_level_irq+0xec)
:    #func               -1327+   1.500  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -1325+   2.500  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:    #func               -1323+   2.500  irq_exit+0x10 (asm_do_IRQ+0x54)
:    #func               -1320+   2.500  __do_softirq+0x10 (irq_exit+0x44)
:    #func               -1318+   2.000  __ipipe_unstall_root+0x10 (__do_softirq+0x40)
:|   #begin   0x80000000 -1316+   2.000  __ipipe_unstall_root+0x30 (__do_softirq+0x40)
:|   +end     0x80000000 -1314+   3.000  __ipipe_unstall_root+0x64 (__do_softirq+0x40)
:    +func               -1311+   2.500  run_timer_softirq+0x14 (__do_softirq+0x58)
:    +func               -1308+   5.500  hrtimer_run_queues+0x10 (run_timer_softirq+0x24)
:    +func               -1303+   2.000  _spin_lock_irq+0x10 (run_timer_softirq+0x40)
:|   +begin   0x80000001 -1301+   2.500  _spin_lock_irq+0x34 (run_timer_softirq+0x40)
:|   #end     0x80000001 -1298+   1.500  _spin_lock_irq+0x54 (run_timer_softirq+0x40)
:    #func               -1297+   1.500  ipipe_check_context+0x10 (_spin_lock_irq+0x60)
:    #func               -1295+   4.500  _raw_spin_lock+0x14 (_spin_lock_irq+0x68)
:    #func               -1291+   1.500  _spin_unlock_irq+0x10 (run_timer_softirq+0x1ac)
:    #func               -1289+   1.500  _raw_spin_unlock+0x10 (_spin_unlock_irq+0x14)
:    #func               -1288+   2.000  __ipipe_unstall_root+0x10 (_spin_unlock_irq+0x18)
:|   #begin   0x80000000 -1286+   2.000  __ipipe_unstall_root+0x30 (_spin_unlock_irq+0x18)
:|   +end     0x80000000 -1284+   1.500  __ipipe_unstall_root+0x64 (_spin_unlock_irq+0x18)
:    +func               -1282+   2.500  ipipe_check_context+0x10 (_spin_unlock_irq+0x20)
:|   +begin   0x80000001 -1280+   2.000  __do_softirq+0x90 (irq_exit+0x44)
:|   #end     0x80000001 -1278+   2.500  __do_softirq+0xb0 (irq_exit+0x44)
:    #func               -1275+   3.000  _local_bh_enable+0x10 (__do_softirq+0xe8)
:    #func               -1272+   2.000  ipipe_check_context+0x10 (irq_exit+0x4c)
:|   #begin   0x80000000 -1270+   4.000  __ipipe_sync_stage+0x31c (__ipipe_walk_pipeline+0xa8)
:|   +end     0xffffffff -1266+   3.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:    +func               -1263+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -1262+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -1260+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -1257+   3.000  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -1254+   2.000  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -1252+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -1251+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -1249+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -1247+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -1245!  94.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -1151+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -1150+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -1148+   2.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -1146+   1.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -1144+   1.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -1143+   1.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -1141+   1.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   +func               -1140+   1.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   +func               -1138+   2.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   +func               -1136+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   +func               -1135+   2.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -1133+   1.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -1131+   1.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -1130+   4.000  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  # func               -1126+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  # func               -1123+   3.500  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  # [  753] -<?>-   99 -1119!  10.500  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  # func               -1109+   4.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  # func               -1105+   2.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -1103+   4.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -1099!  66.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  753] -<?>-   99 -1033!  18.000  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func               -1015+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -1011+   3.500  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -1007!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001  -995+   8.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -987!  36.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func                -951+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func                -948+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001  -946+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -942+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func                -940+   6.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func                -934+   5.000  __rt_sem_v+0x14 (hisyscall_event+0x150)
:   + func                -929+   2.000  xnregistry_fetch+0x10 (__rt_sem_v+0x60)
:|  + begin   0x80000000  -927+   3.500  xnregistry_fetch+0x34 (__rt_sem_v+0x60)
:|  # func                -924+   1.500  __ipipe_restore_pipeline_head+0x10 (xnregistry_fetch+0xfc)
:|  + end     0x80000000  -922+   3.000  __ipipe_restore_pipeline_head+0x11c (xnregistry_fetch+0xfc)
:   + func                -919+   2.000  rt_sem_v+0x10 (__rt_sem_v+0x70)
:|  + begin   0x80000000  -917+   3.500  rt_sem_v+0x38 (__rt_sem_v+0x70)
:|  # func                -914+   7.500  xnsynch_wakeup_one_sleeper+0x14 (rt_sem_v+0x8c)
:|  # func                -906+   3.500  xnpod_resume_thread+0x14 (xnsynch_wakeup_one_sleeper+0x324)
:|  # [  752] -<?>-    0  -903!  10.500  xnpod_resume_thread+0x84 (xnsynch_wakeup_one_sleeper+0x324)
:|  # func                -892+   4.000  xnpod_schedule+0x14 (rt_sem_v+0x98)
:|  # [  753] -<?>-   99  -888+   3.500  xnpod_schedule+0xc8 (rt_sem_v+0x98)
:|  # func                -885+   2.000  __ipipe_restore_pipeline_head+0x10 (rt_sem_v+0xd4)
:|  + end     0x80000000  -883+   2.000  __ipipe_restore_pipeline_head+0x11c (rt_sem_v+0xd4)
:|  + begin   0x80000001  -881+   2.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -879+   4.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func                -874+   1.500  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func                -873+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001  -871+   2.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -869+   1.500  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func                -867+   2.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func                -865+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func                -863+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func                -861+   2.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000  -859+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func                -856+   5.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func                -850+   2.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  753] -<?>-   99  -848!  11.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # [  752] -<?>-    0  -837+   7.500  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  # func                -829+   2.000  __ipipe_restore_pipeline_head+0x10 (rt_sem_p+0x158)
:|  + end     0x80000000  -827+   4.500  __ipipe_restore_pipeline_head+0x11c (rt_sem_p+0x158)
:|  + begin   0x80000001  -823+   2.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -821! 352.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func                -468+   6.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   + func                -462+   3.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001  -459+   6.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -453+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func                -451+   3.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func                -447+   2.500  xnshadow_relax+0x14 (hisyscall_event+0x210)
:|  + begin   0x80000000  -445+   3.000  xnshadow_relax+0xd4 (hisyscall_event+0x210)
:|  # func                -442+   5.000  schedule_linux_call+0x10 (xnshadow_relax+0x114)
:|  # func                -437+   4.000  rthal_apc_schedule+0x10 (schedule_linux_call+0x1e8)
:|  # func                -433+   5.000  __ipipe_schedule_irq+0x10 (rthal_apc_schedule+0xac)
:|  # func                -428+   4.500  __ipipe_set_irq_pending+0x10 (__ipipe_schedule_irq+0xa4)
:|  # func                -423+   3.500  rpi_push+0x14 (xnshadow_relax+0x11c)
:|  # func                -420+   5.500  xnpod_suspend_thread+0x14 (xnshadow_relax+0x148)
:|  # func                -414+   4.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
:|  # [  752] -<?>-    0  -410+   7.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
:|  # func                -403!  56.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
:|  # [    0] -<?>-   -1  -347!  20.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
:|   +func                -327+   3.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +func                -324+   7.500  __ipipe_sync_stage+0x14 (__ipipe_walk_pipeline+0xa8)
:|   #end     0x80000000  -317+   7.000  __ipipe_sync_stage+0x250 (__ipipe_walk_pipeline+0xa8)
:|   #func                -310+   2.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   #begin   0xffffffff  -307+   7.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   #(0x2a)  0x00000012  -300+   5.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   #func                -295+   4.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   #func                -291+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   #func                -289+   3.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   #func                -286+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|   #func                -284+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|   #func                -282+   4.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
:|   #func                -278+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
:|   #func                -276+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   #func                -273+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  #*func                -270+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  #*func                -266+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
:|  #*func                -257+   3.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
:|  #*func                -253+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
:|  #*[  753] -<?>-   99  -249!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
:|  #*func                -234+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
:|  #*func                -228+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  #*func                -224+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  #*[    0] -<?>-   -1  -220!  59.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  #*[  753] -<?>-   99  -161!  17.500  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
:|  #*func                -143+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  #*func                -139+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  +*end     0x80000000  -135+   7.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  +*func                -128+   3.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|  +*begin   0xffffffff  -125+   7.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|  +*(0x2a)  0x00000001  -118+   4.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|  +*func                -114+   5.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|  +*func                -109+   4.500  __ipipe_set_irq_pending+0x10 (__ipipe_handle_irq+0xdc)
:|  +*func                -105+   2.000  __ipipe_ack_irq+0x10 (__ipipe_handle_irq+0xfc)
:|  +*func                -103+   3.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_irq+0x28)
:|  +*func                -100+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
:|  +*func                 -97+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
:|  +*func                 -95+   3.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|  +*end     0xffffffff   -92!  10.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|  +*begin   0x80000001   -81+   4.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  +*end     0x80000001   -77!  39.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   +*func                 -38+   2.500  __ipipe_syscall_root+0x10 (vector_swi+0x68)
:   +*func                 -35+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  +*begin   0x80000001   -33+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  +*end     0x80000001   -29+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   +*func                 -27+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   +*func                 -21+   2.500  xnshadow_sys_trace+0x10 (hisyscall_event+0x150)
:   +*func                 -18+   2.000  ipipe_trace_frozen_reset+0x10 (xnshadow_sys_trace+0x98)
:   +*func                 -16+   2.000  __ipipe_global_path_lock+0x10 (ipipe_trace_frozen_reset+0x14)
:   +*func                 -14+   2.000  __ipipe_spin_lock_irqsave+0x10 (__ipipe_global_path_lock+0x18)
:|  +*begin   0x80000001   -12+   8.000  __ipipe_spin_lock_irqsave+0x34 (__ipipe_global_path_lock+0x18)
:|  #*func                  -4+   2.500  __ipipe_spin_unlock_irqcomplete+0x10 (__ipipe_global_path_unlock+0x6c)
:|  +*end     0x80000001    -2+   2.000  __ipipe_spin_unlock_irqcomplete+0x4c (__ipipe_global_path_unlock+0x6c)
<   +*freeze  0x00035ea1     0    2.500  xnshadow_sys_trace+0xa4 (hisyscall_event+0x150)
 |  +*begin   0x80000001     2    1.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
 |  +*end     0x80000001     4    5.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
    +*func                   9    2.000  __ipipe_syscall_root+0x10 (vector_swi+0x68)
    +*func                  11    1.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
 |  +*begin   0x80000001    12    2.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
 |  +*end     0x80000001    14    1.500  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
    +*func                  16    2.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
    +*func                  18    1.500  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
    +*func                  20    3.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
    +*func                  23    0.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
# 


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-core] [Xenomai-help] AT91SAM9260 latency
  2008-02-10 20:31       ` [Xenomai-core] " Gilles Chanteperdrix
@ 2008-02-11 13:41         ` Jan Kiszka
  2008-02-11 14:05           ` Gilles Chanteperdrix
  2008-02-12  7:04           ` Gilles Chanteperdrix
  0 siblings, 2 replies; 27+ messages in thread
From: Jan Kiszka @ 2008-02-11 13:41 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

Gilles Chanteperdrix wrote:
> Juan Antonio Garcia Redondo wrote:
>  > On 23/01/08 14:15, Gilles Chanteperdrix wrote:
>  > > On Jan 23, 2008 11:04 AM, Gilles Chanteperdrix
>  > > <gilles.chanteperdrix@xenomai.org> wrote:
>  > > > On Jan 23, 2008 7:52 AM, Juan Antonio Garcia Redondo
>  > > >
>  > > > <juan-antonio.garcia@domain.hid> wrote:
>  > > > > I see everything OK except for the first samples of cyclictests. Any comments ?
>  > > >
>  > > > The load you apply does not load the cache, which is a source of
>  > > > jitter. You should run the cache calibrator (I do not find the cache
>  > > > calibrator URL, but it is somewhere in Xenomai distribution or wiki).
>  > > 
>  > > It is in the TROUBLESHOOTING guide, question "How do I adequately stress test".
>  > > 
>  > > -- 
>  > >                                                Gilles Chanteperdrix
>  > 
>  > Thanks Gilles, I've done more tests using the cache calibrator from
>  > http://www.cwi.nl/~manegold/Calibrator. The latency numbers are very
>  > similar althought I've found an strange behaviour related to telnet
>  > sessions.
>  > 
>  > Environment:
>  > 	o Tests running from console over atmel serial port.
>  > 	o A telnet session over on-chip ethernet. 
>  >         o System without load.
>  > 
>  > ./latency -p 500 -t0
>  > == All results in microseconds
>  > warming up...
>  > RTT|  00:00:01  (periodic user-mode task, 500 us period, priority 99)
>  > RTH|-RTH----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat
>  > worst
>  > RTD|      49.613|      52.190|      62.822|       0|      49.613| 62.822
>  > RTD|      42.203|      52.512|      66.365|       0|      42.203| 66.365
>  > 
>  > 
>  > Now If hit a key on the telnet session :
>  > 
>  > RTD|      36.726|      57.989|     109.536|       0|      31.572| 109.536  <-------- Here I've hit the key.
>  > RTD|      36.404|      51.868|      69.587|       0|      31.572| 109.536
>  > RTD|      35.760|      51.868|      73.775|       0|      31.572| 109.536
>  > 
>  > Now, I launch an script which executes four instances of cache
>  > calibrator.
>  > 
>  > RTD|      45.103|      57.667|      75.708|       0|      32.538| 122.422
>  > RTD|      45.425|      57.023|      76.030|       0|      32.538| 122.422
>  > RTD|      46.069|      57.023|      75.708|       0|      32.538| 122.422
>  > 
>  > Now, I can hit a key on the telnet session without effects over latency
>  > numbers:
>  > 
>  > RTD|      44.136|      57.989|      75.386|       0|      27.384| 128.221
>  > RTD|      46.713|      57.345|      76.353|       0|      27.384| 128.221
>  > RTD|      44.780|      57.345|      76.675|       0|      27.384| 128.221
>  > RTD|      43.492|      56.701|      76.997|       0|      27.384| 128.221
>  > 
>  > Now I stop the calibrator process and launch 'ping -f -s2048 192.168.2.82' from an external
>  > machine.
>  > 
>  > RTD|      40.270|      68.621|      90.850|       0|      27.384| 128.221
>  > RTD|      36.082|      68.621|      88.273|       0|      27.384| 128.221
>  > RTD|      40.592|      67.976|      91.494|       0|      27.384| 128.221
>  > RTD|      41.237|      68.298|      89.239|       0|      27.384| 128.221
>  > 
>  > 
>  > Now If hit a key on the telnet session :
>  > 
>  > RTD|      42.203|      67.976|      88.273|       0|      27.384| 128.221
>  > RTD|      32.216|      93.427|     128.543|       0|      27.384| 128.543 <---------- Here I've hit the key.
>  > RTD|      42.203|      68.298|      87.628|       0|      27.384| 128.543
>  > 
>  > And again the calibrator execution results on eliminate the strange
>  > behaviour whith the telnet session.
>  > 
>  > Any clues ?
> 
> Here is an update, follow-up on xenomai-core. I was finally able to
> reproduce this behaviour: I run latency in the background and hit the
> "Enter" key on my serial console, and get high latency figures.
> 
> I enabled the tracer, set xenomai latency to 300us and managed to get a
> trace (220us latency). However, I do not understand what is going wrong
> from reading the trace, so I post it here in case someone sees something.
> 
> Ah, and I added an ipipe_trace_special in ipipe_grab_irq to log the
> number of the received irq. 1 is serial interrupt 18 (0x12) is timer
> interrupt.
> 
> Inline, so that Jan can comment it.

Thanks, but TB is too "smart" - it cuts off everything that is marked as
footer ("--"). :-/

> I-pipe frozen back-tracing service on 2.6.20/ipipe-1.8-04
> ------------------------------------------------------------
> CPU: 0, Freeze: 450692973 cycles, Trace Points: 1000 (+10)
> Calibrated minimum trace-point overhead: 1.000 us

That is interesting. I tells us that we might subtract 1 us
_per_tracepoint_ from the given latencies due to the inherent tracer
overhead. We have about 50 entries in the critical path, so 50 us
compared to 220 us that were measured - roughly 170 us real latency.

What is the clock resolution btw? 500 ns?

So here is the interesting block, starting with the last larger IRQs-on
window.

> :   + func                -447+   2.500  xnshadow_relax+0x14 (hisyscall_event+0x210)
> :|  + begin   0x80000000  -445+   3.000  xnshadow_relax+0xd4 (hisyscall_event+0x210)
> :|  # func                -442+   5.000  schedule_linux_call+0x10 (xnshadow_relax+0x114)
> :|  # func                -437+   4.000  rthal_apc_schedule+0x10 (schedule_linux_call+0x1e8)
> :|  # func                -433+   5.000  __ipipe_schedule_irq+0x10 (rthal_apc_schedule+0xac)
> :|  # func                -428+   4.500  __ipipe_set_irq_pending+0x10 (__ipipe_schedule_irq+0xa4)
> :|  # func                -423+   3.500  rpi_push+0x14 (xnshadow_relax+0x11c)
> :|  # func                -420+   5.500  xnpod_suspend_thread+0x14 (xnshadow_relax+0x148)
> :|  # func                -414+   4.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
> :|  # [  752] -<?>-    0  -410+   7.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
> :|  # func                -403!  56.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
> :|  # [    0] -<?>-   -1  -347!  20.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
> :|   +func                -327+   3.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
> :|   +func                -324+   7.500  __ipipe_sync_stage+0x14 (__ipipe_walk_pipeline+0xa8)
> :|   #end     0x80000000  -317+   7.000  __ipipe_sync_stage+0x250 (__ipipe_walk_pipeline+0xa8)

OK, the clock starts ticking...

> :|   #func                -310+   2.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
> :|   #begin   0xffffffff  -307+   7.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
> :|   #(0x2a)  0x00000012  -300+   5.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
> :|   #func                -295+   4.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
> :|   #func                -291+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
> :|   #func                -289+   3.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
> :|   #func                -286+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
> :|   #func                -284+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)

(Without looking at the arm code: Is this double invocation of
at91_aic_mask_irq correct and required?)

> :|   #func                -282+   4.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
> :|   #func                -278+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
> :|   #func                -276+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
> :|   #func                -273+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
> :|  #*func                -270+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
> :|  #*func                -266+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
> :|  #*func                -257+   3.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
> :|  #*func                -253+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
> :|  #*[  753] -<?>-   99  -249!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)

Hmm, comparably costly, this simple resume. Hope it's not the
instrumentation (ipipe_trace_pid?) itself.

> :|  #*func                -234+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
> :|  #*func                -228+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
> :|  #*func                -224+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
> :|  #*[    0] -<?>-   -1  -220!  59.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)

OK, this is the cache flushing thing, I guess. Expected.

> :|  #*[  753] -<?>-   99  -161!  17.500  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)

Again this peak. Strange.

> :|  #*func                -143+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
> :|  #*func                -139+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
> :|  +*end     0x80000000  -135+   7.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)

So we woke up the thread and are on the way back to userland. But then
the serial IRQ hits us...

> :|  +*func                -128+   3.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
> :|  +*begin   0xffffffff  -125+   7.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
> :|  +*(0x2a)  0x00000001  -118+   4.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
> :|  +*func                -114+   5.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
> :|  +*func                -109+   4.500  __ipipe_set_irq_pending+0x10 (__ipipe_handle_irq+0xdc)
> :|  +*func                -105+   2.000  __ipipe_ack_irq+0x10 (__ipipe_handle_irq+0xfc)
> :|  +*func                -103+   3.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_irq+0x28)
> :|  +*func                -100+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
> :|  +*func                 -97+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
> :|  +*func                 -95+   3.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)

Serial done, the above 30 us (minus tracer overhead) are unavoidable.

> :|  +*end     0xffffffff   -92!  10.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
> :|  +*begin   0x80000001   -81+   4.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)

This is the syscall epilogue related to wait_thread_period.

> :|  +*end     0x80000001   -77!  39.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
> :   +*func                 -38+   2.500  __ipipe_syscall_root+0x10 (vector_swi+0x68)

After doing some latency calculation in user land, we are back to freeze
the trace now.

> :   +*func                 -35+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
> :|  +*begin   0x80000001   -33+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
> :|  +*end     0x80000001   -29+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
> :   +*func                 -27+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
> :   +*func                 -21+   2.500  xnshadow_sys_trace+0x10 (hisyscall_event+0x150)
> :   +*func                 -18+   2.000  ipipe_trace_frozen_reset+0x10 (xnshadow_sys_trace+0x98)
> :   +*func                 -16+   2.000  __ipipe_global_path_lock+0x10 (ipipe_trace_frozen_reset+0x14)
> :   +*func                 -14+   2.000  __ipipe_spin_lock_irqsave+0x10 (__ipipe_global_path_lock+0x18)
> :|  +*begin   0x80000001   -12+   8.000  __ipipe_spin_lock_irqsave+0x34 (__ipipe_global_path_lock+0x18)
> :|  #*func                  -4+   2.500  __ipipe_spin_unlock_irqcomplete+0x10 (__ipipe_global_path_unlock+0x6c)
> :|  +*end     0x80000001    -2+   2.000  __ipipe_spin_unlock_irqcomplete+0x4c (__ipipe_global_path_unlock+0x6c)
> <   +*freeze  0x00035ea1     0    2.500  xnshadow_sys_trace+0xa4 (hisyscall_event+0x150)

So, all in all, nothing fishy, at least here. Any IRQ (actually even
multiple!) can hit us between wakeup and latency calculation, and this
happened here due to sending some characters over the serial console.
Plus we see the cache flushing overhead when switching processes, also
normal.

I would just check those small peaks around ipipe_trace_pid, if they are
just tracing related) (e.g. by disabling those instrumentations in the
nucleus).

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-core] [Xenomai-help] AT91SAM9260 latency
  2008-02-11 13:41         ` Jan Kiszka
@ 2008-02-11 14:05           ` Gilles Chanteperdrix
  2008-02-11 17:11             ` Jan Kiszka
  2008-02-12  7:04           ` Gilles Chanteperdrix
  1 sibling, 1 reply; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-02-11 14:05 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: jagarcia, xenomai

On Mon, Feb 11, 2008 at 2:41 PM, Jan Kiszka <jan.kiszka@domain.hid> wrote:
>
> Gilles Chanteperdrix wrote:
>  > Juan Antonio Garcia Redondo wrote:
>  >  > On 23/01/08 14:15, Gilles Chanteperdrix wrote:
>  >  > > On Jan 23, 2008 11:04 AM, Gilles Chanteperdrix
>  >  > > <gilles.chanteperdrix@xenomai.org> wrote:
>  >  > > > On Jan 23, 2008 7:52 AM, Juan Antonio Garcia Redondo
>  >  > > >
>  >  > > > <juan-antonio.garcia@domain.hid> wrote:
>  >  > > > > I see everything OK except for the first samples of cyclictests. Any comments ?
>  >  > > >
>  >  > > > The load you apply does not load the cache, which is a source of
>  >  > > > jitter. You should run the cache calibrator (I do not find the cache
>  >  > > > calibrator URL, but it is somewhere in Xenomai distribution or wiki).
>  >  > >
>  >  > > It is in the TROUBLESHOOTING guide, question "How do I adequately stress test".
>  >  > >
>  >  > > --
>  >  > >                                                Gilles Chanteperdrix
>  >  >
>  >  > Thanks Gilles, I've done more tests using the cache calibrator from
>  >  > http://www.cwi.nl/~manegold/Calibrator. The latency numbers are very
>  >  > similar althought I've found an strange behaviour related to telnet
>  >  > sessions.
>  >  >
>  >  > Environment:
>  >  >    o Tests running from console over atmel serial port.
>  >  >    o A telnet session over on-chip ethernet.
>  >  >         o System without load.
>  >  >
>  >  > ./latency -p 500 -t0
>  >  > == All results in microseconds
>  >  > warming up...
>  >  > RTT|  00:00:01  (periodic user-mode task, 500 us period, priority 99)
>  >  > RTH|-RTH----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat
>  >  > worst
>  >  > RTD|      49.613|      52.190|      62.822|       0|      49.613| 62.822
>  >  > RTD|      42.203|      52.512|      66.365|       0|      42.203| 66.365
>  >  >
>  >  >
>  >  > Now If hit a key on the telnet session :
>  >  >
>  >  > RTD|      36.726|      57.989|     109.536|       0|      31.572| 109.536  <-------- Here I've hit the key.
>  >  > RTD|      36.404|      51.868|      69.587|       0|      31.572| 109.536
>  >  > RTD|      35.760|      51.868|      73.775|       0|      31.572| 109.536
>  >  >
>  >  > Now, I launch an script which executes four instances of cache
>  >  > calibrator.
>  >  >
>  >  > RTD|      45.103|      57.667|      75.708|       0|      32.538| 122.422
>  >  > RTD|      45.425|      57.023|      76.030|       0|      32.538| 122.422
>  >  > RTD|      46.069|      57.023|      75.708|       0|      32.538| 122.422
>  >  >
>  >  > Now, I can hit a key on the telnet session without effects over latency
>  >  > numbers:
>  >  >
>  >  > RTD|      44.136|      57.989|      75.386|       0|      27.384| 128.221
>  >  > RTD|      46.713|      57.345|      76.353|       0|      27.384| 128.221
>  >  > RTD|      44.780|      57.345|      76.675|       0|      27.384| 128.221
>  >  > RTD|      43.492|      56.701|      76.997|       0|      27.384| 128.221
>  >  >
>  >  > Now I stop the calibrator process and launch 'ping -f -s2048 192.168.2.82' from an external
>  >  > machine.
>  >  >
>  >  > RTD|      40.270|      68.621|      90.850|       0|      27.384| 128.221
>  >  > RTD|      36.082|      68.621|      88.273|       0|      27.384| 128.221
>  >  > RTD|      40.592|      67.976|      91.494|       0|      27.384| 128.221
>  >  > RTD|      41.237|      68.298|      89.239|       0|      27.384| 128.221
>  >  >
>  >  >
>  >  > Now If hit a key on the telnet session :
>  >  >
>  >  > RTD|      42.203|      67.976|      88.273|       0|      27.384| 128.221
>  >  > RTD|      32.216|      93.427|     128.543|       0|      27.384| 128.543 <---------- Here I've hit the key.
>  >  > RTD|      42.203|      68.298|      87.628|       0|      27.384| 128.543
>  >  >
>  >  > And again the calibrator execution results on eliminate the strange
>  >  > behaviour whith the telnet session.
>  >  >
>  >  > Any clues ?
>  >
>  > Here is an update, follow-up on xenomai-core. I was finally able to
>  > reproduce this behaviour: I run latency in the background and hit the
>  > "Enter" key on my serial console, and get high latency figures.
>  >
>  > I enabled the tracer, set xenomai latency to 300us and managed to get a
>  > trace (220us latency). However, I do not understand what is going wrong
>  > from reading the trace, so I post it here in case someone sees something.
>  >
>  > Ah, and I added an ipipe_trace_special in ipipe_grab_irq to log the
>  > number of the received irq. 1 is serial interrupt 18 (0x12) is timer
>  > interrupt.
>  >
>  > Inline, so that Jan can comment it.
>
>  Thanks, but TB is too "smart" - it cuts off everything that is marked as
>  footer ("--"). :-/
>
>
>  > I-pipe frozen back-tracing service on 2.6.20/ipipe-1.8-04
>  > ------------------------------------------------------------
>  > CPU: 0, Freeze: 450692973 cycles, Trace Points: 1000 (+10)
>  > Calibrated minimum trace-point overhead: 1.000 us
>
>  That is interesting. I tells us that we might subtract 1 us
>  _per_tracepoint_ from the given latencies due to the inherent tracer
>  overhead. We have about 50 entries in the critical path, so 50 us
>  compared to 220 us that were measured - roughly 170 us real latency.
>
>  What is the clock resolution btw? 500 ns?

It should be around 1us. A bit less. I think the frequency is 92 MHz /
64. Anyway, I checked once and the I-pipe rounding is really
approximative, it is equivalent to rounding frequency to 2 MHz.

>
>  So here is the interesting block, starting with the last larger IRQs-on
>  window.
>
>
>  > :   + func                -447+   2.500  xnshadow_relax+0x14 (hisyscall_event+0x210)
>  > :|  + begin   0x80000000  -445+   3.000  xnshadow_relax+0xd4 (hisyscall_event+0x210)
>  > :|  # func                -442+   5.000  schedule_linux_call+0x10 (xnshadow_relax+0x114)
>  > :|  # func                -437+   4.000  rthal_apc_schedule+0x10 (schedule_linux_call+0x1e8)
>  > :|  # func                -433+   5.000  __ipipe_schedule_irq+0x10 (rthal_apc_schedule+0xac)
>  > :|  # func                -428+   4.500  __ipipe_set_irq_pending+0x10 (__ipipe_schedule_irq+0xa4)
>  > :|  # func                -423+   3.500  rpi_push+0x14 (xnshadow_relax+0x11c)
>  > :|  # func                -420+   5.500  xnpod_suspend_thread+0x14 (xnshadow_relax+0x148)
>  > :|  # func                -414+   4.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
>  > :|  # [  752] -<?>-    0  -410+   7.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
>  > :|  # func                -403!  56.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
>  > :|  # [    0] -<?>-   -1  -347!  20.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
>  > :|   +func                -327+   3.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
>  > :|   +func                -324+   7.500  __ipipe_sync_stage+0x14 (__ipipe_walk_pipeline+0xa8)
>  > :|   #end     0x80000000  -317+   7.000  __ipipe_sync_stage+0x250 (__ipipe_walk_pipeline+0xa8)
>
>  OK, the clock starts ticking...
>
>
>  > :|   #func                -310+   2.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
>  > :|   #begin   0xffffffff  -307+   7.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
>  > :|   #(0x2a)  0x00000012  -300+   5.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
>  > :|   #func                -295+   4.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
>  > :|   #func                -291+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
>  > :|   #func                -289+   3.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
>  > :|   #func                -286+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
>  > :|   #func                -284+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
>
>  (Without looking at the arm code: Is this double invocation of
>  at91_aic_mask_irq correct and required?)

No, and I do not see where it is coming from.

>
>
>  > :|   #func                -282+   4.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
>  > :|   #func                -278+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
>  > :|   #func                -276+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
>  > :|   #func                -273+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
>  > :|  #*func                -270+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
>  > :|  #*func                -266+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
>  > :|  #*func                -257+   3.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
>  > :|  #*func                -253+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
>  > :|  #*[  753] -<?>-   99  -249!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
>
>  Hmm, comparably costly, this simple resume. Hope it's not the
>  instrumentation (ipipe_trace_pid?) itself.
>
>
>  > :|  #*func                -234+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
>  > :|  #*func                -228+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
>  > :|  #*func                -224+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
>  > :|  #*[    0] -<?>-   -1  -220!  59.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
>
>  OK, this is the cache flushing thing, I guess. Expected.

Yes, I took care of disabling the (still recent) irqs unmasking in
xnpod_schedule. So, we see the cache flushing with irqs disabled.

>
>
>  > :|  #*[  753] -<?>-   99  -161!  17.500  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
>
>  Again this peak. Strange.
>
>
>  > :|  #*func                -143+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
>  > :|  #*func                -139+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
>  > :|  +*end     0x80000000  -135+   7.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
>
>  So we woke up the thread and are on the way back to userland. But then
>  the serial IRQ hits us...
>
>
>  > :|  +*func                -128+   3.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
>  > :|  +*begin   0xffffffff  -125+   7.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
>  > :|  +*(0x2a)  0x00000001  -118+   4.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
>  > :|  +*func                -114+   5.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
>  > :|  +*func                -109+   4.500  __ipipe_set_irq_pending+0x10 (__ipipe_handle_irq+0xdc)
>  > :|  +*func                -105+   2.000  __ipipe_ack_irq+0x10 (__ipipe_handle_irq+0xfc)
>  > :|  +*func                -103+   3.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_irq+0x28)
>  > :|  +*func                -100+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
>  > :|  +*func                 -97+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
>  > :|  +*func                 -95+   3.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
>
>  Serial done, the above 30 us (minus tracer overhead) are unavoidable.
>
>
>  > :|  +*end     0xffffffff   -92!  10.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
>  > :|  +*begin   0x80000001   -81+   4.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
>
>  This is the syscall epilogue related to wait_thread_period.

Is it normal to see the hw irqs disabled here ?

>
>
>  > :|  +*end     0x80000001   -77!  39.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
>  > :   +*func                 -38+   2.500  __ipipe_syscall_root+0x10 (vector_swi+0x68)
>
>  After doing some latency calculation in user land, we are back to freeze
>  the trace now.
>
>
>  > :   +*func                 -35+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
>  > :|  +*begin   0x80000001   -33+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
>  > :|  +*end     0x80000001   -29+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
>  > :   +*func                 -27+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
>  > :   +*func                 -21+   2.500  xnshadow_sys_trace+0x10 (hisyscall_event+0x150)
>  > :   +*func                 -18+   2.000  ipipe_trace_frozen_reset+0x10 (xnshadow_sys_trace+0x98)
>  > :   +*func                 -16+   2.000  __ipipe_global_path_lock+0x10 (ipipe_trace_frozen_reset+0x14)
>  > :   +*func                 -14+   2.000  __ipipe_spin_lock_irqsave+0x10 (__ipipe_global_path_lock+0x18)
>  > :|  +*begin   0x80000001   -12+   8.000  __ipipe_spin_lock_irqsave+0x34 (__ipipe_global_path_lock+0x18)
>  > :|  #*func                  -4+   2.500  __ipipe_spin_unlock_irqcomplete+0x10 (__ipipe_global_path_unlock+0x6c)
>  > :|  +*end     0x80000001    -2+   2.000  __ipipe_spin_unlock_irqcomplete+0x4c (__ipipe_global_path_unlock+0x6c)
>  > <   +*freeze  0x00035ea1     0    2.500  xnshadow_sys_trace+0xa4 (hisyscall_event+0x150)
>
>  So, all in all, nothing fishy, at least here. Any IRQ (actually even
>  multiple!) can hit us between wakeup and latency calculation, and this
>  happened here due to sending some characters over the serial console.
>  Plus we see the cache flushing overhead when switching processes, also
>  normal.

The problem is that the nucleus latency is calibrated to 300 us (which
is very high), and that we get a 220us latency, which means that it
took 500us going from the timer interrupt to the xntrace syscall.

>
>  I would just check those small peaks around ipipe_trace_pid, if they are
>  just tracing related) (e.g. by disabling those instrumentations in the
>  nucleus).

Will try that.

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-core] [Xenomai-help] AT91SAM9260 latency
  2008-02-11 14:05           ` Gilles Chanteperdrix
@ 2008-02-11 17:11             ` Jan Kiszka
  2008-02-11 21:30               ` Gilles Chanteperdrix
  2008-02-11 22:36               ` Gilles Chanteperdrix
  0 siblings, 2 replies; 27+ messages in thread
From: Jan Kiszka @ 2008-02-11 17:11 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: jagarcia, xenomai

Gilles Chanteperdrix wrote:
> On Mon, Feb 11, 2008 at 2:41 PM, Jan Kiszka <jan.kiszka@domain.hid> wrote:
>> Gilles Chanteperdrix wrote:
>>  > Juan Antonio Garcia Redondo wrote:
>>  >  > On 23/01/08 14:15, Gilles Chanteperdrix wrote:
>>  >  > > On Jan 23, 2008 11:04 AM, Gilles Chanteperdrix
>>  >  > > <gilles.chanteperdrix@xenomai.org> wrote:
>>  >  > > > On Jan 23, 2008 7:52 AM, Juan Antonio Garcia Redondo
>>  >  > > >
>>  >  > > > <juan-antonio.garcia@domain.hid> wrote:
>>  >  > > > > I see everything OK except for the first samples of cyclictests. Any comments ?
>>  >  > > >
>>  >  > > > The load you apply does not load the cache, which is a source of
>>  >  > > > jitter. You should run the cache calibrator (I do not find the cache
>>  >  > > > calibrator URL, but it is somewhere in Xenomai distribution or wiki).
>>  >  > >
>>  >  > > It is in the TROUBLESHOOTING guide, question "How do I adequately stress test".
>>  >  > >
>>  >  > > --
>>  >  > >                                                Gilles Chanteperdrix
>>  >  >
>>  >  > Thanks Gilles, I've done more tests using the cache calibrator from
>>  >  > http://www.cwi.nl/~manegold/Calibrator. The latency numbers are very
>>  >  > similar althought I've found an strange behaviour related to telnet
>>  >  > sessions.
>>  >  >
>>  >  > Environment:
>>  >  >    o Tests running from console over atmel serial port.
>>  >  >    o A telnet session over on-chip ethernet.
>>  >  >         o System without load.
>>  >  >
>>  >  > ./latency -p 500 -t0
>>  >  > == All results in microseconds
>>  >  > warming up...
>>  >  > RTT|  00:00:01  (periodic user-mode task, 500 us period, priority 99)
>>  >  > RTH|-RTH----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat
>>  >  > worst
>>  >  > RTD|      49.613|      52.190|      62.822|       0|      49.613| 62.822
>>  >  > RTD|      42.203|      52.512|      66.365|       0|      42.203| 66.365
>>  >  >
>>  >  >
>>  >  > Now If hit a key on the telnet session :
>>  >  >
>>  >  > RTD|      36.726|      57.989|     109.536|       0|      31.572| 109.536  <-------- Here I've hit the key.
>>  >  > RTD|      36.404|      51.868|      69.587|       0|      31.572| 109.536
>>  >  > RTD|      35.760|      51.868|      73.775|       0|      31.572| 109.536
>>  >  >
>>  >  > Now, I launch an script which executes four instances of cache
>>  >  > calibrator.
>>  >  >
>>  >  > RTD|      45.103|      57.667|      75.708|       0|      32.538| 122.422
>>  >  > RTD|      45.425|      57.023|      76.030|       0|      32.538| 122.422
>>  >  > RTD|      46.069|      57.023|      75.708|       0|      32.538| 122.422
>>  >  >
>>  >  > Now, I can hit a key on the telnet session without effects over latency
>>  >  > numbers:
>>  >  >
>>  >  > RTD|      44.136|      57.989|      75.386|       0|      27.384| 128.221
>>  >  > RTD|      46.713|      57.345|      76.353|       0|      27.384| 128.221
>>  >  > RTD|      44.780|      57.345|      76.675|       0|      27.384| 128.221
>>  >  > RTD|      43.492|      56.701|      76.997|       0|      27.384| 128.221
>>  >  >
>>  >  > Now I stop the calibrator process and launch 'ping -f -s2048 192.168.2.82' from an external
>>  >  > machine.
>>  >  >
>>  >  > RTD|      40.270|      68.621|      90.850|       0|      27.384| 128.221
>>  >  > RTD|      36.082|      68.621|      88.273|       0|      27.384| 128.221
>>  >  > RTD|      40.592|      67.976|      91.494|       0|      27.384| 128.221
>>  >  > RTD|      41.237|      68.298|      89.239|       0|      27.384| 128.221
>>  >  >
>>  >  >
>>  >  > Now If hit a key on the telnet session :
>>  >  >
>>  >  > RTD|      42.203|      67.976|      88.273|       0|      27.384| 128.221
>>  >  > RTD|      32.216|      93.427|     128.543|       0|      27.384| 128.543 <---------- Here I've hit the key.
>>  >  > RTD|      42.203|      68.298|      87.628|       0|      27.384| 128.543
>>  >  >
>>  >  > And again the calibrator execution results on eliminate the strange
>>  >  > behaviour whith the telnet session.
>>  >  >
>>  >  > Any clues ?
>>  >
>>  > Here is an update, follow-up on xenomai-core. I was finally able to
>>  > reproduce this behaviour: I run latency in the background and hit the
>>  > "Enter" key on my serial console, and get high latency figures.
>>  >
>>  > I enabled the tracer, set xenomai latency to 300us and managed to get a
>>  > trace (220us latency). However, I do not understand what is going wrong
>>  > from reading the trace, so I post it here in case someone sees something.
>>  >
>>  > Ah, and I added an ipipe_trace_special in ipipe_grab_irq to log the
>>  > number of the received irq. 1 is serial interrupt 18 (0x12) is timer
>>  > interrupt.
>>  >
>>  > Inline, so that Jan can comment it.
>>
>>  Thanks, but TB is too "smart" - it cuts off everything that is marked as
>>  footer ("--"). :-/
>>
>>
>>  > I-pipe frozen back-tracing service on 2.6.20/ipipe-1.8-04
>>  > ------------------------------------------------------------
>>  > CPU: 0, Freeze: 450692973 cycles, Trace Points: 1000 (+10)
>>  > Calibrated minimum trace-point overhead: 1.000 us
>>
>>  That is interesting. I tells us that we might subtract 1 us
>>  _per_tracepoint_ from the given latencies due to the inherent tracer
>>  overhead. We have about 50 entries in the critical path, so 50 us
>>  compared to 220 us that were measured - roughly 170 us real latency.
>>
>>  What is the clock resolution btw? 500 ns?
> 
> It should be around 1us. A bit less. I think the frequency is 92 MHz /
> 64. Anyway, I checked once and the I-pipe rounding is really
> approximative, it is equivalent to rounding frequency to 2 MHz.
> 
>>  So here is the interesting block, starting with the last larger IRQs-on
>>  window.
>>
>>
>>  > :   + func                -447+   2.500  xnshadow_relax+0x14 (hisyscall_event+0x210)
>>  > :|  + begin   0x80000000  -445+   3.000  xnshadow_relax+0xd4 (hisyscall_event+0x210)
>>  > :|  # func                -442+   5.000  schedule_linux_call+0x10 (xnshadow_relax+0x114)
>>  > :|  # func                -437+   4.000  rthal_apc_schedule+0x10 (schedule_linux_call+0x1e8)
>>  > :|  # func                -433+   5.000  __ipipe_schedule_irq+0x10 (rthal_apc_schedule+0xac)
>>  > :|  # func                -428+   4.500  __ipipe_set_irq_pending+0x10 (__ipipe_schedule_irq+0xa4)
>>  > :|  # func                -423+   3.500  rpi_push+0x14 (xnshadow_relax+0x11c)
>>  > :|  # func                -420+   5.500  xnpod_suspend_thread+0x14 (xnshadow_relax+0x148)
>>  > :|  # func                -414+   4.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
>>  > :|  # [  752] -<?>-    0  -410+   7.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
>>  > :|  # func                -403!  56.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)
>>  > :|  # [    0] -<?>-   -1  -347!  20.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
>>  > :|   +func                -327+   3.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
>>  > :|   +func                -324+   7.500  __ipipe_sync_stage+0x14 (__ipipe_walk_pipeline+0xa8)
>>  > :|   #end     0x80000000  -317+   7.000  __ipipe_sync_stage+0x250 (__ipipe_walk_pipeline+0xa8)
>>
>>  OK, the clock starts ticking...
>>
>>
>>  > :|   #func                -310+   2.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
>>  > :|   #begin   0xffffffff  -307+   7.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
>>  > :|   #(0x2a)  0x00000012  -300+   5.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
>>  > :|   #func                -295+   4.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
>>  > :|   #func                -291+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
>>  > :|   #func                -289+   3.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
>>  > :|   #func                -286+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
>>  > :|   #func                -284+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
>>
>>  (Without looking at the arm code: Is this double invocation of
>>  at91_aic_mask_irq correct and required?)
> 
> No, and I do not see where it is coming from.
> 
>>
>>  > :|   #func                -282+   4.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
>>  > :|   #func                -278+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
>>  > :|   #func                -276+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
>>  > :|   #func                -273+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
>>  > :|  #*func                -270+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
>>  > :|  #*func                -266+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
>>  > :|  #*func                -257+   3.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
>>  > :|  #*func                -253+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
>>  > :|  #*[  753] -<?>-   99  -249!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
>>
>>  Hmm, comparably costly, this simple resume. Hope it's not the
>>  instrumentation (ipipe_trace_pid?) itself.
>>
>>
>>  > :|  #*func                -234+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
>>  > :|  #*func                -228+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
>>  > :|  #*func                -224+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
>>  > :|  #*[    0] -<?>-   -1  -220!  59.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
>>
>>  OK, this is the cache flushing thing, I guess. Expected.
> 
> Yes, I took care of disabling the (still recent) irqs unmasking in
> xnpod_schedule. So, we see the cache flushing with irqs disabled.
> 
>>
>>  > :|  #*[  753] -<?>-   99  -161!  17.500  xnpod_schedule+0xb14 (xnpod_suspend_thread+0x60c)
>>
>>  Again this peak. Strange.
>>
>>
>>  > :|  #*func                -143+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
>>  > :|  #*func                -139+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
>>  > :|  +*end     0x80000000  -135+   7.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
>>
>>  So we woke up the thread and are on the way back to userland. But then
>>  the serial IRQ hits us...
>>
>>
>>  > :|  +*func                -128+   3.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
>>  > :|  +*begin   0xffffffff  -125+   7.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
>>  > :|  +*(0x2a)  0x00000001  -118+   4.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
>>  > :|  +*func                -114+   5.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
>>  > :|  +*func                -109+   4.500  __ipipe_set_irq_pending+0x10 (__ipipe_handle_irq+0xdc)
>>  > :|  +*func                -105+   2.000  __ipipe_ack_irq+0x10 (__ipipe_handle_irq+0xfc)
>>  > :|  +*func                -103+   3.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_irq+0x28)
>>  > :|  +*func                -100+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
>>  > :|  +*func                 -97+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
>>  > :|  +*func                 -95+   3.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
>>
>>  Serial done, the above 30 us (minus tracer overhead) are unavoidable.
>>
>>
>>  > :|  +*end     0xffffffff   -92!  10.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
>>  > :|  +*begin   0x80000001   -81+   4.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
>>
>>  This is the syscall epilogue related to wait_thread_period.
> 
> Is it normal to see the hw irqs disabled here ?

They were likely only disabled at the instrumentation point, but were
enabled shortly afterwards - just to be disabled again.

> 
>>
>>  > :|  +*end     0x80000001   -77!  39.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
>>  > :   +*func                 -38+   2.500  __ipipe_syscall_root+0x10 (vector_swi+0x68)
>>
>>  After doing some latency calculation in user land, we are back to freeze
>>  the trace now.
>>
>>
>>  > :   +*func                 -35+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
>>  > :|  +*begin   0x80000001   -33+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
>>  > :|  +*end     0x80000001   -29+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
>>  > :   +*func                 -27+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
>>  > :   +*func                 -21+   2.500  xnshadow_sys_trace+0x10 (hisyscall_event+0x150)
>>  > :   +*func                 -18+   2.000  ipipe_trace_frozen_reset+0x10 (xnshadow_sys_trace+0x98)
>>  > :   +*func                 -16+   2.000  __ipipe_global_path_lock+0x10 (ipipe_trace_frozen_reset+0x14)
>>  > :   +*func                 -14+   2.000  __ipipe_spin_lock_irqsave+0x10 (__ipipe_global_path_lock+0x18)
>>  > :|  +*begin   0x80000001   -12+   8.000  __ipipe_spin_lock_irqsave+0x34 (__ipipe_global_path_lock+0x18)
>>  > :|  #*func                  -4+   2.500  __ipipe_spin_unlock_irqcomplete+0x10 (__ipipe_global_path_unlock+0x6c)
>>  > :|  +*end     0x80000001    -2+   2.000  __ipipe_spin_unlock_irqcomplete+0x4c (__ipipe_global_path_unlock+0x6c)
>>  > <   +*freeze  0x00035ea1     0    2.500  xnshadow_sys_trace+0xa4 (hisyscall_event+0x150)
>>
>>  So, all in all, nothing fishy, at least here. Any IRQ (actually even
>>  multiple!) can hit us between wakeup and latency calculation, and this
>>  happened here due to sending some characters over the serial console.
>>  Plus we see the cache flushing overhead when switching processes, also
>>  normal.
> 
> The problem is that the nucleus latency is calibrated to 300 us (which
> is very high), and that we get a 220us latency, which means that it
> took 500us going from the timer interrupt to the xntrace syscall.

There is a shadow relax procedure running before the timer IRQ fires,
and that takes another context switch. So the latency sum is:

 - unrelated context switch
 - timer IRQ
 - switch to woken up RT process
 - serial IRQ

Almost the theoretical worst case.

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-core] [Xenomai-help] AT91SAM9260 latency
  2008-02-11 17:11             ` Jan Kiszka
@ 2008-02-11 21:30               ` Gilles Chanteperdrix
  2008-02-11 22:36               ` Gilles Chanteperdrix
  1 sibling, 0 replies; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-02-11 21:30 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: jagarcia, xenomai

Jan Kiszka wrote:
 > There is a shadow relax procedure running before the timer IRQ fires,
 > and that takes another context switch. So the latency sum is:
 > 
 >  - unrelated context switch
 >  - timer IRQ
 >  - switch to woken up RT process
 >  - serial IRQ
 > 
 > Almost the theoretical worst case.

The problem is that it does not happen when launching latency with -t 1
or -t 2, or if latency is not run in the background.

Anyway, I will investigate on the double ack issue, because it could
mean that there is a double EOI, which, I guess could cause some
troubles at interrupt controller level.

-- 


					    Gilles Chanteperdrix.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-core] [Xenomai-help] AT91SAM9260 latency
  2008-02-11 17:11             ` Jan Kiszka
  2008-02-11 21:30               ` Gilles Chanteperdrix
@ 2008-02-11 22:36               ` Gilles Chanteperdrix
  1 sibling, 0 replies; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-02-11 22:36 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: jagarcia, xenomai

Jan Kiszka wrote:
 > There is a shadow relax procedure running before the timer IRQ fires,
 > and that takes another context switch. So the latency sum is:
 > 
 >  - unrelated context switch
 >  - timer IRQ
 >  - switch to woken up RT process
 >  - serial IRQ
 > 
 > Almost the theoretical worst case.

Here is another trace, I get traces similar to this one everytime I
capture the effect of hitting the "enter" key while latency is running
in the background. On this one, we can measure that the timer ticks
every 720 pseudo us (since latency is launched with -p 1000, so we see
that the I-pipe rounding is very approximative), except for the last
tick which is around 100us late, without a serial interrupt. We see a
strange spot around -415.

RTS|      65.972|     106.250|     415.277|       0|    00:00:14/00:00:14
# cat /proc/ipipe/trace/frozen
I-pipe frozen back-tracing service on 2.6.20/ipipe-1.8-04
------------------------------------------------------------
CPU: 0, Freeze: 112815123 cycles, Trace Points: 1000 (+10)
Calibrated minimum trace-point overhead: 1.000 us

 +----- Hard IRQs ('|': locked)
 |+---- <unused>
 ||+--- <unused>
 |||+-- Xenomai
 ||||+- Linux ('*': domain stalled, '+': current, '#': current+stalled)
 |||||                        +---------- Delay flag ('+': > 1 us, '!': > 10 us)
 |||||                        |        +- NMI noise ('N')
 |||||                        |        |
      Type    User Val.   Time    Delay  Function (Parent)
:   + func               -10974+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -10972+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -10968+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -10966+   7.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -10959+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -10957+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -10955+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -10952+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -10949+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -10944+   2.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -10942+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -10937!  51.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -10885!  20.000  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -10865+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -10858+   3.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -10855+   4.500  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -10850+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -10847+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -10841+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -10838+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -10836+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -10833+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -10832+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -10830+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -10828+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -10827! 381.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -10446+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -10444+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -10442+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -10437+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -10435+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -10432+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -10430+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -10427+   2.000  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -10425+   4.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -10421+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -10420+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -10417+   4.000  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -10413+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -10410+   5.500  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -10405+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -10402+   3.500  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -10398+   8.000  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -10390+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -10384+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -10380+   3.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -10377!  52.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -10324!  18.000  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -10306+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -10302+   4.500  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -10298!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -10286+   7.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -10279!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -10258+   3.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -10255+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -10253+   3.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -10249+   2.500  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -10247+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -10240+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -10238+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -10236+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -10233+   3.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -10230+   4.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -10225+   2.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -10223+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -10218!  51.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -10166!  19.500  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -10147+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -10140+   3.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -10137+   5.000  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -10132+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -10129+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -10123+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -10120+   3.000  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -10117+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -10115    1.000  default_idle+0x64 (cpu_idle+0x58)
:    #func               -10114+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -10112+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -10110+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -10108! 382.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -9726+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -9724+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -9722+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -9717+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -9715+   3.000  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -9712+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -9709+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -9707+   2.000  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -9705+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -9701+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -9699+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -9697+   4.000  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -9693+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -9690+   6.000  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -9684+   2.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -9681+   3.500  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -9678+   9.500  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -9668+   6.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -9662+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -9658+   2.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -9655!  53.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -9602!  18.000  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -9584+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -9580+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -9576!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -9564+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -9556!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -9536+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -9533+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -9531+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -9527+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -9525+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -9518+   2.500  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -9516+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -9513+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -9511+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -9508+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -9503+   2.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -9500+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -9495!  51.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -9444!  16.500  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|  # func               -9427+   2.500  rthal_irq_host_pend+0x10 (xnintr_clock_handler+0xbc)
:|  # func               -9425+   4.000  __ipipe_schedule_irq+0x10 (rthal_irq_host_pend+0x20)
:|  # func               -9421+   7.500  __ipipe_set_irq_pending+0x10 (__ipipe_schedule_irq+0xa4)
:|   +func               -9413+   4.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +func               -9409+   7.000  __ipipe_sync_stage+0x14 (__ipipe_walk_pipeline+0xa8)
:|   #end     0x80000000 -9402+   2.500  __ipipe_sync_stage+0x250 (__ipipe_walk_pipeline+0xa8)
:    #func               -9400+   3.500  asm_do_IRQ+0x10 (__ipipe_sync_stage+0x284)
:    #func               -9396+   2.000  handle_level_irq+0x10 (asm_do_IRQ+0x50)
:    #func               -9394+   2.500  _spin_lock+0x10 (handle_level_irq+0x24)
:    #func               -9392+   3.000  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -9389+   5.000  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -9384+   2.500  _spin_unlock+0x10 (handle_level_irq+0x88)
:    #func               -9381+   3.000  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -9378+   2.000  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:    #func               -9376+   3.000  handle_IRQ_event+0x10 (handle_level_irq+0x94)
:    #func               -9373+   5.500  at91_timer_interrupt+0x10 (handle_IRQ_event+0x3c)
:    #func               -9368+   1.500  _spin_lock+0x10 (at91_timer_interrupt+0x1c)
:    #func               -9366+   2.000  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -9364+   3.500  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -9361+   2.000  timer_tick+0x10 (at91_timer_interrupt+0x50)
:    #func               -9359+   6.500  profile_tick+0x10 (timer_tick+0x18)
:    #func               -9352+   6.500  do_timer+0x14 (timer_tick+0xe0)
:    #func               -9346+   7.500  current_tick_length+0x10 (do_timer+0x144)
:    #func               -9338+   2.500  update_process_times+0x10 (timer_tick+0xfc)
:    #func               -9336+   5.000  account_system_time+0x10 (update_process_times+0x44)
:    #func               -9331+   2.000  run_local_timers+0x10 (update_process_times+0x48)
:    #func               -9329+   2.500  raise_softirq+0x10 (run_local_timers+0x18)
:|   #begin   0x80000001 -9326+   2.000  raise_softirq+0x34 (run_local_timers+0x18)
:|   #end     0x80000001 -9324+   3.500  raise_softirq+0x54 (run_local_timers+0x18)
:    #func               -9321+   2.000  __ipipe_restore_root+0x10 (raise_softirq+0xb4)
:|   #begin   0x80000001 -9319+   2.000  __ipipe_restore_root+0x38 (raise_softirq+0xb4)
:|   #end     0x80000001 -9317+   2.500  __ipipe_restore_root+0x58 (raise_softirq+0xb4)
:    #func               -9314+   4.500  softlockup_tick+0x14 (run_local_timers+0x1c)
:    #func               -9310+   2.500  rcu_pending+0x10 (update_process_times+0x50)
:    #func               -9307+   3.000  __rcu_pending+0x10 (rcu_pending+0x1c)
:    #func               -9304+   3.500  __rcu_pending+0x10 (rcu_pending+0x34)
:    #func               -9301+   1.500  scheduler_tick+0x10 (update_process_times+0x64)
:    #func               -9299+   4.500  sched_clock+0x10 (scheduler_tick+0x14)
:    #func               -9295+   4.500  run_posix_cpu_timers+0x14 (update_process_times+0x6c)
:    #func               -9290+   1.500  _spin_unlock+0x10 (at91_timer_interrupt+0xc0)
:    #func               -9289+   1.500  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -9287+   3.000  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:|   #begin   0x80000001 -9284+   2.000  handle_IRQ_event+0x84 (handle_level_irq+0x94)
:|   #end     0x80000001 -9282+   2.500  handle_IRQ_event+0xa4 (handle_level_irq+0x94)
:    #func               -9280+   3.500  note_interrupt+0x14 (handle_level_irq+0xb0)
:    #func               -9276+   1.500  _spin_lock+0x10 (handle_level_irq+0xb8)
:    #func               -9275+   1.500  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -9273+   3.000  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -9270+   2.500  at91_aic_unmask_irq+0x10 (handle_level_irq+0xe4)
:    #func               -9268+   1.500  _spin_unlock+0x10 (handle_level_irq+0xec)
:    #func               -9266+   1.500  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -9265+   2.500  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:    #func               -9262+   2.500  irq_exit+0x10 (asm_do_IRQ+0x54)
:    #func               -9260+   3.000  __do_softirq+0x10 (irq_exit+0x44)
:    #func               -9257+   1.500  __ipipe_unstall_root+0x10 (__do_softirq+0x40)
:|   #begin   0x80000000 -9255+   2.000  __ipipe_unstall_root+0x30 (__do_softirq+0x40)
:|   +end     0x80000000 -9253+   3.000  __ipipe_unstall_root+0x64 (__do_softirq+0x40)
:    +func               -9250+   3.000  run_timer_softirq+0x14 (__do_softirq+0x58)
:    +func               -9247+   5.500  hrtimer_run_queues+0x10 (run_timer_softirq+0x24)
:    +func               -9242+   2.000  _spin_lock_irq+0x10 (run_timer_softirq+0x40)
:|   +begin   0x80000001 -9240+   2.500  _spin_lock_irq+0x34 (run_timer_softirq+0x40)
:|   #end     0x80000001 -9237+   1.500  _spin_lock_irq+0x54 (run_timer_softirq+0x40)
:    #func               -9236+   1.500  ipipe_check_context+0x10 (_spin_lock_irq+0x60)
:    #func               -9234+   4.500  _raw_spin_lock+0x14 (_spin_lock_irq+0x68)
:    #func               -9230+   1.500  _spin_unlock_irq+0x10 (run_timer_softirq+0x1ac)
:    #func               -9228+   2.000  _raw_spin_unlock+0x10 (_spin_unlock_irq+0x14)
:    #func               -9226+   1.500  __ipipe_unstall_root+0x10 (_spin_unlock_irq+0x18)
:|   #begin   0x80000000 -9225+   2.000  __ipipe_unstall_root+0x30 (_spin_unlock_irq+0x18)
:|   +end     0x80000000 -9223+   2.000  __ipipe_unstall_root+0x64 (_spin_unlock_irq+0x18)
:    +func               -9221+   2.000  ipipe_check_context+0x10 (_spin_unlock_irq+0x20)
:|   +begin   0x80000001 -9219+   2.000  __do_softirq+0x90 (irq_exit+0x44)
:|   #end     0x80000001 -9217+   2.500  __do_softirq+0xb0 (irq_exit+0x44)
:    #func               -9214+   3.000  _local_bh_enable+0x10 (__do_softirq+0xe8)
:    #func               -9211+   2.500  ipipe_check_context+0x10 (irq_exit+0x4c)
:|   #begin   0x80000000 -9209+   5.500  __ipipe_sync_stage+0x31c (__ipipe_walk_pipeline+0xa8)
:|   +end     0xffffffff -9203+   2.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -9201+   4.500  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -9196+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -9195+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -9193+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -9190+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -9188+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -9185+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -9184+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -9182+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -9180+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -9178! 172.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -9006+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -9004+   2.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -9002+   4.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -8998+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -8995+   2.000  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -8993+   2.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -8991+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -8989+   2.000  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -8987+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -8983+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -8981+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -8979+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -8975+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -8972+   6.000  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -8966+   2.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -8964+   3.000  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -8961+   8.500  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -8952+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -8946+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -8942+   3.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -8939!  57.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -8881!  18.500  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -8863+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -8859+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -8855!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -8843+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -8835!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -8815+   3.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -8811+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -8809+   3.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -8806+   2.500  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -8803+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -8797+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -8795+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -8792+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -8790+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -8787+   4.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -8782+   3.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -8779+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -8774!  51.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -8723!  20.000  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -8703+   7.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -8696+   3.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -8692+   4.500  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -8688+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -8685+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -8679+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -8676+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -8673+   2.000  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -8671+   2.000  default_idle+0x64 (cpu_idle+0x58)
:    #func               -8669+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -8668+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -8666+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -8664! 378.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -8286+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -8284+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -8282+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -8278+   3.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -8275+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -8272+   2.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -8270+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -8268+   2.500  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -8265+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -8262+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -8260+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -8257+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -8254+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -8250+   5.500  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -8245+   2.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -8242+   3.500  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -8239+   8.500  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -8230+   6.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -8224+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -8220+   3.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -8217!  53.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -8164!  18.500  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -8145+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -8141+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -8137!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -8125+   7.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -8118!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -8098+   3.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -8094+   1.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -8093+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -8089+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -8087+   7.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -8080+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -8078+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -8075+   2.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -8073+   3.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -8070+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -8065+   2.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -8062+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -8057!  51.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -8006!  20.000  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -7986+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -7979+   3.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -7976+   5.000  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -7971+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -7968+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -7962+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -7959+   3.000  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -7956+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -7954+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -7952+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -7951+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -7949+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -7947! 382.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -7565+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -7564+   2.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -7561+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -7557+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -7554+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -7552+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -7549+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -7547+   2.000  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -7545+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -7541+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -7539+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -7537+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -7533+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -7530+   5.500  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -7524+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -7521+   3.000  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -7518+   8.500  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -7510+   7.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -7503+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -7499+   2.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -7496!  53.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -7443!  18.000  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -7425+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -7421+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -7417!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -7405+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -7398!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -7377+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -7374+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -7372+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -7368+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -7366+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -7360+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -7358+   3.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -7355+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -7352+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -7349+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -7344+   2.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -7342+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -7337!  51.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -7286!  20.000  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -7266+   7.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -7258+   3.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -7255+   4.500  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -7251+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -7248+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -7242+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -7239+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -7236+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -7234+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -7232+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -7230+   1.500  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -7229+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -7227! 381.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -6846+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -6844+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -6842+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -6838+   3.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -6835+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -6832+   2.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -6830+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -6828+   2.500  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -6825+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -6822+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -6820+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -6817+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -6814+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -6810+   5.500  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -6805+   2.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -6802+   3.500  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -6799+   8.500  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -6790+   6.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -6784+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -6780+   3.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -6777!  52.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -6725!  18.500  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -6706+   4.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -6702+   4.500  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -6697!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -6685+   7.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -6678!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -6658+   3.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -6654+   1.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -6653+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -6649+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -6647+   7.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -6640+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -6638+   2.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -6636+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -6633+   3.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -6630+   4.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -6625+   3.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -6622+   4.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -6618!  52.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -6566!  20.000  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -6546+   6.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -6539+   3.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -6536+   4.500  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -6531+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -6528+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -6522+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -6519+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -6517+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -6514+   2.000  default_idle+0x64 (cpu_idle+0x58)
:    #func               -6512+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -6510+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -6508+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -6507! 381.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -6126+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -6124+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -6122+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -6117+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -6115+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -6112+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -6110+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -6107+   2.000  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -6105+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -6102+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -6100+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -6097+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -6094+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -6090+   5.500  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -6085+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -6082+   3.000  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -6079+   8.500  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -6070+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -6064+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -6059+   2.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -6057!  53.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -6004!  18.500  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -5985+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -5981+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -5977!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -5965+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -5958!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -5937+   3.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -5934+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -5932+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -5928+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -5926+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -5919+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -5917+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -5915+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -5912+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -5909+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -5904+   3.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -5901+   4.500  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -5897!  51.500  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -5845!  19.500  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -5826+   7.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -5818+   3.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -5815+   5.000  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -5810+   2.500  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -5808+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -5802+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -5799+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -5796+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -5794+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -5792+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -5790+   1.500  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -5789+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -5787! 381.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -5406+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -5404+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -5402+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -5397+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -5395+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -5392+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -5390+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -5387+   2.000  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -5385+   4.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -5381+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -5380+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -5377+   4.000  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -5373+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -5370+   5.500  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -5364+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -5361+   3.500  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -5358+   8.000  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -5350+   6.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -5344+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -5339+   3.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -5336!  53.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -5283!  18.000  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -5265+   4.500  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -5261+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -5257!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -5245+   7.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -5238!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -5217+   3.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -5213+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -5211+   3.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -5208+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -5206+   7.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -5199+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -5197+   2.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -5195+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -5192+   3.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -5189+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -5184+   2.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -5181+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -5176!  51.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -5125!  20.000  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -5105+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -5098+   3.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -5095+   5.000  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -5090+   2.500  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -5088+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -5082+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -5079+   3.000  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -5076+   2.000  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -5074+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -5072+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -5070+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -5068+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -5067! 381.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -4686+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -4684+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -4682+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -4677+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -4675+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -4672+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -4670+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -4667+   2.000  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -4665+   4.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -4661+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -4660+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -4657+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -4653+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -4650+   5.500  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -4645+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -4642+   3.000  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -4639+   8.500  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -4630+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -4624+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -4620+   3.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -4617!  52.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -4564!  18.500  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -4546+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -4542+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -4538!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -4526+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -4519!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -4498+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -4495+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -4493+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -4489+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -4487+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -4481+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -4479+   3.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -4476+   2.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -4474+   3.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -4470+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -4465+   2.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -4463+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -4458!  51.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -4407!  20.000  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -4387+   7.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -4379+   3.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -4376+   4.500  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -4372+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -4369+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -4363+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -4360+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -4357+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -4355+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -4353+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -4352+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -4350+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -4348! 382.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -3966+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -3964+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -3962+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -3958+   3.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -3955+   3.000  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -3952+   2.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -3950+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -3947+   2.500  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -3945+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -3941+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -3940+   3.000  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -3937+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -3933+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -3930+   5.500  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -3924+   2.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -3922+   3.500  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -3918+   8.500  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -3910+   6.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -3904+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -3899+   3.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -3896!  53.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -3843!  18.500  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -3825+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -3821+   4.500  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -3816!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -3805+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -3797!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -3777+   3.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -3773+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -3771+   3.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -3768+   2.500  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -3765+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -3759+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -3757+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -3754+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -3752+   3.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -3748+   4.500  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -3744+   3.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -3741+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -3736!  51.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -3685!  20.000  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -3665+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -3658+   3.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -3654+   4.500  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -3650+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -3647+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -3641+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -3638+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -3635+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -3633+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -3631+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -3630+   2.500  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -3627+   1.500  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -3626! 380.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -3245+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -3244+   2.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -3241+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -3237+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -3234+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -3232+   2.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -3230+   3.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -3227+   2.000  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -3225+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -3221+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -3219+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -3217+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -3213+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -3210+   6.000  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -3204+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -3201+   3.000  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -3198+   8.500  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -3189+   6.000  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -3183+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -3179+   2.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -3176!  53.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -3123!  18.000  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -3105+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -3101+   4.500  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -3097!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -3085+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -3078!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -3057+   3.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -3054+   1.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -3052+   4.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -3048+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -3046+   7.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -3039+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -3037+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -3034+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -3032+   3.000  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -3029+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -3024+   3.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -3021+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -3016!  51.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -2965!  20.000  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -2945+   7.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -2938+   3.000  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -2935+   4.500  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -2930+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -2927+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -2921+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -2918+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -2916+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -2913+   2.000  default_idle+0x64 (cpu_idle+0x58)
:    #func               -2911+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -2910+   1.500  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -2908+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -2906! 380.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -2526+   1.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -2525+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -2523+   5.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -2518+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -2515+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -2513+   2.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -2511+   3.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -2508+   2.000  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -2506+   4.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -2502+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -2500+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -2498+   4.000  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -2494+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -2491+   5.500  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -2485+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -2482+   3.500  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -2479+   9.000  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -2470+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -2463+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -2459+   3.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -2456!  53.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -2403!  18.000  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -2385+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -2381+   4.500  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -2376!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -2364+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -2357!  20.500  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -2336+   3.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -2333+   1.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -2331+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -2327+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -2325+   7.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -2318+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -2316+   2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -2314+   2.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -2312+   3.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -2308+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -2303+   2.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -2301+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -2296!  52.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -2244!  16.500  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|  # func               -2227+   2.000  rthal_irq_host_pend+0x10 (xnintr_clock_handler+0xbc)
:|  # func               -2225+   4.000  __ipipe_schedule_irq+0x10 (rthal_irq_host_pend+0x20)
:|  # func               -2221+   8.000  __ipipe_set_irq_pending+0x10 (__ipipe_schedule_irq+0xa4)
:|   +func               -2213+   3.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +func               -2210+   6.500  __ipipe_sync_stage+0x14 (__ipipe_walk_pipeline+0xa8)
:|   #end     0x80000000 -2203+   3.500  __ipipe_sync_stage+0x250 (__ipipe_walk_pipeline+0xa8)
:    #func               -2200+   3.000  asm_do_IRQ+0x10 (__ipipe_sync_stage+0x284)
:    #func               -2197+   2.000  handle_level_irq+0x10 (asm_do_IRQ+0x50)
:    #func               -2195+   2.500  _spin_lock+0x10 (handle_level_irq+0x24)
:    #func               -2192+   3.000  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -2189+   6.000  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -2183+   1.500  _spin_unlock+0x10 (handle_level_irq+0x88)
:    #func               -2182+   3.000  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -2179+   2.500  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:    #func               -2176+   2.500  handle_IRQ_event+0x10 (handle_level_irq+0x94)
:    #func               -2174+   6.000  at91_timer_interrupt+0x10 (handle_IRQ_event+0x3c)
:    #func               -2168+   1.500  _spin_lock+0x10 (at91_timer_interrupt+0x1c)
:    #func               -2166+   1.500  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -2165+   3.500  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -2161+   2.500  timer_tick+0x10 (at91_timer_interrupt+0x50)
:    #func               -2159+   6.500  profile_tick+0x10 (timer_tick+0x18)
:    #func               -2152+   6.500  do_timer+0x14 (timer_tick+0xe0)
:    #func               -2146+   7.500  current_tick_length+0x10 (do_timer+0x144)
:    #func               -2138+   2.500  update_process_times+0x10 (timer_tick+0xfc)
:    #func               -2136+   4.500  account_system_time+0x10 (update_process_times+0x44)
:    #func               -2131+   2.000  run_local_timers+0x10 (update_process_times+0x48)
:    #func               -2129+   3.500  raise_softirq+0x10 (run_local_timers+0x18)
:|   #begin   0x80000001 -2126+   2.000  raise_softirq+0x34 (run_local_timers+0x18)
:|   #end     0x80000001 -2124+   3.500  raise_softirq+0x54 (run_local_timers+0x18)
:    #func               -2120+   2.000  __ipipe_restore_root+0x10 (raise_softirq+0xb4)
:|   #begin   0x80000001 -2118+   2.500  __ipipe_restore_root+0x38 (raise_softirq+0xb4)
:|   #end     0x80000001 -2116+   2.000  __ipipe_restore_root+0x58 (raise_softirq+0xb4)
:    #func               -2114+   4.500  softlockup_tick+0x14 (run_local_timers+0x1c)
:    #func               -2109+   2.500  rcu_pending+0x10 (update_process_times+0x50)
:    #func               -2107+   3.500  __rcu_pending+0x10 (rcu_pending+0x1c)
:    #func               -2103+   3.000  __rcu_pending+0x10 (rcu_pending+0x34)
:    #func               -2100+   1.500  scheduler_tick+0x10 (update_process_times+0x64)
:    #func               -2099+   4.500  sched_clock+0x10 (scheduler_tick+0x14)
:    #func               -2094+   5.000  run_posix_cpu_timers+0x14 (update_process_times+0x6c)
:    #func               -2089+   1.500  _spin_unlock+0x10 (at91_timer_interrupt+0xc0)
:    #func               -2088+   1.500  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -2086+   3.000  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:|   #begin   0x80000001 -2083+   2.000  handle_IRQ_event+0x84 (handle_level_irq+0x94)
:|   #end     0x80000001 -2081+   2.000  handle_IRQ_event+0xa4 (handle_level_irq+0x94)
:    #func               -2079+   3.500  note_interrupt+0x14 (handle_level_irq+0xb0)
:    #func               -2076+   1.500  _spin_lock+0x10 (handle_level_irq+0xb8)
:    #func               -2074+   1.500  ipipe_check_context+0x10 (_spin_lock+0x1c)
:    #func               -2073+   3.000  _raw_spin_lock+0x14 (_spin_lock+0x24)
:    #func               -2070+   2.500  at91_aic_unmask_irq+0x10 (handle_level_irq+0xe4)
:    #func               -2067+   1.500  _spin_unlock+0x10 (handle_level_irq+0xec)
:    #func               -2066+   1.500  _raw_spin_unlock+0x10 (_spin_unlock+0x14)
:    #func               -2064+   2.500  ipipe_check_context+0x10 (_spin_unlock+0x1c)
:    #func               -2062+   2.000  irq_exit+0x10 (asm_do_IRQ+0x54)
:    #func               -2060+   3.000  __do_softirq+0x10 (irq_exit+0x44)
:    #func               -2057+   2.000  __ipipe_unstall_root+0x10 (__do_softirq+0x40)
:|   #begin   0x80000000 -2055+   2.000  __ipipe_unstall_root+0x30 (__do_softirq+0x40)
:|   +end     0x80000000 -2053+   3.000  __ipipe_unstall_root+0x64 (__do_softirq+0x40)
:    +func               -2050+   2.500  run_timer_softirq+0x14 (__do_softirq+0x58)
:    +func               -2047+   5.500  hrtimer_run_queues+0x10 (run_timer_softirq+0x24)
:    +func               -2042+   2.000  _spin_lock_irq+0x10 (run_timer_softirq+0x40)
:|   +begin   0x80000001 -2040+   2.500  _spin_lock_irq+0x34 (run_timer_softirq+0x40)
:|   #end     0x80000001 -2037+   1.500  _spin_lock_irq+0x54 (run_timer_softirq+0x40)
:    #func               -2036+   2.000  ipipe_check_context+0x10 (_spin_lock_irq+0x60)
:    #func               -2034+   4.500  _raw_spin_lock+0x14 (_spin_lock_irq+0x68)
:    #func               -2029    1.000  _spin_unlock_irq+0x10 (run_timer_softirq+0x1ac)
:    #func               -2028+   2.000  _raw_spin_unlock+0x10 (_spin_unlock_irq+0x14)
:    #func               -2026+   1.500  __ipipe_unstall_root+0x10 (_spin_unlock_irq+0x18)
:|   #begin   0x80000000 -2025+   2.000  __ipipe_unstall_root+0x30 (_spin_unlock_irq+0x18)
:|   +end     0x80000000 -2023+   2.000  __ipipe_unstall_root+0x64 (_spin_unlock_irq+0x18)
:    +func               -2021+   2.000  ipipe_check_context+0x10 (_spin_unlock_irq+0x20)
:|   +begin   0x80000001 -2019+   2.500  __do_softirq+0x90 (irq_exit+0x44)
:|   #end     0x80000001 -2016+   2.500  __do_softirq+0xb0 (irq_exit+0x44)
:    #func               -2014+   2.500  _local_bh_enable+0x10 (__do_softirq+0xe8)
:    #func               -2011+   2.500  ipipe_check_context+0x10 (irq_exit+0x4c)
:|   #begin   0x80000000 -2009+   5.500  __ipipe_sync_stage+0x31c (__ipipe_walk_pipeline+0xa8)
:|   +end     0xffffffff -2003+   2.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -2001+   4.000  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -1997+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -1995+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -1993+   2.500  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -1991+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -1988+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -1986+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -1984+   2.000  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -1982+   1.500  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -1981+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -1979! 173.000  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -1806+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -1804+   1.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -1802+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -1798+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -1795+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -1793+   2.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -1791+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -1789+   2.500  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -1786+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -1783+   1.500  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -1781+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -1779+   4.000  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -1775+   2.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -1772+   5.500  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -1767+   2.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -1764+   3.500  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -1761+   8.000  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -1753+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -1746+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -1742+   2.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -1739!  58.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99 -1681!  18.500  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func               -1663+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func               -1659+   4.500  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000 -1654!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001 -1643+   7.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -1636!  21.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func               -1615+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func               -1612+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001 -1610+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001 -1606+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func               -1604+   7.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func               -1597+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func               -1595+   2.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func               -1593+   2.500  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000 -1590+   3.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func               -1587+   5.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func               -1582+   2.500  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99 -1579+   5.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func               -1574!  51.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1 -1523!  20.500  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func               -1503+   6.500  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +end     0xffffffff -1496+   3.500  __ipipe_grab_irq+0x110 (__irq_svc+0x28)
:|   +(0x2b)  0x00000001 -1493+   4.500  __ipipe_grab_irq+0x11c (__irq_svc+0x28)
:    +func               -1488+   3.000  __ipipe_unstall_root+0x10 (default_idle+0x90)
:|   +begin   0x80000000 -1485+   6.000  __ipipe_unstall_root+0x30 (default_idle+0x90)
:|   +end     0x80000000 -1479+   3.000  __ipipe_unstall_root+0x64 (default_idle+0x90)
:    +func               -1476+   2.500  default_idle+0x10 (cpu_idle+0x58)
:|   +begin   0x80000001 -1474+   2.500  default_idle+0x44 (cpu_idle+0x58)
:|   #end     0x80000001 -1471+   1.500  default_idle+0x64 (cpu_idle+0x58)
:    #func               -1470+   1.500  __ipipe_unstall_root+0x10 (default_idle+0x80)
:|   #begin   0x80000000 -1468+   2.000  __ipipe_unstall_root+0x30 (default_idle+0x80)
:|   +end     0x80000000 -1466+   2.000  __ipipe_unstall_root+0x64 (default_idle+0x80)
:    +end     0x8000000e -1464! 378.500  default_idle+0x88 (cpu_idle+0x58)
:|   +func               -1086+   2.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   +begin   0xffffffff -1084+   2.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   +(0x2a)  0x00000012 -1082+   4.500  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   +func               -1077+   2.500  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   +func               -1075+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   +func               -1072+   2.500  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   +func               -1070+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   +func               -1067+   2.000  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   +func               -1065+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   +func               -1062+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   +func               -1060+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   +func               -1057+   4.000  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  # func               -1053+   3.000  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  # func               -1050+   6.000  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  # func               -1044+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  # func               -1041+   3.000  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  # [  745] -<?>-   99 -1038+   8.000  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  # func               -1030+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  # func               -1024+   4.500  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  # func               -1019+   2.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  # [    0] -<?>-   -1 -1017!  52.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  # [  745] -<?>-   99  -964!  18.500  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func                -946+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  # func                -942+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  + end     0x80000000  -938!  12.000  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  + begin   0x80000001  -926+   7.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -918!  35.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func                -883+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func                -880+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001  -878+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -874+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func                -872+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func                -866+   4.500  __rt_sem_v+0x14 (hisyscall_event+0x150)
:   + func                -861+   2.000  xnregistry_fetch+0x10 (__rt_sem_v+0x60)
:|  + begin   0x80000000  -859+   4.000  xnregistry_fetch+0x34 (__rt_sem_v+0x60)
:|  # func                -855+   1.500  __ipipe_restore_pipeline_head+0x10 (xnregistry_fetch+0xfc)
:|  + end     0x80000000  -854+   2.500  __ipipe_restore_pipeline_head+0x11c (xnregistry_fetch+0xfc)
:   + func                -851+   2.000  rt_sem_v+0x10 (__rt_sem_v+0x70)
:|  + begin   0x80000000  -849+   3.500  rt_sem_v+0x38 (__rt_sem_v+0x70)
:|  # func                -846+   4.500  xnsynch_wakeup_one_sleeper+0x10 (rt_sem_v+0x8c)
:|  # func                -841+   3.500  xnpod_resume_thread+0x10 (xnsynch_wakeup_one_sleeper+0xd0)
:|  # [  744] -<?>-    0  -838+   6.500  xnpod_resume_thread+0x7c (xnsynch_wakeup_one_sleeper+0xd0)
:|  # func                -831+   3.000  xnpod_schedule+0x14 (rt_sem_v+0x98)
:|  # [  745] -<?>-   99  -828+   3.500  xnpod_schedule+0xc8 (rt_sem_v+0x98)
:|  # func                -825+   2.000  __ipipe_restore_pipeline_head+0x10 (rt_sem_v+0xd4)
:|  + end     0x80000000  -823+   2.000  __ipipe_restore_pipeline_head+0x11c (rt_sem_v+0xd4)
:|  + begin   0x80000001  -821+   2.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -819+   5.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func                -814+   1.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func                -812+   1.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001  -811+   2.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -808    1.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func                -807+   3.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func                -804+   2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
:   + func                -802+   2.000  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
:   + func                -800+   3.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
:|  + begin   0x80000000  -797+   3.500  xnpod_wait_thread_period+0x44 (rt_task_wait_period+0x44)
:|  # func                -794+   4.000  xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0xb8)
:|  # func                -790+   2.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  745] -<?>-   99  -788+   9.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # [  744] -<?>-    0  -779+   7.000  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  # func                -772+   1.500  __ipipe_restore_pipeline_head+0x10 (rt_sem_p+0x158)
:|  + end     0x80000000  -770+   5.000  __ipipe_restore_pipeline_head+0x11c (rt_sem_p+0x158)
:|  + begin   0x80000001  -765+   2.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -763! 355.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   + func                -408+   6.000  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   + func                -402+   3.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  + begin   0x80000001  -399+   6.500  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  + end     0x80000001  -392+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   + func                -390+   3.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   + func                -387+   2.000  xnshadow_relax+0x14 (hisyscall_event+0x210)
:|  + begin   0x80000000  -385+   2.500  xnshadow_relax+0x40 (hisyscall_event+0x210)
:|  # func                -382+   4.500  schedule_linux_call+0x10 (xnshadow_relax+0x80)
:|  # func                -378+   3.500  rthal_apc_schedule+0x10 (schedule_linux_call+0xb8)
:|  # func                -374+   4.500  __ipipe_schedule_irq+0x10 (rthal_apc_schedule+0xac)
:|  # func                -370+   5.000  __ipipe_set_irq_pending+0x10 (__ipipe_schedule_irq+0xa4)
:|  # func                -365+   5.000  xnpod_suspend_thread+0x14 (xnshadow_relax+0xac)
:|  # func                -360+   4.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x1d4)
:|  # [  744] -<?>-    0  -356+   4.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x1d4)
:|  # func                -352!  58.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x2ac)
:|  # [    0] -<?>-   -1  -294!  20.000  xnpod_schedule+0x590 (xnintr_clock_handler+0xa0)
:|   +func                -274+   4.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
:|   +func                -270+   7.500  __ipipe_sync_stage+0x14 (__ipipe_walk_pipeline+0xa8)
:|   #end     0x80000000  -262+   6.500  __ipipe_sync_stage+0x250 (__ipipe_walk_pipeline+0xa8)
:|   #func                -256+   3.000  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
:|   #begin   0xffffffff  -253+   6.500  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
:|   #(0x2a)  0x00000012  -246+   5.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
:|   #func                -241+   3.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
:|   #func                -238+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
:|   #func                -236+   3.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
:|   #func                -233+   2.500  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x30)
:|   #func                -230+   2.500  __ipipe_irq_finish+0x10 (__ipipe_ack_timerirq+0x38)
:|   #func                -228+   3.500  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x3c)
:|   #func                -224+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x4c)
:|   #func                -222+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
:|   #func                -220+   4.000  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
:|  #*func                -216+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
:|  #*func                -212+   6.000  xntimer_tick_aperiodic+0x10 (xnintr_clock_handler+0x34)
:|  #*func                -206+   3.000  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0xd8)
:|  #*func                -203+   3.500  xnpod_resume_thread+0x10 (xnthread_periodic_handler+0x34)
:|  #*[  745] -<?>-   99  -200+   8.000  xnpod_resume_thread+0x7c (xnthread_periodic_handler+0x34)
:|  #*func                -192+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258)
:|  #*func                -185+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
:|  #*func                -181+   3.000  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
:|  #*[    0] -<?>-   -1  -178!  53.000  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
:|  #*[  745] -<?>-   99  -125!  18.500  xnpod_schedule+0x590 (xnpod_suspend_thread+0x1d4)
:|  #*func                -107+   4.000  xntimer_get_overruns+0x14 (xnpod_wait_thread_period+0xe0)
:|  #*func                -103+   4.000  __ipipe_restore_pipeline_head+0x10 (xnpod_wait_thread_period+0x114)
:|  +*end     0x80000000   -99!  11.500  __ipipe_restore_pipeline_head+0x11c (xnpod_wait_thread_period+0x114)
:|  +*begin   0x80000001   -87+   8.000  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
:|  +*end     0x80000001   -79!  40.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
:   +*func                 -39+   3.000  __ipipe_syscall_root+0x10 (vector_swi+0x64)
:   +*func                 -36+   2.000  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
:|  +*begin   0x80000001   -34+   4.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
:|  +*end     0x80000001   -30+   2.000  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
:   +*func                 -28+   6.500  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
:   +*func                 -22+   2.500  xnshadow_sys_trace+0x10 (hisyscall_event+0x150)
:   +*func                 -19+   2.000  ipipe_trace_frozen_reset+0x10 (xnshadow_sys_trace+0x98)
:   +*func                 -17+   2.000  __ipipe_global_path_lock+0x10 (ipipe_trace_frozen_reset+0x14)
:   +*func                 -15+   2.000  __ipipe_spin_lock_irqsave+0x10 (__ipipe_global_path_lock+0x18)
:|  +*begin   0x80000001   -13+   8.000  __ipipe_spin_lock_irqsave+0x34 (__ipipe_global_path_lock+0x18)
:|  #*func                  -5+   3.000  __ipipe_spin_unlock_irqcomplete+0x10 (__ipipe_global_path_unlock+0x6c)
:|  +*end     0x80000001    -2+   2.500  __ipipe_spin_unlock_irqcomplete+0x4c (__ipipe_global_path_unlock+0x6c)
<   +*freeze  0x0006562d     0    2.500  xnshadow_sys_trace+0xa4 (hisyscall_event+0x150)
 |  +*begin   0x80000001     2    1.500  __ipipe_dispatch_event+0x108 (__ipipe_syscall_root+0x84)
 |  +*end     0x80000001     4    5.000  __ipipe_dispatch_event+0x1cc (__ipipe_syscall_root+0x84)
    +*func                   9    1.500  __ipipe_syscall_root+0x10 (vector_swi+0x64)
    +*func                  10    1.500  __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x84)
 |  +*begin   0x80000001    12    2.000  __ipipe_dispatch_event+0x40 (__ipipe_syscall_root+0x84)
 |  +*end     0x80000001    14    1.500  __ipipe_dispatch_event+0xc8 (__ipipe_syscall_root+0x84)
    +*func                  15    3.000  hisyscall_event+0x14 (__ipipe_dispatch_event+0xe0)
    +*func                  18    2.000  __rt_task_wait_period+0x14 (hisyscall_event+0x150)
    +*func                  20    2.500  rt_task_wait_period+0x10 (__rt_task_wait_period+0x24)
    +*func                  23    0.000  xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x44)
# 

-- 


					    Gilles Chanteperdrix.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-core] [Xenomai-help] AT91SAM9260 latency
  2008-02-11 13:41         ` Jan Kiszka
  2008-02-11 14:05           ` Gilles Chanteperdrix
@ 2008-02-12  7:04           ` Gilles Chanteperdrix
  2008-02-12  7:53             ` Gilles Chanteperdrix
  1 sibling, 1 reply; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-02-12  7:04 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: jagarcia, xenomai

Jan Kiszka wrote:
 > Gilles Chanteperdrix wrote:
 > > I-pipe frozen back-tracing service on 2.6.20/ipipe-1.8-04
 > > ------------------------------------------------------------
 > > CPU: 0, Freeze: 450692973 cycles, Trace Points: 1000 (+10)
 > > Calibrated minimum trace-point overhead: 1.000 us
 > 
 > That is interesting. I tells us that we might subtract 1 us
 > _per_tracepoint_ from the given latencies due to the inherent tracer
 > overhead. We have about 50 entries in the critical path, so 50 us
 > compared to 220 us that were measured - roughly 170 us real latency.
 > 
 > What is the clock resolution btw? 500 ns?
 > 
 > So here is the interesting block, starting with the last larger IRQs-on
 > window.
 > 
 > > :   + func                -447+   2.500  xnshadow_relax+0x14 (hisyscall_event+0x210)
 > > :|  + begin   0x80000000  -445+   3.000  xnshadow_relax+0xd4 (hisyscall_event+0x210)
 > > :|  # func                -442+   5.000  schedule_linux_call+0x10 (xnshadow_relax+0x114)
 > > :|  # func                -437+   4.000  rthal_apc_schedule+0x10 (schedule_linux_call+0x1e8)
 > > :|  # func                -433+   5.000  __ipipe_schedule_irq+0x10 (rthal_apc_schedule+0xac)
 > > :|  # func                -428+   4.500  __ipipe_set_irq_pending+0x10 (__ipipe_schedule_irq+0xa4)
 > > :|  # func                -423+   3.500  rpi_push+0x14 (xnshadow_relax+0x11c)
 > > :|  # func                -420+   5.500  xnpod_suspend_thread+0x14 (xnshadow_relax+0x148)
 > > :|  # func                -414+   4.000  xnpod_schedule+0x14 (xnpod_suspend_thread+0x60c)
 > > :|  # [  752] -<?>-    0  -410+   7.000  xnpod_schedule+0xc8 (xnpod_suspend_thread+0x60c)
 > > :|  # func                -403!  56.000  xnheap_finalize_free_inner+0x10 (xnpod_schedule+0x82c)

Ok, we get a cache flush here

 > > :|  # [    0] -<?>-   -1  -347!  20.000  xnpod_schedule+0xb14 (xnintr_clock_handler+0xa0)
 > > :|   +func                -327+   3.000  __ipipe_walk_pipeline+0x10 (__ipipe_handle_irq+0x124)
 > > :|   +func                -324+   7.500  __ipipe_sync_stage+0x14 (__ipipe_walk_pipeline+0xa8)
 > > :|   #end     0x80000000  -317+   7.000  __ipipe_sync_stage+0x250 (__ipipe_walk_pipeline+0xa8)
 > 
 > OK, the clock starts ticking...
 > 
 > > :|   #func                -310+   2.500  __ipipe_grab_irq+0x10 (__irq_svc+0x28)
 > > :|   #begin   0xffffffff  -307+   7.000  __ipipe_grab_irq+0x20 (__irq_svc+0x28)
 > > :|   #(0x2a)  0x00000012  -300+   5.000  __ipipe_grab_irq+0x2c (__irq_svc+0x28)
 > > :|   #func                -295+   4.000  __ipipe_handle_irq+0x10 (__ipipe_grab_irq+0x104)
 > > :|   #func                -291+   2.500  __ipipe_ack_timerirq+0x10 (__ipipe_handle_irq+0x74)
 > > :|   #func                -289+   3.000  __ipipe_ack_level_irq+0x10 (__ipipe_ack_timerirq+0x30)
 > > :|   #func                -286+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x3c)
 > > :|   #func                -284+   2.000  at91_aic_mask_irq+0x10 (__ipipe_ack_level_irq+0x4c)
 > 
 > (Without looking at the arm code: Is this double invocation of
 > at91_aic_mask_irq correct and required?)
 > 
 > > :|   #func                -282+   4.000  __ipipe_mach_acktimer+0x10 (__ipipe_ack_timerirq+0x40)
 > > :|   #func                -278+   2.000  __ipipe_end_level_irq+0x10 (__ipipe_ack_timerirq+0x50)
 > > :|   #func                -276+   2.500  at91_aic_unmask_irq+0x10 (__ipipe_end_level_irq+0x28)
 > > :|   #func                -273+   3.500  __ipipe_dispatch_wired+0x14 (__ipipe_handle_irq+0x80)
 > > :|  #*func                -270+   3.500  xnintr_clock_handler+0x10 (__ipipe_dispatch_wired+0xe4)
 > > :|  #*func                -266+   9.500  xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34)
 > > :|  #*func                -257+   3.500  xnthread_periodic_handler+0x10 (xntimer_tick_aperiodic+0x354)
 > > :|  #*func                -253+   4.000  xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x34)
 > > :|  #*[  753] -<?>-   99  -249!  15.000  xnpod_resume_thread+0x84 (xnthread_periodic_handler+0x34)
 > 
 > Hmm, comparably costly, this simple resume. Hope it's not the
 > instrumentation (ipipe_trace_pid?) itself.
 > 
 > > :|  #*func                -234+   6.500  xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x7c0)
 > > :|  #*func                -228+   4.000  __ipipe_mach_set_dec+0x10 (xntimer_next_local_shot+0xbc)
 > > :|  #*func                -224+   3.500  xnpod_schedule+0x14 (xnintr_clock_handler+0xa0)
 > > :|  #*[    0] -<?>-   -1  -220!  59.500  xnpod_schedule+0xc8 (xnintr_clock_handler+0xa0)
 > 
 > OK, this is the cache flushing thing, I guess. Expected.

And another here, whereas if I understand correctly, the mm did not
change. So, this is probably an unwanted effect of the cache flush
"optimization" in the arm patch.

I will now try to understand if this second cache flush is really normal.

-- 


					    Gilles Chanteperdrix.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Xenomai-core] [Xenomai-help] AT91SAM9260 latency
  2008-02-12  7:04           ` Gilles Chanteperdrix
@ 2008-02-12  7:53             ` Gilles Chanteperdrix
  0 siblings, 0 replies; 27+ messages in thread
From: Gilles Chanteperdrix @ 2008-02-12  7:53 UTC (permalink / raw)
  To: Jan Kiszka, Juan Antonio Garcia Redondo, jagarcia, xenomai

Gilles Chanteperdrix wrote:
 > 
 > And another here, whereas if I understand correctly, the mm did not
 > change. So, this is probably an unwanted effect of the cache flush
 > "optimization" in the arm patch.
 > 
 > I will now try to understand if this second cache flush is really normal.

Yes, it is normal: the first context switch, which xnshadow_relax does,
is a switch to whatever task Linux was running when preempted, not
necessarily latency (and it turns out to never be latency when we
capture the worst case) hence the first cache flush. We then re-interrupt
Linux after this context switch, and switch again to latency, and we get
a second cache flush.

So, the conclusion is: everything is normal. What we obtain when
pressing the enter key while latency is running in the background is a
wakeup of the shell process and this process uses cache, so that the
next latency context switches need to flush cache.

In other words: pressing the enter key yields the same latency as
running the cache calibrator because it has the same effect, it fills
the cache.

-- 


					    Gilles Chanteperdrix.


^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2008-02-12  7:53 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-23  6:52 [Xenomai-help] AT91SAM9260 latency Juan Antonio Garcia Redondo
2008-01-23 10:04 ` Gilles Chanteperdrix
2008-01-23 13:15   ` Gilles Chanteperdrix
2008-01-24  9:41     ` Juan Antonio Garcia Redondo
2008-01-24 10:02       ` Gilles Chanteperdrix
2008-01-25 10:04         ` Juan Antonio Garcia Redondo
2008-01-25 17:00           ` Gilles Chanteperdrix
2008-01-28  8:51             ` Juan Antonio Garcia Redondo
2008-01-28  9:21               ` Juan Antonio Garcia Redondo
2008-01-28 13:19               ` Gilles Chanteperdrix
2008-01-28 13:34                 ` Jan Kiszka
2008-01-28 13:35                   ` Gilles Chanteperdrix
2008-01-28 13:46                     ` Jan Kiszka
2008-01-28 13:51                       ` Gilles Chanteperdrix
2008-01-28 14:10                         ` Jan Kiszka
2008-01-29  8:09                 ` Juan Antonio Garcia Redondo
2008-01-29  8:35                   ` Gilles Chanteperdrix
2008-01-29 17:19                   ` Gilles Chanteperdrix
2008-01-30  9:03                     ` Juan Antonio Garcia Redondo
2008-02-10 20:31       ` [Xenomai-core] " Gilles Chanteperdrix
2008-02-11 13:41         ` Jan Kiszka
2008-02-11 14:05           ` Gilles Chanteperdrix
2008-02-11 17:11             ` Jan Kiszka
2008-02-11 21:30               ` Gilles Chanteperdrix
2008-02-11 22:36               ` Gilles Chanteperdrix
2008-02-12  7:04           ` Gilles Chanteperdrix
2008-02-12  7:53             ` Gilles Chanteperdrix

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.