可能であれば、Compute Engine はデフォルトで同時マルチスレッディング(SMT)を有効にします。SMT を有効にすると、1 つの物理 CPU コアが 2 つの仮想 CPU(vCPU)を個別のスレッドとして実行できます。SMT を無効にするには、コアあたりのスレッド数(有効な vCPU の数)を 1 に減らします。このドキュメントでは、物理 CPU コアごとに実行するスレッドの数を変更する必要がある理由と変更方法について説明しています。
SMT 構成についての考慮事項
- パフォーマンス
- 各物理 CPU コアで実行されるスレッドの数を減らすことで、高並列のワークロードや浮動小数点計算を行うワークロードのパフォーマンスが向上する場合があります。
- セキュリティ
- VM で信頼できないコードを実行する場合、コアあたりのスレッド数を減らすことで、マイクロアーキテクチャ データ サンプリングなどの CPU の脆弱性が緩和される可能性があります。
- ライセンス
- 一部のライセンス契約には、使用する vCPU の数に関連する要件があります。SMT を無効にすると、各コアの vCPU の数が 2 から 1 に減少し、ライセンス費用を削減できる可能性があります。詳細については、使用許諾契約をご覧ください。
制限事項
1 コアあたりのスレッド数は、以下の場合は構成できません。
vCPU が 2 個未満のマシンタイプ(例:
n1-standard-1
)や、共有コアマシン(例:e2-small
)で実行される VM。Tau T2D マシンタイプで実行される VM。
料金
各コアで実行されるスレッド数ではなく、VM のマシンタイプによって定義される vCPU の数に対して課金されます。たとえば、n2-standard-8
マシンタイプは最大 8 つの vCPU(4 つの物理 CPU コアごとに 2 つの vCPU)を実行できます。コアごとに 1 つのスレッド(実質的には 4 つの vCPU)のみを実行する場合でも、8 つの vCPU に対して課金されます。VM の課金方法の詳細については、VM インスタンスの料金をご覧ください。
新しい VM での SMT の構成
次の手順に沿って、新しい VM で SMT を構成します。
このタスクに必要な権限
このタスクを行うには、次の権限が必要です。
- 新しい VM を作成するために必要なすべての権限。
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
次の
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 が配置されているゾーン
FILE_PATH に保存された VM 構成ファイルで、
threadsPerCore
の値を更新します。値がファイルに含まれていない場合は、次の行を追加します。advancedMachineFeatures: threadsPerCore: THREADS_PER_CORE
次の
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
: プロジェクトの IDZONE
: VM が配置されているゾーンVM_NAME
: プロパティをエクスポートする VM の名前THREADS_PER_CORE
: コアあたりのスレッド数
SMT 構成の確認
VM 上で実行されている OS に対応する手順を使用して、SMT 構成を確認します。
Linux
Linux ベースの VM の SMT 構成を確認する手順は次のとおりです。
lscpu
コマンドを実行します。lscpu
以下の出力で、コアごとのスレッドの数を確認します。
次のサンプル出力では、コアあたりのスレッド数の値は
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 構成を確認する手順は次のとおりです。
Windows Management Instrumentation(WMI)のコマンドライン インターフェースを開きます。
wmic
次のコマンドを実行して、コア数と論理プロセッサの数を表示します。
CPU Get NumberOfCores,NumberofLogicalProcessors
以下の出力で、コアごとのスレッドの数を確認します。
次のサンプル出力では、コアあたりのスレッド数の値は
1
です。NumberOfCores NumberOfLogicalProcessors 1 1