Amazon Elastic Compute Cloud
Benutzerhandbuch für Linux-Instances

Steuerung des Prozessorzustands für Ihre EC2 Instance

Über den C-Zustand werden die Ruhezustandsebenen gesteuert, in denen sich ein Core im Leerlauf befinden kann. C-Zustände sind von C0 (Arbeitszustand, in dem der Core „wach“ ist und Anweisungen ausführt) bis C6 („tiefster“ Leerlaufzustand, in dem ein Core ausgeschaltet ist) nummeriert. Mit P-Zuständen wird die gewünschte Performance für einen Core gesteuert (nach CPU-Frequenz). P-Zustände sind ab P0 (höchste Performancestufe, in der Intel Turbo Boost-Technologie für den Core eingesetzt werden kann, um ggf. die Frequenz zu erhöhen) über P1 (in diesem P-Zustand wird die maximale Basisfrequenz angefordert) bis P15 (geringstmögliche Frequenz) nummeriert.

Bei den folgenden Instance-Typen besteht für ein Betriebssystem die Möglichkeit, den C- und P-Zustand von Prozessoren zu steuern:

  • Allgemeine Zwecke: m4.10xlarge | m4.16xlarge | m5.metal | m5d.metal

  • Für Datenverarbeitung optimiert: c4.8xlarge | c5.metal

  • Für RAM optimiert: r4.8xlarge | r4.16xlarge | r5.metal | r5d.metal | u-6tb1.metal | u-9tb1.metal | u-12tb1.metal | x1.16xlarge | x1.32xlarge | x1e.8xlarge | x1e.16xlarge | x1e.32xlarge | z1d.metal

  • Speicheroptimiert: d2.8xlarge | i3.8xlarge | i3.16xlarge | i3.metal | i3en.metal | h1.8xlarge | h1.16xlarge

  • Beschleunigtes Computing: f1.16xlarge | g3.16xlarge | p2.16xlarge | p3.16xlarge

Bei den folgenden Instance-Typen besteht für ein Betriebssystem die Möglichkeit, den C-Zustand von Prozessoren zu steuern:

  • Allgemeine Zwecke: m5.12xlarge | m5.24xlarge | m5d.12xlarge | m5d.24xlarge

  • Für Datenverarbeitung optimiert: c5.9xlarge | c5.12xlarge | c5.18xlarge | c5.24xlarge | c5d.9xlarge | c5d.18xlarge

  • RAM-optimiert: r5.12xlarge | r5.24xlarge | r5d.12xlarge | r5d.24xlarge | z1d.6xlarge | z1d.12xlarge

  • Speicheroptimiert: i3en.12xlarge | i3en.24xlarge

  • Beschleunigtes Computing: p3dn.24xlarge

Es kann ratsam sein, die Einstellungen für den C- bzw. P-Zustand zu ändern, um die Konsistenz der Prozessorleistung zu erhöhen, die Latenz zu reduzieren oder Ihre Instance für einen bestimmten Workload zu optimieren. Die Standardeinstellungen für den C- und P-Zustand sind auf maximale Performance ausgelegt. Dies ist für die meisten Workloads optimal. Erwägen Sie jedoch, mit den für diese Instances verfügbaren Einstellungen für den C- oder P-Zustand zu experimentieren, wenn Ihre Anwendung von einer verringerten Latenz auf Kosten von höheren Single- oder Dual-Core-Frequenzen oder von einer konsistenten Performance bei niedrigeren Frequenzen (im Gegensatz zu diskontinuierlichen Turbo Boost-Frequenzen) profitieren würde.

In den folgenden Abschnitten werden die unterschiedlichen Prozessorstatuskonfigurationen und die Überwachung der Auswirkungen Ihrer Konfiguration beschrieben. Diese Verfahren gelten für Amazon Linux und wurden dafür geschrieben. Sie funktionieren ggf. aber auch für andere Linux-Distributionen mit der Linux-Kernelversion 3.9 oder höher. Weitere Informationen zu anderen Linux-Distributionen und zur Steuerung des Prozessorzustands erhalten Sie jeweils in der Dokumentation Ihres Systems.

Anmerkung

In den Beispielen auf dieser Seite werden das Dienstprogramm turbostat (unter Amazon Linux standardmäßig verfügbar) zum Anzeigen der Prozessorfrequenz und von Informationen zum C-Zustand und der Befehl stress (Installation per sudo yum install -y stress) zum Simulieren eines Workload verwendet.

Wenn die Ausgabe die Informationen zum C-Zustand nicht anzeigt, schließen Sie die Option --debug im Befehl (sudo turbostat --debug stress <options>) ein.

Höchste Performance mit maximaler Turbo Boost-Frequenz

