ESXi-Hosts, die für NSX 6.4.5 oder 6.4.6 vorbereitet sind, zeigen einen violetten Diagnosebildschirm (Purple Screen of Death, PSOD) an, wenn die Latenzfunktion der virtuellen Infrastruktur in vRNI 4.2 oder höher aktiviert ist.

Problem

Der PSOD-Diagnosebildschirm wird angezeigt, wenn die Anzahl der BFD-Tunnel 900 überschreitet.

Ursache

Die Latenzfunktion der virtuellen Infrastruktur in vRNI verwendet die BFD-Überwachung auf vorbereiteten NSX-Hosts, um Tunnel zwischen Hosts einzurichten. Ein PSOD tritt auf, wenn das NSX-Kernelmodul den Zustand der BFD-Sitzungen beim Antworten auf eine detaillierte BFD-Tunnelabfrage vom Steuerungsebenen-Agenten beibehält.

PSOD wird nicht berücksichtigt, wenn die Anzahl der BFD-Tunnel einige Hundert beträgt. Wenn die Anzahl der BFD-Tunnel 900 überschreitet, tritt bei dem Host ein kritischer Fehler auf und er funktioniert nicht mehr. Die Anzahl der Hosts, bei der über 900 BFD-Tunnel erstellt werden, hängt von der Anzahl der VTEPs in Ihrer Umgebung ab.

Um die Anzahl der BFD-Tunnel in Ihrer Umgebung zu ermitteln, verwenden Sie die folgende Formel: (N-1)*(T^2)

Dabei gilt:
  • N ist die Anzahl der Hosts.
  • T ist die Anzahl der VTEPs pro Host.

Beispiel: In einem Cluster mit vier Hosts, die jeweils über zwei VTEPs verfügen, beträgt die Anzahl der BFD-Tunnel, die für jeden Host sichtbar sind:

(4-1)*(2^2)=12
Beachten Sie im Stack-Trace des PSOD Einträge ähnlich den folgenden:
#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 ?? ()
Beachten Sie in der Datei /var/log/vmkernel.log des Hosts die folgenden Einträge, die darauf hinweisen, dass BFD auf dem Host aktiviert war:
# 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
Beachten Sie im ESXi-Core-Dump oder -Speicherabbild die folgenden BFD-Meldungen (BFD state change: 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.

Lösung

  1. Wenn Sie vRNI verwendet haben, um die Erfassung von Latenzmetriken von vorbereiteten NSX-Hosts zu aktivieren, deaktivieren Sie die Funktion für die Latenz der virtuellen Infrastrukturlatenz.
    1. Navigieren Sie in vRNI zu Einstellungen > Konten und Datenquellen.
    2. Bearbeiten Sie die NSX Manager-Datenquelle und deaktivieren Sie das Kontrollkästchen Latenz für virtuelle Infrastruktur aktivieren.
    3. Klicken Sie auf Absenden, um die Änderung zu bestätigen.
  2. Wenn Sie NSX-APIs zum Erfassen von Latenzmetriken verwendet haben oder auf die vRNI-Appliance nicht zugegriffen werden kann, deaktivieren Sie BFD, indem Sie eine API-Anforderung ausführen.
    1. Rufen Sie die globalen BFD-Konfigurationsdetails ab, indem Sie die folgende GET-API ausführen, und beachten Sie, dass BFD aktiviert ist:
      GET /api/2.0/vdn/bfd/configuration/global
      Beispiel für eine API-Antwort:
      <bfdGlobalConfiguration>
          <enabled>true</enabled>
          <pollingIntervalSecondsForHost>180</pollingIntervalSecondsForHost>
          <bfdIntervalMillSecondsForHost>120000</bfdIntervalMillSecondsForHost>
      </bfdGlobalConfiguration>
    2. Deaktivieren Sie BFD, indem Sie die folgende PUT-API-Anforderung ausführen:
      PUT /api/2.0/vdn/bfd/configuration/global
      Beispielanforderungstext:
      <bfdGlobalConfiguration>
          <enabled>false</enabled>
          <pollingIntervalSecondsForHost>180</pollingIntervalSecondsForHost>
          <bfdIntervalMillSecondsForHost>120000</bfdIntervalMillSecondsForHost>
      </bfdGlobalConfiguration>
    Detaillierte Informationen zu den BFD-Konfigurationsparametern finden Sie im Handbuch zu NSX-API.