为什么/ proc / interrupts中的某些CPU计数器为零

问题描述 投票:0回答:1

我正在查看'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为零。请为此提供参考。

linux linux-kernel x86 interrupt apic
1个回答
0
投票

不是IO-APIC负责在CPU之间共享中断

IO APIC应该支持“将IRQ发送到最低优先级的CPU(可选地,从这组CPU)发送IRQ”之类的东西; (如果使用得当的话)能够使IRQ负载与极细(“每个IRQ的决定”)粒度保持平衡。但是:

  • 不可移植

  • 在某些芯片组上无法正常工作

  • 它不能与MSI(消息信号中断)一起使用

  • [[存在3种不同情况(扁平模式下的xAPIC,集群模式下的xAPIC,x2APIC)使支持成本更高] >>

  • 操作系统需要使用本地APIC的“任务优先级寄存器”来通知IO APIC CPU的优先级(否则,IO APIC认为所有CPU都具有相同的优先级,除非它们已经在处理IRQ,所以几乎所有的IRQ发送到同一CPU);这会增加一些开销; Linux几乎没有信息(例如线程优先级)可用于确定CPU的优先级。
  • 我以为Linux开发人员认为,(对于某些计算机)潜在的好处不值得麻烦;并且基于软件的IRQ平衡器(粗粒度且无法快速响应更改)“足够好”。

© www.soinside.com 2019 - 2024. All rights reserved.