主机监控工具报告的 CPU 利用率数字与 NSX Advanced Load Balancer SE 使用的实际 CPU 可能不同。CPU 利用率的这种差异是设计使然。本文介绍了值存在差异的原因。您还可以通过 NSX Advanced Load Balancer UI 和 CLI 模式进行故障排除。

行为原因

为了最大程度地减少 NSX Advanced Load Balancer SE 中的端到端延迟,CPU 调度程序周期会积极探测相应数据路径接口(轮询模式驱动程序 (Poll Mode Driver, PMD))中的所有队列。当管理员发出 tophtop 命令时,这会在底层主机操作系统上显示为 CPU 利用率高。

在此场景中,底层物理主机的监控工具显示实际 CPU 利用率超过 95%,尤其是 vCPU0 和 vCPU1,如下所示:



物理主机的相应实时 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 控制器显示 CPU 使用情况正常且未过度利用,如下所示:



NSX Advanced Load Balancer SE 架构

NSX Advanced Load Balancer 服务引擎容器或虚拟机 (Virtual Machine, VM) 在每个内核上运行 se_dp 进程,以根据 CPU 内核数进行扩展(不仅在主机或虚拟机内,而且在 SE 虚拟机或主机之间)。除专有进程(如 se_dp 进程与控制器的连接)、SE 日志代理(向控制器报告流量日志)等以外,NSX Advanced Load Balancer 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 UI 中查看统计信息(所有 se_dp 处理的平均值)。

使用 NSX Advanced Load Balancer UI 进行故障排除

NSX Advanced Load Balancer 用户界面可准确显示可用于处理的有用 CPU,并可用作验证 SE 可用 CPU 的证明源。最佳做法是,SE 的 CPU 利用率(如用户界面中报告的利用率)不得超过 95%。当 CPU 以非常高的级别运行时,SE 可能会增加网络流量的延迟。

有关详细信息,请参阅 Hypervisor 报告 SE CPU 利用率高的原因

使用 CLI 进行故障排除

要查看 SE 的实际 CPU 利用率(在 NSX Advanced Load Balancer shell 中),请执行以下步骤:

  • 使用 SSH 登录到控制器,然后输入 shell 提示符。

  • 使用命令 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_

底层主机操作系统使用的总实际 CPU。

_total_memory_

分配给虚拟机或容器的物理内存总量。

_free_memory_

当前可用且未由虚拟机或容器使用的内存量。

_idle0_ 和 _idle1_

相应 CPU 的 CPU 闲置量。

  • 讨论的示例是来自具有两个 vCPU 的同一主机的输出。我们提供了分组信息列表,如正在运行的进程、CPU 利用率(以百分比表示)。

  • 由于存在两个 vCPU,因此可以使用调度程序进程,例如分别与 vCPU 0 和 vCPU 1 对应的 se_dp0se_dp1

  • 只有分配给容器或 SE 的内核才会出现在 NSX Advanced Load Balancer SE CLI 输出中。

  • 属于物理主机的其他 vCPU 内核不会包含在 NSX Advanced Load Balancer SE CLI 输出中。

引入了字段 dispatcher_dp_cpu_utilproxy_dp_cpu_util,以提高报告 CPU 利用率的精确度。

服务稳定性建议

考虑到 SE 组自动缩放或冗余池,建议具有硬件冗余。

注:
  • 要启用 TSO、RSS 和 GRO 等选项,请确保选择了相应的硬件网卡。

  • NSX Advanced Load Balancer 可以手动配置所需数量的调度程序和代理内核,以及配置专用调度程序的选项。如果需要高吞吐量,建议配置专用调度程序。