今日管理している仮想マシンのコンソールを引き上げると、いくつかのカーネルメッセージが表示されました。
[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で発生します。
ホストにNMIまたはEDACエラー/警告メッセージが表示されません。
ゲストにこれらのNMIメッセージが表示される原因は何ですか?心配することはありますか?
(不明な理由20で受信した NMIに関連している可能性があります—奇妙な省電力モードが有効になっていますか? がベアメタルのようです)。
私は同様の設定を使用して同じ問題がありました:
私の解決策は、ゲストを切り替えることでした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'/>
を再度有効にすることができます。
問題は、End of Interruptが適切に通信されていないことです。
Libvirtの場合、eoi
が有効になっていることを確認してください:
<domain>
…
<features>
<apic eoi='on'/>
…
KVMのコマンドラインで
-cpu …,+kvm_pv_eoi
これは、-M q35
、ホストCPUパススルー、およびデフォルトの構成で機能するようです(RTC割り込みがキューに入れられ、PIT割り込みがドロップされ、HPTが利用できません)。
_Debian 9
_とQemu 2.8.1(Debian 1:2.8+dfsg-6+deb9u5)
で同じ問題が発生しました。
ビデオカードモデルをvirtio
からcirrus
に置き換えることで解決しました(またはqemu
のマニュアルページから別のモデルを使用してみてください)。