web-dev-qa-db-ja.com

不明NMI理由20および30 VM

今日管理している仮想マシンのコンソールを引き上げると、いくつかのカーネルメッセージが表示されました。

[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

それはそれらのほんの一部です、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)
  • ハイパーバイザーは、Debianテストで実行されているlibvirt/KVMです(現在、Debianの4.7.0-1-AMD64、qemu 1:2.7 + dfsg-3)。
  • ハードウェアは、 Supermicro H8SGL-F 上のOpteron 6344であり、ECC RAM scrubが有効)です。

ホストにNMIまたはEDACエラー/警告メッセージが表示されません。

ゲストにこれらのNMIメッセージが表示される原因は何ですか?心配することはありますか?

(不明な理由20で受信した NMIに関連している可能性があります—奇妙な省電力モードが有効になっていますか? がベアメタルのようです)。

10
derobert

私は同様の設定を使用して同じ問題がありました:

  1. AMD CPU(Intel CPUでも同じ問題が報告されていますが、CPUパススルーを有効にしても、Intel CPUで実行しているハイパーバイザーにはこの問題はありません)。
  2. ハイパーバイザーとゲスト上のDebian、カーネル4.x(私の場合は両方とも4.9.0-4-AMD64)。

私の解決策は、ゲストを切り替えることでしたVM CPUパススルーではなくQEMUエミュレートされたCPUを使用することです。これには、ゲスト定義ファイルから<cpu mode='Host-passthrough'/>行を削除する必要がありました。

更新:さらに調査したところ、問題のある要素はclock要素の下にありました:

<clock offset='utc'>
  <timer name='rtc' tickpolicy='catchup'/>
  <timer name='pit' tickpolicy='delay'/>
  <timer name='hpet' present='no'/>
</clock>

実際の解決策は、3つの<timer>要素を削除することでした。その後、<cpu mode='Host-passthrough'/>を再度有効にすることができます。

完全を期すために、 リンクされた質問同様の答え を追加しました。

2
mjturner

問題は、End of Interruptが適切に通信されていないことです。

Libvirtの場合、eoiが有効になっていることを確認してください:

<domain>
  …
  <features>
    <apic eoi='on'/>
    …

KVMのコマンドラインで

-cpu …,+kvm_pv_eoi

これは、-M q35、ホストCPUパススルー、およびデフォルトの構成で機能するようです(RTC割り込みがキューに入れられ、PIT割り込みがドロップされ、HPTが利用できません)。

1
Simon Richter

_Debian 9_とQemu 2.8.1(Debian 1:2.8+dfsg-6+deb9u5)で同じ問題が発生しました。
ビデオカードモデルをvirtioからcirrusに置き換えることで解決しました(またはqemuのマニュアルページから別のモデルを使用してみてください)。

0
Oleg Golovanov