Durch das gleichzeitige Multithreading (Simultaneous Multithreading, SMT), das auf Intel-Prozessoren als Hyper-Threading Technology (HTT) bezeichnet wird, kann ein CPU-Kern als zwei Hardware-Multithreads ausgeführt werden. In Compute Engine wird jede virtuelle CPU (vCPU) als einzelner Hardware-Multithread implementiert und zwei vCPUs teilen sich standardmäßig jeden physischen CPU-Kern.
Mit Compute Engine können Sie den Wert für die Anzahl der Threads pro Kern manuell festlegen. Beispielsweise können Arbeitslasten mit den folgenden Bedenken von einem Deaktivieren von SMT (Festlegung der Anzahl der Threads pro Kern auf 1) profitieren:
Leistung: Wenn Sie die Anzahl der Threads reduzieren, die auf jedem physischen CPU-Kern ausgeführt werden, können Sie die Leistung von Arbeitslasten verbessern, die hochparallel sind oder Gleitkommaberechnungen durchführen.
Sicherheit: Wenn eine VM einen nicht vertrauenswürdigen Code ausführt, kann die Reduzierung der Anzahl der Threads pro Kern CPU-Sicherheitslücken wie Microarchitectural Data Sampling verringern.
Lizenzierung: Bei einigen Lizenzvereinbarungen gelten Anforderungen für die Anzahl der verwendeten vCPUs. Wenn Sie die Anzahl der Threads pro Kern von 2 auf 1 reduzieren, können Sie Ihre Lizenzkosten senken. Weitere Informationen finden Sie in Ihrer Lizenzvereinbarung.
Für viele allgemeine Computing-Aufgaben oder solche, die viel E/A erfordern, kann SMT den Anwendungsdurchsatz erheblich erhöhen. Bei rechengebundenen Jobs, bei denen beide virtuellen Kerne rechengebunden sind, kann SMT die Gesamtleistung der Anwendung beeinträchtigen und bei Jobs eine unvorhersagbare Varianz verursachen. In diesem Fall ermöglicht das Deaktivieren von SMT eine besser vorhersehbare Leistung und kann die Jobzeiten verkürzen.
Beschränkungen
Für die folgenden Maschinentypen können Sie die Anzahl der Threads pro Kern auf VMs nicht festlegen:
- Alle H3-Maschinentypen
- Alle Tau-T2A-Maschinentypen
- Alle Tau T2D-Maschinentypen
- Maschinentypen mit weniger als 2 vCPUs, z. B.
n1-standard-1
- Maschinentypen mit gemeinsam genutztem Kern, z. B.
e2-small
.
Wenn in der Google Cloud Console die Anzahl der Threads pro Kern auf 1 eingestellt ist, kann der Messwert zur CPU-Auslastung nur auf maximal 50 % skaliert werden. Wenn die Anzahl der Threads pro Kern auf 2 festgelegt ist, kann der Messwert zur CPU-Auslastung auf 100 % hochskaliert werden.
Preise
Ihnen wird die Anzahl der vCPUs berechnet, die vom Maschinentyp einer VM definiert werden, nicht die Anzahl der Threads, die auf jedem Kern ausgeführt werden. Der Maschinentyp n2-standard-8
kann beispielsweise bis zu 8 vCPUs ausführen, also 2 vCPUs für jeden der vier physischen CPU-Kerne. Wenn Sie beim Maschinentyp n2-standard-8
nur einen Thread pro Kern ausführen (tatsächlich 4 vCPUs), werden Ihnen trotzdem 8 vCPUs in Rechnung gestellt. Weitere Informationen zu den Preisen für VMs finden Sie unter Preise für VM-Instanzen.
Anzahl der Threads pro Kern während der VM-Erstellung ändern
Verwenden Sie die Google Cloud Console, die gcloud CLI oder die Compute Engine API, um die Anzahl der Threads pro Kern während der VM-Erstellung zu ändern.
Erforderliche Berechtigungen für diese Aufgabe
Zum Ausführen dieser Aufgabe benötigen Sie die folgende Berechtigung:
- Alle Berechtigungen, die zum Erstellen einer neuen VM erforderlich sind.
Console
Wenn Sie die Anzahl der Threads pro Kern während der VM-Erstellung ändern möchten, verwenden Sie das folgende Google Cloud Console-Verfahren:
Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.
Geben Sie im Feld Name einen Namen für die VM ein.
Wählen Sie eine Region und eine Zone für die VM aus.
Wählen Sie eine Maschinenfamilie und einen unterstützten Maschinentyp aus.
Klicken Sie auf Erweiterte Konfigurationen, um den Abschnitt zu maximieren.
Wählen Sie unter Verhältnis von vCPUs zu Kernen die Anzahl der Threads pro Kern aus.
Schließen Sie die Konfiguration anderer Einstellungen für die VM ab und klicken Sie auf Erstellen.
gcloud
Verwenden Sie den folgenden gcloud compute instances create
-Befehl, um die Anzahl der Threads pro Kern während der VM-Erstellung zu ändern.
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- VM_NAME ist der Name für die neue VM.
- ZONE ist die Zone für die neue VM.
- MACHINE_TYPE ist der Maschinentyp für die neue VM. Muss ein Maschinentyp mit 2 oder mehr vCPUs sein.
- THREADS_PER_CORE ist die Anzahl der sichtbaren Threads pro physischem Kern. Legen Sie entweder
2
oder1
fest.
Führen Sie folgenden Befehl aus:
Linux, macOS oder 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
Sie sollten eine Antwort ähnlich der folgenden erhalten:
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
Verwenden Sie die Methode instances.insert
mit dem Feld threadsPerCore
, um die Anzahl der Threads pro Kern während der VM-Erstellung zu ändern.
Ersetzen Sie dabei folgende Werte für die Anfragedaten:
- PROJECT_ID: Projekt-ID.
- ZONE ist die Zone für die neue VM.
- MACHINE_TYPE ist der Maschinentyp für die neue VM. Muss ein Maschinentyp mit 2 oder mehr vCPUs sein.
- VM_NAME ist der Name für die neue VM.
- THREADS_PER_CORE ist die Anzahl der sichtbaren Threads pro physischem Kern. Legen Sie entweder
2
oder1
fest.
HTTP-Methode und URL:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
JSON-Text anfordern:
{ "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" } ] }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "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" }
Anzahl der Threads pro Kern auf einer VM ändern
Verwenden Sie die Google Cloud Console, die gcloud CLI oder die Compute Engine API, um die Anzahl der Threads pro Kern auf einer VM zu ändern.
Erforderliche Berechtigungen für diese Aufgabe
Zum Ausführen dieser Aufgabe benötigen Sie die folgende Berechtigung:
-
compute.instances.get
für das Projekt -
compute.instances.update
für das Projekt
Console
Verwenden Sie das folgende Google Cloud Console-Verfahren, um die Anzahl der Threads pro Kern auf einer vorhandenen VM zu ändern:
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf den Namen der VM.
Wenn der Status der VM Wird ausgeführt lautet, klicken Sie auf Beenden.
Klicken Sie auf Bearbeiten.
Klicken Sie auf Erweiterte Konfigurationen, um den Abschnitt zu maximieren.
Wählen Sie in der Drop-down-Liste Verhältnis von vCPUs zu Kernen die Anzahl der Threads pro Kern aus.
Klicken Sie auf Speichern.
gcloud
So ändern Sie die Anzahl der Threads pro Kern auf einer vorhandenen VM:
Exportieren Sie die Attribute der VM mit dem folgenden
gcloud compute instances export
-Befehl:gcloud compute instances export VM_NAME \ --destination=YAML_FILE_PATH \ --zone=ZONE
Dabei gilt:
VM_NAME
: der Name der VM, von der Attribute exportiert werden sollenYAML_FILE_PATH
: Pfad und Dateiname einer YAML-Datei, in der die exportierten Konfigurationsdaten gespeichert werden sollenZONE
: die Zone mit der VM
Aktualisieren Sie in der VM-Konfigurationsdatei, die in FILE_PATH gespeichert wurde, den Wert für
threadsPerCore
. Wenn der Wert nicht in der Datei enthalten ist, fügen Sie Folgendes hinzu:advancedMachineFeatures: threadsPerCore: THREADS_PER_CORE
Aktualisieren Sie die VM mit der neuen Anzahl von Threads pro Kern mit dem folgenden
gcloud compute instances update-from-file
-Befehl:gcloud compute instances update-from-file VM_NAME \ --source=FILE_PATH \ --most-disruptive-allowed-action=RESTART \ --zone=ZONE
Dabei gilt:
VM_NAME
: Name der zu aktualisierenden VMFILE_PATH
ist der Pfad zur aktualisierten VM-Konfigurationsdatei.ZONE
: Zone, die die zu aktualisierende VM enthält
REST
Verwenden Sie die folgende instances.update
-Methode, um die Anzahl der Threads pro Kern auf einer vorhandenen VM zu ändern:
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" }, ... }
Dabei gilt:
PROJECT_ID
ist die ID des Projekts.ZONE
: die Zone mit der VMVM_NAME
: der Name der VM, von der Attribute exportiert werden sollenTHREADS_PER_CORE
: die Anzahl der Threads pro Kern
Anzahl der Threads pro Kern aufrufen
Verwenden Sie das Verfahren, das dem Betriebssystem entspricht, das auf der VM ausgeführt wird, um die Anzahl der Threads pro Kern aufzurufen.
Linux
Verwenden Sie das folgende Verfahren, um die Anzahl der Threads pro Kern auf Linux-basierten VMs aufzurufen:
Führen Sie den Befehl
lscpu
aus:lscpu
Prüfen Sie die Ausgabe, um die Anzahl der Threads pro Kern zu sehen.
In der folgenden Beispielausgabe von einer
n2-standard-16
-Maschine lautet der Wert für die Anzahl der Threads pro Kern1
, wie in der ZeileThread(s) per core
angegeben.... 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
Verwenden Sie das folgende Verfahren, um die Anzahl der Threads pro Kern auf Windows-basierten VMs aufzurufen:
Starten Sie Powershell:
Führen Sie den folgenden Befehl aus:
Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
Prüfen Sie die Ausgabe, um die Anzahl der Threads pro Kern zu sehen.
In der folgenden Beispielausgabe von einer
n2-standard-16
-Maschine lautet der Wert für die Anzahl der Threads pro Kern1
, wie in der SpalteThread(s) per core
angezeigt.NumberOfCores Thread(s) per core ------------- ------------------ 8 1