目前,我正在研究 NXP 平台上 DPDK 转发应用程序的性能问题。以下是设置信息:
- 应用程序在核心 7 上运行,并在紧密循环中运行以进行数据包 I/O 处理。
- 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
答案2
IPI——处理器间中断,由一个处理器产生,用于将任务发送到另一个处理器。
就您的情况而言,CPU-7 似乎由于网络流量而获得了过多的 IP。通常,网络中断会发送到 CPU-0。由于处理数据包的应用程序在 CPU-7 上运行,因此 CPU-0 将通过 IPI 移交数据包。
您可以通过在 CPU-0 上运行应用程序或将网络中断固定到 CPU-7 来避免这种情况。