コアあたりのスレッド数を設定する

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 のマシンタイプによって定義される vCPU の数に対して課金されます。たとえば、n2-standard-8 マシンタイプでは最大 8 基の vCPU(4 基の物理 CPU コアのそれぞれに 2 基の vCPU)を実行できます。n2-standard-8 マシンタイプでは、1 コアあたり 1 スレッド(実質的には 4 基の vCPU)のみを実行する場合でも、8 基の vCPU に対して課金されます。VM の課金方法の詳細については、VM インスタンスの料金をご覧ください。

VM 作成時にコアあたりのスレッド数を変更する

VM の作成時にコアあたりのスレッド数を変更するには、Google Cloud コンソール、gcloud CLI、または Compute Engine API を使用します。

このタスクに必要な権限

このタスクを行うには、次の権限が必要です。

コンソール

VM の作成時にコアあたりのスレッド数を変更するには、次のGoogle Cloud コンソールの手順を使用します。

  1. Google Cloud コンソールで [インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

  2. [名前] フィールドに、VM の名前を入力します。

  3. VM の [リージョン] と [ゾーン] を選択します。

  4. [マシン ファミリー] とサポートされている [マシンタイプ] を選択します。

  5. [高度な構成] をクリックしてセクションを展開します。

  6. [vCPU とコアの比率] で、コアあたりのスレッド数を選択します。

  7. その他の 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 コンソールの手順を使用します。

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. VM の [名前] をクリックします。

  3. [ 停止] をクリックして VM を停止します。[停止] オプションがない場合は、[その他の操作] > [停止] をクリックします。

  4. [編集] をクリックします。

  5. [高度な構成] をクリックしてセクションを展開します。

  6. [vCPU とコアの比率] プルダウン リストで、コアあたりのスレッド数を選択します。

  7. [保存] をクリックします。

gcloud

既存の VM のコアあたりのスレッド数を変更するには、次の手順を実施します。

  1. 次の 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 が配置されているゾーン

  2. FILE_PATH に保存された VM 構成ファイルで、threadsPerCore の値を更新します。値がファイルに含まれていない場合は、次の行を追加します。

     advancedMachineFeatures:   threadsPerCore: THREADS_PER_CORE 
  3. 次の 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: プロジェクトの ID

  • ZONE: VM が配置されているゾーン

  • VM_NAME: プロパティをエクスポートする VM の名前

  • THREADS_PER_CORE: コアあたりのスレッド数

コアあたりのスレッド数を表示する

コアあたりのスレッド数を表示するには、VM で実行されている OS に対応する手順を使用します。

Linux

Linux ベースの VM のコアあたりのスレッド数を表示するには、次の手順を使用します。

  1. Linux VM に接続します。

  2. lscpu コマンドを実行します。

     lscpu 
  3. 出力を調べて、コアあたりのスレッド数を確認します。

    次の 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 のコアあたりのスレッド数を表示するには、次の手順を使用します。

  1. Windows VM に接続します。

  2. PowerShell を起動します。

  3. 次のコマンドを実行します。

     Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}} 
  4. 出力を調べて、コアあたりのスレッド数を確認します。

    次の n2-standard-16 マシンの出力例では、Thread(s) per core 列に示されているように、コアあたりのスレッド数は 1 です。

    NumberOfCores Thread(s) per core ------------- ------------------             8                  1 

次のステップ