Linux卡在CPU软锁定?

时间:2013-02-28 21:52:43

标签: linux linux-kernel centos driver kernel-module

我的系统是CentOS 6.3(运行内核版本2.6.32-279.el6.x86_64)。

我有一个可加载的内核模块,它是一个管理PCIe卡的驱动程序。 如果我在操作系统启动并运行时使用insmod手动插入驱动程序,则驱动程序会成功加载并运行。

但是,如果我尝试使用rpm安装驱动程序然后重新启动系统,则在启动期间操作系统会卡住所有CPU内核的以下“软锁定”消息,除了一个处于“软”状态的核心锁定“在我的驱动程序创建的一个线程中。

BUG: soft lockup - CPU#X stuck for 67s! [migration/8:36]
.......(same above message for all cores except one)
BUG: soft lockup - CPU#10 stuck for 67s! [mydriver_thread/8:36]
(one core is locked up in one of the threads in my driver).

我在网上查了很多关于这个内核msg / bug的信息,并且有很多关于它的帖子,没有关于它的原因或如何调试。对以下问题的任何帮助都将非常感激:

  1. 我无法登录系统,我认为这是因为所有内核都处于“软锁定”状态,因此无法从shell提示符触发内核转储。我启用了SysRq,并尝试使用SysRq键组合触发内核转储,但没有运气。系统似乎没有响应键盘(甚至没有响应CapsLock按钮)。关于如何在这种情况下触发内核转储的任何建议?

  2. 我可以想象我的驱动程序线程可能导致“软锁定”。但是,由于我的驱动程序,“迁移”线程(内核线程)如何处于“软锁定”状态?

  3. 从浏览网络,“迁移”线程用于将任务从一个CPU移动到另一个CPU。有人可以帮我理解这个帖子究竟是做什么的吗?以及它如何受其他线程影响,如果有的话。

1 个答案:

答案 0 :(得分:1)

我的桌面上遇到了类似的问题。它会非常频繁地锁定 - 大约每天一次。

事实证明这是因为我在Intel Haswell上运行。似乎Haswell / Broadwell系列的英特尔处理器存在一个可能导致系统不稳定的错误。此错误已在微代码更新中修复。

检查CentOS是否提供intel-microcode包,并进行安装。确保配置grub以在加载initramfs之前将其作为初始ramdisk加载。

就个人而言,我通过启动Windows并运行BIOS更新来升级微代码。您可以通过比较更新前后grep 'microcode' /proc/cpuinfo的输出来检查微代码是否实际更新。