微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决显示高 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%。

感谢您的评论。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。