How to send NMI to Guest OS on ESXi 6.x (2149185)

ESXi 운영환경에서 가끔 VM 들이 hang 이 걸리거나 하였을 때 dump 를 생성해야 하는 경우가 있는데, 일반 베어메탈 환경에서는 NMI switch 등을 활용하실것입니다.

 

그렇다면 가상화 환경에서는 어떻게 하느냐, 3가지 방법이 있습니다.

https://kb.vmware.com/s/article/2149185

 

  1. webclient 에서 NMI 신호 보내기
  2. vm-support 커맨드를 통해서 NMI 신호 보내기
  3. vmdumper 커맨드를 통해서 NMI 신호 보내기

상세한 방법은 위 KB 를 참조하시면 됩니다.

 

문제는 ESXi 에서 NMI 신호를 보내더라도 OS 에서 감지를 해주어야 한다는 것입니다.

 

윈도우의 경우는 제가 알기로는 윈도우서버 2008 버전에는 NMI 키를 레지스트리에 추가해주어야 하고, 그 이후버전에서는 별도의 키추가는 필요없는것으로 알고 있습니다. (https://ryuchan.kr/515)

리눅스의 경우는 CentOS 7 을 기준으로 보면..

 

ESXi 에서 NMI 신호를 보내면, OS 에서 감지는 하지만, Reboot 을 한다던지등의 액션이 발생하지 않습니다.

 

[root@ntp01 etc]#
Message from syslogd@ntp01 at May 14 13:20:46 ...
 kernel:Uhhuh. NMI received for unknown reason 30 on CPU 0.

Message from syslogd@ntp01 at May 14 13:20:46 ...
 kernel:Do you have a strange power saving mode enabled?

Message from syslogd@ntp01 at May 14 13:20:46 ...
 kernel:Dazed and confused, but trying to continue

 

위에처럼 나오고 실제로는 죽거나 하지 않는데요, 제가 확인한바로는 CentOS 의 기본설정에서는 unknown NMI 신호에 대해서 디폴트로 커널 패닉을 발생시키지 않습니다. 아마 ESXi 에서 보내는 NMI 신호를 unknown NMI 로 인지하는것 같습니다.

 

그렇다면 어떻게 해야 하느냐, 몇가지가 필요합니다.

 

  1. kdump 가 active 및 enable 상태여야 합니다.
  2. /etc/sysctl.conf 파일에 다음 커널파라미터 값이 추가되어야 합니다.
    • kernel.unknown_nmi_panic = 1 (디폴트 0)

이렇게 설정하고 나서 다시 NMI 신호를 발생시키면, 바로 시스템 접속이 끊키면서 리붓이 되고 기본값으로 /var/crash 폴더 밑에 vmcore 덤프가 생성됩니다.

 

다만 unknown NMI 를 인지하도록 변경했을 때 발생할 수 있는 사이드임팩트가 있을수 있으니 주의하시면 되겠습니다.

 

  • esxi 호스트에서 vmdumper -l 커맨드로 NMI 를 발생시키고자 하는 VM 의 wID 를 확인후
  • vmdumper <wid> nmi 실행

 

reboot 후 덤프 생성 확인

[root@ntp01 ~]# cd /var/crash/
[root@ntp01 crash]# ls
127.0.0.1-2019-05-14-13:42:22
[root@ntp01 crash]# cd 127.0.0.1-2019-05-14-13\:42\:22/
[root@ntp01 127.0.0.1-2019-05-14-13:42:22]# ls
vmcore  vmcore-dmesg.txt
[root@ntp01 127.0.0.1-2019-05-14-13:42:22]# ls -al
total 31692
drwxr-xr-x. 2 root root       44 May 14 13:42 .
drwxr-xr-x. 3 root root       43 May 14 13:42 ..
-rw-------. 1 root root 32338619 May 14 13:42 vmcore
-rw-r--r--. 1 root root   108802 May 14 13:42 vmcore-dmesg.txt

 

위와 같이 생성이 되었고, vmcore-dmesg.txt 를 보면 아래와 같이 unknown NMI 수신후 커널패닉을 발생시킨 것을 볼 수 있습니다.

 

[  117.815595] Uhhuh. NMI received for unknown reason 30 on CPU 0.
[  117.815663] Do you have a strange power saving mode enabled?
[  117.815702] Dazed and confused, but trying to continue
[  352.445966] Uhhuh. NMI received for unknown reason 20 on CPU 0.
[  352.446002] Do you have a strange power saving mode enabled?
[  352.446025] Dazed and confused, but trying to continue
[  397.401719] Uhhuh. NMI received for unknown reason 30 on CPU 0.
[  397.401783] Do you have a strange power saving mode enabled?
[  397.401824] Dazed and confused, but trying to continue
[  513.762720] Uhhuh. NMI received for unknown reason 20 on CPU 0.
[  513.762779] Do you have a strange power saving mode enabled?
[  513.762821] Kernel panic - not syncing: NMI: Not continuing

 

참고 부탁드립니다.

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다