Les hôtes ESXi préparés pour NSX 6.4.5 ou 6.4.6 affichent un PSOD (Purple Screen of Death) lorsque la fonctionnalité de latence de l'infrastructure virtuelle est activée dans vRNI 4.2 ou version ultérieure.

Problème

L'écran de diagnostic PSOD s'affiche lorsque le nombre de tunnels BFD est supérieur à 900.

Cause

La fonctionnalité de latence de l'infrastructure virtuelle dans vRNI utilise la surveillance BFD sur les hôtes préparés pour NSX afin d'établir des tunnels entre les hôtes. Un PSOD se produit lorsque le module de noyau NSX conserve l'état des sessions BFD lors de la réponse à une requête de tunnel BFD détaillée à partir de l'agent du plan de contrôle.

Il n'y a pas de PSOD lorsque le nombre de tunnels BFD est de quelques centaines. Lorsque le nombre de tunnels BFD dépasse 900, l'hôte subit une erreur critique et devient inopérant. Le nombre d'hôtes qui créeront plus de 900 tunnels BFD dépend du nombre de VTEP dans votre environnement.

Pour déterminer le nombre de tunnels BFD dans votre environnement, utilisez la formule suivante : (N-1)*(T^2)

Où :
  • N est le nombre d'hôtes.
  • T est le nombre de VTEP par hôte.

Par exemple, dans un cluster de quatre hôtes avec deux VTEP chacun, le nombre de tunnels BFD que chaque hôte peut voir est :

(4-1)*(2^2)=12
Dans la trace de la pile du PSOD, observez des entrées similaires aux suivantes :
#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 ?? ()
Dans le fichier /var/log/vmkernel.log de l'hôte, observez les entrées suivantes, qui indiquent que BFD a été activé sur l'hôte :
# 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
Dans le vidage de mémoire ESXi, observez les messages BFD suivants (état modifié de BFD : init -> actif)
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.

Solution

  1. Si vous avez utilisé vRNI pour activer la collecte de mesures de latence à partir d'hôtes préparés pour NSX, désactivez la fonctionnalité de latence de l'infrastructure virtuelle.
    1. Dans vRNI, accédez à Paramètres > Sources de données et de comptes.
    2. Modifiez la source de données NSX Manager et décochez la case Activer la latence de l'infrastructure virtuelle.
    3. Cliquez sur Soumettre pour confirmer la modification.
  2. Si vous avez utilisé des API NSX pour activer la collecte des mesures de latence, ou si le dispositif vRNI est inaccessible, désactivez BFD en exécutant une demande API.
    1. Récupérez les détails de la configuration globale de BFD en exécutant l'API GET suivante et observez si BFD est activé :
      GET /api/2.0/vdn/bfd/configuration/global
      Exemple de réponse de l'API :
      <bfdGlobalConfiguration>
          <enabled>true</enabled>
          <pollingIntervalSecondsForHost>180</pollingIntervalSecondsForHost>
          <bfdIntervalMillSecondsForHost>120000</bfdIntervalMillSecondsForHost>
      </bfdGlobalConfiguration>
    2. Désactivez BFD en exécutant la demande d'API PUT suivante :
      PUT /api/2.0/vdn/bfd/configuration/global
      Exemple de texte de demande :
      <bfdGlobalConfiguration>
          <enabled>false</enabled>
          <pollingIntervalSecondsForHost>180</pollingIntervalSecondsForHost>
          <bfdIntervalMillSecondsForHost>120000</bfdIntervalMillSecondsForHost>
      </bfdGlobalConfiguration>
    Pour obtenir des informations détaillées sur les paramètres de configuration BFD, reportez-vous au Guide de NSX API.