Dies ist die Standardkonfiguration zum Steuern des Prozessorzustands für das Amazon Linux AMI und wird für die meisten Workloads empfohlen. Diese Konfiguration bietet die höchste Performance mit geringerer Variabilität. Wenn für inaktive Cores „tiefere“ Ruhezustände zugelassen werden, ist der thermische Spielraum vorhanden, der erforderlich ist, damit Single- oder Dual-Core-Prozesse ihr maximales Turbo Boost-Potenzial erreichen können.

Das folgende Beispiel enthält eine Instance vom Typ c4.8xlarge mit zwei aktiven Cores, die ihre maximale Turbo Boost-Prozessorfrequenz erreichen.

[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [30680] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [30680] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.54 3.44 2.90 0 9.18 0.00 85.28 0.00 0.00 0.00 0.00 0.00 94.04 32.70 54.18 0.00 0 0 0 0.12 3.26 2.90 0 3.61 0.00 96.27 0.00 0.00 0.00 0.00 0.00 48.12 18.88 26.02 0.00 0 0 18 0.12 3.26 2.90 0 3.61 0 1 1 0.12 3.26 2.90 0 4.11 0.00 95.77 0.00 0 1 19 0.13 3.27 2.90 0 4.11 0 2 2 0.13 3.28 2.90 0 4.45 0.00 95.42 0.00 0 2 20 0.11 3.27 2.90 0 4.47 0 3 3 0.05 3.42 2.90 0 99.91 0.00 0.05 0.00 0 3 21 97.84 3.45 2.90 0 2.11 ... 1 1 10 0.06 3.33 2.90 0 99.88 0.01 0.06 0.00 1 1 28 97.61 3.44 2.90 0 2.32 ... 10.002556 sec

In diesem Beispiel werden die vCPUs 21 und 28 mit der maximalen Turbo Boost-Frequenz ausgeführt, da sich die anderen Cores im C6 Ruhezustand befinden, um Leistung zu sparen und für die aktiven Cores den leistungsbezogenen und thermischen Spielraum zu erhöhen. Die vCPUs 3 und 10 (die jeweils einen Prozessorkern mit den vCPUs 21 und 28 gemeinsam nutzen) befinden sich im C1 Zustand und warten auf Anweisungen.

Im folgenden Beispiel sind alle 18 Cores aktiv, sodass kein Spielraum für die maximale Turbo Boost-Frequenz vorhanden ist, aber alle Cores werden mit der Geschwindigkeit 3,2 GHz vom Typ „Turbo Boost für alle Cores“ ausgeführt.

[ec2-user ~]$ sudo turbostat stress -c 36 -t 10 stress: info: [30685] dispatching hogs: 36 cpu, 0 io, 0 vm, 0 hdd stress: info: [30685] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 99.27 3.20 2.90 0 0.26 0.00 0.47 0.00 0.00 0.00 0.00 0.00 228.59 31.33 199.26 0.00 0 0 0 99.08 3.20 2.90 0 0.27 0.01 0.64 0.00 0.00 0.00 0.00 0.00 114.69 18.55 99.32 0.00 0 0 18 98.74 3.20 2.90 0 0.62 0 1 1 99.14 3.20 2.90 0 0.09 0.00 0.76 0.00 0 1 19 98.75 3.20 2.90 0 0.49 0 2 2 99.07 3.20 2.90 0 0.10 0.02 0.81 0.00 0 2 20 98.73 3.20 2.90 0 0.44 0 3 3 99.02 3.20 2.90 0 0.24 0.00 0.74 0.00 0 3 21 99.13 3.20 2.90 0 0.13 0 4 4 99.26 3.20 2.90 0 0.09 0.00 0.65 0.00 0 4 22 98.68 3.20 2.90 0 0.67 0 5 5 99.19 3.20 2.90 0 0.08 0.00 0.73 0.00 0 5 23 98.58 3.20 2.90 0 0.69 0 6 6 99.01 3.20 2.90 0 0.11 0.00 0.89 0.00 0 6 24 98.72 3.20 2.90 0 0.39 ...

Hohe Performance und geringe Latenz durch die Beschränkung von tieferen C-Zuständen

Mit dem C-Zustand werden die Ruhezustandsebenen gesteuert, in denen sich ein Core im inaktiven Zustand befinden kann. Es kann ratsam sein, die C-Zustände zu steuern, um Ihr System im Hinblick auf Latenz und Performance zu optimieren. Das Versetzen von Cores in den Ruhezustand benötigt Zeit. Und auch wenn ein Core im Ruhezustand mehr Spielraum zur Nutzung einer höheren Frequenz durch einen anderen Core zulässt, dauert es auch wieder eine gewisse Zeit, bis der Core aus dem Ruhezustand erwacht und Arbeitsschritte ausführen kann. Falls sich beispielsweise ein Core, der für die Verarbeitung von Netzwerkpaketunterbrechungen zugewiesen ist, im Ruhezustand befindet, kann es bei der Verarbeitung der Unterbrechung zu einer Verzögerung kommen. Sie können das System so konfigurieren, dass keine tieferen C-Zustände verwendet werden. Hierdurch wird die Latenz in Bezug auf die Prozessorreaktion reduziert, aber gleichzeitig wird auch der Turbo Boost-Spielraum für andere Cores verringert.

Ein häufiges Szenario zum Deaktivieren von tieferen Ruhezuständen ist die Nutzung einer Redis-Datenbankanwendung, bei der die Datenbank im Systemspeicher gespeichert wird, um für Abfragen eine möglichst geringe Reaktionszeit zu erzielen.

So begrenzen Sie tiefere Ruhezustände für Amazon Linux 2

  1. Öffnen Sie die Datei /etc/default/grub mit einem Editor Ihrer Wahl.

    [ec2-user ~]$ sudo vim /etc/default/grub
  2. Bearbeiten Sie die Zeile GRUB_CMDLINE_LINUX_DEFAULT und fügen Sie die Option intel_idle.max_cstate=1 hinzu, um C1 als tiefstmöglichen C-Zustand für Cores im Leerlauf festzulegen.

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1" GRUB_TIMEOUT=0
  3. Speichern Sie die Datei und beenden Sie den Editor.

  4. Führen Sie den folgenden Befehl aus, um die Bootkonfiguration erneut zu erstellen:

    [ec2-user ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
  5. Starten Sie Ihre Instance neu, um die neue Kerneloption zu aktivieren.

    [ec2-user ~]$ sudo reboot

So begrenzen Sie tiefere Ruhezustände für Amazon Linux AMI

  1. Öffnen Sie die Datei /boot/grub/grub.conf mit einem Editor Ihrer Wahl.

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. Bearbeiten Sie die Zeile kernel des ersten Eintrags und fügen Sie die Option intel_idle.max_cstate=1 hinzu, um C1 als tiefstmöglichen C-Zustand für Cores im Leerlauf festzulegen.

    # created by imagebuilder default=0 timeout=1 hiddenmenu title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64) root (hd0,0) kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1 initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
  3. Speichern Sie die Datei und beenden Sie den Editor.

  4. Starten Sie Ihre Instance neu, um die neue Kerneloption zu aktivieren.

    [ec2-user ~]$ sudo reboot

Das folgende Beispiel enthält eine Instance vom Typ c4.8xlarge mit zwei aktiven Cores, für die die Core-Frequenz vom Typ „Turbo Boost für alle Cores“ genutzt wird.

[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [5322] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [5322] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.56 3.20 2.90 0 94.44 0.00 0.00 0.00 0.00 0.00 0.00 0.00 131.90 31.11 199.47 0.00 0 0 0 0.03 2.08 2.90 0 99.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 67.23 17.11 99.76 0.00 0 0 18 0.01 1.93 2.90 0 99.99 0 1 1 0.02 1.96 2.90 0 99.98 0.00 0.00 0.00 0 1 19 99.70 3.20 2.90 0 0.30 ... 1 1 10 0.02 1.97 2.90 0 99.98 0.00 0.00 0.00 1 1 28 99.67 3.20 2.90 0 0.33 1 2 11 0.04 2.63 2.90 0 99.96 0.00 0.00 0.00 1 2 29 0.02 2.11 2.90 0 99.98 ...

In diesem Beispiel werden die Cores für die vCPUs 19 und 28 mit 3,2 GHz ausgeführt und die anderen Cores befinden sich im C-Zustand C1 und warten auf Anweisungen. Für die aktiven Cores wird zwar nicht die maximale Turbo Boost-Frequenz erreicht, aber die inaktiven Cores können viel schneller auf neue Anforderungen reagieren, als dies im tieferen C-Zustand C6 der Fall wäre.

Basis-Performance mit geringster Variabilität

Sie können die Variabilität der Prozessorfrequenz mit P-Zuständen reduzieren. Mit P-Zuständen wird die gewünschte Performance für einen Core gesteuert (nach CPU-Frequenz). Für die meisten Workloads wird im Zustand P0, in dem Turbo Boost angefordert wird, eine bessere Performance erzielt. Es kann aber sein, dass Sie für Ihr System eine konsistente Performance konfigurieren möchten, weil es bei der Aktivierung von Turbo Boost-Frequenzen zu einer diskontinuierlichen Performance kommen kann.

Für Workloads vom Typ „Intel Advanced Vector Extensions“ (AVX oder AVX2) kann bei niedrigeren Frequenzen eine gute Performance erzielt und für AVX-Anweisungen mehr Leistung genutzt werden. Wenn der Prozessor bei einer niedrigeren Frequenz ausgeführt wird, indem Turbo Boost deaktiviert wird, kann die genutzte Leistungsmenge reduziert und die Geschwindigkeit konsistenter gehalten werden. Weitere Informationen zur Optimierung Ihrer Instance-Konfiguration und des Workload für AVX erhalten Sie unter http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/performance-xeon-e5-v3-advanced-vector-extensions-paper.pdf.

In diesem Abschnitt wird beschrieben, wie Sie tiefere Ruhezustände begrenzen und Turbo Boost deaktivieren (durch Anforderung des P-Zustands P1), um für diese Arten von Workloads ein geringe Latenz und die geringstmögliche Variabilität der Prozessorgeschwindigkeit bereitzustellen.

So begrenzen Sie tiefere Ruhezustände und deaktivieren Turbo Boost für Amazon Linux 2

  1. Öffnen Sie die Datei /etc/default/grub mit einem Editor Ihrer Wahl.

    [ec2-user ~]$ sudo vim /etc/default/grub
  2. Bearbeiten Sie die Zeile GRUB_CMDLINE_LINUX_DEFAULT und fügen Sie die Option intel_idle.max_cstate=1 hinzu, um C1 als tiefstmöglichen C-Zustand für Cores im Leerlauf festzulegen.

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1" GRUB_TIMEOUT=0
  3. Speichern Sie die Datei und beenden Sie den Editor.

  4. Führen Sie den folgenden Befehl aus, um die Bootkonfiguration erneut zu erstellen:

    [ec2-user ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
  5. Starten Sie Ihre Instance neu, um die neue Kerneloption zu aktivieren.

    [ec2-user ~]$ sudo reboot
  6. Führen Sie den folgenden Befehl aus, um Turbo Boost zu deaktivieren, wenn Sie die geringe Variabilität der Prozessorgeschwindigkeit benötigen, die im P-Zustand P1 bereitgestellt wird.

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  7. Wenn die Verarbeitung Ihrer Workload abgeschlossen ist, können Sie Turbo Boost mit dem unten angegebenen Befehl wieder aktivieren.

    [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"

So begrenzen Sie tiefere Ruhezustände und deaktivieren Turbo Boost für Amazon Linux AMI

  1. Öffnen Sie die Datei /boot/grub/grub.conf mit einem Editor Ihrer Wahl.

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. Bearbeiten Sie die Zeile kernel des ersten Eintrags und fügen Sie die Option intel_idle.max_cstate=1 hinzu, um C1 als tiefstmöglichen C-Zustand für Cores im Leerlauf festzulegen.

    # created by imagebuilder default=0 timeout=1 hiddenmenu title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64) root (hd0,0) kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1 initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
  3. Speichern Sie die Datei und beenden Sie den Editor.

  4. Starten Sie Ihre Instance neu, um die neue Kerneloption zu aktivieren.

    [ec2-user ~]$ sudo reboot
  5. Führen Sie den folgenden Befehl aus, um Turbo Boost zu deaktivieren, wenn Sie die geringe Variabilität der Prozessorgeschwindigkeit benötigen, die im P-Zustand P1 bereitgestellt wird.

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  6. Wenn die Verarbeitung Ihrer Workload abgeschlossen ist, können Sie Turbo Boost mit dem unten angegebenen Befehl wieder aktivieren.

    [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"

Das folgende Beispiel enthält eine Instance vom Typ c4.8xlarge mit zwei aktiven vCPUs, für die die Core-Basisfrequenz ohne Turbo Boost genutzt wird.

[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [5389] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [5389] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.59 2.90 2.90 0 94.41 0.00 0.00 0.00 0.00 0.00 0.00 0.00 128.48 33.54 200.00 0.00 0 0 0 0.04 2.90 2.90 0 99.96 0.00 0.00 0.00 0.00 0.00 0.00 0.00 65.33 19.02 100.00 0.00 0 0 18 0.04 2.90 2.90 0 99.96 0 1 1 0.05 2.90 2.90 0 99.95 0.00 0.00 0.00 0 1 19 0.04 2.90 2.90 0 99.96 0 2 2 0.04 2.90 2.90 0 99.96 0.00 0.00 0.00 0 2 20 0.04 2.90 2.90 0 99.96 0 3 3 0.05 2.90 2.90 0 99.95 0.00 0.00 0.00 0 3 21 99.95 2.90 2.90 0 0.05 ... 1 1 28 99.92 2.90 2.90 0 0.08 1 2 11 0.06 2.90 2.90 0 99.94 0.00 0.00 0.00 1 2 29 0.05 2.90 2.90 0 99.95

Die Cores für die vCPUs 21 und 28 führen aktiv Arbeitsschritte mit der Basisprozessorgeschwindigkeit von 2,9 GHz aus und alle inaktiven Cores werden ebenfalls mit der Basisgeschwindigkeit im C-Zustand C1 ausgeführt und warten auf Anweisungen.