8

我的系统是一个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).

我在网上搜索了很多关于这个内核消息/错误的信息,并且有很多关于它的帖子,没有关于它的原因或如何调试的帖子。对于以下问题的任何帮助将不胜感激:

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

  2. 我可以想象我的驱动程序线程可能导致“软锁定”。但是,“迁移”线程(内核线程)怎么会因为我的驱动程序而处于“软锁定”状态呢?

  3. 通过浏览网络,“迁移”线程用于将任务从一个 cpu 移动到另一个 cpu。有人可以帮我理解这个线程的确切作用吗?以及它如何受到其他线程的影响,如果有的话。

4

1 回答 1

1

我的桌面上有一个非常相似的问题。它会非常频繁地软锁定 - 大约每天一次左右。

原来是因为我在 Intel Haswell 上运行。似乎 Haswell/Broadwell 系列的 Intel 处理器存在可能导致系统不稳定的错误。此错误已在微码更新中修复。

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

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

于 2016-06-14T12:36:12.930 回答