Re: IRQ Routing. [A 2.6 question about smp irq balancing]

From: Martin J. Bligh
Date: Tue Oct 21 2003 - 09:35:06 EST


>> > Are their any linux tools to allow the user to view irq routing details,
>> > and maybe change the routing after boot ?
>> >
>> > This might be useful in special cases.
>>
>> Yeah, "cat /proc/interrupts" and
>> "echo <cpu_bitmask> > /proc/irq/<number>/smp_affinity"
>>
>> M.
>
> Hi;
>
> Here is my /proc/interrupts for 2.6.0-test6:
>
> CPU0 CPU1
> 0: 10442 1795758405 IO-APIC-edge timer
> 1: 737209 0 IO-APIC-edge i8042
> 2: 0 0 XT-PIC cascade
> 3: 517 1 IO-APIC-edge serial
> 4: 100488033 1 IO-APIC-edge serial
> 5: 0 0 IO-APIC-edge eth0
> 8: 2 0 IO-APIC-edge rtc
> 12: 1626560 1 IO-APIC-edge i8042
> 14: 8988748 8 IO-APIC-edge ide0
> 15: 377275 1 IO-APIC-edge ide1
> 16: 1364704 2 IO-APIC-level eth1
> 17: 857789 144630 IO-APIC-level eth2
> 19: 165579 1 IO-APIC-level Ensoniq AudioPCI
> NMI: 1795768424 1795763795
> LOC: 1795877980 1795878044
> ERR: 0
> MIS: 351
>
> Now, on 2.4 kernels, both columns are about even.
> Upon noticing this, I tried to get more interrupts on cpu1.
> You can see I got some on eth2, by running many 'ping -f's at the
> same time. I havent been able to get anything more out of ide[01]
> for cpu1, even though Ive run many -j4 compiles of huge packages,
> which coincided with other things that bring my load up to 8+ over
> the course of 20 days of uptime. /proc/irq/<num>/smp_affinity
> is 3 (ie. both cpus) for all <num>. I was able to induce interrupts
> on cpu1 for ide0 by setting it to 2.
> Ok, my question is, is this how it is supposed to be?
> I ask because I am seeing a throughput decrease on 2.6 v 2.4
> on hdparm -t, bonnie, kernel compile benchmarks, though interactivity
> seems to be better.

I doubt that's caused by interrupt load, but try this:

diff -urN linux-2.6.0-test4-clean/arch/i386/kernel/io_apic.c
linux-2.6.0-test4-div10/arch/i386/kernel/io_apic.c
--- linux-2.6.0-test4-clean/arch/i386/kernel/io_apic.c 2003-09-15
06:46:02.000000000 -0700
+++ linux-2.6.0-test4-div10/arch/i386/kernel/io_apic.c 2003-09-15
06:47:17.000000000 -0700
@@ -393,7 +393,7 @@
unsigned long max_cpu_irq = 0, min_cpu_irq = (~0);
unsigned long move_this_load = 0;
int max_loaded = 0, min_loaded = 0;
- unsigned long useful_load_threshold = balanced_irq_interval +
10;
+ unsigned long useful_load_threshold = (balanced_irq_interval +
10) / 10;
int selected_irq;
int tmp_loaded, first_attempt = 1;
unsigned long tmp_cpu_irq;



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/