自訂可見的 CPU 核心數量


自訂可見的 CPU 核心數量,可精細控管授權費用,同時維持網路和永久磁碟的效能。這項自訂設定會減少虛擬機器 (VM) 執行個體可用的 vCPU 數量,但不會變更機器類型或價格。

Compute Engine 會將每個虛擬 CPU (vCPU) 實作為單一硬體多執行緒,在實體 CPU 核心上執行。為減少 VM 可用的 vCPU 數量,Compute Engine 可讓您自訂可見 CPU 核心數量。

可見核心是 VM 使用的基礎硬體中的 CPU 核心。根據預設,VM 可見的 CPU 核心數量,等於機器類型中的 vCPU 數量除以每個核心的執行緒數

  • 可見的 CPU 核心 = 機器類型的 vCPU / 每個核心的執行緒

例如,c2-standard-60 機器類型指定 60 個 vCPU。假設每個核心的預設執行緒數為 2,可見的 CPU 核心數量為 30。如果將可見核心數量從 30 減少為 20,則可用的 vCPU 數量會從 60 減少為 40。

如果同時符合下列兩個條件,請考慮自訂可見的 CPU 核心數量:

在自訂 VM 可用的 vCPU 數量之前,請先考慮使用自訂機器類型

必要的角色

如要取得自訂可見 CPU 核心數量所需的權限,請要求管理員為您授予專案的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色包含自訂可見 CPU 核心數量所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要自訂可見的 CPU 核心數量,必須具備下列權限:

  • 如要在建立 VM 時自訂可見的 CPU 核心數量,請按照下列步驟操作:
    • 專案的 compute.instances.create 權限
    • 如何使用自訂映像檔在映像檔上建立 VM: compute.images.useReadOnly
    • 如何使用快照建立 VM: 在快照上執行 compute.snapshots.useReadOnly
    • 如何使用執行個體範本在執行個體範本上建立 VM: compute.instanceTemplates.useReadOnly
    • 如要將舊版網路指派給專案中的 VM: compute.networks.use
    • 如要為專案中的 VM 指定靜態 IP 位址:compute.addresses.use
    • 如要在使用舊版網路時將外部 IP 位址指派給 VM,請在專案中使用 compute.networks.useExternalIp
    • 如要為 VM 指定子網路,請在專案或所選子網路中使用 compute.subnetworks.use
    • 如要在使用虛擬私有雲網路時將外部 IP 位址指派給 VM,請在專案或所選子網路上設定 compute.subnetworks.useExternalIp
    • 如何為專案中的 VM: compute.instances.setMetadata 設定 VM 執行個體中繼資料
    • 如何為 VM 設定標記:compute.instances.setTags
    • 如何為 VM 設定標籤:compute.instances.setLabels
    • 如何設定 VM 要使用的服務帳戶: 在 VM 上使用 compute.instances.setServiceAccount
    • 如要為專案中的 VM compute.disks.create 建立新磁碟
    • 如要以唯讀或讀寫模式連接現有磁碟:磁碟的 compute.disks.use
    • 如要以唯讀模式連接現有磁碟:磁碟上的 compute.disks.useReadOnly
  • 如要使用執行個體範本,自訂一組 VM 上顯示的 CPU 核心數量: 您需要在建立 VM 時使用的所有權限,以及專案的 compute.instanceTemplates.create

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

vCPU 和每個核心的執行緒數

機器類型的 vCPU 總數,等於可見 CPU 核心數量乘以每個核心的執行緒數量。對於大多數機器系列,每個核心的執行緒數為 2,但您可以手動設定每個核心的執行緒數為 1。

下表以 c2-standard-60 機器類型為例,說明可見的 CPU 核心、每個核心的執行緒數量,以及可用的總 vCPU 數量之間的關係。

機型 可見的 CPU 核心 每個核心的執行緒數量 可用的 vCPU
c2-standard-60 30 (預設) 2 (預設) 60
c2-standard-60 30 (預設) 1 30
c2-standard-60 20 2 (預設) 40
c2-standard-60 20 1 20

效能注意事項

減少可見核心數量可能會影響 VM 的效能。

永久磁碟

  • 永久磁碟的效能限制取決於機器類型,不會受到可見 CPU 核心數量的影響。詳情請參閱「區塊儲存空間效能」。

網路輸出

  • 網路輸出頻寬限制會與機器類型相符,且不會受到可見 CPU 核心數量的影響。不過,網路效能確實會因 VM 可存取的 vCPU 數量而異。舉例來說,具有一個可見 CPU 核心的 n2-standard-16 機器類型可能無法完全使用 32 Gbps 連線。

定價

減少可見核心數量可能會影響 VM 的費用。

作業系統授權費用

  • 您可以減少可見的 CPU 核心數量,降低部分作業系統的授權費用。適用的作業系統是指會針對 VM 可用的每個 vCPU 向您收費的作業系統,例如 Windows Server 和 SQL Server。如要進一步瞭解 Compute Engine 上這些作業系統的授權選項,請參閱「Microsoft 授權」。

