vRNI 4.2 이상에서 가상 인프라 지연 기능이 사용하도록 설정된 경우 NSX 6.4.5 또는 6.4.6에 대해 준비된 ESXi 호스트에 PSOD(Purple Screen of Death) 진단 화면이 표시됩니다.

문제

BFD 터널 수가 900을 초과할 경우 PSOD 진단 화면이 표시됩니다.

원인

vRNI의 가상 인프라 지연 기능은 NSX 준비 호스트에서 BFD 모니터링을 사용하여 호스트 간에 터널을 설정합니다. NSX 커널 모듈이 제어부 에이전트의 상세 BFD 터널 쿼리에 응답하는 동안 BFD 세션의 상태를 유지하는 경우 PSOD가 발생합니다.

BFD 터널 수가 수백 개에 해당하는 경우 PSOD가 확인되지 않습니다. BFD 터널 수가 900을 초과하면 호스트에 심각한 오류가 발생하고 사용할 수 없게 됩니다. 900개를 초과하는 BFD 터널을 생성하는 호스트 수는 환경의 VTEP 수에 따라 다릅니다.

환경의 BFD 터널 수를 확인하려면 공식 (N-1)*(T^2)를 사용합니다.

여기서 다음이 적용됩니다.
  • N은 호스트의 수입니다.
  • T는 호스트당 VTEP의 수입니다.

예를 들어, 각각 2개의 VTEP이 있는 4개의 호스트 클러스터에서 각 호스트가 볼 수 있는 BFD 터널 수는 다음과 같습니다.

(4-1)*(2^2)=12
PSOD의 스택 추적에서 다음과 유사한 항목을 확인합니다.
#0 DLM_free (msp=0x431a455dcca0, mem=mem@entry=0x431a458cbd10, allowTrim=allowTrim@entry=1 '\001') at bora/vmkernel/main/dlmalloc.c:4924
#1 0x0000418012343ffa in Heap_Free (heap=0x431a455dc000, mem=<optimized out>, mem@entry=0x431a458cbd10) at bora/vmkernel/main/heap.c:4314
#2 0x000041801222db25 in vmk_HeapFree (heap=<optimized out>, mem=mem@entry=0x431a458cbd10) at bora/vmkernel/core/vmkapi_heap.c:250
#3 0x000041801393ca61 in __VDL2_Free (heapID=<optimized out>, data=data@entry=0x431a458cbd10) at /build/mts/release/bora-13168956/esx-datapath/modules/vdl2/vdl2.c:152
#4 0x0000418013950caf in VDL2_CPTaskFree (task=task@entry=0x431a458cbd10) at /build/mts/release/bora-13168956/esx-datapath/modules/vdl2/vdl2_ctlplane.c:164
#5 0x0000418013949415 in VDL2CPWorldProcessTask (task=0x431a458cbd10) at /build/mts/release/bora-13168956/esx-datapath/modules/vdl2/vdl2_cpworld.c:283
#6 VDL2CPWorldFunc (data=data@entry=0x0) at /build/mts/release/bora-13168956/esx-datapath/modules/vdl2/vdl2_cpworld.c:335
#7 0x0000418012308adf in vmkWorldFunc (data=<optimized out>) at bora/vmkernel/main/vmkapi_world.c:528
#8 0x00004180124c91f5 in CpuSched_StartWorld (destWorld=<optimized out>, previous=<optimized out>) at bora/vmkernel/sched/cpusched.c:10792
#9 0x0000000000000000 in ?? ()
호스트의 /var/log/vmkernel.log 파일에서 BFD가 호스트에서 사용하도록 설정되어 있음을 나타내는 다음 항목을 확인합니다.
# cpu75:68603 opID=6616a61a)vxlan: VDL2PortsetPropSet:1036: Updating BFD VTEP config to : enable
# cpu75:68603 opID=6616a61a)BFD: BFD_CreateNewSession ENTER: localIP: a.b.c.d , remoteIP: w.x.y.z , probeInterval (in milli seconds): 12000
# cpu75:68603 opID=6616a61a)WARNING: BFD: Inserted new session: Discriminator 1471713223, localIP: a.b.c.d remoteIP: w.x.y.z
ESXi 코어 덤프 또는 메모리 덤프에서 다음 BFD 메시지를 확인합니다(BFD 상태 변경: init -> up).
less vmkernel-zdump.1
    vers:1 diag:"No Diagnostic" state:up mult:3 length:24
    flags: pol
    my_disc:0x50c322ca your_disc:0x39f2436f
    min_tx:300000us (300ms)
    min_rx:12000000us (12000ms)
    min_rx_echo:0us (0ms)(null): BFD state change: init->up "No Diagnostic"->"No Diagnostic".(null): New remote min_rx.
    vers:1 diag:"No Diagnostic" state:up mult:3 length:24
    flags: pol
    my_disc:0x5a566ae8 your_disc:0x16f3890c
    min_tx:300000us (300ms)
    min_rx:12000000us (12000ms)
    min_rx_echo:0us (0ms)(null): BFD state change: init->up "No Diagnostic"- >"No Diagnostic".(null): New remote min_rx.

해결책

  1. vRNI를 사용하여 NSX 준비 호스트에서 지연 메트릭을 수집할 수 있도록 설정한 경우 가상 인프라 지연 시간 기능을 사용하지 않도록 설정합니다.
    1. vRNI에서 설정 > 계정 및 데이터 소스로 이동합니다.
    2. NSX Manager 데이터 소스를 편집하고 가상 인프라 지연 시간 사용 확인란의 선택을 취소합니다.
    3. 제출을 클릭하여 변경 사항을 확인합니다.
  2. NSX API를 사용하여 지연 시간 메트릭을 수집하도록 설정했거나 vRNI 장치에 액세스할 수 없는 경우 API 요청을 실행하여 BFD를 사용하지 않도록 설정합니다.
    1. 다음 GET API를 실행하여 BFD 글로벌 구성 세부 정보를 검색하고 BFD가 사용하도록 설정되었는지 확인합니다.
      GET /api/2.0/vdn/bfd/configuration/global
      API 응답의 예:
      <bfdGlobalConfiguration>
          <enabled>true</enabled>
          <pollingIntervalSecondsForHost>180</pollingIntervalSecondsForHost>
          <bfdIntervalMillSecondsForHost>120000</bfdIntervalMillSecondsForHost>
      </bfdGlobalConfiguration>
    2. 다음 PUT API 요청을 실행하여 BFD를 사용하지 않도록 설정합니다.
      PUT /api/2.0/vdn/bfd/configuration/global
      요청 본문의 예:
      <bfdGlobalConfiguration>
          <enabled>false</enabled>
          <pollingIntervalSecondsForHost>180</pollingIntervalSecondsForHost>
          <bfdIntervalMillSecondsForHost>120000</bfdIntervalMillSecondsForHost>
      </bfdGlobalConfiguration>
    BFD 구성 매개 변수에 대한 자세한 내용은 " NSX API 가이드" 를 참조하십시오.