本页面介绍如何在 Google Kubernetes Engine (GKE) 集群中配置并发多线程。
概览
GKE 节点是 GKE 为您创建的 Compute Engine 虚拟机 (VM) i实例。在这些虚拟机上,通常会默认启用并发多线程 (SMT)。SMT 能够在单个物理 CPU 核心上执行多个独立的线程。启用 SMT 后,单个物理核心可以将两个虚拟 CPU (vCPU) 作为独立的单独线程运行。例如,n2-standard-32
GKE 节点实际上在 16 个物理 CPU 核心上运行 32 个 vCPU。
通过在 GKE 节点上引入 SMT 可配置性,您现在可以配置 SMT,以使有效 vCPU 的数量等于物理核心数,这意味着您的 GKE 节点可以使用每个 vCPU 的整个物理核心。
优势
在 GKE 上配置 SMT 具有以下优势。
性能改进
一些高性能计算 (HPC) 工作负载可通过停用 SMT 来提高性能。一般而言,对于许多常规计算任务或需要大量 I/O 的任务来说,SMT 可以显著提高应用吞吐量。相比之下,对于两个虚拟核心均受计算限制的计算限制型作业来说,SMT 可能会影响应用的总体性能,并增加作业的不确定性。因此,停用 SMT 时,某些 HPC 应用的性能可能会更好,且可预测性更高。
降低了许可费用
某些软件许可协议具有与已使用的 vCPU 数量相关联的计费模型。停用 SMT 会将每个核心的 vCPU 数量减少一半,从而可能会降低许可费用。如需了解详情,请参阅您的许可协议。
请参阅价格部分,了解 Google Cloud 在您配置了 SMT 时如何进行结算。
限制
- 机器类型:无法在具有少于 2 个 vCPU 的机器类型(例如
n1-standard-1
)或 Tau T2D 机器类型上配置 SMT。 - 节点自动配置:启用了节点自动配置的集群不支持 SMT 配置。
- 集群自动扩缩器:只有运行 GKE 1.21 版或更高版本的集群的集群自动扩缩器才支持从零节点扩容和 SMT 可配置性。
- GKE Sandbox:对于运行 1.24.2-gke.300 版及更高版本的 GKE Standard 集群,您可以使用
--threads-per-core
标志在 GKE Sandbox 节点中配置 SMT 设置;对于更早的版本,则需要使用独立的 DaemonSet 来进行设置。有关说明,请参阅 GKE Sandbox。由于 1.24.2-gke.300 版之前的 GKE Sandbox 默认停用多线程,因此不支持使用threads-per-core
配置 SMT。如果您使用 GKE Sandbox 并希望启用 SMT,请参阅SMT 可能已停用。 - 集群模式:GKE Autopilot 集群不支持 SMT 配置。
价格
GKE 的 SMT 根据 SMT 的底层 Compute Engine 价格计费。您需要为虚拟机的机器类型定义的 vCPU 数量付费,而无需为每个核心上运行的线程数付费。即使您配置了 SMT,仍然需要为虚拟机机器类型定义的默认 vCPU 数量付费。如需详细了解虚拟机的计费方式,请参阅虚拟机实例价格。
例如,使用 n2-standard-8
机器类型创建的 GKE 节点默认启用 SMT,最多可运行 8 个 vCPU(4 个物理 CPU 核心,每个核心 2 个 vCPU)。如果您将 SMT 配置为每个核心仅使用一个线程(实际上是 4 个 vCPU),您仍然需要为 8 个 vCPU 付费。
配置 SMT
通过指定每个核心的线程数,您可以在新集群或节点池上配置 SMT。
下表显示了每个核心的线程数的可能值,以及节点的相应 SMT 行为:
每个核心的线程数 | SMT 行为 |
---|---|
null (未指定) |
Compute Engine 虚拟机默认值 |
0 |
无效 |
1 |
SMT 停用 |
2 |
SMT 启用 |
> 2 |
无效 |
在新集群上配置 SMT
您可以使用 gcloud CLI 或 Google Cloud 控制台在新集群上配置 SMT。
gcloud
如需配置 SMT,请运行以下命令:
gcloud container clusters create CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--threads-per-core=THREADS_PER_CORE
替换以下内容:
CLUSTER_NAME
:新集群的名称。MACHINE_TYPE
:要用于 GKE 节点的机器类型。此项必须是具有 2 个或更多 vCPU 的机器类型。THREADS_PER_CORE
:每个物理核心的线程数。上表显示了您可以指定的值。
如需查看选项的完整列表,请参阅 gcloud container clusters create
文档。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
在创建集群对话框中,点击 GKE Standard 旁边的配置。
在导航菜单的节点池部分中,点击节点池的名称,然后点击节点。
在机器配置部分中,选择支持的机器类型,例如 e2-standard-2。
点击
CPU 平台和 GPU。从 vCPU 与核心比率下拉菜单中,选择以下选项之一:
- 每个核心 1 个 vCPU:停用 SMT。
- 每个核心 2 个 vCPU:启用 SMT。
根据需要配置集群和节点池,然后点击创建。
在新节点池上配置 SMT
您可以使用 gcloud CLI 或 Google Cloud 控制台在新节点池上配置 SMT。
gcloud
如需配置 SMT,请运行以下命令:
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--threads-per-core=THREADS_PER_CORE
替换以下内容:
POOL_NAME
:新节点池的名称。CLUSTER_NAME
:现有集群的名称。MACHINE_TYPE
:要用于 GKE 节点的机器类型。此项必须是具有 2 个或更多 vCPU 的机器类型。THREADS_PER_CORE
:每个物理核心的线程数。上表显示了您可以指定的值。
如需查看选项的完整列表,请参阅 gcloud container clusters create
文档。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击要修改的集群的名称。
点击
添加节点池。在导航菜单中,点击节点。
在机器配置部分中,选择支持 SMT 的机器系列和机器类型,例如 n2-standard-2。
点击
CPU 平台和 GPU。从 vCPU 与核心比率下拉菜单中,选择以下选项之一:
- 每个核心 1 个 vCPU:停用 SMT。
- 每个核心 2 个 vCPU:启用 SMT。
根据需要配置节点池,然后点击创建。
验证 SMT 配置
Linux
如需在 Linux 节点上验证 SMT 配置,请执行以下步骤:
使用 SSH 连接到节点:
gcloud compute ssh NODE_NAME
将
NODE_NAME
替换为您的节点名称。检查 vCPU 数量:
cat /proc/cpuinfo | grep processor | wc -l
输出内容类似如下:
16
如果将每个核心的线程数设置为
1
,则输出应显示 Compute Engine 虚拟机默认 vCPU 数量的一半。例如,停用 SMT 时n2-standard-32
的输出应为16
,而不是默认值32
。
Windows
如需在 Windows 节点上验证 SMT 配置,请执行以下步骤:
设置要通过 RDP 连接到节点的用户名和密码:
gcloud compute reset-windows-password NODE_NAME
将
NODE_NAME
替换为您的节点名称。建立与虚拟机的
EXTERNAL_IP:3389
的连接。运行以下 powershell 命令:
Get-WmiObject -Class Win32_Processor -ComputerName. | Select-Object -Property [a-z]* | Select NumberOfCores,NumberOfLogicalProcessors
如果将每个核心的线程数设置为
1
,则NumberOfCores
值应等于NumberOfLogicalProcessors
值,如以下示例输出中所示:Output (example n1-standard-2 with SMT off) NumberOfCores NumberOfLogicalProcessors ------------- ------------------------- 1 1