Hi,

we all know that the latency test should not be run with a period of 100 us 
because it easily gets locked up. The attached trace illustrates this problem 
in detail. It shows that a timer interrupt needs about 50 us to be processed. 
Furthermore, there is not enough time between two timer interrupts for the 
latency task to get all its work done.

The current I-pipe tracer patch for ARM is available at 
http://opensource.emlix.com/ipipe-s3c24xx/download/ipipe-tracer-arm.patch_v4

Comments welcome.

--
Sebastian
# /testsuite/latency/latency -f -p 150
== Sampling period: 150 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT|  00:00:01  (periodic user-mode task, 150 us period, priority 99)
RTH|-----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat worst
RTD|      59.294|      89.882|     246.823|       1|      59.294|     252.941
RTD|      60.235|      90.705|     252.941|       2|      59.294|     252.941
RTD|      60.588|      90.117|     224.823|       2|      59.294|     252.941
RTD|      60.352|      90.352|     235.882|       2|      59.294|     252.941
RTD|      60.823|      90.235|     223.058|       2|      59.294|     252.941
RTD|      58.588|      90.352|     232.941|       2|      58.588|     252.941
RTD|      58.705|      90.235|     234.941|       2|      58.588|     252.941
RTD|      60.470|      90.352|     220.470|       2|      58.588|     252.941
RTD|      61.176|      90.117|     236.117|       2|      58.588|     252.941
RTD|      59.176|      90.352|     230.000|       2|      58.588|     252.941
RTD|      59.882|      90.235|     222.235|       2|      58.588|     252.941
RTD|      60.235|      90.352|     224.470|       2|      58.588|     252.941
RTD|      62.705|      90.235|     222.705|       2|      58.588|     252.941
---|------------|------------|------------|--------|-------------------------
RTS|      58.588|      90.235|     252.941|       2|    00:00:14/00:00:14

# cat frozen
I-pipe frozen back-tracing service on 2.6.15/ipipe-1.5-03
------------------------------------------------------------
Freeze: 1606645685 cycles, Trace Points: 110 (+10)

 +----- 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)
