Linux PCIe 驱动程序和应用显示高 CPU 使用率
Linux PCIe driver and app showing high CPU Usage
我有一个自定义的 Xilinx PCIe 端点硬件,我已经为它编写了一个 linux 驱动程序以及一个示例应用程序来测试它。
驱动程序正确加载并且设备也被识别。然后 CPU 使用也稳定,直到我 运行 我的应用程序。
当我 运行 我的应用程序时,当其他核心保持在 10% 以下时,我的 4 个核心中有一个达到 100%。然后打开任何其他应用程序(可能像我一样是 firefox 浏览器),系统完全挂起,需要硬重启才能恢复正常。
明智的过程 CPU 使用仅显示我的应用程序为 25%,其余所有保持在 0-1%。
驱动程序和应用程序之间的通信只是中断。当出现 MSI 中断时,应用程序中对设备文件的读取调用将解除阻塞,应用程序将再次开始等待另一个中断。我还使用资源文件从应用程序访问 BAR 区域。
为什么只有一个内核显示 100% CPU 使用率?为什么当另一个应用程序启动时我的系统完全挂起,即使 3 个内核几乎完全空闲?
找到问题。
在应用程序 I 运行 中,创建了 4 个线程来处理每个 PCIe 中断。除此之外,主函数使用空 while 循环轮询全局变量。这就是 CPU 使用率高的原因。想出了一种方法并使用 usleep 而不是 while 循环并完成了。
CPU 现在使用率不到 20%。
感谢您的评论。
我有一个自定义的 Xilinx PCIe 端点硬件,我已经为它编写了一个 linux 驱动程序以及一个示例应用程序来测试它。 驱动程序正确加载并且设备也被识别。然后 CPU 使用也稳定,直到我 运行 我的应用程序。 当我 运行 我的应用程序时,当其他核心保持在 10% 以下时,我的 4 个核心中有一个达到 100%。然后打开任何其他应用程序(可能像我一样是 firefox 浏览器),系统完全挂起,需要硬重启才能恢复正常。 明智的过程 CPU 使用仅显示我的应用程序为 25%,其余所有保持在 0-1%。
驱动程序和应用程序之间的通信只是中断。当出现 MSI 中断时,应用程序中对设备文件的读取调用将解除阻塞,应用程序将再次开始等待另一个中断。我还使用资源文件从应用程序访问 BAR 区域。
为什么只有一个内核显示 100% CPU 使用率?为什么当另一个应用程序启动时我的系统完全挂起,即使 3 个内核几乎完全空闲?
找到问题。
在应用程序 I 运行 中,创建了 4 个线程来处理每个 PCIe 中断。除此之外,主函数使用空 while 循环轮询全局变量。这就是 CPU 使用率高的原因。想出了一种方法并使用 usleep 而不是 while 循环并完成了。 CPU 现在使用率不到 20%。
感谢您的评论。