Gleichzeitiges Multithreading konfigurieren


Wenn möglich aktiviert Compute Engine standardmäßig gleichzeitiges Multithreading (SMT). Wenn SMT aktiviert ist, kann ein einzelner physischer CPU-Kern zwei virtuelle CPUs (vCPUs) als separate Threads ausführen. Wenn Sie SMT deaktivieren möchten, reduzieren Sie die Anzahl der Threads – die Anzahl der effektiven vCPUs – pro Kern auf 1. In diesem Dokument wird erläutert, in welchen Fällen das Ändern der Anzahl der Threads, die auf jedem physischen CPU-Kern ausgeführt werden, sinnvoll ist und wie Sie dies ausführen.

Überlegungen zur Konfiguration von SMT

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.
Lizenzen
Bei einigen Lizenzvereinbarungen gelten Anforderungen für die Anzahl der verwendeten vCPUs. Wenn Sie SMT deaktivieren, wird die Anzahl der vCPUs für jeden Kern von zwei auf 1 reduziert, wodurch sich Ihre Lizenzkosten verringern lassen. Weitere Informationen finden Sie in Ihrer Lizenzvereinbarung.

Beschränkungen

Die Anzahl der Threads pro Kern ist in folgenden Fällen nicht konfigurierbar:

  • Bei VMs, die auf Maschinentypen mit weniger als 2 vCPUs ausgeführt werden, z. B. n1-standard-1, oder auf Maschinen mit gemeinsam genutztem Kern wie e2-small.

  • VMs, die auf dem Tau T2D-Maschinentyp ausgeführt 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 nur einen Thread pro Kern ausführen – also praktisch 4 vCPUs – werden weiterhin 8 vCPUs berechnet. Weitere Informationen zu den Preisen für VMs finden Sie unter Preise für VM-Instanzen.

SMT auf einer neuen VM konfigurieren

Konfigurieren Sie SMT auf einer neuen VM mit dem folgenden Verfahren.

Erforderliche Berechtigungen für diese Aufgabe

Zum Ausführen dieser Aufgabe benötigen Sie die folgende Berechtigung:

gcloud

Konfigurieren Sie SMT beim Erstellen einer VM mit dem folgenden gcloud beta compute instances create-Befehl.

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

Dabei gilt:

  • 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. Aktuelle Prozessoren unterstützen standardmäßig zwei Threads pro Kern für SMT. Wenn Sie SMT deaktivieren möchten, legen Sie 1 fest.

API

Konfigurieren Sie SMT beim Erstellen einer VM. Verwenden Sie dazu die Methode instances.insert mit dem Feld threadsPerCore.

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

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

Dabei gilt:

  • PROJECT_ID: die Projekt-ID.

  • ZONE ist die Zone für die neue VM.

  • THREADS_PER_CORE ist die Anzahl der sichtbaren Threads pro physischem Kern. Aktuelle Prozessoren unterstützen standardmäßig zwei Threads pro Kern für SMT. Wenn Sie SMT deaktivieren möchten, legen Sie 1 fest.

SMT auf einer vorhandenen VM konfigurieren

Konfigurieren Sie SMT auf einer vorhandenen VM. Gehen Sie dazu so vor:

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

gcloud

  1. Exportieren Sie die Attribute der VM mit dem folgenden gcloud beta compute instances export-Befehl:

    gcloud beta 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 beta compute instances update-from-file-Befehl:

    gcloud beta 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

API

Aktualisieren Sie die Threads pro Kern der VM mit der folgenden instances.update-Methode:

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"
  },
  ...
}

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

SMT-Konfiguration prüfen

Prüfen Sie die SMT-Konfiguration mithilfe des Verfahrens, das dem auf der VM ausgeführten Betriebssystem entspricht.

Linux

Prüfen Sie die SMT-Konfiguration auf Linux-basierten VMs, indem Sie die folgenden Schritte ausführen:

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

  2. Führen Sie den Befehl lscpu aus:

    lscpu
    
  3. Prüfen Sie in der Ausgabe den Wert für die Anzahl der Threads pro Kern.

    In der folgenden Beispielausgabe lautet der Wert für die Anzahl der Threads pro Kern 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

Prüfen Sie die SMT-Konfiguration auf Windows-basierten VMs, indem Sie die folgenden Schritte ausführen:

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

  2. Öffnen Sie die Befehlszeile für Windows Management Instrumentation (WMI).

    wmic
    
  3. Führen Sie den folgenden Befehl aus, um die Anzahl der Kerne und die Anzahl der logischen Prozessoren aufzurufen:

    CPU Get NumberOfCores,NumberofLogicalProcessors
    
  4. Prüfen Sie in der Ausgabe den Wert für die Anzahl der Threads pro Kern.

    In der folgenden Beispielausgabe lautet der Wert für die Anzahl der Threads pro Kern 1.

    NumberOfCores  NumberOfLogicalProcessors
    1              1
    

Nächste Schritte