Hello List,
i have a interrupt latency of ~ 260 µSec and i do not know why.
I am using kernel 2.4.28 + adeos r10
Have a Celeron 2 GHz. Single CPU with IO-APIC (But tested this also with noapic
boot parameter)
APM is disabled (The IDLE calls could cause some latency)
Running in Textmode - so no X is started.
Having a IDE-Device which dose not use DMA.
Any more Infos needed ?
The results are 4 to 8 µSec latency in the Realtime Domain normaly but somtimes
i see ~260 - 270 µSek.
The only thing i found in the kernel tree is the prink() funktion which uses
some spinlock which disables irq's.
Could this be the source. Or has anybody a idea where to search deeper ?
How i mesure the delay: (This is only a test, because i have latency problems
with an ugly device driver)
1.) Connect pin 9 to 10 of my ParPort. So if i set Pin 10 up it aserts a IRQ 7
on Pin 9
2.) Write a module to messure the latency.
Short description:
- creating a proc-fs entry
- create a relatime domain with higher Priority then Linux.
- in the domain main adeos_virtualize_irq(7, &rt_latency_isr,rt_latency_ack,
IPIPE_PASS_MASK | IPIPE_HANDLE_MASK );
The proc-fs read function i will
{
interruptcount=0;
adeos_hw_local_irq_save( flags );
do_gettimeofday(&tv[0]);
outb(0x80,SPPDATAPORT); /* assert the interrupt signal */
adeos_hw_local_irq_restore( flags );
while( !interruptcount )
{
latency_sleep(1);
if(signal_pending(current)) break;
}
calc timediff between tv[0] tv[1] tv[2] and tv[3] and give the reslut back
}
in rt_latency_ack,
{
do_gettimeofday(&tv[1]);
return 0;
}
in rt_latency_isr the realtime isr
{
do_gettimeofday(&tv[2]);
}
in the Linux isr
{
do_gettimeofday(&tv[3]);
outb(0x00,SPPDATAPORT); /* deassert the interrupt signal */
interruptcount++;
}
Could anybody help ?
Thanks
Dirk Roloff