VM에서 알 수없는 NMI 이유 20 및 30


10

오늘 내가 관리하는 가상 머신에서 콘솔을 꺼내서 몇 가지 커널 메시지가 나타났습니다.

[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

CPU 0과 1에서 20과 30이 모두 발생합니다.

  • VM은 Debian Jessie, BIOS 부팅 ( "QEMU 표준 PC (i440FX + PIIX, 1996), BIOS 1.9.3-20161025_171302-gandalf 04/01/2014"; 커널 3.16.0-4-amd64)입니다.
  • 하이퍼 바이저는 데비안 테스트 (현재 데비안 4.7.0-1-amd64; qemu 1 : 2.7 + dfsg-3)에서 실행되는 libvirt / KVM입니다.
  • 하드웨어는 스크 러블이 활성화 된 ECC RAM이 있는 Supermicro H8SGL-F 의 Opteron 6344입니다 .

호스트에 NMI 또는 EDAC 오류 / 경고 메시지가 표시되지 않습니다.

게스트에서 이러한 NMI 메시지의 원인이 무엇인지 아십니까? 그들은 걱정할 것이 있습니까?

( 알 수없는 이유로 인해 수신 된 NMI 와 관련이있을 수 있습니다. 20 — 이상한 절전 모드가 활성화되어 있습니까? 그러나 베어 메탈 인 것 같습니다).


그것은 도움이 될 어떠했는지 내가 궁금해은 가상 머신의 커널에 전달할noapic apci=off
루이 F 리베

@RuiFRibeiro 글쎄, 현재 VM은 (명백한) 문제없이 작동하고 있습니다. 프로덕션 환경이므로 임의의 커널 옵션을 사용하기 위해 재부팅하는 것이 좋습니다. 커널 개발자가 문제 등을 디버깅하는 데 도움이된다면 다른 이야기가 될 것입니다. (그리고, 그것은 자주 빈번하지는 않습니다. 확실히하는 데 시간이 걸릴 것입니다.)
derobert

나는 한동안 같은 문제를 추적하려고 노력했다. 도움이 될 수있는 일부 데이터 포인트는 호스트 커널 버전, qemu 버전, VM이 BIOS를 사용하는지 또는 UEFI 부팅을 사용하는지, VM이 i440fx 또는 q35를 사용하는지 여부입니다.
Michael Hampton

@MichaelHampton 님이 질문에 추가 된 세부 사항을 요청했습니다.
derobert

동일한 문제가 있습니다. 자세한 내용은 다음과 같습니다 (실제로는 매우 유사 함). VM은 데비안 제시 (3.16.0-4-amd64)이며 BIOS 1.7.5-20140531_083030-gandalf (04/01/2014)입니다. 하이퍼 바이저는 Debian jessie의 libvirt / KVM이지만 백 포트 커널 (4.7.0-0.bpo.1-amd64)이 있습니다. 하이퍼 바이저 하드웨어는 2 개의 Opteron 6272이며 ECC RAM (현재 마더 보드는 알려져 있지만 어떤 종류의 Supermicro 일 수도 있음)이 있습니다. 이러한 세부 사항이 derobert의 세부 사항과 매우 유사하다는 점을 감안할 때이 문제가 발생해도 놀라지 않지만 도움이되기를 바랍니다.
jvperrin

답변:


2

비슷한 설정을 사용하여 동일한 문제가 발생했습니다.

  1. AMD CPU (Intel CPU와 동일한 문제에 대한 보고서를 보았지만 Intel CPU에서 실행되는 하이퍼 바이저 중 어느 것도 CPU 패스 스루가 활성화 된 경우에도이 문제가 없습니다).
  2. 데비안, 하이퍼 바이저 및 게스트의 커널 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>

실제 솔루션은 세 가지 <timer>요소 를 제거하고 그 후에 <cpu mode='host-passthrough'/>다시 활성화 할 수있었습니다.

완전성을 기 하기 위해 연결된 질문에 비슷한 답변 을 추가 했습니다 .


이 세 가지 요소는 기본값이므로 비활성화하면 정확히 아무 것도 수행하지 말고 저장시 다시 추가해야합니다.
Simon Richter

1

문제는 인터럽트 끝이 제대로 전달되지 않는 것 같습니다.

libvirt의 경우 eoi활성화되어 있는지 확인하십시오 .

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

KVM의 명령 행에서

-cpu …,+kvm_pv_eoi

이것은 -M q35호스트 CPU 패스 스루 및 기본 구성 (RTC 인터럽트 대기, PIT 인터럽트 삭제, HPET 사용 불가) 에서 작동하는 것으로 보입니다 .


0

나는에 동일한 문제가 있었 Debian 9하고 Qemu 2.8.1(Debian 1:2.8+dfsg-6+deb9u5).
비디오 카드 모델을에서 virtio로 교체하여 문제를 해결했습니다 cirrus(또는 qemu맨 페이지 에서 다른 모델을 사용해보십시오 ).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.