* [Xenomai-core] I-pipe latency tracer for ppc @ 2006-04-26 22:13 Philippe Gerum 2006-05-01 18:44 ` Wolfgang Grandegger 0 siblings, 1 reply; 6+ messages in thread From: Philippe Gerum @ 2006-04-26 22:13 UTC (permalink / raw) To: xenomai; +Cc: adeos-main As promised, the I-pipe tracer has been ported to ppc. People working on this architecture are invited to give it a try, it's a great tool to find out where the cycles are actually going. Just apply the tracer patch on top of the Adeos patch bearing the same revision number, and select the feature from the kernel configuration. If you happen to have some issue while booting the instrumented kernel on embedded setups (e.g. freeze after kernel decompression), try reducing the size of the trace log (CONFIG_IPIPE_TRACE_SHIFT). http://download.gna.org/adeos/patches/v2.6/ppc/tracer/ -- Philippe. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai-core] I-pipe latency tracer for ppc 2006-04-26 22:13 [Xenomai-core] I-pipe latency tracer for ppc Philippe Gerum @ 2006-05-01 18:44 ` Wolfgang Grandegger 2006-05-01 18:58 ` [Adeos-main] " Jan Kiszka 0 siblings, 1 reply; 6+ messages in thread From: Wolfgang Grandegger @ 2006-05-01 18:44 UTC (permalink / raw) To: Philippe Gerum; +Cc: adeos-main, xenomai [-- Attachment #1: Type: text/plain, Size: 1009 bytes --] Philippe Gerum wrote: > > As promised, the I-pipe tracer has been ported to ppc. People working on > this architecture are invited to give it a try, it's a great tool to > find out where the cycles are actually going. > > Just apply the tracer patch on top of the Adeos patch bearing the same > revision number, and select the feature from the kernel configuration. > If you happen to have some issue while booting the instrumented kernel > on embedded setups (e.g. freeze after kernel decompression), try > reducing the size of the trace log (CONFIG_IPIPE_TRACE_SHIFT). > > http://download.gna.org/adeos/patches/v2.6/ppc/tracer/ I gave it a try on a rather low-end PowerPC Walnut board (AMCC PowerPC 405GP, Rev. E at 200 MHz, 16 kB I-Cache 8 kB D-Cache). A nice tool, indeed, and it works fine. I have attached the results from running the Xenomai latency "-t0" test with some load showing latencies up to 140 us. The trace seems not to show any obvious problems, I think. Thanks. Wolfgang. [-- Attachment #2: walnut-latency-trace.log --] [-- Type: text/x-log, Size: 18799 bytes --] bash-3.00# cat /proc/ipipe/version 1.3-00 bash-3.00# ./latency -p500 == Sampling period: 500 us == Test mode: periodic user-mode task == All results in microseconds warming up... ... RTH|-----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat worst RTS| 59.020| 67.260| 138.910| 0| 00:54:31/00:54:31 bash-3.00# cat /proc/ipipe/trace/max I-pipe worst-case tracing service on 2.6.14/ipipe-1.3-00 ------------------------------------------------------------ Begin: 182095500 cycles, Trace Points: 192 (-10/+3), Length: 265 us +----- Hard IRQs ('|': locked) |+---- <unused> ||+--- <unused> |||+-- Xenomai ||||+- Linux ('*': domain stalled) ||||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) ||||| | +- NMI noise ('N') ||||| | | Type User Val. Time Delay Function (Parent) *fn -30 3.465 timer_interrupt+0x14 (__ipipe_do_timer+0x30) *fn -26 2.430 profile_tick+0x14 (timer_interrupt+0x130) *fn -24 1.865 profile_hit+0x14 (profile_tick+0x78) *fn -22 1.700 update_process_times+0x14 (timer_interrupt+0x13c) *fn -20 3.505 account_system_time+0x14 (update_process_times+0xac) *fn -17 2.195 update_mem_hiwater+0x14 (account_system_time+0x78) *fn -15 1.200 run_local_timers+0x14 (update_process_times+0xb0) *fn -14 11.905 raise_softirq+0x14 (run_local_timers+0x30) *fn -2 1.200 __ipipe_restore_root+0x14 (raise_softirq+0x84) *fn -1 1.095 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) >| *begin 0x80000000 0+ 3.950 __ipipe_stall_root+0x98 (__ipipe_restore_root+0x34) :| *fn 3+ 1.500 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 5+ 4.040 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 9+ 1.160 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 10+ 3.120 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 13+ 2.920 do_timer+0x14 (timer_interrupt+0x154) :| *fn 16+ 1.500 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 18+ 1.140 profile_hit+0x14 (profile_tick+0x78) :| *fn 19+ 1.270 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 20+ 1.370 account_system_time+0x14 (update_process_times+0xac) :| *fn 21+ 1.325 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 23 0.995 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 24+ 1.140 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 25+ 1.350 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 26+ 1.205 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 27+ 1.735 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 29+ 1.160 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 30+ 1.565 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 32+ 1.285 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 33+ 1.560 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 35+ 3.075 do_timer+0x14 (timer_interrupt+0x154) :| *fn 38+ 1.460 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 39+ 1.300 profile_hit+0x14 (profile_tick+0x78) :| *fn 40+ 1.035 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 41+ 1.350 account_system_time+0x14 (update_process_times+0xac) :| *fn 43+ 1.275 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 44+ 1.195 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 45 1.000 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 46+ 1.330 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 48+ 1.155 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 49+ 1.940 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 51+ 1.025 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 52+ 1.525 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 53+ 1.245 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 54+ 1.595 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 56+ 1.635 do_timer+0x14 (timer_interrupt+0x154) :| *fn 58+ 1.445 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 59+ 1.300 profile_hit+0x14 (profile_tick+0x78) :| *fn 60+ 1.235 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 62+ 1.210 account_system_time+0x14 (update_process_times+0xac) :| *fn 63+ 1.255 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 64+ 1.155 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 65+ 1.235 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 66+ 1.195 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 68+ 1.095 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 69+ 1.900 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 71+ 1.225 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 72+ 1.420 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 73+ 1.220 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 74+ 1.545 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 76+ 1.835 do_timer+0x14 (timer_interrupt+0x154) :| *fn 78+ 1.140 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 79+ 1.275 profile_hit+0x14 (profile_tick+0x78) :| *fn 80+ 1.195 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 81+ 1.400 account_system_time+0x14 (update_process_times+0xac) :| *fn 83+ 1.120 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 84+ 1.130 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 85+ 1.160 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 86+ 1.400 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 88 1.000 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 89+ 1.875 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 90+ 1.185 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 92+ 1.615 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 93+ 1.085 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 94+ 1.525 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 96+ 1.795 do_timer+0x14 (timer_interrupt+0x154) :| *fn 98+ 1.320 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 99+ 1.140 profile_hit+0x14 (profile_tick+0x78) :| *fn 100+ 1.130 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 101+ 1.370 account_system_time+0x14 (update_process_times+0xac) :| *fn 103+ 1.325 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 104 0.995 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 105+ 1.140 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 106+ 1.345 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 107+ 1.160 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 108+ 1.735 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 110+ 1.160 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 111+ 1.565 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 113+ 1.265 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 114+ 1.390 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 116+ 1.770 do_timer+0x14 (timer_interrupt+0x154) :| *fn 117+ 1.295 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 119+ 1.340 profile_hit+0x14 (profile_tick+0x78) :| *fn 120+ 1.035 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 121+ 1.350 account_system_time+0x14 (update_process_times+0xac) :| *fn 122+ 1.275 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 124+ 1.195 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 125 1.000 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 126+ 1.325 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 127+ 1.120 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 128+ 1.920 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 130+ 1.025 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 131+ 1.545 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 133+ 1.245 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 134+ 1.595 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 135+ 1.635 do_timer+0x14 (timer_interrupt+0x154) :| *fn 137+ 1.275 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 138+ 1.300 profile_hit+0x14 (profile_tick+0x78) :| *fn 140+ 1.235 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 141+ 1.210 account_system_time+0x14 (update_process_times+0xac) :| *fn 142+ 1.255 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 143+ 1.135 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 144+ 1.210 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 146+ 1.190 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 147+ 1.135 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 148+ 1.900 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 150+ 1.225 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 151+ 1.410 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 153+ 1.220 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 154+ 1.525 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 155+ 1.830 do_timer+0x14 (timer_interrupt+0x154) :| *fn 157+ 1.135 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 158+ 1.230 profile_hit+0x14 (profile_tick+0x78) :| *fn 159+ 1.165 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 161+ 1.370 account_system_time+0x14 (update_process_times+0xac) :| *fn 162+ 1.115 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 163+ 1.090 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 164+ 1.160 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 165+ 1.400 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 167 1.000 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 168+ 2.215 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 170+ 1.185 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 171+ 1.615 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 173+ 1.085 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 174+ 1.525 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 175+ 2.090 do_timer+0x14 (timer_interrupt+0x154) :| *fn 177+ 1.300 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 179+ 1.135 profile_hit+0x14 (profile_tick+0x78) :| *fn 180+ 1.170 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 181+ 1.370 account_system_time+0x14 (update_process_times+0xac) :| *fn 182+ 1.325 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 184 0.995 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 185+ 1.140 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 186+ 1.350 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 187+ 1.205 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 188+ 1.735 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 190+ 1.140 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 191+ 1.565 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 193+ 1.285 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 194+ 1.390 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 195+ 1.770 do_timer+0x14 (timer_interrupt+0x154) :| *fn 197+ 1.295 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 198+ 1.340 profile_hit+0x14 (profile_tick+0x78) :| *fn 200+ 1.035 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 201+ 1.350 account_system_time+0x14 (update_process_times+0xac) :| *fn 202+ 1.275 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 203+ 1.195 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 205 1.000 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 206+ 1.310 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 207+ 1.155 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 208+ 1.940 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 210+ 1.025 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 211+ 1.525 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 213+ 1.245 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 214+ 1.590 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 215+ 1.630 do_timer+0x14 (timer_interrupt+0x154) :| *fn 217+ 1.235 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 218+ 1.300 profile_hit+0x14 (profile_tick+0x78) :| *fn 219+ 1.235 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 221+ 1.360 account_system_time+0x14 (update_process_times+0xac) :| *fn 222+ 1.215 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 223+ 1.155 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 224+ 1.205 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 226+ 1.195 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 227+ 1.090 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 228+ 1.855 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 230+ 1.220 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 231+ 1.405 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 232+ 1.180 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 234+ 1.545 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 235+ 1.835 do_timer+0x14 (timer_interrupt+0x154) :| *fn 237+ 1.140 profile_tick+0x14 (timer_interrupt+0x130) :| *fn 238+ 1.255 profile_hit+0x14 (profile_tick+0x78) :| *fn 239+ 1.195 update_process_times+0x14 (timer_interrupt+0x13c) :| *fn 240+ 1.420 account_system_time+0x14 (update_process_times+0xac) :| *fn 242+ 1.120 update_mem_hiwater+0x14 (account_system_time+0x78) :| *fn 243+ 1.130 run_local_timers+0x14 (update_process_times+0xb0) :| *fn 244+ 1.155 raise_softirq+0x14 (run_local_timers+0x30) :| *fn 245+ 1.350 __ipipe_test_and_stall_root+0x14 (raise_softirq+0x30) :| *fn 247 0.995 __ipipe_restore_root+0x14 (raise_softirq+0x84) :| *fn 248+ 1.835 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) :| *fn 249+ 1.185 scheduler_tick+0x14 (update_process_times+0x7c) :| *fn 251+ 1.615 sched_clock+0x14 (scheduler_tick+0x34) :| *fn 252+ 1.085 run_posix_cpu_timers+0x14 (update_process_times+0x84) :| *fn 253+ 1.670 __ipipe_test_root+0x14 (run_posix_cpu_timers+0x44) :| *fn 255+ 2.260 do_timer+0x14 (timer_interrupt+0x154) :| *fn 257+ 1.920 irq_exit+0x14 (timer_interrupt+0xa4) :| *fn 259+ 1.240 do_softirq+0x14 (irq_exit+0x6c) :| *fn 260+ 1.660 __ipipe_test_and_stall_root+0x14 (do_softirq+0x54) :| *fn 262+ 1.810 __do_softirq+0x14 (do_softirq+0x90) :| *fn 264+ 1.565 __ipipe_unstall_root+0x14 (__do_softirq+0x64) <| end 0x80000000 265 1.795 __ipipe_unstall_root+0x70 (__do_softirq+0x64) fn 267 1.755 run_timer_softirq+0x14 (__do_softirq+0x90) fn 269 1.310 __ipipe_stall_root+0x14 (run_timer_softirq+0x50) | *begin 0x80000000 270 0.000 __ipipe_stall_root+0x98 (run_timer_softirq+0x50) bash-3.00# bash-3.00# bash-3.00# ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Adeos-main] Re: [Xenomai-core] I-pipe latency tracer for ppc 2006-05-01 18:44 ` Wolfgang Grandegger @ 2006-05-01 18:58 ` Jan Kiszka 2006-05-01 19:33 ` Wolfgang Grandegger 0 siblings, 1 reply; 6+ messages in thread From: Jan Kiszka @ 2006-05-01 18:58 UTC (permalink / raw) To: Wolfgang Grandegger; +Cc: adeos-main, xenomai [-- Attachment #1: Type: text/plain, Size: 4213 bytes --] Wolfgang Grandegger wrote: > Philippe Gerum wrote: >> >> As promised, the I-pipe tracer has been ported to ppc. People working >> on this architecture are invited to give it a try, it's a great tool >> to find out where the cycles are actually going. >> >> Just apply the tracer patch on top of the Adeos patch bearing the same >> revision number, and select the feature from the kernel configuration. >> If you happen to have some issue while booting the instrumented kernel >> on embedded setups (e.g. freeze after kernel decompression), try >> reducing the size of the trace log (CONFIG_IPIPE_TRACE_SHIFT). >> >> http://download.gna.org/adeos/patches/v2.6/ppc/tracer/ > > I gave it a try on a rather low-end PowerPC Walnut board (AMCC PowerPC > 405GP, Rev. E at 200 MHz, 16 kB I-Cache 8 kB D-Cache). A nice tool, > indeed, and it works fine. I have attached the results from running the > Xenomai latency "-t0" test with some load showing latencies up to 140 > us. The trace seems not to show any obvious problems, I think. > > Thanks. > > Wolfgang. > > > ------------------------------------------------------------------------ > > > bash-3.00# cat /proc/ipipe/version > 1.3-00 > > bash-3.00# ./latency -p500 > == Sampling period: 500 us > == Test mode: periodic user-mode task > == All results in microseconds > warming up... > ... > RTH|-----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat worst > RTS| 59.020| 67.260| 138.910| 0| 00:54:31/00:54:31 > > bash-3.00# cat /proc/ipipe/trace/max > I-pipe worst-case tracing service on 2.6.14/ipipe-1.3-00 > ------------------------------------------------------------ > Begin: 182095500 cycles, Trace Points: 192 (-10/+3), Length: 265 us > > +----- Hard IRQs ('|': locked) > |+---- <unused> > ||+--- <unused> > |||+-- Xenomai > ||||+- Linux ('*': domain stalled) > ||||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) > ||||| | +- NMI noise ('N') > ||||| | | > Type User Val. Time Delay Function (Parent) > *fn -30 3.465 timer_interrupt+0x14 (__ipipe_do_timer+0x30) > *fn -26 2.430 profile_tick+0x14 (timer_interrupt+0x130) > *fn -24 1.865 profile_hit+0x14 (profile_tick+0x78) > *fn -22 1.700 update_process_times+0x14 (timer_interrupt+0x13c) > *fn -20 3.505 account_system_time+0x14 (update_process_times+0xac) > *fn -17 2.195 update_mem_hiwater+0x14 (account_system_time+0x78) > *fn -15 1.200 run_local_timers+0x14 (update_process_times+0xb0) > *fn -14 11.905 raise_softirq+0x14 (run_local_timers+0x30) > *fn -2 1.200 __ipipe_restore_root+0x14 (raise_softirq+0x84) > *fn -1 1.095 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) >> | *begin 0x80000000 0+ 3.950 __ipipe_stall_root+0x98 (__ipipe_restore_root+0x34) > :| *fn 3+ 1.500 scheduler_tick+0x14 (update_process_times+0x7c) > :| *fn 5+ 4.040 sched_clock+0x14 (scheduler_tick+0x34) This trace covers some long stall of the root domain, not the maximum stall of the Xenomai domain that caused the 140 us above. See the explanation for the stall bits above. Maybe the maximum irq latency tracing is broken, I haven't tested it with latest ipipe patch revision yet. Well, that max path should not trigger on root-domain stalls as long as there is some higher priority domain running - and it should have been reset on xenomai mounting. Hmm, maybe only that reset does not work, please check by running "echo > /proc/ipipe/trace/max" before the latency test. You could also test if the -f option of latency works for you. You will find the result of the back-trace freezing on max latency under /proc/ipipe/trace/frozen. The number of back-trace points can be tuned even after the event (only post-tracing required ahead-of-time tuning). Jan [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 252 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Adeos-main] Re: [Xenomai-core] I-pipe latency tracer for ppc 2006-05-01 18:58 ` [Adeos-main] " Jan Kiszka @ 2006-05-01 19:33 ` Wolfgang Grandegger 2006-05-01 21:42 ` Jan Kiszka 0 siblings, 1 reply; 6+ messages in thread From: Wolfgang Grandegger @ 2006-05-01 19:33 UTC (permalink / raw) To: Jan Kiszka; +Cc: adeos-main, xenomai [-- Attachment #1: Type: text/plain, Size: 4404 bytes --] Jan Kiszka wrote: > Wolfgang Grandegger wrote: >> Philippe Gerum wrote: >>> As promised, the I-pipe tracer has been ported to ppc. People working >>> on this architecture are invited to give it a try, it's a great tool >>> to find out where the cycles are actually going. >>> >>> Just apply the tracer patch on top of the Adeos patch bearing the same >>> revision number, and select the feature from the kernel configuration. >>> If you happen to have some issue while booting the instrumented kernel >>> on embedded setups (e.g. freeze after kernel decompression), try >>> reducing the size of the trace log (CONFIG_IPIPE_TRACE_SHIFT). >>> >>> http://download.gna.org/adeos/patches/v2.6/ppc/tracer/ >> I gave it a try on a rather low-end PowerPC Walnut board (AMCC PowerPC >> 405GP, Rev. E at 200 MHz, 16 kB I-Cache 8 kB D-Cache). A nice tool, >> indeed, and it works fine. I have attached the results from running the >> Xenomai latency "-t0" test with some load showing latencies up to 140 >> us. The trace seems not to show any obvious problems, I think. >> >> Thanks. >> >> Wolfgang. >> >> >> ------------------------------------------------------------------------ >> >> >> bash-3.00# cat /proc/ipipe/version >> 1.3-00 >> >> bash-3.00# ./latency -p500 >> == Sampling period: 500 us >> == Test mode: periodic user-mode task >> == All results in microseconds >> warming up... >> ... >> RTH|-----lat min|-----lat avg|-----lat max|-overrun|----lat best|---lat worst >> RTS| 59.020| 67.260| 138.910| 0| 00:54:31/00:54:31 >> >> bash-3.00# cat /proc/ipipe/trace/max >> I-pipe worst-case tracing service on 2.6.14/ipipe-1.3-00 >> ------------------------------------------------------------ >> Begin: 182095500 cycles, Trace Points: 192 (-10/+3), Length: 265 us >> >> +----- Hard IRQs ('|': locked) >> |+---- <unused> >> ||+--- <unused> >> |||+-- Xenomai >> ||||+- Linux ('*': domain stalled) >> ||||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) >> ||||| | +- NMI noise ('N') >> ||||| | | >> Type User Val. Time Delay Function (Parent) >> *fn -30 3.465 timer_interrupt+0x14 (__ipipe_do_timer+0x30) >> *fn -26 2.430 profile_tick+0x14 (timer_interrupt+0x130) >> *fn -24 1.865 profile_hit+0x14 (profile_tick+0x78) >> *fn -22 1.700 update_process_times+0x14 (timer_interrupt+0x13c) >> *fn -20 3.505 account_system_time+0x14 (update_process_times+0xac) >> *fn -17 2.195 update_mem_hiwater+0x14 (account_system_time+0x78) >> *fn -15 1.200 run_local_timers+0x14 (update_process_times+0xb0) >> *fn -14 11.905 raise_softirq+0x14 (run_local_timers+0x30) >> *fn -2 1.200 __ipipe_restore_root+0x14 (raise_softirq+0x84) >> *fn -1 1.095 __ipipe_stall_root+0x14 (__ipipe_restore_root+0x34) >>> | *begin 0x80000000 0+ 3.950 __ipipe_stall_root+0x98 (__ipipe_restore_root+0x34) >> :| *fn 3+ 1.500 scheduler_tick+0x14 (update_process_times+0x7c) >> :| *fn 5+ 4.040 sched_clock+0x14 (scheduler_tick+0x34) > > This trace covers some long stall of the root domain, not the maximum > stall of the Xenomai domain that caused the 140 us above. See the > explanation for the stall bits above. Ah, some feed for the real experts. > > Maybe the maximum irq latency tracing is broken, I haven't tested it > with latest ipipe patch revision yet. Well, that max path should not > trigger on root-domain stalls as long as there is some higher priority > domain running - and it should have been reset on xenomai mounting. Hmm, > maybe only that reset does not work, please check by running "echo > > /proc/ipipe/trace/max" before the latency test. Yes, that changed something. I have attached the new output listing. > You could also test if the -f option of latency works for you. You will > find the result of the back-trace freezing on max latency under > /proc/ipipe/trace/frozen. The number of back-trace points can be tuned > even after the event (only post-tracing required ahead-of-time tuning). Seem to work. The output has been added to the attached file. Wolfgang. [-- Attachment #2: walnut-latency-trace2.log --] [-- Type: text/x-log, Size: 8428 bytes --] bash-3.00# cat /proc/ipipe/trace/max I-pipe worst-case tracing service on 2.6.14/ipipe-1.3-00 ------------------------------------------------------------ Begin: 90358006525 cycles, Trace Points: 25 (-10/+4), Length: 69 us +----- Hard IRQs ('|': locked) |+---- <unused> ||+--- <unused> |||+-- Xenomai ||||+- Linux ('*': domain stalled) ||||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) ||||| | +- NMI noise ('N') ||||| | | Type User Val. Time Delay Function (Parent) fn -25 1.935 schedule+0x14 (syscall_exit_work+0x110) fn -23 2.075 profile_hit+0x14 (schedule+0x68) fn -21 2.390 sched_clock+0x14 (schedule+0xa0) fn -19 4.400 __ipipe_stall_root+0x14 (schedule+0x118) *fn -14 2.040 __ipipe_dispatch_event+0x14 (schedule+0x300) | *begin 0x80000001 -12 3.190 __ipipe_dispatch_event+0x240 (schedule+0x300) | *end 0x80000001 -9 1.990 __ipipe_dispatch_event+0x228 (schedule+0x300) *fn -7 4.115 schedule_event+0x14 (__ipipe_dispatch_event+0x160) | *begin 0x80000001 -3 1.835 __ipipe_dispatch_event+0x198 (schedule+0x300) | *end 0x80000001 -1 1.815 __ipipe_dispatch_event+0x1b8 (schedule+0x300) >| *begin 0x80000000 0+ 4.715 schedule+0x6ac (syscall_exit_work+0x110) :| *fn 4+ 1.225 __switch_to+0x14 (schedule+0x358) :| *fn 5+ 5.025 __ipipe_test_and_stall_root+0x14 (__switch_to+0x30) : *fn 10+ 1.445 schedule_tail+0x14 (ret_from_fork+0x60) : *fn 12+ 3.450 __ipipe_unstall_root+0x14 (schedule_tail+0x48) :| *fn 15+ 1.145 __ipipe_grab_timer+0x14 (__ipipe_ret_from_except+0x0) :| *begin 0xc00466f4 16+ 1.615 __ipipe_grab_timer+0x34 (__ipipe_ret_from_except+0x0) :| *fn 18+ 3.665 __ipipe_handle_irq+0x14 (__ipipe_grab_timer+0x4c) :| *fn 22+ 1.980 __ipipe_walk_pipeline+0x14 (__ipipe_handle_irq+0x174) :| *fn 24+ 2.540 ipipe_suspend_domain+0x14 (__ipipe_walk_pipeline+0xe4) :| *fn 26+ 3.600 __ipipe_sync_stage+0x14 (ipipe_suspend_domain+0xa8) :| **fn 30+ 1.650 xnintr_clock_handler+0x14 (__ipipe_sync_stage+0x1ac) :| **fn 31+ 2.150 xnintr_irq_handler+0x14 (xnintr_clock_handler+0x38) :| **fn 34+ 1.980 xnpod_announce_tick+0x14 (xnintr_irq_handler+0x58) :| **fn 36+ 3.395 xntimer_do_tick_aperiodic+0x14 (xnpod_announce_tick+0x3c) :| **fn 39+ 1.645 xnthread_periodic_handler+0x14 (xntimer_do_tick_aperiodic+0x2b4) :| **fn 41+ 1.420 xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x3c) :| **fn 42+ 4.010 ipipe_test_and_stall_pipeline_head+0x14 (xnpod_resume_thread+0x34) :| **fn 46+ 4.910 ipipe_restore_pipeline_head+0x14 (xnpod_resume_thread+0x120) :| **fn 51+ 1.870 xnpod_schedule+0x14 (xnintr_irq_handler+0xf0) :| **fn 53+ 9.430 ipipe_test_and_stall_pipeline_head+0x14 (xnpod_schedule+0x80) :| **fn 62+ 2.215 ipipe_restore_pipeline_head+0x14 (xnpod_schedule+0x46c) :| **fn 64+ 2.865 ipipe_restore_pipeline_head+0x14 (xnpod_suspend_thread+0x94) :| **fn 67+ 1.945 ipipe_restore_pipeline_head+0x14 (xnpod_wait_thread_period+0x11c) <| *end 0x80000000 69 7.185 ipipe_restore_pipeline_head+0xbc (xnpod_wait_thread_period+0x11c) *end 0x80000001 76 10.310 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) *fn 86 1.495 __ipipe_syscall_root+0x14 (DoSyscall+0x24) *fn 88 1.660 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) | *begin 0x80000001 90 0.000 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) bash-3.00# cat /proc/ipipe/trace/frozen I-pipe frozen back-tracing service on 2.6.14/ipipe-1.3-00 ------------------------------------------------------------ Freeze: 155250522464 cycles, Trace Points: 30 (+10) +----- Hard IRQs ('|': locked) |+---- <unused> ||+--- <unused> |||+-- Xenomai ||||+- Linux ('*': domain stalled) ||||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) ||||| | +- NMI noise ('N') ||||| | | Type User Val. Time Delay Function (Parent) :| *fn -80+ 1.485 __ipipe_ack_irq+0x14 (__ipipe_handle_irq+0x158) :| *fn -78+ 1.515 ipipe_test_and_stall_pipeline_from+0x14 (__ipipe_ack_irq+0x54) :| **fn -77+ 1.730 ppc4xx_uic0_ack+0x14 (__ipipe_ack_irq+0x6c) :| *fn -75+ 1.390 __ipipe_walk_pipeline+0x14 (__ipipe_handle_irq+0x174) :| *end 0xc0043f18 -74+ 9.065 __ipipe_grab_irq+0x64 (__ipipe_ret_from_except+0x0) : *end 0x80000001 -65! 10.695 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) : *fn -54+ 1.650 __ipipe_syscall_root+0x14 (DoSyscall+0x24) : *fn -53+ 1.710 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) :| *begin 0x80000001 -51+ 2.660 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) :| *fn -48+ 4.420 hisyscall_event+0x14 (__ipipe_dispatch_event+0xa4) :| *fn -44+ 2.540 __rt_timer_tsc2ns+0x14 (hisyscall_event+0x224) :| *fn -41+ 5.630 rt_timer_tsc2ns+0x14 (__rt_timer_tsc2ns+0x48) :| *end 0x80000001 -36+ 4.420 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) : *fn -31+ 1.475 __ipipe_syscall_root+0x14 (DoSyscall+0x24) : *fn -30+ 1.715 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) :| *begin 0x80000001 -28+ 1.960 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) :| *fn -26+ 2.880 hisyscall_event+0x14 (__ipipe_dispatch_event+0xa4) :| *fn -23+ 1.610 sys_rtdm_ioctl+0x14 (hisyscall_event+0x224) :| *fn -22+ 2.145 _rtdm_ioctl+0x14 (sys_rtdm_ioctl+0x3c) :| *fn -20+ 1.325 rtdm_context_get+0x14 (_rtdm_ioctl+0x70) :| *fn -18+ 2.205 ipipe_test_and_stall_pipeline_head+0x14 (rtdm_context_get+0x58) :| **fn -16+ 1.630 ipipe_restore_pipeline_head+0x14 (rtdm_context_get+0xcc) :| *end 0x80000000 -14+ 2.525 ipipe_restore_pipeline_head+0xbc (rtdm_context_get+0xcc) : *fn -12+ 1.410 rt_tmbench_ioctl_rt+0x14 (_rtdm_ioctl+0xb0) : *fn -10+ 1.940 tracer_ioctl+0x14 (rt_tmbench_ioctl_rt+0x44) : *fn -9+ 1.550 ipipe_trace_frozen_reset+0x14 (tracer_ioctl+0x148) : *fn -7+ 1.600 __ipipe_global_path_lock+0x14 (ipipe_trace_frozen_reset+0x2c) :| *begin 0x80000001 -5+ 3.920 __ipipe_global_path_lock+0x98 (ipipe_trace_frozen_reset+0x2c) :| *end 0x80000001 -2+ 2.020 __ipipe_global_path_unlock+0x84 (ipipe_trace_frozen_reset+0x8c) < *freeze 0x00000000 0 3.980 tracer_ioctl+0x150 (rt_tmbench_ioctl_rt+0x44) *end 0x80000001 3 4.270 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) *fn 8 1.310 __ipipe_syscall_root+0x14 (DoSyscall+0x24) *fn 9 1.740 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) | *begin 0x80000001 11 1.690 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) | *fn 12 3.020 hisyscall_event+0x14 (__ipipe_dispatch_event+0xa4) | *fn 15 1.750 __rt_task_wait_period+0x14 (hisyscall_event+0x224) | *fn 17 1.760 rt_task_wait_period+0x14 (__rt_task_wait_period+0x44) | *fn 19 1.385 xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x88) | *fn 20 2.465 ipipe_test_and_stall_pipeline_head+0x14 (xnpod_wait_thread_period+0x3c) | **fn 23 0.000 xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0x9c) bash-3.00# ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Adeos-main] Re: [Xenomai-core] I-pipe latency tracer for ppc 2006-05-01 19:33 ` Wolfgang Grandegger @ 2006-05-01 21:42 ` Jan Kiszka 2006-05-02 7:49 ` Philippe Gerum 0 siblings, 1 reply; 6+ messages in thread From: Jan Kiszka @ 2006-05-01 21:42 UTC (permalink / raw) To: Philippe Gerum; +Cc: adeos-main, xenomai [-- Attachment #1: Type: text/plain, Size: 10585 bytes --] Wolfgang Grandegger wrote: > Jan Kiszka wrote: >> Wolfgang Grandegger wrote: >> ... >> This trace covers some long stall of the root domain, not the maximum >> stall of the Xenomai domain that caused the 140 us above. See the >> explanation for the stall bits above. > > Ah, some feed for the real experts. Indeed :), comments below. > >> >> Maybe the maximum irq latency tracing is broken, I haven't tested it >> with latest ipipe patch revision yet. Well, that max path should not >> trigger on root-domain stalls as long as there is some higher priority >> domain running - and it should have been reset on xenomai mounting. Hmm, >> maybe only that reset does not work, please check by running "echo > >> /proc/ipipe/trace/max" before the latency test. > > Yes, that changed something. I have attached the new output listing. > >> You could also test if the -f option of latency works for you. You will >> find the result of the back-trace freezing on max latency under >> /proc/ipipe/trace/frozen. The number of back-trace points can be tuned >> even after the event (only post-tracing required ahead-of-time tuning). > > Seem to work. The output has been added to the attached file. > > Wolfgang. > > > ------------------------------------------------------------------------ > > bash-3.00# cat /proc/ipipe/trace/max > I-pipe worst-case tracing service on 2.6.14/ipipe-1.3-00 > ------------------------------------------------------------ > Begin: 90358006525 cycles, Trace Points: 25 (-10/+4), Length: 69 us > > +----- Hard IRQs ('|': locked) > |+---- <unused> > ||+--- <unused> > |||+-- Xenomai > ||||+- Linux ('*': domain stalled) > ||||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) > ||||| | +- NMI noise ('N') > ||||| | | > Type User Val. Time Delay Function (Parent) > fn -25 1.935 schedule+0x14 (syscall_exit_work+0x110) > fn -23 2.075 profile_hit+0x14 (schedule+0x68) > fn -21 2.390 sched_clock+0x14 (schedule+0xa0) > fn -19 4.400 __ipipe_stall_root+0x14 (schedule+0x118) > *fn -14 2.040 __ipipe_dispatch_event+0x14 (schedule+0x300) > | *begin 0x80000001 -12 3.190 __ipipe_dispatch_event+0x240 (schedule+0x300) > | *end 0x80000001 -9 1.990 __ipipe_dispatch_event+0x228 (schedule+0x300) > *fn -7 4.115 schedule_event+0x14 (__ipipe_dispatch_event+0x160) > | *begin 0x80000001 -3 1.835 __ipipe_dispatch_event+0x198 (schedule+0x300) > | *end 0x80000001 -1 1.815 __ipipe_dispatch_event+0x1b8 (schedule+0x300) >> | *begin 0x80000000 0+ 4.715 schedule+0x6ac (syscall_exit_work+0x110) > :| *fn 4+ 1.225 __switch_to+0x14 (schedule+0x358) > :| *fn 5+ 5.025 __ipipe_test_and_stall_root+0x14 (__switch_to+0x30) > : *fn 10+ 1.445 schedule_tail+0x14 (ret_from_fork+0x60) > : *fn 12+ 3.450 __ipipe_unstall_root+0x14 (schedule_tail+0x48) Instrumentation of the maximum IRQs-off path seems to be broken. The two functions above were entered with hard-IRQs on, so they should have interrupted the trace path. > :| *fn 15+ 1.145 __ipipe_grab_timer+0x14 (__ipipe_ret_from_except+0x0) > :| *begin 0xc00466f4 16+ 1.615 __ipipe_grab_timer+0x34 (__ipipe_ret_from_except+0x0) Hmm, the User Value on x86 would contain the IRQ number here. Some forgotten dereferencing? Looks like a pointer. > :| *fn 18+ 3.665 __ipipe_handle_irq+0x14 (__ipipe_grab_timer+0x4c) > :| *fn 22+ 1.980 __ipipe_walk_pipeline+0x14 (__ipipe_handle_irq+0x174) > :| *fn 24+ 2.540 ipipe_suspend_domain+0x14 (__ipipe_walk_pipeline+0xe4) > :| *fn 26+ 3.600 __ipipe_sync_stage+0x14 (ipipe_suspend_domain+0xa8) > :| **fn 30+ 1.650 xnintr_clock_handler+0x14 (__ipipe_sync_stage+0x1ac) > :| **fn 31+ 2.150 xnintr_irq_handler+0x14 (xnintr_clock_handler+0x38) > :| **fn 34+ 1.980 xnpod_announce_tick+0x14 (xnintr_irq_handler+0x58) > :| **fn 36+ 3.395 xntimer_do_tick_aperiodic+0x14 (xnpod_announce_tick+0x3c) > :| **fn 39+ 1.645 xnthread_periodic_handler+0x14 (xntimer_do_tick_aperiodic+0x2b4) > :| **fn 41+ 1.420 xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x3c) > :| **fn 42+ 4.010 ipipe_test_and_stall_pipeline_head+0x14 (xnpod_resume_thread+0x34) > :| **fn 46+ 4.910 ipipe_restore_pipeline_head+0x14 (xnpod_resume_thread+0x120) > :| **fn 51+ 1.870 xnpod_schedule+0x14 (xnintr_irq_handler+0xf0) > :| **fn 53+ 9.430 ipipe_test_and_stall_pipeline_head+0x14 (xnpod_schedule+0x80) > :| **fn 62+ 2.215 ipipe_restore_pipeline_head+0x14 (xnpod_schedule+0x46c) > :| **fn 64+ 2.865 ipipe_restore_pipeline_head+0x14 (xnpod_suspend_thread+0x94) > :| **fn 67+ 1.945 ipipe_restore_pipeline_head+0x14 (xnpod_wait_thread_period+0x11c) > <| *end 0x80000000 69 7.185 ipipe_restore_pipeline_head+0xbc (xnpod_wait_thread_period+0x11c) > *end 0x80000001 76 10.310 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) > *fn 86 1.495 __ipipe_syscall_root+0x14 (DoSyscall+0x24) > *fn 88 1.660 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) > | *begin 0x80000001 90 0.000 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) > > > > bash-3.00# cat /proc/ipipe/trace/frozen > I-pipe frozen back-tracing service on 2.6.14/ipipe-1.3-00 > ------------------------------------------------------------ > Freeze: 155250522464 cycles, Trace Points: 30 (+10) > > +----- Hard IRQs ('|': locked) > |+---- <unused> > ||+--- <unused> > |||+-- Xenomai > ||||+- Linux ('*': domain stalled) > ||||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) > ||||| | +- NMI noise ('N') > ||||| | | > Type User Val. Time Delay Function (Parent) > :| *fn -80+ 1.485 __ipipe_ack_irq+0x14 (__ipipe_handle_irq+0x158) > :| *fn -78+ 1.515 ipipe_test_and_stall_pipeline_from+0x14 (__ipipe_ack_irq+0x54) > :| **fn -77+ 1.730 ppc4xx_uic0_ack+0x14 (__ipipe_ack_irq+0x6c) > :| *fn -75+ 1.390 __ipipe_walk_pipeline+0x14 (__ipipe_handle_irq+0x174) > :| *end 0xc0043f18 -74+ 9.065 __ipipe_grab_irq+0x64 (__ipipe_ret_from_except+0x0) > : *end 0x80000001 -65! 10.695 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) > : *fn -54+ 1.650 __ipipe_syscall_root+0x14 (DoSyscall+0x24) > : *fn -53+ 1.710 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) > :| *begin 0x80000001 -51+ 2.660 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) > :| *fn -48+ 4.420 hisyscall_event+0x14 (__ipipe_dispatch_event+0xa4) > :| *fn -44+ 2.540 __rt_timer_tsc2ns+0x14 (hisyscall_event+0x224) > :| *fn -41+ 5.630 rt_timer_tsc2ns+0x14 (__rt_timer_tsc2ns+0x48) > :| *end 0x80000001 -36+ 4.420 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) > : *fn -31+ 1.475 __ipipe_syscall_root+0x14 (DoSyscall+0x24) > : *fn -30+ 1.715 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) > :| *begin 0x80000001 -28+ 1.960 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) > :| *fn -26+ 2.880 hisyscall_event+0x14 (__ipipe_dispatch_event+0xa4) > :| *fn -23+ 1.610 sys_rtdm_ioctl+0x14 (hisyscall_event+0x224) > :| *fn -22+ 2.145 _rtdm_ioctl+0x14 (sys_rtdm_ioctl+0x3c) > :| *fn -20+ 1.325 rtdm_context_get+0x14 (_rtdm_ioctl+0x70) > :| *fn -18+ 2.205 ipipe_test_and_stall_pipeline_head+0x14 (rtdm_context_get+0x58) > :| **fn -16+ 1.630 ipipe_restore_pipeline_head+0x14 (rtdm_context_get+0xcc) > :| *end 0x80000000 -14+ 2.525 ipipe_restore_pipeline_head+0xbc (rtdm_context_get+0xcc) > : *fn -12+ 1.410 rt_tmbench_ioctl_rt+0x14 (_rtdm_ioctl+0xb0) > : *fn -10+ 1.940 tracer_ioctl+0x14 (rt_tmbench_ioctl_rt+0x44) > : *fn -9+ 1.550 ipipe_trace_frozen_reset+0x14 (tracer_ioctl+0x148) > : *fn -7+ 1.600 __ipipe_global_path_lock+0x14 (ipipe_trace_frozen_reset+0x2c) > :| *begin 0x80000001 -5+ 3.920 __ipipe_global_path_lock+0x98 (ipipe_trace_frozen_reset+0x2c) > :| *end 0x80000001 -2+ 2.020 __ipipe_global_path_unlock+0x84 (ipipe_trace_frozen_reset+0x8c) > < *freeze 0x00000000 0 3.980 tracer_ioctl+0x150 (rt_tmbench_ioctl_rt+0x44) Here we should see the observed latency in User Value, reported with the ioctl down to the driver, then to ipipe_trace_freeze. 0 indicates some remaining minor issue here as well. > *end 0x80000001 3 4.270 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) > *fn 8 1.310 __ipipe_syscall_root+0x14 (DoSyscall+0x24) > *fn 9 1.740 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) > | *begin 0x80000001 11 1.690 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) > | *fn 12 3.020 hisyscall_event+0x14 (__ipipe_dispatch_event+0xa4) > | *fn 15 1.750 __rt_task_wait_period+0x14 (hisyscall_event+0x224) > | *fn 17 1.760 rt_task_wait_period+0x14 (__rt_task_wait_period+0x44) > | *fn 19 1.385 xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x88) > | *fn 20 2.465 ipipe_test_and_stall_pipeline_head+0x14 (xnpod_wait_thread_period+0x3c) > | **fn 23 0.000 xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0x9c) > bash-3.00# > Jan [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 252 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Adeos-main] Re: [Xenomai-core] I-pipe latency tracer for ppc 2006-05-01 21:42 ` Jan Kiszka @ 2006-05-02 7:49 ` Philippe Gerum 0 siblings, 0 replies; 6+ messages in thread From: Philippe Gerum @ 2006-05-02 7:49 UTC (permalink / raw) To: Jan Kiszka; +Cc: adeos-main, xenomai Jan Kiszka wrote: > Wolfgang Grandegger wrote: > >>Jan Kiszka wrote: >> >>>Wolfgang Grandegger wrote: >>>... >>>This trace covers some long stall of the root domain, not the maximum >>>stall of the Xenomai domain that caused the 140 us above. See the >>>explanation for the stall bits above. >> >>Ah, some feed for the real experts. > > > Indeed :), comments below. > > >>>Maybe the maximum irq latency tracing is broken, I haven't tested it >>>with latest ipipe patch revision yet. Well, that max path should not >>>trigger on root-domain stalls as long as there is some higher priority >>>domain running - and it should have been reset on xenomai mounting. Hmm, >>>maybe only that reset does not work, please check by running "echo > >>>/proc/ipipe/trace/max" before the latency test. >> >>Yes, that changed something. I have attached the new output listing. >> >> >>>You could also test if the -f option of latency works for you. You will >>>find the result of the back-trace freezing on max latency under >>>/proc/ipipe/trace/frozen. The number of back-trace points can be tuned >>>even after the event (only post-tracing required ahead-of-time tuning). >> >>Seem to work. The output has been added to the attached file. >> >>Wolfgang. >> >> >>------------------------------------------------------------------------ >> >>bash-3.00# cat /proc/ipipe/trace/max >>I-pipe worst-case tracing service on 2.6.14/ipipe-1.3-00 >>------------------------------------------------------------ >>Begin: 90358006525 cycles, Trace Points: 25 (-10/+4), Length: 69 us >> >> +----- Hard IRQs ('|': locked) >> |+---- <unused> >> ||+--- <unused> >> |||+-- Xenomai >> ||||+- Linux ('*': domain stalled) >> ||||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) >> ||||| | +- NMI noise ('N') >> ||||| | | >> Type User Val. Time Delay Function (Parent) >> fn -25 1.935 schedule+0x14 (syscall_exit_work+0x110) >> fn -23 2.075 profile_hit+0x14 (schedule+0x68) >> fn -21 2.390 sched_clock+0x14 (schedule+0xa0) >> fn -19 4.400 __ipipe_stall_root+0x14 (schedule+0x118) >> *fn -14 2.040 __ipipe_dispatch_event+0x14 (schedule+0x300) >> | *begin 0x80000001 -12 3.190 __ipipe_dispatch_event+0x240 (schedule+0x300) >> | *end 0x80000001 -9 1.990 __ipipe_dispatch_event+0x228 (schedule+0x300) >> *fn -7 4.115 schedule_event+0x14 (__ipipe_dispatch_event+0x160) >> | *begin 0x80000001 -3 1.835 __ipipe_dispatch_event+0x198 (schedule+0x300) >> | *end 0x80000001 -1 1.815 __ipipe_dispatch_event+0x1b8 (schedule+0x300) >> >>>| *begin 0x80000000 0+ 4.715 schedule+0x6ac (syscall_exit_work+0x110) >> >>:| *fn 4+ 1.225 __switch_to+0x14 (schedule+0x358) >>:| *fn 5+ 5.025 __ipipe_test_and_stall_root+0x14 (__switch_to+0x30) >>: *fn 10+ 1.445 schedule_tail+0x14 (ret_from_fork+0x60) >>: *fn 12+ 3.450 __ipipe_unstall_root+0x14 (schedule_tail+0x48) > > > Instrumentation of the maximum IRQs-off path seems to be broken. The two > functions above were entered with hard-IRQs on, so they should have > interrupted the trace path. > You mean that something in the instrumentation of local_irq*_hw() might be broken (asm/hw_irq.h on this arch), or would some tracepoint be missing somewhere? > >>:| *fn 15+ 1.145 __ipipe_grab_timer+0x14 (__ipipe_ret_from_except+0x0) >>:| *begin 0xc00466f4 16+ 1.615 __ipipe_grab_timer+0x34 (__ipipe_ret_from_except+0x0) > > > Hmm, the User Value on x86 would contain the IRQ number here. Some > forgotten dereferencing? Looks like a pointer. > That was intended, but merely useless actually. It's the value of the link register when the interrupt handler is branched to, and this value is always __ipipe_ret_from_exception. Will fix. > >>:| *fn 18+ 3.665 __ipipe_handle_irq+0x14 (__ipipe_grab_timer+0x4c) >>:| *fn 22+ 1.980 __ipipe_walk_pipeline+0x14 (__ipipe_handle_irq+0x174) >>:| *fn 24+ 2.540 ipipe_suspend_domain+0x14 (__ipipe_walk_pipeline+0xe4) >>:| *fn 26+ 3.600 __ipipe_sync_stage+0x14 (ipipe_suspend_domain+0xa8) >>:| **fn 30+ 1.650 xnintr_clock_handler+0x14 (__ipipe_sync_stage+0x1ac) >>:| **fn 31+ 2.150 xnintr_irq_handler+0x14 (xnintr_clock_handler+0x38) >>:| **fn 34+ 1.980 xnpod_announce_tick+0x14 (xnintr_irq_handler+0x58) >>:| **fn 36+ 3.395 xntimer_do_tick_aperiodic+0x14 (xnpod_announce_tick+0x3c) >>:| **fn 39+ 1.645 xnthread_periodic_handler+0x14 (xntimer_do_tick_aperiodic+0x2b4) >>:| **fn 41+ 1.420 xnpod_resume_thread+0x14 (xnthread_periodic_handler+0x3c) >>:| **fn 42+ 4.010 ipipe_test_and_stall_pipeline_head+0x14 (xnpod_resume_thread+0x34) >>:| **fn 46+ 4.910 ipipe_restore_pipeline_head+0x14 (xnpod_resume_thread+0x120) >>:| **fn 51+ 1.870 xnpod_schedule+0x14 (xnintr_irq_handler+0xf0) >>:| **fn 53+ 9.430 ipipe_test_and_stall_pipeline_head+0x14 (xnpod_schedule+0x80) >>:| **fn 62+ 2.215 ipipe_restore_pipeline_head+0x14 (xnpod_schedule+0x46c) >>:| **fn 64+ 2.865 ipipe_restore_pipeline_head+0x14 (xnpod_suspend_thread+0x94) >>:| **fn 67+ 1.945 ipipe_restore_pipeline_head+0x14 (xnpod_wait_thread_period+0x11c) >><| *end 0x80000000 69 7.185 ipipe_restore_pipeline_head+0xbc (xnpod_wait_thread_period+0x11c) >> *end 0x80000001 76 10.310 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) >> *fn 86 1.495 __ipipe_syscall_root+0x14 (DoSyscall+0x24) >> *fn 88 1.660 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) >> | *begin 0x80000001 90 0.000 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) >> >> >> >>bash-3.00# cat /proc/ipipe/trace/frozen >>I-pipe frozen back-tracing service on 2.6.14/ipipe-1.3-00 >>------------------------------------------------------------ >>Freeze: 155250522464 cycles, Trace Points: 30 (+10) >> >> +----- Hard IRQs ('|': locked) >> |+---- <unused> >> ||+--- <unused> >> |||+-- Xenomai >> ||||+- Linux ('*': domain stalled) >> ||||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) >> ||||| | +- NMI noise ('N') >> ||||| | | >> Type User Val. Time Delay Function (Parent) >>:| *fn -80+ 1.485 __ipipe_ack_irq+0x14 (__ipipe_handle_irq+0x158) >>:| *fn -78+ 1.515 ipipe_test_and_stall_pipeline_from+0x14 (__ipipe_ack_irq+0x54) >>:| **fn -77+ 1.730 ppc4xx_uic0_ack+0x14 (__ipipe_ack_irq+0x6c) >>:| *fn -75+ 1.390 __ipipe_walk_pipeline+0x14 (__ipipe_handle_irq+0x174) >>:| *end 0xc0043f18 -74+ 9.065 __ipipe_grab_irq+0x64 (__ipipe_ret_from_except+0x0) >>: *end 0x80000001 -65! 10.695 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) >>: *fn -54+ 1.650 __ipipe_syscall_root+0x14 (DoSyscall+0x24) >>: *fn -53+ 1.710 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) >>:| *begin 0x80000001 -51+ 2.660 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) >>:| *fn -48+ 4.420 hisyscall_event+0x14 (__ipipe_dispatch_event+0xa4) >>:| *fn -44+ 2.540 __rt_timer_tsc2ns+0x14 (hisyscall_event+0x224) >>:| *fn -41+ 5.630 rt_timer_tsc2ns+0x14 (__rt_timer_tsc2ns+0x48) >>:| *end 0x80000001 -36+ 4.420 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) >>: *fn -31+ 1.475 __ipipe_syscall_root+0x14 (DoSyscall+0x24) >>: *fn -30+ 1.715 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) >>:| *begin 0x80000001 -28+ 1.960 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) >>:| *fn -26+ 2.880 hisyscall_event+0x14 (__ipipe_dispatch_event+0xa4) >>:| *fn -23+ 1.610 sys_rtdm_ioctl+0x14 (hisyscall_event+0x224) >>:| *fn -22+ 2.145 _rtdm_ioctl+0x14 (sys_rtdm_ioctl+0x3c) >>:| *fn -20+ 1.325 rtdm_context_get+0x14 (_rtdm_ioctl+0x70) >>:| *fn -18+ 2.205 ipipe_test_and_stall_pipeline_head+0x14 (rtdm_context_get+0x58) >>:| **fn -16+ 1.630 ipipe_restore_pipeline_head+0x14 (rtdm_context_get+0xcc) >>:| *end 0x80000000 -14+ 2.525 ipipe_restore_pipeline_head+0xbc (rtdm_context_get+0xcc) >>: *fn -12+ 1.410 rt_tmbench_ioctl_rt+0x14 (_rtdm_ioctl+0xb0) >>: *fn -10+ 1.940 tracer_ioctl+0x14 (rt_tmbench_ioctl_rt+0x44) >>: *fn -9+ 1.550 ipipe_trace_frozen_reset+0x14 (tracer_ioctl+0x148) >>: *fn -7+ 1.600 __ipipe_global_path_lock+0x14 (ipipe_trace_frozen_reset+0x2c) >>:| *begin 0x80000001 -5+ 3.920 __ipipe_global_path_lock+0x98 (ipipe_trace_frozen_reset+0x2c) >>:| *end 0x80000001 -2+ 2.020 __ipipe_global_path_unlock+0x84 (ipipe_trace_frozen_reset+0x8c) >>< *freeze 0x00000000 0 3.980 tracer_ioctl+0x150 (rt_tmbench_ioctl_rt+0x44) > > > Here we should see the observed latency in User Value, reported with the > ioctl down to the driver, then to ipipe_trace_freeze. 0 indicates some > remaining minor issue here as well. Uh? Oh, well... > > >> *end 0x80000001 3 4.270 __ipipe_dispatch_event+0x1b8 (__ipipe_syscall_root+0x4c) >> *fn 8 1.310 __ipipe_syscall_root+0x14 (DoSyscall+0x24) >> *fn 9 1.740 __ipipe_dispatch_event+0x14 (__ipipe_syscall_root+0x4c) >> | *begin 0x80000001 11 1.690 __ipipe_dispatch_event+0x240 (__ipipe_syscall_root+0x4c) >> | *fn 12 3.020 hisyscall_event+0x14 (__ipipe_dispatch_event+0xa4) >> | *fn 15 1.750 __rt_task_wait_period+0x14 (hisyscall_event+0x224) >> | *fn 17 1.760 rt_task_wait_period+0x14 (__rt_task_wait_period+0x44) >> | *fn 19 1.385 xnpod_wait_thread_period+0x14 (rt_task_wait_period+0x88) >> | *fn 20 2.465 ipipe_test_and_stall_pipeline_head+0x14 (xnpod_wait_thread_period+0x3c) >> | **fn 23 0.000 xnpod_suspend_thread+0x14 (xnpod_wait_thread_period+0x9c) >>bash-3.00# >> > > > Jan > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Adeos-main mailing list > Adeos-main@domain.hid > https://mail.gna.org/listinfo/adeos-main -- Philippe. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2006-05-02 7:49 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-04-26 22:13 [Xenomai-core] I-pipe latency tracer for ppc Philippe Gerum 2006-05-01 18:44 ` Wolfgang Grandegger 2006-05-01 18:58 ` [Adeos-main] " Jan Kiszka 2006-05-01 19:33 ` Wolfgang Grandegger 2006-05-01 21:42 ` Jan Kiszka 2006-05-02 7:49 ` Philippe Gerum
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.