Intel プロセッサでハイパー スレッディング テクノロジー(HTT)として知られる同時マルチスレッディング(SMT)では、1 つの CPU コアを 2 つのハードウェア マルチスレッドとして実行できます。Compute Engine では、各仮想 CPU(vCPU)は単一のハードウェア マルチスレッドとして実装され、デフォルトで 2 つの vCPU が各物理 CPU コアを共有します。
Compute Engine では、コアあたりのスレッド数を手動で設定できます。たとえば、次のような問題があるワークロードでは、SMT を無効化(コアあたりのスレッド数を 1 に設定)するとメリットが得られる可能性があります。
パフォーマンス: 各物理 CPU コアで実行するスレッドの数を減らすことで、高度に並列化されたワークロードや浮動小数点計算を実行するワークロードのパフォーマンスを高めることができます。
セキュリティ: VM で信頼できないコードを実行する場合、コアあたりのスレッド数を減らすことで、マイクロアーキテクチャ データ サンプリングなどの CPU の脆弱性が緩和される可能性があります。
ライセンス: 一部のライセンス契約には、使用する vCPU の数に関連する要件があります。コアあたりのスレッド数を 2 から 1 に減らすと、ライセンス コストを削減できる可能性があります。詳細については、ライセンス契約をご覧ください。
多くの一般的なコンピューティング タスクや、大量の I/O を必要とするタスクでは、SMT によってアプリケーションのスループットを大幅に向上させることができます。両方の仮想コアがコンピューティング能力による制約を受ける計算依存型ジョブの場合、SMT はアプリケーションの全体的なパフォーマンスを妨げ、ジョブに予測不能なばらつきが発生する場合があります。この場合、SMT をオフにすると、パフォーマンスがより予測可能になり、ジョブの時間を短縮できます。
制限事項
次のマシンタイプの VM では、コアあたりのスレッド数を設定できません。
- すべての C4A マシンタイプ
- すべての H3 マシンタイプ
- すべての Tau T2A マシンタイプ
- すべての Tau T2D マシンタイプ
- vCPU が 2 基未満のマシンタイプ(例:
n1-standard-1
) - 共有コア マシンタイプ(
e2-small
など)。
C3 と X4 のベアメタル インスタンスの場合、アクセスできるハイパースレッドの数は、マシン上のハイパースレッドの数と同じです。
Google Cloud コンソールでは、コアあたりのスレッド数が 1 に設定されている場合、CPU 使用率の指標は最大 50% までしかスケールアップできません。コアあたりのスレッド数が 2 に設定されている場合、CPU 使用率の指標は最大 100% までスケールアップできます。
料金
各コアで実行されるスレッド数ではなく、VM のマシンタイプによって定義される vCPU の数に対して課金されます。たとえば、n2-standard-8
マシンタイプは最大 8 つの vCPU(4 つの物理 CPU コアごとに 2 つの vCPU)を実行できます。n2-standard-8
マシンタイプを使用して、コアごとに 1 つのスレッド(実質的には 4 個の vCPU)のみを実行することにする場合も、8 個の vCPU に対して課金されます。VM の課金方法の詳細については、VM インスタンスの料金をご覧ください。
VM 作成時にコアあたりのスレッド数を変更する
VM の作成時にコアごとのスレッド数を変更するには、Google Cloud コンソール、gcloud CLI、または Compute Engine API を使用します。
このタスクに必要な権限
このタスクを行うには、次の権限が必要です。
- 新しい VM を作成するために必要なすべての権限。
コンソール
VM の作成時にコアあたりのスレッド数を変更するには、次の Google Cloud コンソールの手順を使用します。
Google Cloud コンソールで、[インスタンスの作成] ページに移動します。
[名前] フィールドに、VM の名前を入力します。
VM の [リージョン] と [ゾーン] を選択します。
[マシン ファミリー] とサポートされている [マシンタイプ] を選択します。
[高度な構成] をクリックしてセクションを展開します。
[vCPU とコアの比率] で、コアあたりのスレッド数を選択します。
VM の他の設定の構成を済ませて、[作成] をクリックします。
gcloud
VM の作成時にコアあたりのスレッド数を変更するには、gcloud compute instances create
コマンドを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- VM_NAME: 新しい VM の名前。
- ZONE: 新しい VM のゾーン。
- MACHINE_TYPE: 新しい VM のマシンタイプ。 2 つ以上の vCPU を持つマシンタイプである必要があります。
- THREADS_PER_CORE: 物理コアあたりのスレッド数。
2
または1
のいずれかに設定します。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud compute instances create VM_NAME \ --zone=ZONE \ --machine-type=MACHINE_TYPE \ --threads-per-core=THREADS_PER_CORE
Windows(PowerShell)
gcloud compute instances create VM_NAME ` --zone=ZONE ` --machine-type=MACHINE_TYPE ` --threads-per-core=THREADS_PER_CORE
Windows(cmd.exe)
gcloud compute instances create VM_NAME ^ --zone=ZONE ^ --machine-type=MACHINE_TYPE ^ --threads-per-core=THREADS_PER_CORE
次のようなレスポンスが返されます。
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME]. NAME: VM_NAME ZONE: ZONE MACHINE_TYPE: MACHINE_TYPE PREEMPTIBLE: INTERNAL_IP: EXTERNAL_IP EXTERNAL_IP: INTERNAL_IP STATUS: RUNNING
REST
VM の作成時にコアあたりのスレッド数を変更するには、threadsPerCore
フィールドで instances.insert
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID。
- ZONE: 新しい VM のゾーン。
- MACHINE_TYPE: 新しい VM のマシンタイプ。 2 つ以上の vCPU を持つマシンタイプである必要があります。
- VM_NAME: 新しい VM の名前。
- THREADS_PER_CORE: 物理コアあたりのスレッド数。
2
または1
のいずれかに設定します。
HTTP メソッドと URL:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
リクエストの本文(JSON):
{ "machineType": "projects/PROJECT_ID/zones/ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "advancedMachineFeatures": { "threadsPerCore": THREADS_PER_CORE }, "disks": [ { "type": "PERSISTENT", "boot": true, "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/family/debian-11" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ] }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "kind": "compute#operation", "id": "7334609091572405391", "name": "operation-1663806045894-5e939085735d8-7499db32-c12fcc03", "zone": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME", "targetId": "1226375378512516273", "status": "RUNNING", "user": "EMAIL_ADDRESS", "progress": 0, "insertTime": "2022-09-21T17:20:48.751-07:00", "startTime": "2022-09-21T17:20:48.751-07:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/operation-1663806045894-5e939085735d8-7499db32-c12fcc03" }
VM のコアあたりのスレッド数を変更する
VM 上のコアあたりのスレッド数を変更するには、Google Cloud コンソール、gcloud CLI、または Compute Engine API を使用します。
このタスクに必要な権限
このタスクを行うには、次の権限が必要です。
-
プロジェクトに対する
compute.instances.get
-
プロジェクトに対する
compute.instances.update
コンソール
既存の VM のコアあたりのスレッド数を変更するには、次の Google Cloud コンソールの手順を使用します。
Google Cloud コンソールで [VM インスタンス] ページに移動します。
VM の [名前] をクリックします。
VM の [ステータス] が [実行中] の場合は、[停止] をクリックします。
[編集] をクリックします。
[高度な構成] をクリックしてセクションを展開します。
[vCPU とコアの比率] プルダウン リストで、コアあたりのスレッド数を選択します。
[保存] をクリックします。
gcloud
既存の VM のコアあたりのスレッド数を変更するには、次の手順を実施します。
次の
gcloud compute instances export
コマンドを使用して、VM のプロパティをエクスポートします。gcloud compute instances export VM_NAME \ --destination=YAML_FILE_PATH \ --zone=ZONE
以下を置き換えます。
VM_NAME
: プロパティをエクスポートする VM の名前YAML_FILE_PATH
: エクスポートした構成データを保存する .yaml ファイルのパスとファイル名ZONE
: VM が配置されているゾーン
FILE_PATH に保存された VM 構成ファイルで、
threadsPerCore
の値を更新します。値がファイルに含まれていない場合は、次の行を追加します。advancedMachineFeatures: threadsPerCore: THREADS_PER_CORE
次の
gcloud compute instances update-from-file
コマンドを使用して、新しいコアあたりのスレッド数で VM を更新します。gcloud compute instances update-from-file VM_NAME \ --source=FILE_PATH \ --most-disruptive-allowed-action=RESTART \ --zone=ZONE
以下を置き換えます。
VM_NAME
: 更新する VM の名前FILE_PATH
: 更新された VM 構成ファイルへのパス。ZONE
: 更新する VM が配置されたゾーン
REST
既存の VM のコアあたりのスレッド数を変更するには、次の 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": { ... "threadsPerCore": "THREADS_PER_CORE" }, ... }
以下を置き換えます。
PROJECT_ID
: プロジェクトの IDZONE
: VM が配置されているゾーンVM_NAME
: プロパティをエクスポートする VM の名前THREADS_PER_CORE
: コアあたりのスレッド数
コアあたりのスレッド数を表示する
コアあたりのスレッド数を表示するには、VM で実行されている OS に対応する手順を使用します。
Linux
Linux ベースの VM のコアあたりのスレッド数を表示するには、次の手順を使用します。
Linux VM に接続します。
lscpu
コマンドを実行します。lscpu
出力を調べて、コアあたりのスレッド数を確認します。
次の
n2-standard-16
マシンのサンプル出力では、Thread(s) per core
行に示されているように、コアあたりのスレッド数の値は1
です。... CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 1 Core(s) per socket: 8 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) CPU @ 2.80GHz ...
Windows
Windows ベースの VM のコアあたりのスレッド数を表示するには、次の手順を使用します。
PowerShell を起動します。
次のコマンドを実行します。
Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
出力を調べて、コアあたりのスレッド数を確認します。
次の
n2-standard-16
マシンのサンプル出力では、Thread(s) per core
列に示されているように、コアあたりのスレッド数の値は1
です。NumberOfCores Thread(s) per core ------------- ------------------ 8 1