ホスト モニタリング ツールによって報告される CPU 使用率の数値と、NSX Advanced Load Balancer SE が実際に使用している CPU に違いがある場合があります。この CPU 使用率の差は設計によるものです。この記事では、値の違いの理由について説明します。NSX Advanced Load Balancer のユーザー インターフェイス モードと CLI モードを使用してトラブルシューティングを行うこともできます。
動作の理由
NSX Advanced Load Balancer SE の End-to-End の遅延を最小限に抑えるため、CPU ディスパッチャ サイクルは、それぞれのデータ パス インターフェイス (Poll Mode Driver (PMD)) 内のすべてのキューを積極的にプローブします。これは、管理者が top または htop コマンドを発行するときに、基盤となるホスト OS の CPU の高使用率として反映されます。
次のシナリオでは、基盤となる物理ホストのモニタリング ツールは、図に示すように、実際の CPU 使用率(特に vCPU0 および vCPU1)が 95% を超えていたことを示しています。
次に示すように、物理ホストからの対応するリアルタイム CPU 統計情報にも、vCPU 使用率が 95% を超えていると表示されます。
NSX Advanced Load Balancer データパスは、使用可能な CPU コアの数に応じてスケールインするように設計されています。これが、複数の se_dp(サービス エンジン データ パス)プロセスが表示される理由です。NSX Advanced Load Balancer は、ホストまたは仮想マシンの使用可能なすべての CPU コアで各 se_dp プロセスを実行して、すべての CPU コアを利用して最大のパフォーマンスを得ようとします。このようにすることで、それぞれ異なるプロセス コンテキストであるユーザー空間でのロックとコンテキストの切り替を最小限に抑えて、NSX Advanced Load Balancer をスケーリングできます。
次に示すように、NSX Advanced Load Balancer Controller は、同じ期間に CPU 使用率が正常であり、過剰に使用されていないことを示します。
NSX Advanced Load Balancer SE のアーキテクチャ
NSX Advanced Load Balancer のサービス エンジン コンテナまたは仮想マシン (VM) は、コアごとに se_dp プロセスを実行し、(ホストまたは仮想マシン内だけでなく、SE 仮想マシンまたはホスト全体の)CPU コアの数に応じてスケーリングされます。NSX Advanced Load Balancer SE 仮想マシンには、独自のプロセス(コントローラとの se_dp プロセス接続など)、SE ログ エージェント(コントローラにトラフィック ログを報告する)とは別に実行される、基盤となる Linux プロセスがあります。Linux ホストで報告される CPU 使用率は、すべての Linux プロセスと NSX Advanced Load Balancer SE 独自のプロセスの統合率です。
SE DP プロセスの使用率の計算は、[se_dp] プロセスがパケットの処理に費やしたティック数またはサイクル数と、処理なしのサイクル(アイドル サイクル)に基づいて行われます。この計算は、se_dp プロセスごとに詳細な統計で行われます。この状態を表示するには、show serviceengine *service engine name* cpu
を使用します。または、NSX Advanced Load Balancer ユーザー インターフェイスから統計情報を表示することもできます(すべての se_dp プロセスの平均)。
NSX Advanced Load Balancer ユーザー インターフェイス使用のトラブルシューティング
NSX Advanced Load Balancer ユーザー インターフェイスには、処理に使用できる CPU が正確に表示され、SE で使用可能な CPU を検証するための根拠として使用できます。ベスト プラクティスとして、(ユーザー インターフェイスで報告される)SE の CPU 使用率は 95% 以下にする必要があります。CPU が非常に高いレベルで実行されている場合、SE はネットワーク トラフィックに待機時間を追加する可能性があります。
詳細については、「ハイパーバイザーが SE による高 CPU 使用率を報告する理由」を参照してください。
CLI 使用のトラブルシューティング
(NSX Advanced Load Balancer シェルで)SE の実際の CPU 使用率を表示するには、次の手順を実行します。
(SSH を使用して)コントローラにログインし、シェル プロンプトを表示します。
次に示すように、コマンド
show serviceengine
を使用して、現在のコントローラの下にあるアクティブな SE を確認します。[admin]:> show serviceengine +-----------------------+---------------+-------------+----------+-------------+ | Name | SE Group | Mgmt IP | Cloud | Oper State | +-----------------------+---------------+-------------+----------+-------------+ | ****** |Default-Group |********* |********* | OPER_UP | +-----------------------+---------------+-------------+----------+-------------+
次に示すように、Iscpu コマンド(sudo 権限が必要)を使用して、物理ホストが所有する vCPU コアの数を確認します。
[root@se-linux-17 ~]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 2 NUMA noes(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Gold 6130 CPU @ 2.10GHz Stepping: 4 CPU MHz: 2100.000 BogoMIPS: 4200.00 Hypervisor vendor: VMware Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 22528K
cat /proc/cpuinfo
は、vCPU ごとに情報を提供します。
選択した SE の実際の CPU 使用率を表示するには、次のようにコマンド show serviceengine *SE_name*cpu
を使用します。
[admin:]: > show serviceengine ***** cpu +---------------------------+---------------------------------------+ | Field | Value | +---------------------------+---------------------------------------+ | se_uuid | se-*****-avitag-1 | |total_linux_cpu_utilization|25.3150057274 | |total_cpu_utilization |0.006010782570367 | |total_memory |3881336 | |free_memory |399176 | |idle_cpu |74.68499427726 | |process_cpu_utilization[1] | | | process_name |se_agent | | process_cpu_usage |0.2 | | process_memory_usage |1.59161690717 | |process_cpu_utilization[2] | | | process_name |se_dp0 | | process_cpu_usage |0.0120356514073 | | process_memory_usage |5.67876628048 | |process_cpu_utilization[3] | | | process_name |se_dp1 | | process_cpu_memory_usage |0.0 | | process_memory_usage |0.589796915289 | |process_cpu_utilization[4] | | | process_name |se_log_agent | | process_cpu_usage |4.6 | | process_memory_usage |1.00903400272 | |process_cpu_utilization[5] | | | process_name |se_hm | | process_cpu_usage |0.00344827586207 | | process_memory_usage |0.251872035814 | |process_cpu_utilization[6] | | | process_name |idle0 | | process_cpu_usage |100.00 | | process_cpu_ewma |99.9993500642 | |process_cpu_utilization[7] | | | process_name |1dle1 | | process_cpu_usage |100.0 | | process_cpu_ewma |99.998530399 | +---------------------------+---------------------------------------+
フィールド |
説明 |
_process_name_ |
アクティブに実行中のプロセスの名前。 |
_process_cpu_usage_ |
合計 CPU 使用率の割合 (%) として表される、プロセスによって使用される CPU の量 |
_process_memory_usage_ |
合計メモリ使用率の割合 (%) として表される、プロセスによって使用されるメモリの量。 |
_total_linux_CPU_utilization_ |
アンダーレイ ホスト OS で使用されている実際の CPU 合計。 |
_total_memory_ |
仮想マシンまたはコンテナに割り当てられた物理メモリの合計量。 |
_free_memory_ |
現在空いている、仮想マシンまたはコンテナによって使用されていないメモリの量。 |
_idle0_ および _idle1_ |
各 CPU のアイドル状態の CPU の量。 |
説明されている例は、2 つの vCPU を持つ同じホストからの出力です。実行中のプロセス、CPU に使用される量などのグループ分け情報のリストが割合で表示されます。
2 つの vCPU が存在するため、それぞれ vCPU 0 と vCPU 1 に対応する se_dp0 や se_dp1 などのディスパッチャ プロセスを使用できます。
コンテナまたは SE に割り当てられたコアのみが、NSX Advanced Load Balancer SE CLI 出力に表示されます。
物理ホストの一部である他の vCPU コアは、NSX Advanced Load Balancer SE CLI 出力には含まれません。
dispatcher_dp_cpu_util フィールドと proxy_dp_cpu_util フィールドが導入され、CPU 使用率のレポートの精度が向上します。
サービスの安定性に関する提案
SE グループの自動スケーリングまたは冗長プールの観点から、ハードウェアの冗長性を確保することをお勧めします。
TSO、RSS、GRO などのオプションを有効にするには、それぞれのハードウェア NIC が選択されていることを確認します。
NSX Advanced Load Balancer では、必要な数のディスパッチャとプロキシ コアを手動で構成し、専用のディスパッチャを構成するオプションを使用できます。スループットが高い場合は、専用のディスパッチャを構成することをお勧めします。