IRQ Routing.
Hi,
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.
Cheers
James
Quoted 4 lines
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.
Quoted 11 lines · Martin J. Bligh
Quoted 3 lines
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.
I really need more info than that.
I want info like: -
PCI card in slot X, Is using [LNKA] which is being routed via IO-APIC to
IRQ Y using Edge triggered Interrupt.
And then I need a tool to be able to change those settings, to for example: -
PCI card in slot X, Is using [LNKF] which is being routed via simple PIC to IRQ Y using Level triggered Active low Interrupt.
"lspci -vvvvvv" gives me some of the info, and on a working system, /proc/interrupts combined with lspci -vvvvv gives me all I need, but I need to be able to tinker with the IRQ rounting after boot up, to test what the IRQ settings should be, even if the kernel set them up wrong.
Cheers
James
Re: IRQ Routing. [A 2.6 question about smp irq balancing]
In reply to Martin J. BlighQuoted 9 lines · "Martin J. Bligh" <[email protected]>, on Mon Oct 20, 2003 [07:23:44 AM] said:
Quoted 4 lines
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.
Re: IRQ Routing. [A 2.6 question about smp irq balancing]
Quoted 33 lines
Quoted 9 lines
Quoted 4 lines
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
Quoted 13 lines
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;Re: IRQ Routing. [A 2.6 question about smp irq balancing]
"Martin J. Bligh" <[email protected]>, on Tue Oct 21, 2003 [07:34:01 AM] said:
[paul said]
Quoted 7 lines
Quoted 4 lines
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:
Hi; Thanks; This seems to generate a more of a distribution.
(uptime 3 hours) You are correct that I notice no performance difference.
CPU0 CPU1
0: 5011222 5035676 IO-APIC-edge timer 1: 5441 0 IO-APIC-edge i8042 2: 0 0 XT-PIC cascade 3: 8203 1 IO-APIC-edge serial 4: 58980 356739 IO-APIC-edge serial 5: 0 0 IO-APIC-edge eth0 8: 2 0 IO-APIC-edge rtc 12: 4968 3423 IO-APIC-edge i8042 14: 119080 62085 IO-APIC-edge ide0 15: 142 0 IO-APIC-edge ide1 16: 101 1 IO-APIC-level eth1 17: 110 10782 IO-APIC-level eth2 19: 1776 0 IO-APIC-level Ensoniq AudioPCI NMI: 10044606 10041826 LOC: 10042436 10042460 ERR: 0 MIS: 0
Quoted 17 lines
diff -urN
linux-2.6.0-test4-clean/arch/i386/kernel/io_apic.clinux-2.6.0-test4-div10/arch/i386/kernel/io_apic.c
---linux-2.6.0-test4-clean/arch/i386/kernel/io_apic.c2003-09-15 06:46:02.000000000 -0700
+++linux-2.6.0-test4-div10/arch/i386/kernel/io_apic.c2003-09-15 06:47:17.000000000 -0700(quoted diff) +1
-1@@ -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;