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 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.

解決方法

  1. NSX 準備済みホストからの遅延メトリックの収集を有効にするために vRNI を使用している場合は、[仮想インフラストラクチャの遅延] 機能を無効にします。
    1. vRNI で [Settings(設定)] > [Accounts and Data Sources(アカウントとデータソース)] の順に移動します。
    2. NSX Manager データソースを編集し、[Enable Virtual Infrastructure Latency(仮想インフラストラクチャの遅延を有効にする)] チェックボックスをオフにします。
    3. [Submit(送信)] をクリックして、削除を確認します。
  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 ガイド』を参照してください。