哪个处理器将在muticore系统中执行硬件中断

时间:2016-12-25 18:31:20

标签: linux-kernel linux-device-driver embedded-linux device-driver netbsd

通常,硬件中断需要立即处理,至少是为了确认它并进行一些第一级处理。据我所知,这不是预定的活动。请纠正我。

所以问题是如何选择一个实际执行这个硬件中断处理程序的处理器?

对于Linux和/或BSD系统,人们可以回答这个问题

3 个答案:

答案 0 :(得分:2)

IO-APIC(在 IO 控制器集线器上)和本地 APIC(在处理器)。

IO-APIC 和本地 APIC 通过 APIC 总线进行通信,其中将决定哪个处理器将处理广播中断等。在 IO-APIC 上,有一个叫做重定向表的东西,它可以被编程来指示特定 IRQ 线的目标处理器、中断向量等。

用 Ingo Molnar 的话来说: “大多数(所有)符合 Intel-MP 标准的 SMP 板都有所谓的‘IO-APIC’,它是一种增强型中断控制器。它使我们能够将硬件中断路由到多个 CPU 或 CPU 组。没有IO-APIC,来自硬件的中断将只传递给启动操作系统的 CPU(通常是 CPU#0)。”

来源: https://www.kernel.org/doc/html/latest/x86/i386/IO-APIC.html

有关各种寄存器的信息(此页面也包含IO-APIC规范的链接): https://wiki.osdev.org/APIC

现代主板使用 MSI(消息信号中断)来传递中断。 MSI 不需要 IO-APIC,但仍需要处理器上的本地 APIC。此处借助“Root Complex”、“Switch”和“PCI/PIC-X to PCIe Bridge”实现了相同的功能,但基本概念保持不变。

答案 1 :(得分:1)

这完全取决于操作系统的实现。

有些会将所有中断分配给单个处理器,而其他中断则会在部分或全部处理器之间分配中断处理。

在NUMA系统上,操作系统尝试将中断处理分配给“附近”的处理器。

您必须阅读您感兴趣的操作系统(和版本)的来源,以确定它的用途。

答案 2 :(得分:1)

通常,这取决于多核处理器和操作系统提供的功能。使用多核处理器时,您可能需要根据需要配置中断的亲和性。

linux的情况下,/proc文件系统具有显示/配置中断关联的条款。

1)各个irq的文件smp_affinity包含一个位掩码,可用于配置由多核系统中各个核心服务的irq:

  

的/ proc / IRQ / 'irq_number' / smp_affinity

echo 2 > /proc/irq/12/smp_affinity  -> Configures the affinity of IRQ 12 to CPU 1
echo 4 > /proc/irq/14/smp_affinity  -> Configures the affinity of IRQ 14 to CPU 2

2)文件smp_affinity_list通过避免使用位掩码配置核心来帮助为特定IRQ配置一系列CPU:

  

的/ proc / IRQ / 'irq_number' / smp_affinity_list

cat /proc/irq/12/smp_affinity_list -> Configures the affinity of IRQ 12 to CPU cores 0 to 3

3)linux还提供了一个名为irqbalance的中断负载平衡守护进程,它可以帮助在处理器内核之间分配中断以优化性能。默认情况下,在某些系统中可以启用此守护程序,因此如果您希望手动配置中断的亲缘关系,则应禁用此守护程序,否则这可能会在每次重置后覆盖已配置的关联。