2

As part of the experiments that we are running to optimize the performance of the applications on our Linux box we are trying to assign all the network interrupts to a single cpu core.

Unfortunately, it doesn't seem to work the way it should. E.g. we have an interrupt here:

[root@shou18librh05 ~]# cat /proc/interrupts | grep 107
107:          0          0          0          0          0          0              0          0       PCI-MSI-X  eth-mlx4-0

Where is it currently handled?

[root@shou18librh05 ~]# cat /proc/irq/107/smp_affinity
7fffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff

Trying to move it to, say, first core:

[root@shou18librh05 ~]# echo 1 > /proc/irq/107/smp_affinity

Did it move?

[root@shou18librh05 ~]# cat /proc/irq/107/smp_affinity
7fffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff

No...

Does anyone have an idea why this can be happening? Googling didn't give any obvious solutions/hints...

Linux is:

[root@shou18librh05 ~]# uname -a
Linux shou18librh05 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
squillman
  • 37,618
  • 10
  • 90
  • 145
sad2k
  • 21
  • 2

1 Answers1

0

Most probably there are some disabled devices on your system which have utilized the interrupt vector space of CPU1, and particulary as the devices have not been enabled, their interrupt number not appearing in /proc/interrupts. The irq to cpu vector assignment is done in APIC of kernel.

Please try if it works for you:

  1. Identify any devices that are not connected but yet not have been enabled,
  2. enable them, for eg: ifup (for interfaces)
  3. Their int number should show up in /proc/interrupts
  4. Try and assign all cpus but 1 to all interrupts.
  5. Then try assign CPU1 to interrupts of your liking. But do keep in mind their is vector space limit per CPU, so their should be max number of interrupts that can be serviced by a particular CPU.
bummi
  • 162
  • 2
  • 2
  • 9