如何处理Fedora 22虚拟机启动时概率性卡死的问题

发布时间:  2016-07-13 浏览次数:  290 下载次数:  0
问题描述

Fedora 22的虚拟机启动时出现概率性卡死,打印以下信息如1 虚拟机卡死打印信息所示:

1 虚拟机卡死打印信息

处理过程

1.         当出现此问题时,用户需要使用强制重启恢复虚拟机。

2.         用户可以根据自己的业务情况决定是否合入社区patch,重新生成内核来彻底解决此问题。

对应的patch地址是:https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=dd9d3843755da95f63dd3a376f62b3e45c011210

根因

通过crash工具查看crash core日志,如2 日志信息所示。

2 日志信息

通过日志可以看出:内核跑到了BUG_ON分支代码:

static int smpboot_thread_fn(void *data)

{

    BUG_ON(td->cpu != smp_processor_id());

通过crash分析对应的core文件发现,td->cpu等于1smp_processor_id等于0,即此内核线程没有跑在合适的CPU上,所以内核认为出现了错误,从而导致虚拟机启动失败。


该问题是内核自身的bug,具体分析如下:虚拟机在host cpu压力较大时启动,可能造成虚拟机CPUn(非CPU0)启动过程中,在设置CPUnONLINE状态和ACTIVE状态之间被调度出去,此时CPU0会尝试将对应CPUn的相关内核线程(例如migrationksoftirqwatchdog内核线程等)迁移到此CPUn上,由于此时CPUn状态是非ACTIVE状态,所以启动会失败,这些内核线程会跑到CPU0上,最终造成这些线程跑到BUG_ON分支。

内核社区已经发布解决该问题的patch,链接为:https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=dd9d3843755da95f63dd3a376f62b3e45c011210

END