本頁面說明如何在 Google Kubernetes Engine (GKE) 叢集中設定同步多執行緒。
總覽
GKE 節點是 Compute Engine 虛擬機器 (VM) 執行個體,由 GKE 代表您建立。在這些 VM 上,預設通常會啟用多執行緒並行 (SMT)。SMT 可在單一實體 CPU 核心上執行多個獨立執行緒。啟用 SMT 後,單一實體核心就能以個別獨立執行緒的形式執行兩個虛擬 CPU (vCPU)。舉例來說,n2-standard-32
GKE 節點實際上是在 16 個實體 CPU 核心上執行 32 個 vCPU。
GKE 節點導入 SMT 可設定性後,您現在可以設定 SMT,使有效 vCPU 數量等於實體核心數量,也就是說,GKE 節點可為每個 vCPU 使用完整的實體核心。
優點
在 GKE 上設定 SMT 可帶來下列好處。
提高效能
停用 SMT 後,部分高效能運算 (HPC) 工作負載的效能可能會提升。一般來說,對於許多一般運算工作或需要大量 I/O 的工作,SMT 可以大幅提升應用程式總處理量。相反地,如果工作受運算限制,且兩個虛擬核心都受運算限制,SMT 可能會阻礙整體應用程式效能,並為工作增加不確定的差異。因此,停用 SMT 後,部分 HPC 應用程式的效能可能會更好,也更穩定。
降低授權費用
部分軟體授權協議的計費模式與使用的 vCPU 數量有關。停用 SMT 會將每個核心的 vCPU 數量減少一半,授權費用可能會因此降低。詳情請參閱授權協議。
如要瞭解設定 SMT 時的計費方式,請參閱「定價」一節。 Google Cloud
限制
- 機器類型:SMT 無法在少於 2 個 vCPU 的機器類型 (例如
n1-standard-1
) 或 Tau T2D 機器類型上設定。 - 節點自動佈建:如果叢集已啟用節點自動佈建,則不支援 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 可設定性。
定價
系統會根據基礎 Compute Engine SMT 定價,向您收取 GKE SMT 費用。系統會依據 VM 的機器類型定義的 vCPU 數量收費,而非根據每個核心執行的執行緒數量收費。即使您設定 SMT,系統仍會依據 VM 機器類型定義的預設 vCPU 數量收費。如要進一步瞭解 VM 的計費方式,請參閱 VM 執行個體定價。
舉例來說,使用 n2-standard-8
機器類型建立的 GKE 節點預設會啟用 SMT,最多可執行 8 個 vCPU,也就是每個實體 CPU 核心 2 個 vCPU。如果您將 SMT 設為每個核心只使用一個執行緒 (實際上是 4 個 vCPU),系統仍會向您收取 8 個 vCPU 的費用。
設定 SMT
如要在新叢集或節點集區上設定 SMT,請指定每個核心的執行緒數量。
下表列出每個核心的可能執行緒數值,以及節點對應的 SMT 行為:
每個核心的執行緒數量 | SMT 行為 |
---|---|
null (未指定) |
Compute Engine VM 預設值 |
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 Create」(建立)。
在「建立叢集」對話方塊中,按一下 GKE Standard 旁邊的「設定」。
在導覽選單的「節點集區」部分中,按一下節點集區名稱,然後按一下「節點」。
在「機器設定」部分,選取支援的「機器類型」,例如「e2-standard-2」。
按一下「CPU 平台和 GPU」
。從「vCPU to core ratio」(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」頁面。
按一下要修改的叢集名稱。
按一下
「Add node pool」(新增節點集區)。在導覽選單中,按一下「節點」。
在「機器設定」部分,選取支援 SMT 的「機器系列」和「機器類型」,例如「n2-standard-2」。
按一下「CPU 平台和 GPU」
。從「vCPU to core ratio」(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 VM 預設 vCPU 數量的一半。舉例來說,如果 SMT 關閉,n2-standard-32
的輸出內容應為16
,而非預設值32
。
Windows
如要在 Windows 節點上驗證 SMT 設定,請執行下列步驟:
設定使用者名稱和密碼,透過遠端桌面協定連線至節點:
gcloud compute reset-windows-password NODE_NAME
將
NODE_NAME
替換為節點名稱。建立與 VM 的
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