VM 費用、配額和容量

  • 自訂可見 CPU 核心數量時,VM 費用、配額和容量會維持不變,因為 Compute Engine 會以 VM 使用機器類型的 CPU 核心數量,收取費用、追蹤配額,並為 VM 在機器類型上分配空間。如要進一步瞭解 Compute Engine 如何為 VM 收費,請參閱「VM 執行個體定價」。

限制

  • 當 VM 處於 RUNNING 狀態時,您無法自訂可見的 CPU 核心數量。如要進一步瞭解 VM 狀態,請參閱「VM 執行個體生命週期」。

  • 在 Google Cloud 控制台中,當可見核心數量減少時,CPU 使用率指標就無法擴大到 100%。此值上限為可見的 CPU 核心數除以 CPU 核心數上限。

支援的機器類型和每個機器類型的有效值

許多機器類型都支援自訂可見 CPU 核心數量。可見的 CPU 核心數量值必須為整數。最大值是機器類型中的 vCPU 數量 (或加速器最佳化機器類型的 GPU),除以 VM 的每個核心執行緒數

下表列出支援這項自訂功能的機器類型,以及這些系列中機器類型可見 CPU 核心的對應有效值。

機器類型系列 預先定義的 vCPU 數量* 可見 CPU 核心的有效值
一般用途
C4 4、8、16、32、48 不限
C4 96 2 的倍數
C4 192 4 的倍數
C3D ≤ 180 不限
C3D 360 2 的倍數
C3 4、8、22、44 1 的倍數
C3 88 2 的倍數
C3 176 4 的倍數
c3-*-metal 192 不支援
E2 ≤ 32 不限
N2 ≤ 32 不限
N2 > 32 2 的倍數
N2D 24 以下 不限
N2D 24 小時以上 2 的倍數
N4 ≤ 80 不限
N1 64 以下 不限
N1 > 64 2 的倍數
N1 (已針對 TPU 進行最佳化) 48 不限
N1 (已針對 TPU 進行最佳化) 96 2 的倍數
儲存空間最佳化
Z3 88 2 的倍數
Z3 176 4 的倍數
運算最佳化
標題 3 88 4 的倍數
C2 4、8、16、30 不限
C2 60 2 的倍數
記憶體最佳化
M4 56 1 的倍數
M4 112 2 的倍數
M4 224 4 的倍數
M3 128 2 的倍數
M3 32, 64 不限
M2 208 4 的倍數
M2 416 8 的倍數
M1 40 不限
M1 80、96 2 的倍數
M1 160 4 的倍數
加速器最佳化
A4 224 2 的倍數
A3 26、52、104、208、224 2 的倍數
A2 ≤ 48 不限
A2 96 2 的倍數
G2 ≤ 48 不限
G2 96 2 的倍數
* 大多數機器類型的名稱都包含 vCPU 數量。不過,對於 G2 以外的加速器最佳化機型,機型名稱會包含預先定義的 GPU 數量。如要查看加速器最佳化機器類型的 vCPU 數量,請參閱加速器最佳化機器系列說明文件。

在建立 VM 時自訂可見的 CPU 核心數量

如要在建立單一 VM 時自訂可見 CPU 核心數量,請使用 Google Cloud 控制台、gcloud CLI 或 Compute Engine API。

以下範例說明如何建立可見 CPU 核心數量較少的 SQL Server VM。

主控台

如要在建立 VM 時自訂可見的 CPU 核心數量,請按照下列步驟操作:

  • 在「Machine configuration」>「Advanced configurations」>「Visible core count」中,選取可見核心數量。

gcloud

如要建立可查看的 CPU 核心數量較少的 SQL Server VM,請使用下列 gcloud compute instances create 指令

gcloud compute instances create VM_NAME \
    --image-project=windows-sql-cloud \
    --image-family=sql-ent-2019-win-2019 \
    --machine-type=MACHINE_TYPE \
    --visible-core-count=VISIBLE_CORE_COUNT \
    --zone=ZONE

更改下列內容:

  • VM_NAME:VM 名稱。

  • MACHINE_TYPE:支援的機器類型,例如 c2-standard-60

  • VISIBLE_CORE_COUNT:可見的 CPU 核心數量。舉例來說,使用 c2-standard-60 機器類型時,如果設為 20,且每個核心的執行緒數量為 2,則會顯示 60 個 CPU 中的 40 個。

  • ZONE:建立 VM 的可用區。

REST

如要建立可見 CPU 核心數量較少的 SQL Server VM,請使用下列 instances.insert 方法

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  ...
  "advanced_machine_features": {
    ...
    "visibleCoreCount": "VISIBLE_CORE_COUNT"
  },
  ...
}

更改下列內容:

  • PROJECT_ID:專案 ID。

  • ZONE:建立 VM 的區域。

  • VM_NAME:VM 名稱。

  • VISIBLE_CORE_COUNT:可見的 CPU 核心數量。舉例來說,使用 c2-standard-60 機器類型時,如果設為 20,且每個核心的執行緒數量為 2,則會顯示 60 個 CPU 中的 40 個。

