我遇到了 CPU7 过载的问题。我发现这是由 eth0 中断引起的,如下面的 cat /proc/interrupts 中所示。我使用的是 2.6.35.2 内核和四核 AMD Opteron(tm) 处理器 2354。我希望所有内核都支持该中断,因此我尝试回显 ff > /proc/irq/16/smp_affinity,但它不起作用。如果我设置 1、2、4、8、16 等,它适用于每个内核,但不适用于多个内核。我还有其他服务器,其中 smp_affinity 设置为“ff”,它可以正常工作,但这些机器运行在英特尔上。
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
0: 126 0 0 0 0 0 0 0 IO-APIC-edge timer
1: 0 0 0 0 0 0 0 8 IO-APIC-edge i8042
9: 0 0 0 0 0 0 0 0 IO-APIC-fasteoi acpi
10: 0 0 0 0 0 0 0 2 IO-APIC-fasteoi ehci_hcd:usb1, ohci_hcd:usb2, ohci_hcd:usb3
11: 0 0 0 0 0 0 0 0 IO-APIC-fasteoi sata_svw
14: 0 0 0 0 0 0 0 44 IO-APIC-edge ide0
16: 523739 38196 20957 1288960 40051 33985 99858 12142246 IO-APIC-fasteoi eth0
28: 33784 0 1 24 0 4 1017 199001 IO-APIC-fasteoi megasas
NMI: 0 0 0 0 0 0 0 0 Non-maskable interrupts
LOC: 51149605 52755152 47000502 38164758 47335488 49653390 44361349 19201949 Local timer interrupts
SPU: 0 0 0 0 0 0 0 0 Spurious interrupts
PMI: 0 0 0 0 0 0 0 0 Performance monitoring interrupts
PND: 0 0 0 0 0 0 0 0 Performance pending work
RES: 29252262 26917272 17461908 9927632 26959155 24081482 15451952 5680615 Rescheduling interrupts
CAL: 86814 186 188 177 9656 176 169 176 Function call interrupts
TLB: 13134 52049 17599 15275 9937 18316 15062 9433 TLB shootdowns
ERR: 0
MIS: 0
谨致问候,安德鲁
答案1
嗯,smp_affinity 是一个位掩码。由于数字的二进制表示是
1: 0000 0001
2: 0000 0010
4: 0000 0100
8: 0000 1000
16: 0001 0000
您显然选择了错误的值。如果“ff”不起作用,请尝试使用“7”,它应该设置位掩码以允许 CPU 0-2 进行中断处理。否则定义“不起作用”并发布结果cat /proc/irq/16/smp_affinity
您可能还会阅读这篇博客文章它更详细地描述了 SMP 亲和性。