Re: Interrupts being reported twice?

From: John Baldwin <jhb_at_freebsd.org>
Date: Tue, 19 Oct 2004 17:10:13 -0400
On Monday 19 April 2004 11:46 am, Daniel Eriksson wrote:
> Robert Watson wrote:
> > I see the same problem in 4.x.  Drew and I exchanged some e-mails
> > comiserating over the fact that this seems to be the case on a lot of
> > machines.  Not that this is necessarily what you're seeing,
> > but it would
> > be interesting to know whether in previous configurations you see
> > different symptoms of a similar problem.
>
> With the old configuration (a kernel from 3 or 4 days ago, ACPI disabled
> (but APIC enabled since it's an SMP system), and two of the PCI cards
> switched around), this is what I was getting:
>
> (copied from the "Current crash on today's kernel" thread)
>
> # vmstat -i
> interrupt                          total       rate
> irq1: atkbd0                           2          0
> irq0: clk                        5142796        995
> irq4: sio0                          1056          0
> irq6: fdc0                            10          0
> irq8: rtc                         658343        127
> irq13: npx0                            1          0
> irq14: ata0                       205255         39
> irq15: ata1                       205046         39
> irq16: em0 atapci1              11635073       2251
> irq17: em1 ahc0++                6549430       1267
> irq19: atapci4+                   442467         85
> Total                           24839479       4807
>
> As you can see, em0 (the source with the highest interrupt load) didn't sit
> on its own ithread. Instead it shared it with the Promise SATA150 TX4
> controller. em1/ahc0/atapci2+ shared irq17, and the interrupt count on that
> ithread looks about right.
>
> Something in this configuration has crashed my machine 3 times in 6 days,
> so I'm not looking to go back unless the new config also results in
> crashes.
>
>
> Back to the current config (ACPI enabled):
> What about running the kernel with DEVICE_POLLING enabled? I've seen posts
> here saying it doesn't make any sense to do so in the SMP case, but I've
> also seen people report that they are doing it (by modding the appropriate
> file to allow the compile to finish). Does it really not make any sense
> doing it in SMP, or is it a matter of insufficient testing/debugging of the
> code, or are there other reasons not to do it?
>
> My thinking here is that if the NIC doesn't generate any interrupts, the
> ithread that reports the "ghost" interrupts (atapci1+) should no longer do
> that.
>
> Maybe the real question is: does the ithread that reports the "ghost"
> interrupts actually service all the interrupts, or is 'vmstat -i' reporting
> something that really doesn't consume any CPU time?

The problem is in hardware, and the CPU is actually receiving interrupts from 
the interrupt controller for both IRQs.  Each ithread is scheduled and all of 
your ISRs are running, though if they are for smarter devices they will 
return after doing an interrupt status register check.

-- 

John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/
Received on Tue Oct 19 2004 - 19:13:26 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:18 UTC