使用執行個體範本,自訂一組 VM 上顯示的 CPU 核心數量

如要使用執行個體範本建立 VM 時自訂可見的 CPU 核心數量,請使用 Google Cloud 控制台、gcloud CLI 或 Compute Engine API。

以下範例說明如何使用執行個體範本,建立一組相同的 SQL Server VM,並減少可見的 CPU 核心數量。

主控台

如要在建立執行個體範本時自訂可見的 CPU 核心數量,請執行下列操作:

  • 在「Machine configuration」>「Advanced configurations」>「Visible core count」中,選取可見核心數量。

gcloud

  1. 使用下列 gcloud compute instance-templates create 指令,為 SQL Server VM 建立執行個體範本,每個 VM 的可見 CPU 核心數量都會減少:

    gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
       --image-project=windows-sql-cloud \
       --image-family=sql-ent-2019-win-2019 \
       --machine-type=MACHINE_TYPE \
       --visible-core-count=VISIBLE_CORE_COUNT \
       --zone=ZONE
    

    更改下列內容:

    • INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。

    • MACHINE_TYPE:支援的機器類型,例如 c2-standard-60

    • VISIBLE_CORE_COUNT:可見的 CPU 核心數。舉例來說,使用 c2-standard-60 機器類型時,如果設為 20,且每個核心的執行緒數量為 2,則可看到 60 個 CPU 中的 40 個。

    • ZONE:建立 VM 的可用區。

  2. 使用下列 gcloud compute instances create 指令建立 SQL Server VM,每個 VM 可見的 CPU 核心數量都會減少:

    gcloud compute instances create INSTANCE_NAMES \
       --source-instance-template=INSTANCE_TEMPLATE_NAME
    

    更改下列內容:

    • INSTANCE_NAMES:要從執行個體範本建立的 VM 名稱,以空格分隔

    • INSTANCE_TEMPLATE_NAME:建立 VM 的執行個體範本名稱

REST

  1. 使用下列 instanceTemplates.insert 方法,為 SQL Server VM 建立執行個體範本,每個執行個體的顯示 CPU 核心數量都會減少:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
    
    {
     "name": "INSTANCE_TEMPLATE_NAME",
     ...
     "advanced_machine_features": {
       ...
       "visible_core_count": "VISIBLE_CORE_COUNT"
     },
     ...
    }
    

    更改下列內容:

    • PROJECT_ID:專案 ID。

    • INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。

    • VISIBLE_CORE_COUNT:可見的 CPU 核心數。舉例來說,使用 c2-standard-60 機器類型時,如果設為 20,且每個核心的執行緒數量為 2,則可看到 60 個 CPU 中的 40 個。

  2. 使用下列 instances.insert 方法建立 SQL Server VM,每個 VM 可見的 CPU 核心數量都會減少:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances?sourceInstanceTemplate=INSTANCE_TEMPLATE_NAME
    
    {
     "name": "VM_NAME",
     ...
    }
    

    更改下列內容:

    • PROJECT_ID:專案 ID

    • ZONE:建立 VM 的可用區

    • INSTANCE_TEMPLATE_NAME:建立 VM 的執行個體範本名稱

    • VM_NAME:要從執行個體範本建立的 VM 名稱

自訂可見的 CPU 核心數量

如要自訂現有 VM 上顯示的 CPU 核心數量,請使用 Google Cloud 控制台、gcloud CLI 或 Compute Engine API。

如果您使用執行個體範本自訂一組 VM 上顯示的 CPU 核心數量,就必須建立新的執行個體範本,然後透過該執行個體範本建立新的 VM。如要進一步瞭解執行個體範本,請參閱「執行個體範本」。

主控台

如要自訂現有 VM 上可見的 CPU 核心數量,請按照下列步驟操作:

  1. 停止 VM。

  2. 在「機器設定」>「進階設定」>「可見核心數量」中,選取可見核心數量。

  3. 重新啟動 VM。

gcloud

如要更新現有 VM 上可見 CPU 核心數量的值,請按照下列步驟操作。詳情請參閱「更新執行個體屬性」。

  1. 使用 gcloud compute instances export 指令,將現有的 VM 屬性匯出至檔案。

  2. 在包含匯出資源的檔案中,修改或新增下列項目的值:

    advancedMachineFeatures:
     visibleCoreCount: VISIBLE_CORE_COUNT
    
  3. 使用 gcloud compute instances update-from-file 指令搭配 --most-disruptive-allowed-action=RESTART,更新 VM 的屬性。

REST

如要更新 VM 的顯示 CPU 核心數,請使用下列 instances.update 方法

PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?most_disruptive_allowed_action=RESTART

{
  ...
  "advanced_machine_features": {
    ...
    "visible_core_count": "VISIBLE_CORE_COUNT"
  },
  ...
}

更改下列內容:

  • PROJECT_ID:專案 ID

  • ZONE:包含 VM 的可用區

  • VM_NAME:要匯出屬性的 VM 名稱

  • VISIBLE_CORE_COUNT:可見的 CPU 核心數量

後續步驟