超线程的工作方式是,复制处理器中存储架构状态的某些部分。不过,超线程内核中的逻辑处理器共享执行资源,包括执行引擎、缓存和系统总线接口。这允许逻辑处理器从停止的逻辑内核借用资源(假设两个逻辑内核与同一物理内核相关联)。由于缓存未命中、分支预测错误或数据相关性导致发送的数据延迟,处理器停止运行,以便完成处理当前的线程。

NSX Advanced Load Balancer 具有两个控制项以控制使用超线程内核以及在超线程 CPU 上分配(放置)se_dps。这两个控制项是 SE 组的一部分。以下是这两个控制项:

  • 您可以使用以下方法在 SE 上启用超线程:

threaded cores use_hyperthreaded_cores –
True [default] | False     
enable or disable se_dps to use hyper-
  • 您可以使用以下方法控制在超线程 CPU 上放置 se_dps

se_hyperthreaded_mode – 
         SE_CPU_HT_AUTO[default]
         SE_CPU_HT_SPARSE_DISPATCHER_PRIORITY
         SE_CPU_HT_SPARSE_PROXY_PRIORITY
         SE_CPU_HT_PACKED_CORES 
         
         controls the distribution of se_dps on hyper-threads
注:

要使用这些控制项,必须满足以下条件:

  • 处理器必须支持超线程。

  • 必须在 BIOS 中启用超线程。

use_hyperthreaded_cores:您可以使用该控制项为 se_dps 启用或停用超线程内核。可以使用 CLI 或 UI 配置该控制项。

以下是 CLI 命令:

[admin:vpr-ctrl]: serviceenginegroup> use_hyperthreaded_cores [admin:vpr-ctrl]: serviceenginegroup> se_hyperthreaded_mode SE_CPU_HT_AUTO [admin:vpr-ctrl]: serviceenginegroup> save 

se_hyperthreaded_mode:在数据路径进程数低于联机超线程 CPU 数时,您可以使用该控制项影响在超线程 CPU 上分配 se_dp。只能通过 CLI 配置该控制项。

注:

将 use_hyperthreaded_cores 设置为 True,以使通过 se_hyperthreaded_mode 配置的模式生效。

以下是支持的 se_hyperthreaded_mode 值:

  • SE_CPU_HT_AUTO - 这是默认模式。SE 自动确定最佳的放置。该模式根据 CPU 超线程拓扑保留现有的行为。如果数据路径进程数低于 CPU 数,这相当于 SE_CPU_HT_SPARSE_PROXY_PRIORITY 模式。

  • SE_CPU_HT_SPARSE_DISPATCHER_PRIORITY - 该模式尝试仅将一个数据路径进程放置在物理 CPU 中,以便为调度程序实例提供更高的优先级。该模式先耗尽物理内核,然后按 CPU 编号数字降序耗尽超线程。

  • SE_CPU_HT_SPARSE_PROXY_PRIORITY - 该模式尝试仅将一个数据路径进程放置在物理 CPU 中,以便为代理(非调度程序)实例提供更高的优先级。在数据路径进程数低于 CPU 数时,该模式是非常有用的。该模式耗尽物理内核,然后按 CPU 编号数字升序耗尽超线程。

  • SE_CPU_HT_PACKED_CORES - 该模式将数据路径进程放置在同一物理内核上。每个内核可以具有两个彼此相邻的调度程序实例或非调度程序(代理)实例。在数据路径进程数低于 CPU 数时,该模式是非常有用的。该模式按顺序耗尽每个内核上的超线程,然后再移到下一个物理内核。

如果启用了超线程,启用了 DP 隔离的行为将会发生变化。受影响的模式是 SE_CPU_HT_SPARSE_DISPATCHER_PRIORITYSE_CPU_HT_SPARSE_PROXY_PRIORITY 以及 SE_CPU_HT_AUTO 扩展。在使用 DP 隔离时,将保留一定数量的物理内核,以将其从 dp_set(se_dp 进程的 cgroup)中排除。这会导致从数据路径的超线程分配逻辑中屏蔽 (masked) 某些内核。

该数字的计算方法如下所示:floor(num_non_dp_cpus/2)。

例如,如果 num_non_dp_cpus 为 5,则保留 2 个内核以专用于非数据路径。为了使用超线程(具有或没有 DP 隔离),在 SE 组中提供了以下配置控制项:

  1. use_hyperthreaded_cores (true/ false)

  2. se_hyperthreaded_mode(此处讨论的 4 种模式之一)

示例配置

 | use_hyperthreaded_cores                 | True                                                    |
 | se_hyperthreaded_mode                   | SE_CPU_HT_SPARSE_DISPATCHER_PRIORITY       |