On Thu, Nov 6, 2008 at 8:51 AM, Gilles Chanteperdrix <[EMAIL PROTECTED]> wrote: > Matthew Fornero wrote: >> On Tue, Nov 4, 2008 at 2:21 PM, Gilles Chanteperdrix >> <[EMAIL PROTECTED]> wrote: >>> Matthew Fornero wrote: >>>> Hello, >>>> >>>> I have an application on x86 that uses an external event (either an >>>> interrupt or a DMA write to a specific memory location) to trigger code >>>> execution, and I believe the local timer interrupt is contributing a >>>> significant amount of jitter. This is a bit of a unique case where the only >>>> code that should be executing on that core is triggered by the event, so >>>> there is no need for anything timer based. >>>> >>>> I'm using a dual core processor with a quiet system, and have placed all of >>>> the "moveable" interrupts on CPU 0 (0-NR_IRQs using >>>> ipipe_set_irq_affinity). >>>> Looking at /proc/xenomai/irq and /proc/interrupts shows only the local >>>> timer >>>> interrupt increment on CPU 1. When using the DMA write to trigger >>>> execution, >>>> placing "sti"/"cli" around the polling routine improves the jitter >>>> substantially. >>>> >>>> Based on the above, is there some way to do one of the following: >>>> >>>> 1). Make a user space task higher priority than the timer interrupt >>>> >>>> or >>>> >>>> 2). A proper way to disable the local timer (vs. disabling all interrupts) >>>> on specific cores, as these cores would only need to run event based >>>> routines. >>> You can disable Xenomai timer interrupt by calling xnpod_stop_timer in >>> kernel-space. However, what you see in /proc/interrupt is not Xenomai >>> timer it is Linux', and it causes a bit of jitter (the time for the >>> I-pipe to mask, ack and return from interrupt). Disabling it would >>> require butchery in Linux code, but maybe simply masking the timer >>> interrupt could work. >>> >>> -- >>> Gilles. >> >> I could not find any reference to the function xnpod_stop_timer in the >> xenomai code (searched through the cross-reference). >> I tried using xnarch_stop_timer(cpu), but this seems to disable the >> timers across all CPUs, rather than just the one passed. >> What I'd really like to do is simply mask the interrupt temporarily >> while my critical section is executing (the DMA polling routine)-- is >> there any way to do this? I can go into the local APIC and change the >> mask bits, but using some sort of API seems like it'd be cleaner. > > xnpod_stop_timer no longer exists ! The function to disable irqs is > rt_intr_disable if you use the native skin. > > -- > Gilles. >
On Thu, Nov 6, 2008 at 8:51 AM, Gilles Chanteperdrix - Show quoted text - <[EMAIL PROTECTED]> wrote: > Matthew Fornero wrote: >> On Tue, Nov 4, 2008 at 2:21 PM, Gilles Chanteperdrix >> <[EMAIL PROTECTED]> wrote: >>> Matthew Fornero wrote: >>>> Hello, >>>> >>>> I have an application on x86 that uses an external event (either an >>>> interrupt or a DMA write to a specific memory location) to trigger code >>>> execution, and I believe the local timer interrupt is contributing a >>>> significant amount of jitter. This is a bit of a unique case where the only >>>> code that should be executing on that core is triggered by the event, so >>>> there is no need for anything timer based. >>>> >>>> I'm using a dual core processor with a quiet system, and have placed all of >>>> the "moveable" interrupts on CPU 0 (0-NR_IRQs using >>>> ipipe_set_irq_affinity). >>>> Looking at /proc/xenomai/irq and /proc/interrupts shows only the local >>>> timer >>>> interrupt increment on CPU 1. When using the DMA write to trigger >>>> execution, >>>> placing "sti"/"cli" around the polling routine improves the jitter >>>> substantially. >>>> >>>> Based on the above, is there some way to do one of the following: >>>> >>>> 1). Make a user space task higher priority than the timer interrupt >>>> >>>> or >>>> >>>> 2). A proper way to disable the local timer (vs. disabling all interrupts) >>>> on specific cores, as these cores would only need to run event based >>>> routines. >>> You can disable Xenomai timer interrupt by calling xnpod_stop_timer in >>> kernel-space. However, what you see in /proc/interrupt is not Xenomai >>> timer it is Linux', and it causes a bit of jitter (the time for the >>> I-pipe to mask, ack and return from interrupt). Disabling it would >>> require butchery in Linux code, but maybe simply masking the timer >>> interrupt could work. >>> >>> -- >>> Gilles. >> >> I could not find any reference to the function xnpod_stop_timer in the >> xenomai code (searched through the cross-reference). >> I tried using xnarch_stop_timer(cpu), but this seems to disable the >> timers across all CPUs, rather than just the one passed. >> What I'd really like to do is simply mask the interrupt temporarily >> while my critical section is executing (the DMA polling routine)-- is >> there any way to do this? I can go into the local APIC and change the >> mask bits, but using some sort of API seems like it'd be cleaner. > > xnpod_stop_timer no longer exists ! The function to disable irqs is > rt_intr_disable if you use the native skin. > > -- > Gilles. > A couple of follow ups: 1). I have not been able to find the RT_INTR pointer associated with the local APIC timer interrupt-- is there some documentation on this? Basically, I would need something to pass to rt_intr_disable 2). rt_intr_disable looks like it will disable the interrupt across all CPUs. Is there any way to disable the Xenomai local APIC timer handler on just a single CPU? -- Matthew Fornero _______________________________________________ Xenomai-help mailing list [email protected] https://mail.gna.org/listinfo/xenomai-help
