Anzahl der Threads pro Kern festlegen


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:

  • 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:

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:

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Zur Seite „Instanz erstellen“

  2. Geben Sie im Feld Name einen Namen für die VM ein.

  3. Wählen Sie eine Region und eine Zone für die VM aus.

  4. Wählen Sie eine Maschinenfamilie und einen unterstützten Maschinentyp aus.

  5. Klicken Sie auf Erweiterte Konfigurationen, um den Abschnitt zu maximieren.

  6. Wählen Sie unter Verhältnis von vCPUs zu Kernen die Anzahl der Threads pro Kern aus.

  7. 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 oder 1 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 oder 1 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:

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu Seite „VM-Instanzen“

  2. Klicken Sie auf den Namen der VM.

  3. Wenn der Status der VM Wird ausgeführt lautet, klicken Sie auf Beenden.

  4. Klicken Sie auf Bearbeiten.

  5. Klicken Sie auf Erweiterte Konfigurationen, um den Abschnitt zu maximieren.

  6. Wählen Sie in der Drop-down-Liste Verhältnis von vCPUs zu Kernen die Anzahl der Threads pro Kern aus.

  7. Klicken Sie auf Speichern.

gcloud

So ändern Sie die Anzahl der Threads pro Kern auf einer vorhandenen VM:

  1. 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 sollen

    • YAML_FILE_PATH: Pfad und Dateiname einer YAML-Datei, in der die exportierten Konfigurationsdaten gespeichert werden sollen

    • ZONE: die Zone mit der VM

  2. 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
    
  3. 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 VM

    • FILE_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 VM

  • VM_NAME: der Name der VM, von der Attribute exportiert werden sollen

  • THREADS_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:

  1. Stellen Sie eine Verbindung zur Linux-VM her.

  2. Führen Sie den Befehl lscpu aus:

    lscpu
    
  3. 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 Kern 1, wie in der Zeile Thread(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:

  1. Stellen Sie eine Verbindung zur Windows-VM her.

  2. Starten Sie Powershell:

  3. Führen Sie den folgenden Befehl aus:

    Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
    
  4. 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 Kern 1, wie in der Spalte Thread(s) per core angezeigt.

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

Nächste Schritte