我有服务器处理大量的networking数据包。 我已经看到证据表明CPU0上运行的用户空间进程在networking负载很高时会影响性能。 我很确定这涉及到中断处理,特别是对于networking设备。
因此,我正在尝试改变networking(eth)设备的亲和力,以testing我的假设,看看我能否提高性能。
我明白,为了改变IRQ亲和力,我必须改变/proc/irq/XXX/smp_affinity 。
当我改变该文件中的值时,我只能将中断处理从一个CPU移动到另一个CPU。 例如,在一个4核心系统中,我可以将该值设置为1,2,4或8,并且我看到中断分别从核心0,1,2和3(通过监视/proc/interrupts )移动。 但是,如果我将亲和力值设置为任意核心组合,那么在所有核心中都看不到中断。 他们始终坚持一个核心。 例如,
ff :使用CPU0 12 :使用CPU4 (因此,似乎只有使用最低指定核心)
我已经停止irqbalance守护进程的情况下,这是影响的事情(虽然我怀疑不是我的理解是, irqbalance会改变smp_affinity文件的值,我不明白这一点)。
我的问题是:
NB我已经在2台机器上试了这个:在VBox中运行的2个虚拟机,2个内核,eth设备使用IO-APIC ; 具有4个内核(8个超线程)和使用PCI-MSI eth设备的Ubuntu真机。
作为一个奖励问题:
PCI中断? 从我所了解的情况来看, IO-APIC中断肯定是可能的。