特定核心上的处理器间中断

特定核心上的处理器间中断

目前,我正在研究 NXP 平台上 DPDK 转发应用程序的性能问题。以下是设置信息:

  1. 应用程序在核心 7 上运行,并在紧密循环中运行以进行数据包 I/O 处理。
  2. 4个10G网络接口连接流量生成器,用于流量输入。

在运行流量时,我观察到核心 7 在 IPI 处理方面有一些任务要做,以便 DPDK 应用程序不会占用 100% 的 CPU 带宽。下面是 tail /proc/interrupts 的快照。

root@localhost:/usr/local/dpdk/dpaa2# tail /proc/interrupts

           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7
394:          0          0          0          0          0          0          0          0     ITS-fMSI 240024 Edge      vfio-irq[394](dpio.8)
395:          0          0          0          0          0          0          0          0     ITS-fMSI 240025 Edge      vfio-irq[395](dpio.9)
IPI0:      5912         88         90         88         87         86         88        202       Rescheduling interrupts
IPI1:        64       3203       3203       3203       3203       3203       3203       3139       Function call interrupts
IPI2:         0          0          0          0          0          0          0          0       CPU stop interrupts
IPI3:         0          0          0          0          0          0          0          0       CPU stop (for crash dump) interrupts
IPI4:         0          0          0          0          0          0          0          0       Timer broadcast interrupts
IPI5:  48795343         91     146481     146479     146481     146479         32   48816043       IRQ work interrupts
IPI6:         0          0          0          0          0          0          0          0       CPU wake-up interrupts

现在我正在调查哪个服务负责生成这些 IPI 中断。在我的例子中,IPI5 不断增加。有人能帮我找到解决方案吗?是否有任何 Linux 实用程序可以分析/回溯这些中断?

提前致谢。

苏尼尔·库马尔

答案1

您应该能够通过 跟踪大多数远程唤醒原因perf sched。请参阅:

一旦您通过第一个找到您认为触发 IPI 的原因,您就可以使用更详细的示例来追踪究竟发生了什么。

如果通用的东西(更易于使用)都不起作用,请尝试跟踪

答案2

IPI——处理器间中断,由一个处理器产生,用于将任务发送到另一个处理器。

就您的情况而言,CPU-7 似乎由于网络流量而获得了过多的 IP。通常,网络中断会发送到 CPU-0。由于处理数据包的应用程序在 CPU-7 上运行,因此 CPU-0 将通过 IPI 移交数据包。

您可以通过在 CPU-0 上运行应用程序或将网络中断固定到 CPU-7 来避免这种情况。

相关内容