On Tue, Apr 18, 2006 at 08:19:17PM +0200, Arjan van de Ven wrote:
but spreading IRQ's across all of the CPU's doesn't seem like it's
ever the right answer.
well it is in some cases, imagine having 2 cpus and 2 gige nics that are
very busy doing webserving. That's an obvious case where 1-nic-per-cpu
ends up doing the right thing... the way it ends up is that each nic has
a full cpu for itself and it's own apaches... almost fully independent
of the other one. Now if you moved both irqs to the same cpu, the
apaches would follow, because if they didn't then you'd be bouncing
their data *all the time*. And at that point the other cpu will become
bored ;)
So what happens with a dual amd64 system where each CPU has its "own"
NIC? Something like this:
MEM0 <--> CPU0 <--- HT ---> CPU1 <--> MEM1
^ ^
| |
HT HT
| |
v v
PCI bridge0 PCI1 bridge
^ ^
| |
PCI PCI
| |
v v
GigE NIC0 GigE NIC1
The "best" approach would be to run an Apache on each CPU using local
memory and NIC and having the IRQs handled by the local CPU. Does the
irq balancer allow such a configuraion, or would it be hamperd by the
process scheduler deciding to run both Apaches on a single CPU?