Il problema mi si è presentato dopo che ho visto l'output di /proc/interrupts; in pratica, quasi tutte le IRQ venivano inviate ad una delle due CPU!
Dopo aver abilitato nel kernel l'opzione IRQ_BALANCING, adesso la situazione è questa:
Codice: Seleziona tutto
CPU0 CPU1
0: 357 0 XT-PIC-XT timer
1: 11046 9 IO-APIC-edge i8042
8: 1 1 IO-APIC-edge rtc
9: 0 0 IO-APIC-fasteoi acpi
12: 257475 131 IO-APIC-edge i8042
15: 103 25 IO-APIC-edge ide1
16: 1443639 1405954 IO-APIC-fasteoi serial
17: 34693 12925 IO-APIC-fasteoi sata_nv, ohci_hcd:usb2
18: 154755 1 IO-APIC-fasteoi sata_nv, HDA Intel
19: 262511 1 IO-APIC-fasteoi saa7133[0], saa7133[0]
20: 443600 1 IO-APIC-fasteoi eth0
21: 3 1 IO-APIC-fasteoi ehci_hcd:usb1
22: 2 1 IO-APIC-fasteoi ohci1394
23: 385288 1 IO-APIC-fasteoi nvidia
NMI: 0 0
LOC: 4447562 4447643
ERR: 1
MIS: 0
Cercando con Google ho trovato diversi documenti nei quali si spiegava che il bilanciamento delle IRQ potrebbe essere anche controproducente; infatti, distribuendo equamente le IRQ tra tutte le CPU si potrebbe verificare in certi casi una congestione del sistema!
So che esiste anche un demone per Linux che risolve tutti questi problemi svolgendo il suo lavoro in userspace; a parte però il fatto che si tratterebbe dell'ennesimo demone (ce ne sono sin troppi già in esecuzione), non riesco a capire che senso abbia fare cose del genere in userspace. Se c'è una cosa che dovrebbe essere fatta in kernelspace quella è proprio il bilanciamento delle IRQ!
Voi che ne pensate?
