虚拟机上的未知 NMI 原因 20 和 30

der*_*ert 10 linux kvm libvirt nmi

我在今天管理的虚拟机上打开控制台,看到一些内核消息:

[5912557.130943] Uhhuh. NMI received for unknown reason 20 on CPU 0.
[5912557.131115] Do you have a strange power saving mode enabled?
[5912557.131287] Dazed and confused, but trying to continue
[6064281.393568] Uhhuh. NMI received for unknown reason 30 on CPU 1.
[6064281.393888] Do you have a strange power saving mode enabled?
[6064281.394235] Dazed and confused, but trying to continue
Run Code Online (Sandbox Code Playgroud)

这只是其中的几个,20 和 30 都发生在 CPU 0 和 1 上。

  • VM 是 Debian Jessie,BIOS 启动(“QEMU 标准 PC(i440FX + PIIX,1996),BIOS 1.9.3-20161025_171302-gandalf 04/01/2014”;内核 3.16.0-4-amd64)
  • Hypervisor 是在 Debian 测试(目前是 Debian 的 4.7.0-1-amd64;qemu 1:2.7+dfsg-3)上运行的 libvirt/KVM。
  • 硬件是Supermicro H8SGL-F上的 Opteron 6344,带有 ECC RAM,启用了清理。

我在主机上没有看到任何 NMI 或 EDAC 错误/警告消息。

知道是什么导致来宾上出现这些 NMI 消息吗?他们有什么可担心的吗?

(可能与未知原因收到的 NMI有关20 — 您是否启用了奇怪的省电模式?但这似乎是裸机)。

mjt*_*ner 3

我使用类似的设置遇到了同样的问题:

  1. AMD CPU(虽然我看到过有关 Intel CPU 的相同问题的报告,但我在 Intel CPU 上运行的虚拟机管理程序都没有出现此问题,即使启用了 CPU 直通)。
  2. Debian,虚拟机管理程序和来宾上的内核 4.x(在我的例子中,两者都是 4.9.0-4-amd64)。

我的解决方案是将我的来宾虚拟机切换为使用 QEMU 模拟 CPU,而不是 CPU 直通。<cpu mode='host-passthrough'/>这需要从来宾定义文件中删除该行。

更新1:我做了进一步的调查,麻烦的元素在该clock元素下:

<clock offset='utc'>
  <timer name='rtc' tickpolicy='catchup'/>
  <timer name='pit' tickpolicy='delay'/>
  <timer name='hpet' present='no'/>
</clock>
Run Code Online (Sandbox Code Playgroud)

真正的解决方案是删除这三个<timer>元素,然后<cpu mode='host-passthrough'/>可以再次启用。

为了完整起见,我对链接的问题添加了类似的答案。

更新 2 正如 Simon Richter提到的,此修复可能并不适合所有人,因为我删除的设置是默认设置。如果是这样,就应该遵循他的解决方案。

  • 这三个元素是默认值,禁用它们应该不会执行任何操作,并在保存时重新添加它们。 (2认同)