超线程的工作方式是,复制处理器中存储架构状态的某些部分。不过,超线程内核中的逻辑处理器共享执行资源,包括执行引擎、缓存和系统总线接口。这允许逻辑处理器从停止的逻辑内核借用资源(假设两个逻辑内核与同一物理内核相关联)。由于缓存未命中、分支预测错误或数据相关性导致发送的数据延迟,处理器停止运行,以便完成处理当前的线程。
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_PRIORITY
、SE_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 组中提供了以下配置控制项:
use_hyperthreaded_cores (true/ false)
se_hyperthreaded_mode(此处讨论的 4 种模式之一)
示例配置
| use_hyperthreaded_cores | True | | se_hyperthreaded_mode | SE_CPU_HT_SPARSE_DISPATCHER_PRIORITY |