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



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

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

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

找到问题。

在我运行的应用程序中,创建了4个线程,它们将处理每个PCIe中断。除此之外,main函数使用空while循环对全局变量进行轮询。这就是高CPU使用率的原因。想出了一个方法,用ussleep代替while循环,完成了。

当前CPU使用率小于20%。谢谢你的评论。