我正在查看'cat / proc / interrupts'输出,并观察到某些计数器为零。谁能提供给我背后的原因,不是IO-APIC负责在CPU之间共享中断。
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5
0: 18 0 0 0 0 0 IO-APIC 2-edge timer
1: 3162 0 0 434 1481 0 IO-APIC 1-edge i8042
8: 0 0 0 0 0 1 IO-APIC 8-edge rtc0
9: 0 0 0 0 0 0 IO-APIC 9-fasteoi acpi
12: 63 0 0 16 15338 0 IO-APIC 12-edge i8042
14: 0 0 0 0 0 0 IO-APIC 14-edge ata_piix
15: 0 0 0 0 0 0 IO-APIC 15-edge ata_piix
16: 0 14199 0 0 0 0 IO-APIC 16-fasteoi vmwgfx, snd_ens1371
17: 10937 0 64252 0 0 0 IO-APIC 17-fasteoi ehci_hcd:usb1, ioc0
18: 0 38 0 0 0 0 IO-APIC 18-fasteoi uhci_hcd:usb2
19: 0 0 0 0 142 1375 IO-APIC 19-fasteoi ens33
例如,对于键盘,您可以发现CPU1,CPU2为零。请为此提供参考。
不是IO-APIC负责在CPU之间共享中断
IO APIC应该支持“将IRQ发送到最低优先级的CPU(可选地,从这组CPU)发送IRQ”之类的东西; (如果使用得当的话)能够使IRQ负载与极细(“每个IRQ的决定”)粒度保持平衡。但是:
不可移植
在某些芯片组上无法正常工作
它不能与MSI(消息信号中断)一起使用
我以为Linux开发人员认为,(对于某些计算机)潜在的好处不值得麻烦;并且基于软件的IRQ平衡器(粗粒度且无法快速响应更改)“足够好”。