IRQ's off issue
Greg Gallagher
greg at embeddedgreg.com
Mon Mar 2 17:01:59 CET 2020
On Mon, Mar 2, 2020 at 7:45 AM Jan Kiszka via Xenomai
<xenomai at xenomai.org> wrote:
>
> On 02.03.20 12:03, Bradley Valdenebro Peter (DC-AE/ESW52) via Xenomai wrote:
> > Hello Xenomai team,
> >
> > We need you help understanding and solving a possible IRQ's off issue.
> > We are running a Xenomai/Linux setup on a Zynq Z-7020 SoC (We run Linux on CPU0 and Xenomai on CPU1):
> > - Linux version 4.4.0-xilinx (gcc version 8.3.0 (Buildroot 2019.02-00080-gc31d48e) ) #1 SMP PREEMPT
> > - ipipe ARM patch #8
> > - Xenomai 3.0.10
> >
> > Lately we have been experiencing that our highest priority real time Xenomai thread sort of halts for around 1ms every now and then.
> > After some investigation and tests we decided to enable ipipe trace to measure IRQs-off times. See below the output of /proc/ipipe/trace/max
> >
> > I-pipe worst-case tracing service on 4.4.0-xilinx/ipipe release #8
> > -------------------------------------------------------------
> > CPU: 0, Begin: 2944366216549 cycles, Trace Points: 2 (-10/+1), Length: 780 us
> > Calibrated minimum trace-point overhead: 0.288 us
> >
> > +----- Hard IRQs ('|': locked)
> > |+-- Xenomai
> > ||+- Linux ('*': domain stalled, '+': current, '#': current+stalled)
> > ||| +---------- Delay flag ('+': > 1 us, '!': > 10 us)
> > ||| | +- NMI noise ('N')
> > ||| | |
> > Type User Val. Time Delay Function (Parent)
> > | +begin 0x80000001 -12 0.414 ipipe_stall_root+0x54 (<00000000>)
> > | #end 0x80000001 -11 0.822 ipipe_stall_root+0x8c (<00000000>)
> > | #begin 0x80000001 -11 0.414 ipipe_test_and_stall_root+0x5c (<00000000>)
> > | #end 0x80000001 -10 1.095 ipipe_test_and_stall_root+0x98 (<00000000>)
> > | #begin 0x90000000 -9 0.665 __irq_svc+0x58 (arch_cpu_idle+0x0)
> > | #begin 0x00000025 -8 2.883 __ipipe_grab_irq+0x38 (<00000000>)
> > |#*[ 558] SampleI 49 -5 2.619 xnthread_resume+0x88 (<00000000>)
> > |#*[ 0] -<?>- -1 -3 2.052 ___xnsched_run+0xfc (<00000000>)
> > | #end 0x00000025 -1 0.760 __ipipe_grab_irq+0x7c (<00000000>)
> > | #end 0x90000000 0 0.530 __ipipe_fast_svc_irq_exit+0x1c (arch_cpu_idle+0x0)
> >> | #begin 0x80000000 0! 780.110 arch_cpu_idle+0x9c (<00000000>)
> > <| +end 0x80000000 780 0.570 ipipe_unstall_root+0x64 (<00000000>)
> > | +begin 0x90000000 780 0.000 __irq_svc+0x58 (ipipe_unstall_root+0x68)
>
> Looks like the CPU was idle and received no IRQ during that time. Is
> some power management active? Is some timer misprogrammed? Or where
> should the next interrupt have from?
>
> >
> > We have trouble understanding the output but we can see a max length of 780us on CPU0. We find this value extremely high.
> > With our current requirements anything beyond 10us is not acceptable.
>
> 780 us is definitely off on that target, but 10 us will likely be too
> ambitious as well. Maybe, maybe, with well configured strict core
> isolation, practically no Linux load on the RT core and your critical RT
> code path always in cache... But I would consider that highly risky,
> given this low-end CPU on that target SoC.
>
> Jan
>
Just to add, this chip (like most cortex-A9's) uses the PL-310 cache
controller. This controller has high latency, in the past it has
impacted the performance of a number of SOC's.
This link shows the an issue found on the imx6:
https://www.xenomai.org/pipermail/xenomai/2018-July/039268.html
You may run into this issue with the Zynq as well.
-Greg
> >
> > Can someone with experience with the ipipe tracer please help us understand what is going on and how can we fix it?
> >
> > Thanks in advance for your support.
> >
> > Best regards.
> > Peter Bradley
> >
> >
>
> --
> Siemens AG, Corporate Technology, CT RDA IOT SES-DE
> Corporate Competence Center Embedded Linux
>
More information about the Xenomai
mailing list