在我的主机(RHEL 6.3,26.x内核)上,eth2生成irq#60-65。 我通过/ proc / interruptsvalidation了它。
/ proc / irq / 61-65 / smp_affinity显示了5个队列的以下位集
1000
0040
0400
0100
0010
我正在阅读他们作为CPU核心ID: –
我读他们正确吗?
我正在运行一个networking应用程序,它在eth2上每秒收到10k条消息。 奇怪的是,我没有看到任何上面的CPU核心ID很忙,而只有奇数的CPU核心ID很忙。 我无法将smp_affinity与cpu活动联系起来。
另外,/ sys / class / net / eth2 / queues / rx- [0-4] / rps_cpus是0000.是否表示RPS被禁用?
更新:1除上面之外,irqbalance守护进程正在运行。 可以覆盖smp_affinity?
更新:2 irqbalance –debug显示以下
包0:包含cpu 0,2,4,6,8,10,12包1:包含cpu 1,3,5,7,9,11,13,15
irqbalance如何使用numa系统的包信息。 在我的系统上运行lstopo会生成Socket 0节点0:内核0,2,4,6节点1:内核8,10,12,14
套接字1节点2:核心1,3,5,7节点3:核心9,11,13,15
看irmabalance的numa拓扑结构和包,似乎irqs将遍布节点,但限于一个套接字。 不知道为什么。
另外,使用lspci,我可以看到eth2使用的是PCI总线4,而节点0是在PCI总线4上。所以在我看来,最常见的情况是在节点0上传播eth 2中断,而似乎是通过Socket 1。
我正在阅读他们作为CPU核心ID: – …我读他们是正确的?
由于基本上这些数字对于每个proc编号只是2的幂,所以可以使用这个使用bc做log2计算的代码片段来获得N次幂:
for N in 1000 40 400 100 10; do echo -n "$N is " echo "ibase=16; l($N) / l(2)" | bc -l | sed -e 's!\.000.*!!g' done
→
1000 is 12 40 is 6 400 is 10 100 is 8 10 is 4
更新:除上述之外,irqbalance守护进程正在运行。 可以覆盖smp_affinity?
当然,如果你想手动控制,你需要禁用irqbalance 。