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 을 한다던지등의 액션이 발생하지 않습니다.

 

 

위에처럼 나오고 실제로는 죽거나 하지 않는데요, 제가 확인한바로는 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 후 덤프 생성 확인

 

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

 

 

참고 부탁드립니다.