同時マルチスレッディングの構成


可能であれば、Compute Engine はデフォルトで同時マルチスレッディング(SMT)を有効にします。SMT を有効にすると、1 つの物理 CPU コアが 2 つの仮想 CPU(vCPU)を個別のスレッドとして実行できます。SMT を無効にするには、コアあたりのスレッド数(有効な vCPU の数)を 1 に減らします。このドキュメントでは、物理 CPU コアごとに実行するスレッドの数を変更する必要がある理由と変更方法について説明しています。

SMT 構成についての考慮事項

パフォーマンス
各物理 CPU コアで実行されるスレッドの数を減らすことで、高並列のワークロードや浮動小数点計算を行うワークロードのパフォーマンスが向上する場合があります。
セキュリティ
VM で信頼できないコードを実行する場合、コアあたりのスレッド数を減らすことで、マイクロアーキテクチャ データ サンプリングなどの CPU の脆弱性が緩和される可能性があります。
ライセンス
一部のライセンス契約には、使用する vCPU の数に関連する要件があります。SMT を無効にすると、各コアの vCPU の数が 2 から 1 に減少し、ライセンス費用を削減できる可能性があります。詳細については、使用許諾契約をご覧ください。

制限事項

1 コアあたりのスレッド数は、以下の場合は構成できません。

料金

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

新しい VM での SMT の構成

次の手順に沿って、新しい VM で SMT を構成します。

このタスクに必要な権限

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

gcloud

次の gcloud beta compute instances create コマンドを使用して、VM の作成中に SMT を構成します。

gcloud beta compute instances create VM_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --threads-per-core=THREADS_PER_CORE

次のように置き換えます。

  • VM_NAME: 新しい VM の名前。

  • ZONE: 新しい VM のゾーン。

  • MACHINE_TYPE: 新しい VM のマシンタイプ。2 つ以上の vCPU を持つマシンタイプである必要があります。

  • THREADS_PER_CORE: 物理コアあたりのスレッド数。現在のプロセッサは SMT 用のコアごとに 2 つのスレッドをサポートし、デフォルトで有効になっています。SMT を無効にするには、1 に設定します。

API

VM の作成中に、threadsPerCore フィールドで instances.insert メソッドを使用して SMT を設定します。

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

{
  ...
  "advancedMachineFeatures": {
    ...
    "threadsPerCore": "THREADS_PER_CORE"
  },
  ...
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。

  • ZONE: 新しい VM のゾーン。

  • THREADS_PER_CORE: 物理コアあたりのスレッド数。現在のプロセッサは SMT 用のコアごとに 2 つのスレッドをサポートし、デフォルトで有効になっています。SMT を無効にするには、1 に設定します。

既存の VM での SMT の構成

次の手順に沿って、既存の VM で SMT を構成します。

このタスクに必要な権限

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

  • プロジェクトに対する compute.instances.get
  • プロジェクトに対する compute.instances.update

gcloud

  1. 次の gcloud beta compute instances export コマンドを使用して、VM のプロパティをエクスポートします。

    gcloud beta 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 beta compute instances update-from-file コマンドを使用して、新しいコアあたりのスレッド数で VM を更新します。

    gcloud beta 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 が配置されたゾーン

API

次の instances.update メソッドを使用して、VM のコアあたりのスレッドを更新します。

PUT https://compute.googleapis.com/compute/beta/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: コアあたりのスレッド数

SMT 構成の確認

VM 上で実行されている OS に対応する手順を使用して、SMT 構成を確認します。

Linux

Linux ベースの VM の SMT 構成を確認する手順は次のとおりです。

  1. Linux VM に接続します

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

    lscpu
    
  3. 以下の出力で、コアごとのスレッドの数を確認します。

    次のサンプル出力では、コアあたりのスレッド数の値は 1 です。

    ...
    CPU(s):              1
    On-line CPU(s) list: 0
    Thread(s) per core:  1
    Core(s) per socket:  1
    Socket(s):           1
    NUMA node(s):        1
    Vendor ID:           GenuineIntel
    CPU family:          6
    Model:               85
    Model name:          Intel(R) Xeon(R) CPU
    ...
    

Windows

Windows ベースの VM の SMT 構成を確認する手順は次のとおりです。

  1. Windows VM に接続します

  2. Windows Management Instrumentation(WMI)のコマンドライン インターフェースを開きます。

    wmic
    
  3. 次のコマンドを実行して、コア数と論理プロセッサの数を表示します。

    CPU Get NumberOfCores,NumberofLogicalProcessors
    
  4. 以下の出力で、コアごとのスレッドの数を確認します。

    次のサンプル出力では、コアあたりのスレッド数の値は 1 です。

    NumberOfCores  NumberOfLogicalProcessors
    1              1
    

次のステップ