:|  +*end     0x80000001  -310+   2.000N __ipipe_dispatch_event+0xc4 
(__ipipe_syscall_root+0x88)
:   +*func                -308+   5.625N hisyscall_event+0x14 [xeno_nucleus] 
(__ipipe_dispatch_event+0xe0)
:   +*func                -303+   5.125N __rt_sem_v+0x14 [xeno_native] 
(hisyscall_event+0x160 [xeno_nucleus])
:   +*func                -297+   1.875N xnregistry_fetch+0x10 [xeno_nucleus] 
(__rt_sem_v+0x50 [xeno_native])
:|  +*begin   0x80000001  -296+   6.750  xnregistry_fetch+0x34 [xeno_nucleus] 
(__rt_sem_v+0x50 [xeno_native])
:|  #*func                -289+   3.000N __ipipe_restore_pipeline_head+0x10 
(xnregistry_fetch+0xec [xeno_nucleus])
:|  +*end     0x80000000  -286+   2.750N __ipipe_restore_pipeline_head+0x104 
(xnregistry_fetch+0xec [xeno_nucleus])
:   +*func                -283+   1.875N rt_sem_v+0x10 [xeno_native] 
(__rt_sem_v+0x60 [xeno_native])
:|  +*begin   0x80000001  -281+   4.625  rt_sem_v+0x38 [xeno_native] 
(__rt_sem_v+0x60 [xeno_native])
:|  #*func                -277+   5.875N xnsynch_wakeup_one_sleeper+0x10 
[xeno_nucleus] (rt_sem_v+0x80 [xeno_native])
:|  #*func                -271+   3.875N xnpod_resume_thread+0x10 
[xeno_nucleus] (xnsynch_wakeup_one_sleeper+0xc4 [xeno_nucleus])
:|  #*[  749] -<?>-    0  -267+   5.500N xnpod_resume_thread+0x70 
[xeno_nucleus] (xnsynch_wakeup_one_sleeper+0xc4 [xeno_nucleus])
:|  #*func                -261+   3.125N xnpod_schedule+0x14 [xeno_nucleus] 
(rt_sem_v+0x8c [xeno_native])
:|  #*[  750] -<?>-   99  -258+   3.750N xnpod_schedule+0xc8 [xeno_nucleus] 
(rt_sem_v+0x8c [xeno_native])
:|  #*func                -254+   2.000N __ipipe_restore_pipeline_head+0x10 
(rt_sem_v+0xbc [xeno_native])
:|  +*end     0x80000000  -252+   3.375N __ipipe_restore_pipeline_head+0x104 
(rt_sem_v+0xbc [xeno_native])
:|  +*begin   0x80000001  -249+   2.625  __ipipe_dispatch_event+0x10c 
(__ipipe_syscall_root+0x88)
:|  +*end     0x80000001  -246+   7.500N __ipipe_dispatch_event+0x1b0 
(__ipipe_syscall_root+0x88)
:   +*func                -239+   2.500N __ipipe_syscall_root+0x10 
(vector_swi+0x64)
:   +*func                -236+   1.875N __ipipe_dispatch_event+0x14 
(__ipipe_syscall_root+0x88)
:|  +*begin   0x80000001  -235+   2.500  __ipipe_dispatch_event+0x44 
(__ipipe_syscall_root+0x88)
:|  +*end     0x80000001  -232+   1.875N __ipipe_dispatch_event+0xc4 
(__ipipe_syscall_root+0x88)
:   +*func                -230+   4.875N hisyscall_event+0x14 [xeno_nucleus] 
(__ipipe_dispatch_event+0xe0)
:|  +*func                -225+   2.125N __ipipe_grab_irq+0x10 (__irq_svc+0x24)
:|  +*begin   0xffffffff  -223+   2.625  __ipipe_grab_irq+0x98 (__irq_svc+0x24)
:|  +*func                -221+   2.750N __ipipe_handle_irq+0x10 
(__ipipe_grab_irq+0xd0)
:|  +*func                -218+   2.125N __ipipe_ack_timerirq+0x10 
(__ipipe_handle_irq+0x8c)
:|  +*func                -216+   1.625N 
ipipe_test_and_stall_pipeline_from+0x10 (__ipipe_ack_timerirq+0x20)
:|  #*func                -214+   2.250N __ipipe_mach_acktimer+0x10 
(__ipipe_ack_timerirq+0x28)
:|  #*func                -212+   2.125N s3c_irq_ack+0x10 
(__ipipe_ack_timerirq+0x44)
:|  #*func                -210+   2.375N s3c_irq_unmask+0x10 
(__ipipe_ack_timerirq+0x50)
:|  +*func                -207+   1.875N __ipipe_dispatch_wired+0x10 
(__ipipe_handle_irq+0x98)
:|  #*func                -205+   2.375N xnintr_clock_handler+0x10 
[xeno_nucleus] (__ipipe_dispatch_wired+0xe0)
:|  #*func                -203+   2.125N xnintr_irq_handler+0x14 [xeno_nucleus] 
(xnintr_clock_handler+0x20 [xeno_nucleus])
:|  #*func                -201+   2.750N __ipipe_mach_get_tsc+0x10 
(xnintr_irq_handler+0x34 [xeno_nucleus])
:|  #*func                -198+   1.875N xnpod_announce_tick+0x10 
[xeno_nucleus] (xnintr_irq_handler+0x54 [xeno_nucleus])
:|  #*func                -196+   2.875N xntimer_do_tick_aperiodic+0x14 
[xeno_nucleus] (xnpod_announce_tick+0x20 [xeno_nucleus])
:|  #*func                -193+   2.375N __ipipe_mach_get_tsc+0x10 
(xntimer_do_tick_aperiodic+0x48 [xeno_nucleus])
:|  #*func                -191+   2.500N xnthread_periodic_handler+0x10 
[xeno_nucleus] (xntimer_do_tick_aperiodic+0xc0 [xeno_nucleus])
:|  #*func                -189+   2.125N __ipipe_mach_get_tsc+0x10 
(xntimer_do_tick_aperiodic+0x48 [xeno_nucleus])
:|  #*func                -186+   4.000N __ipipe_mach_get_tsc+0x10 
(xntimer_do_tick_aperiodic+0x204 [xeno_nucleus])
:|  #*func                -182+   5.000N __ipipe_mach_set_dec+0x14 
(xntimer_do_tick_aperiodic+0x2b8 [xeno_nucleus])
:|  #*func                -177+   2.375N __ipipe_mach_get_tsc+0x10 
(xnintr_irq_handler+0x14c [xeno_nucleus])
:|  #*func                -175+   2.250N __ipipe_mach_get_tsc+0x10 
(xnintr_irq_handler+0x180 [xeno_nucleus])
:|  +*func                -173+   2.250N __ipipe_walk_pipeline+0x10 
(__ipipe_handle_irq+0x1a8)
:|  +*end     0xffffffff  -171+   3.000N __ipipe_grab_irq+0xd8 (__irq_svc+0x24)
:   +*func                -168+   2.125N __rt_task_wait_period+0x14 
[xeno_native] (hisyscall_event+0x160 [xeno_nucleus])
:   +*func                -165+   2.125N rt_task_wait_period+0x10 [xeno_native] 
(__rt_task_wait_period+0x54 [xeno_native])
:   +*func                -163+   2.250N xnpod_wait_thread_period+0x14 
[xeno_nucleus] (rt_task_wait_period+0x54 [xeno_native])
:|  +*begin   0x80000001  -161+   2.625  xnpod_wait_thread_period+0x50 
[xeno_nucleus] (rt_task_wait_period+0x54 [xeno_native])
:|  #*func                -158+   4.375N __ipipe_mach_get_tsc+0x10 
(xnpod_wait_thread_period+0x84 [xeno_nucleus])
:|  #*func                -154+   1.750N __ipipe_restore_pipeline_head+0x10 
(xnpod_wait_thread_period+0x1c4 [xeno_nucleus])
:|  +*end     0x80000000  -152+   3.000N __ipipe_restore_pipeline_head+0x104 
(xnpod_wait_thread_period+0x1c4 [xeno_nucleus])
:|  +*begin   0x80000001  -149+   2.750  __ipipe_dispatch_event+0x10c 
(__ipipe_syscall_root+0x88)
:|  +*end     0x80000001  -147+   4.500N __ipipe_dispatch_event+0x1b0 
(__ipipe_syscall_root+0x88)
:   +*func                -142+   1.750N __ipipe_syscall_root+0x10 
(vector_swi+0x64)
:   +*func                -140+   1.875N __ipipe_dispatch_event+0x14 
(__ipipe_syscall_root+0x88)
:|  +*begin   0x80000001  -138+   2.875  __ipipe_dispatch_event+0x44 
(__ipipe_syscall_root+0x88)
:|  +*end     0x80000001  -136+   1.750N __ipipe_dispatch_event+0xc4 
(__ipipe_syscall_root+0x88)
:   +*func                -134+   2.500N hisyscall_event+0x14 [xeno_nucleus] 
(__ipipe_dispatch_event+0xe0)
:   +*func                -131+   2.000N __rt_timer_tsc+0x14 [xeno_native] 
(hisyscall_event+0x160 [xeno_nucleus])
:   +*func                -129+   1.875N rt_timer_tsc+0x10 [xeno_native] 
(__rt_timer_tsc+0x1c [xeno_native])
:   +*func                -127+   1.875N __ipipe_mach_get_tsc+0x10 
(rt_timer_tsc+0x14 [xeno_native])
:|  +*begin   0x80000001  -126+   2.000  __ipipe_mach_get_tsc+0x30 
(rt_timer_tsc+0x14 [xeno_native])
:|  +*end     0x80000001  -124+   2.625N __ipipe_mach_get_tsc+0x6c 
(rt_timer_tsc+0x14 [xeno_native])
:|  +*begin   0x80000001  -121+   2.375  __ipipe_dispatch_event+0x10c 
(__ipipe_syscall_root+0x88)
:|  +*end     0x80000001  -119+   7.750N __ipipe_dispatch_event+0x1b0 
(__ipipe_syscall_root+0x88)
:   +*func                -111+   2.250N __ipipe_syscall_root+0x10 
(vector_swi+0x64)
:   +*func                -109+   2.125N __ipipe_dispatch_event+0x14 
(__ipipe_syscall_root+0x88)
:|  +*begin   0x80000001  -106+   2.250  __ipipe_dispatch_event+0x44 
(__ipipe_syscall_root+0x88)
:|  +*end     0x80000001  -104+   1.875N __ipipe_dispatch_event+0xc4 
(__ipipe_syscall_root+0x88)
:   +*func                -102+   2.500N hisyscall_event+0x14 [xeno_nucleus] 
(__ipipe_dispatch_event+0xe0)
:   +*func                -100+   4.000N __rt_timer_tsc2ns+0x14 [xeno_native] 
(hisyscall_event+0x160 [xeno_nucleus])
:   +*func                 -96+   7.125N rt_timer_tsc2ns+0x14 [xeno_native] 
(__rt_timer_tsc2ns+0x38 [xeno_native])
:|  +*begin   0x80000001   -89+   2.500  __ipipe_dispatch_event+0x10c 
(__ipipe_syscall_root+0x88)
:|  +*end     0x80000001   -86+   2.875N __ipipe_dispatch_event+0x1b0 
(__ipipe_syscall_root+0x88)
:   +*func                 -83+   1.875N __ipipe_syscall_root+0x10 
(vector_swi+0x64)
:   +*func                 -81+   2.000N __ipipe_dispatch_event+0x14 
(__ipipe_syscall_root+0x88)
:|  +*begin   0x80000001   -79+   2.250  __ipipe_dispatch_event+0x44 
(__ipipe_syscall_root+0x88)
:|  +*end     0x80000001   -77+   1.500N __ipipe_dispatch_event+0xc4 
(__ipipe_syscall_root+0x88)
:   +*func                 -76+   3.250N hisyscall_event+0x14 [xeno_nucleus] 
(__ipipe_dispatch_event+0xe0)
:   +*func                 -72+   3.875N xnshadow_sys_trace+0x10 [xeno_nucleus] 
(hisyscall_event+0x160 [xeno_nucleus])
:   +*func                 -69+   2.625N ipipe_trace_frozen_reset+0x10 
(xnshadow_sys_trace+0x98 [xeno_nucleus])
:|  +*func                 -66+   2.625N __ipipe_grab_irq+0x10 (__irq_svc+0x24)
:|  +*begin   0xffffffff   -63+   2.000  __ipipe_grab_irq+0x98 (__irq_svc+0x24)
:|  +*func                 -61+   2.000N __ipipe_handle_irq+0x10 
(__ipipe_grab_irq+0xd0)
:|  +*func                 -59+   1.750N __ipipe_ack_timerirq+0x10 
(__ipipe_handle_irq+0x8c)
:|  +*func                 -58+   1.875N 
ipipe_test_and_stall_pipeline_from+0x10 (__ipipe_ack_timerirq+0x20)
:|  #*func                 -56+   2.000N __ipipe_mach_acktimer+0x10 
(__ipipe_ack_timerirq+0x28)
:|  #*func                 -54+   2.625N s3c_irq_ack+0x10 
(__ipipe_ack_timerirq+0x44)
:|  #*func                 -51+   2.375N s3c_irq_unmask+0x10 
(__ipipe_ack_timerirq+0x50)
:|  +*func                 -49+   1.625N __ipipe_dispatch_wired+0x10 
(__ipipe_handle_irq+0x98)
:|  #*func                 -47+   1.750N xnintr_clock_handler+0x10 
[xeno_nucleus] (__ipipe_dispatch_wired+0xe0)
:|  #*func                 -45+   3.000N xnintr_irq_handler+0x14 [xeno_nucleus] 
(xnintr_clock_handler+0x20 [xeno_nucleus])
:|  #*func                 -42+   2.625N __ipipe_mach_get_tsc+0x10 
(xnintr_irq_handler+0x34 [xeno_nucleus])
:|  #*func                 -40+   1.500N xnpod_announce_tick+0x10 
[xeno_nucleus] (xnintr_irq_handler+0x54 [xeno_nucleus])
:|  #*func                 -38+   3.250N xntimer_do_tick_aperiodic+0x14 
[xeno_nucleus] (xnpod_announce_tick+0x20 [xeno_nucleus])
:|  #*func                 -35+   3.000N __ipipe_mach_get_tsc+0x10 
(xntimer_do_tick_aperiodic+0x48 [xeno_nucleus])
:|  #*func                 -32+   2.875N xnthread_periodic_handler+0x10 
[xeno_nucleus] (xntimer_do_tick_aperiodic+0xc0 [xeno_nucleus])
:|  #*func                 -29+   1.750N __ipipe_mach_get_tsc+0x10 
(xntimer_do_tick_aperiodic+0x48 [xeno_nucleus])
:|  #*func                 -27+   3.625N __ipipe_mach_get_tsc+0x10 
(xntimer_do_tick_aperiodic+0x204 [xeno_nucleus])
:|  #*func                 -24+   4.000N __ipipe_mach_set_dec+0x14 
(xntimer_do_tick_aperiodic+0x2b8 [xeno_nucleus])
:|  #*func                 -20+   2.125N __ipipe_mach_get_tsc+0x10 
(xnintr_irq_handler+0x14c [xeno_nucleus])
:|  #*func                 -18+   1.875N __ipipe_mach_get_tsc+0x10 
(xnintr_irq_handler+0x180 [xeno_nucleus])
:|  +*func                 -16+   2.000N __ipipe_walk_pipeline+0x10 
(__ipipe_handle_irq+0x1a8)
:|  +*end     0xffffffff   -14+   2.625N __ipipe_grab_irq+0xd8 (__irq_svc+0x24)
:   +*func                 -11+   2.125N __ipipe_global_path_lock+0x10 
(ipipe_trace_frozen_reset+0x14)
:|  +*begin   0x80000001    -9+   6.125  __ipipe_global_path_lock+0x30 
(ipipe_trace_frozen_reset+0x14)
:|  +*end     0x80000001    -3+   3.250N __ipipe_global_path_unlock+0x68 
(ipipe_trace_frozen_reset+0x68)
<   +*freeze  0x0003dc0d     0    3.000N xnshadow_sys_trace+0xa4 [xeno_nucleus] 
(hisyscall_event+0x160 [xeno_nucleus])
 |  +*begin   0x80000001     3    2.000N __ipipe_dispatch_event+0x10c 
