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>

실제 해결책은 이 세 가지 <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) 버그를 수정한 두 개의 커밋을 발견했습니다.

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.

관련 정보