首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多核CPU中断

多核CPU中断
EN

Stack Overflow用户
提问于 2018-03-20 08:57:48
回答 1查看 4.3K关注 0票数 9

多核处理器如何处理中断?

我知道单核处理器是如何处理中断的。我也知道不同类型的中断。我想知道多核处理器是如何处理硬件、程序、CPU时序和输入/输出中断的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-21 23:28:15

这应被视为其他答案的延续或扩展。

大多数多处理器支持可编程中断控制器,如英特尔的APIC。这些是复杂的芯片,由若干个组件组成,其中一些可能是芯片组的一部分。在启动时,所有I/O中断都被传递到核心0(引导处理器).然后,在APIC系统中,操作系统可以为每个中断指定核心应该处理的中断。如果指定了多个核心,这意味着要由APIC系统来决定哪个核心应该处理传入的中断请求。这被称为中断亲和力。操作系统和硬件都提出了许多调度算法。一个明显的技术是通过以循环方式调度中断来负载平衡系统。另一个是英特尔的技术,它试图平衡性能和力量。

在Linux系统上,您可以打开/proc/interrupts来查看每种类型的中断由每个核心处理了多少次。在具有8个逻辑核的系统中,该文件的内容可能类似于此:

代码语言:javascript
复制
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       
  0:         19          0          0          0          0          0          0          0  IR-IO-APIC   2-edge      timer
  1:          1          1          0          0          0          0          0          0  IR-IO-APIC   1-edge      i8042
  8:          0          0          1          0          0          0          0          0  IR-IO-APIC   8-edge      rtc0
  9:          0          0          0          0          1          0          0          2  IR-IO-APIC   9-fasteoi   acpi
 12:          3          0          0          0          0          0          1          0  IR-IO-APIC  12-edge      i8042
 16:         84    4187879          7          3          3   14044994          6          5  IR-IO-APIC  16-fasteoi   ehci_hcd:usb1
 19:          1          0          0          0          6          8          7          0  IR-IO-APIC  19-fasteoi 
 23:         50          2          0          3     273272          8          1          4  IR-IO-APIC  23-fasteoi   ehci_hcd:usb2
 24:          0          0          0          0          0          0          0          0  DMAR-MSI   0-edge      dmar0
 25:          0          0          0          0          0          0          0          0  DMAR-MSI   1-edge      dmar1
 26:          0          0          0          0          0          0          0          0  IR-PCI-MSI 327680-edge      xhci_hcd
 27:      11656        381        178   47851679       1170        481        593        104  IR-PCI-MSI 512000-edge      0000:00:1f.2
 28:          5   59208205          0          1          3          3          0          1  IR-PCI-MSI 409600-edge      eth0
 29:        274          8         29          4         15         18         40   64478962  IR-PCI-MSI 32768-edge      i915
 30:         19          0          0          0          2          2          0          0  IR-PCI-MSI 360448-edge      mei_me
 31:         96         18         23         11        386         18         40         27  IR-PCI-MSI 442368-edge      snd_hda_intel
 32:          8         88         17        275        208        301         43         76  IR-PCI-MSI 49152-edge      snd_hda_intel
NMI:          4         17         30         17          4          5         17         24   Non-maskable interrupts
LOC:  357688026  372212163  431750501  360923729  188688672  203021824  257050174  203510941   Local timer interrupts
SPU:          0          0          0          0          0          0          0          0   Spurious interrupts
PMI:          4         17         30         17          4          5         17         24   Performance monitoring interrupts
IWI:          2          0          0          0          0          0          0        140   IRQ work interrupts
RTR:          0          0          0          0          0          0          0          0   APIC ICR read retries
RES:   15122413   11566598   15149982   12360156    8538232   12428238    9265882    8192655   Rescheduling interrupts
CAL: 4086842476 4028729722 3961591824 3996615267 4065446828 4033019445 3994553904 4040202886   Function call interrupts
TLB: 2649827127 3201645276 3725606250 3581094963 3028395194 2952606298 3092015503 3024230859   TLB shootdowns
TRM:     169827     169827     169827     169827     169827     169827     169827     169827   Thermal event interrupts
THR:          0          0          0          0          0          0          0          0   Threshold APIC interrupts
DFR:          0          0          0          0          0          0          0          0   Deferred Error APIC interrupts
MCE:          0          0          0          0          0          0          0          0   Machine check exceptions
MCP:       7194       7194       7194       7194       7194       7194       7194       7194   Machine check polls
ERR:          0
MIS:          0
PIN:          0          0          0          0          0          0          0          0   Posted-interrupt notification event
PIW:          0          0          0          0          0          0          0          0   Posted-interrupt wakeup event

第一列指定中断请求(IRQ)号。所有正在使用的IRQ数字都可以在列表中找到。文件/proc/irq/N/smp_affinity包含一个值,该值指定IRQ的亲和力。这个值应该根据当前的操作模式来解释。

逻辑核可以接收多个I/O和IPI中断。此时,会发生本地中断调度,也可以通过为中断分配优先级来配置。

其他可编程中断控制器也是类似的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49379899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档