VMの未知のNMIにより20と30が発生する

VMの未知のNMIにより20と30が発生する

今日管理している仮想マシンでコンソールを開き、いくつかのカーネルメッセージを受け取りました。

[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テスト(現在のDebian 4.7.0-1-amd64; qemu 1:2.7 + dfsg-3)で実行されるlibvirt / KVMです。
  • ハードウェアはOpteron 6344です。スーパーマイクロH8SGL-FECC RAMとスクラブが有効になっています。

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

訪問者にこれらのNMIメッセージが発生する原因は何ですか?その人が気になることはありますか?

(一緒にいるかもしれません未知の理由でNMI 20を受け取りました。奇妙なバッテリー節約モードを有効にしましたか?しかし、これはベアメタルのようです。)

答え1

同様の設定で同じ問題が発生しました。

  1. AMD CPU(Intel CPUで同じ問題について報告したことがありますが、Intel CPUで実行されたハイパーバイザーのうちCPUパススルーが有効になっていても、この問題は発生しませんでした)。
  2. Debian、ハイパーバイザー、およびゲストのカーネル4.x(私の場合は両方とも4.9.0-4-amd64)。

私の解決策は、QEMUを使用してCPUパススルーの代わりにCPUをエミュレートするようにゲストVMを切り替えることでした。これを行うには、<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>

実際の解決策は、これら3つの<timer>要素を削除し<cpu mode='host-passthrough'/>て再度有効にすることです。

完全性のために追加しました。同様の答え到着リンクの問題

アップデート2 主演サイモンリヒーター言及する、私が削除した設定はデフォルト設定でしたので、この修正はすべての人には適用されない可能性があります。それから彼の解決策に従うべきです。

答え2

問題は、割り込みの終わりが正しく渡されないようです。

eoilibvirtの場合は有効になっていることを確認してください。

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

KVMコマンドラインから次のように変換します。

-cpu …,+kvm_pv_eoi

-M q35これは、ホストCPUパススルーと基本設定(RTC割り込み待機、PIT割り込み削除、HPET無効)で機能するようです。

答え3

<acpi eoi="on"/>私には効果がありませんでした。しばらくすると、問題が再び表示され、Uhhuh. NMI received for unknown reason 20 on CPU 0Linuxカーネルによって再印刷されました。

さらなる調査では、iTCO_wdtQemuエミュレーションの(Intel TCO Watchdog Timer)バグを修正した2つのコミットが見つかりました。

Debian-9-Stretchのみqemu-2.8、これらのパッチは含まれていません。 Debian-10-Busterにはqemu-3.1があり、問題は観察されません。

ドライバのロードを防ぐために、拒否リストにドライバを追加できます。

echo blacklist iTCO_wdt >/etc/modprobe.d/itco-wdt.conf

その後、仮想マシンをシャットダウンして再起動して、古いQemuプロセスを終了し、新しいインスタンスを取得します。 Aは、rebootQemuの内部破損状態を保存する以前のQemuプロセスを再利用します。ただしreboot、最初の起動時にエラーが発生せず、ディスクを再起動または一時停止してサイクルを再開した後にのみエラーが発生するため、エラーが発生するのに時間がかかります。

答え4

別のハイパーバイザーでDebian 10、11 VMを複製した後、Debian 11ハイパーバイザーで同じ問題に直面しました。 VMを再起動し、CPUモデルの値を設定するのに役立ちましたClear CPU Configuration

関連情報