(__ipipe_syscall_root+0x88)
 |  +*end     0x80000001     5    5.625N __ipipe_dispatch_event+0x1b0 
(__ipipe_syscall_root+0x88)
    +*func                  10    1.875N __ipipe_syscall_root+0x10 
(vector_swi+0x64)
    +*func                  12    1.875N __ipipe_dispatch_event+0x14 
(__ipipe_syscall_root+0x88)
 |  +*begin   0x80000001    14    2.375N __ipipe_dispatch_event+0x44 
(__ipipe_syscall_root+0x88)
 |  +*end     0x80000001    16    1.625N __ipipe_dispatch_event+0xc4 
(__ipipe_syscall_root+0x88)
    +*func                  18    3.375N hisyscall_event+0x14 [xeno_nucleus] 
(__ipipe_dispatch_event+0xe0)
    +*func                  21    1.750N __rt_task_wait_period+0x14 
[xeno_native] (hisyscall_event+0x160 [xeno_nucleus])
    +*func                  23    2.125N rt_task_wait_period+0x10 [xeno_native] 
(__rt_task_wait_period+0x54 [xeno_native])
    +*func                  25    0.000N xnpod_wait_thread_period+0x14 
[xeno_nucleus] (rt_task_wait_period+0x54 [xeno_native])
_______________________________________________
Adeos-main mailing list
[email protected]
https://mail.gna.org/listinfo/adeos-main

Reply via email to