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



Reply via email to