Skip to contentSkip to conversation

System time slowdown after upgrading from 2.4 to 2.6

DISCUSSION Ivan Kalatchev 3 participants 3 messages Aug 19, 2004

lore
Share & tools
lore
#0 lore raw

Hi all,

We have a project that uses PC-104 (ZFx86 100 MHz CPU) Linux box to acquire some seismological signals. System resides on a M-Systems DiskOnChip 2000. We have an ISA acquisition card that acquires data into FIFO buffer and triggers interrupt as soon as 341 points were acquired (then this data is read out in interrupt handler routine). System worked perfectly well when we used 2.4.18 kernel. When I printk-ed system time (do_gettimeofday) in interrupt routine, at 1kHz sampling frequency interrupts were reported every 341 msec as they should do.
But after I've switched to 2.6 kernel (2.6.7 - preempted, then I tried 2.6.8 - non-preempted) time between successive interrupts at 1kHz became 335 msec, losing 6 msec at each interrupt. What is interesting, when sampling frequency is 10 kHz, with 2.4.18 kernel interrupts are reported every 34 msec, which is right, but with 2.6 kernels interrupts are coming at 28 msec interval, again losing same 6 msec!

Any ideas why this might happen?

Please, CC me all answers/comments posted to the list in response to this posting.
Regards,

Ivan Kalatchev

Senior Software Developer
Engineering Seismology Group Canada Inc.
ISO 9001-2000
1 Hyperion Court, Kingston,
Ontarion, Canada K7K 7G3
phone: (613) 548-8287 ext.247
fax: (613) 548-8917

#1 lore raw
Quoted 15 lines · Ivan Kalatchev

We have a project that uses PC-104 (ZFx86 100 MHz CPU) Linux box to acquire some seismological signals. System resides on a M-Systems DiskOnChip 2000. We have an ISA acquisition card that acquires data into FIFO buffer and triggers interrupt as soon as 341 points were acquired (then this data is read out in interrupt handler routine). System worked perfectly well when we used 2.4.18 kernel. When I printk-ed system time (do_gettimeofday) in interrupt routine, at 1kHz sampling frequency interrupts were reported every 341 msec as they should do.
But after I've switched to 2.6 kernel (2.6.7 - preempted, then I tried 2.6.8 - non-preempted) time between successive interrupts at 1kHz became 335 msec, losing 6 msec at each interrupt. What is interesting, when sampling frequency is 10 kHz, with 2.4.18 kernel interrupts are reported every 34 msec, which is right, but with 2.6 kernels interrupts are coming at 28 msec interval, again losing same 6 msec!

Quoted 1 line

Any ideas why this might happen?

Hmm. Strange. Just to remove some variables, are you running NTP on the system? Could you also send your 2.6 dmesg?

thanks
-john

#2 lore raw
In reply to Ivan Kalatchev
Quoted 6 lines · Ivan Kalatchev

We have a project that uses PC-104 (ZFx86 100 MHz CPU) Linux box to acquire some seismological signals. System resides on a M-Systems DiskOnChip 2000. We have an ISA acquisition card that acquires data into FIFO buffer and triggers interrupt as soon as 341 points were acquired (then this data is read out in interrupt handler routine). System worked perfectly well when we used 2.4.18 kernel. When I printk-ed system time (do_gettimeofday) in

Quoted 8 lines

interrupt routine, at 1kHz sampling frequency interrupts were reported every 341 msec as they should do.
But after I've switched to 2.6 kernel (2.6.7 - preempted, then I tried 2.6.8 - non-preempted) time between successive interrupts at 1kHz became 335 msec, losing 6 msec at each interrupt. What is interesting, when sampling frequency is 10 kHz, with 2.4.18 kernel interrupts are reported every 34 msec, which is right, but with 2.6 kernels interrupts are coming at 28 msec interval, again losing same 6 msec!

How long does the interrupt handler take to read the data? You might lose timer interrupts during data readout. Timer interrupts in 2.6 are 10 times as frequent as in 2.4
Try changing

  # define HZ   1000
back to
  # define HZ    100
in include/asm-i386/param.h. If that helps, just leave it that way.

Tim