First off, on a multicore (SMP) system, the way that hardware interrupts are routed to CPU cores tends to be very board and interrupt controller-specific. Having said that, the generic IRQ layer on Linux provides a very useful abstraction: it allows for (and implements) interrupt load balancing so that no CPUs (of set of CPUs) gets overloaded. There's even frontend utilities, irqbalance(1) and irqbalance-ui(1), that allow the admin (or root user) to perform IRQ balancing (irqbalance-ui is a ncurses frontend to irqbalance).
Can you change the interrupts that have been sent to a processor core(s)? Yes, via the /proc/irq/IRQ/smp_affinity pseudofile! It's a bitmask specifying the CPUs that this IRQ is allowed to be routed to. The trouble is that the default setting is to always allow all CPU cores to handle the interrupt by default. For example, on a system with eight cores, the value...