![Linux 中断亲和性](https://linux22.com/image/626938/Linux%20%E4%B8%AD%E6%96%AD%E4%BA%B2%E5%92%8C%E6%80%A7.png)
我们有一台运行 SuSE Linux Enterprise Server 11 sp2 的 HP DL980。
该机器配备一张 PCIe 数字 IO 卡,用于发送时钟信号以与其他机器同步。
如果我们做一个顶部,其中一个进程显示“命令”[irq/28-pci7230]和顶部显示此进程正在 CPU8 上运行。我们知道PCI7230 型号是数字 IO 卡。如果我猫/ proc /中断,这显示了 CPU0 上的所有中断。
有人能解释一下这里发生了什么吗?我的印象是顶部显示中断正在由 CPU8 处理,但是/proc/中断似乎另有暗示。
答案1
您混淆了中断的上半部分和下半部分。中断的上半部分和下半部分在不同的核心上运行是完全正常的。当发生硬件中断时,您处于正在运行的任何上下文中。尽快释放该上下文至关重要,这样您就不会劫持随机的、可能很重要的工作。
“Linux(以及许多其他系统)通过将中断处理程序分成两半来解决此问题。所谓的上半部分是实际响应中断的例程(即您使用 request_irq 注册的例程)。下半部分是上半部分安排的例程,稍后在更安全的时间执行。上半部分处理程序和下半部分之间的最大区别在于,所有中断都在下半部分执行期间启用,这就是它在更安全的时间运行的原因。在典型情况下,上半部分将设备数据保存到特定于设备的缓冲区,安排其下半部分,然后退出:此操作非常快。然后,下半部分执行所需的任何其他工作,例如唤醒进程、启动另一个 I/O 操作等。此设置允许上半部分在下半部分仍在工作时处理新中断。”——上半部分和下半部分
中断本身没有调度 —— 中断到时自动到达。[irq/28-pci7230]
内核线程被调度去做“真正的工作”。