显示高 CPU 使用率的 Linux PCIe 驱动程序和应用

问题描述

我有一个定制的 Xilinx PCIe 端点硬件,我为它编写了一个 linux 驱动程序,还有一个示例应用程序来测试它。 驱动程序正确加载并且设备也被识别。然后 cpu 使用率也很稳定,直到我运行我的应用程序。 当我运行我的应用程序时,当其他内核保持在 10% 以下时,我的 4 个内核中有一个达到了 100%。然后打开任何其他应用程序(可能是我所做的 Firefox 浏览器),系统完全挂起,需要硬重启才能恢复正常。 进程明智的 cpu 使用率仅显示我的应用程序为 25%,其余全部保持在 0-1%。

驱动程序和应用程序之间的通信只是中断。当出现 MSI 中断时,应用程序中对设备文件的读取调用将解除阻塞,应用程序再次开始等待另一个中断。我还使用资源文件从应用程序访问 BAR 区域。

为什么只有一个内核显示 100% cpu 使用率?以及为什么我的系统在启动另一个应用程序时完全挂起,即使 3 个内核几乎完全空闲?

解决方法

发现问题。

在我运行的应用程序中,创建了 4 个线程来处理每个 PCIe 中断。除此之外,主函数轮询一个带有空 while 循环的全局变量。这就是 CPU 使用率高的原因。想出一种方法并使用usleep而不是while循环并完成。 CPU 使用率现在不到 20%。

感谢您的评论。