View a markdown version of this page

Optimieren Sie Ihre EC2-Instance im Hinblick auf die Leistung - AWS Ground Station

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Optimieren Sie Ihre EC2-Instance im Hinblick auf die Leistung

Anmerkung

Wenn Sie Ihre AWS-Ressourcen mithilfe von CloudFormation Vorlagen bereitgestellt haben, werden diese Optimierungen automatisch angewendet. Wenn Sie ein AMI verwendet oder Ihre EC2-Instance manuell erstellt haben, müssen diese Leistungsoptimierungen angewendet werden, um die zuverlässigste Leistung zu erzielen.

Denken Sie daran, Ihre Instance neu zu starten, nachdem Sie alle Optimierungen vorgenommen haben.

Topics

Optimieren Sie Hardware-Interrupts und Empfangswarteschlangen — das wirkt sich auf CPU und Netzwerk aus

In diesem Abschnitt wird die CPU-Core-Nutzung von Systemd, SMP IRQs, Receive Packet Steering (RPS) und Receive Flow Steering (RFS) konfiguriert. Eine Reihe von empfohlenen Einstellungen, Anhang: Empfohlene Parameter für die Abstimmung interrupt/RPS die auf dem von Ihnen verwendeten Instanztyp basieren, finden Sie unter.

Wichtig

Nur Amazon Linux 2023: Installieren und aktivieren Sie den Cron-Daemon, bevor Sie fortfahren.

sudo dnf install -y cronie sudo systemctl enable --now crond

In diesem und den beiden folgenden Abschnitten werden @reboot Crontab-Einträge hinzugefügt, für die ein laufender Cron-Daemon erforderlich ist, damit sie bei jedem Systemstart wirksam werden. Auf Amazon Linux 2023 ist der Cron-Daemon standardmäßig nicht installiert. Ohne die oben genannten Befehle werden diese Einträge geschrieben, aber nie ausgeführt. Auf Amazon Linux 2 ist der Cron-Daemon bereits installiert und aktiviert; es ist keine Aktion erforderlich.

  1. Platzieren Sie systemd-Prozesse von den CPU-Kernen der Agenten fern.

  2. Leitet Hardware-Interrupt-Anfragen von den CPU-Kernen der Agenten weg.

  3. Konfigurieren Sie RPS so, dass die Hardware-Warteschlange einer einzelnen Netzwerkschnittstellenkarte nicht zu einem Engpass im Netzwerkverkehr wird.

  4. Konfigurieren Sie RFS, um die CPU-Cache-Trefferquote zu erhöhen und dadurch die Netzwerklatenz zu reduzieren.

Das vom RPM bereitgestellte set_irq_affinity.sh Skript konfiguriert alle oben genannten Funktionen für Sie. Zu crontab hinzufügen, sodass es bei jedem Start angewendet wird:

echo "@reboot sudo /opt/aws/groundstation/bin/set_irq_affinity.sh '${interrupt_core_list}' '${rps_core_mask}' >> /var/log/user-data.log 2>&1" >>/var/spool/cron/root
  • interrupt_core_listErsetzen Sie es durch Kerne, die für den Kernel und das Betriebssystem reserviert sind — in der Regel den ersten und den zweiten, zusammen mit Hyperthread-Kernpaaren. Dies sollte sich nicht mit den oben ausgewählten Kernen überschneiden. (Beispiel: '0,1,48,49' für eine Hyperthread-Instanz mit 96 CPUs).

  • rps_core_maskist eine hexadezimale Bitmaske, die angibt, welche CPUs eingehende Pakete verarbeiten sollen, wobei jede Ziffer für 4 CPUs steht. Sie muss außerdem alle 8 Zeichen, beginnend von rechts, durch Kommas getrennt werden. Es wird empfohlen, alle CPUs zuzulassen und das Balancing vom Caching übernehmen zu lassen.

  • Beispiel für eine 96-CPU-Instanz:

    echo "@reboot sudo /opt/aws/groundstation/bin/set_irq_affinity.sh '0,1,48,49' 'ffffffff,ffffffff,ffffffff' >> /var/log/user-data.log 2>&1" >>/var/spool/cron/root

Tune Rx Interrupt Coalescing — wirkt sich auf das Netzwerk aus

Interrupt-Coalescing verhindert, dass das Host-System mit zu vielen Interrupts überflutet wird, und erhöht den Netzwerkdurchsatz. Bei dieser Konfiguration werden Pakete gesammelt und alle 128 Mikrosekunden ein einziger Interrupt generiert. Zu crontab hinzufügen, sodass es bei jedem Start angewendet wird:

echo "@reboot sudo ethtool -C ${interface} rx-usecs 128 tx-usecs 128 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
  • interfaceErsetzen Sie es durch die Netzwerkschnittstelle (Ethernet-Adapter), die für den Empfang von Daten konfiguriert ist. In der Regel ist dies der Fall, eth0 da dies die Standard-Netzwerkschnittstelle ist, die einer EC2-Instance zugewiesen ist.

Tune Rx Ring Buffer — wirkt sich auf das Netzwerk aus

Erhöhen Sie die Anzahl der Ringeinträge für den Rx-Ringpuffer, um Paketverluste oder -überläufe bei Burst-Verbindungen zu verhindern. Fügen Sie dem Crontab Folgendes hinzu, damit es bei jedem Start korrekt eingestellt ist:

echo "@reboot sudo ethtool -G ${interface} rx 16384 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
  • interfaceErsetzen Sie es durch die Netzwerkschnittstelle (Ethernet-Adapter), die für den Empfang von Daten konfiguriert ist. In der Regel ist dies der Fall, eth0 da dies die Standard-Netzwerkschnittstelle ist, die einer EC2-Instance zugewiesen ist.

  • Wenn Sie eine c6i Familieninstanz einrichten, muss der Befehl so geändert werden, dass der Ringpuffer auf statt auf 8192 gesetzt wird. 16384

Legen Sie die Kernel-Boot-Parameter fest (CPU C-State - und Schnittstellenbenennung) — das wirkt sich auf CPU und Netzwerk aus

Diese Kernel-Boot-Parameter verhindern durch Einstellung intel_idle.max_cstate=1 processor.max_cstate=1 max_cstate=1 einen CPU-Leerlauf. Ein CPU-Leerlauf kann zu Beginn eines Kontakts zum Verlust von Paketen führen. Zu den Parametern gehören auchnet.ifnames=0 biosdevname=0, die die Netzwerkschnittstelle des Empfängers umbenennen ineth0. Wie die anderen Optimierungsschritte in diesem Kapitel werden diese Parameter beim Neustart wirksam, der unter beschrieben istStarten Sie neu. Sie können sie in beliebiger Reihenfolge im Verhältnis zu den anderen Abschnitten anwenden.

Wird verwendetgrubby, um die Kernel-Argumente festzulegen. Dies funktioniert sowohl unter Amazon Linux 2023 (UEFI) als auch unter Amazon Linux 2, da die Bootloader-Konfiguration auf beiden direkt grubby verwaltet wird.

sudo grubby --update-kernel=ALL --args="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1 max_cstate=1"
Anmerkung

Das net.ifnames=0 Argument benennt die Netzwerkschnittstelle in „Beim nächsten Start“ umeth0. Die anderen Tuning-Abschnitte und das Agent-Konfigurationszieleth0, daher wird empfohlen, diese Parameter anzuwenden und neu zu starten. Wenn Sie sich dafür entscheiden, diese Parameter nicht anzuwenden, behält die Schnittstelle ihren Standardnamen bei (z. B. ens5 unter Amazon Linux 2023). Ersetzen Sie in diesem Fall den tatsächlichen Schnittstellennamen, der durch Ausführen gefunden wurde, überall dortip link show, wo in diesem Handbuch verwendet wirdeth0.

Eingangsports reservieren — wirkt sich auf das Netzwerk aus

Reservieren Sie alle Ports in Ihrem AwsGroundStationAgentEndpoint Eingangsadress-Portbereich, um Konflikte bei der Kernel-Nutzung zu vermeiden. Ein Konflikt bei der Portnutzung führt dazu, dass der Kontakt und die Datenübermittlung fehlschlagen.

echo "net.ipv4.ip_local_reserved_ports=${port_range_min}-${port_range_max}" >> /etc/sysctl.conf
  • Beispiel: echo "net.ipv4.ip_local_reserved_ports=42000-43500" >> /etc/sysctl.conf.

Starten Sie neu

Nachdem alle Optimierungen erfolgreich angewendet wurden, starten Sie die Instanz neu, damit die Optimierungen wirksam werden.

sudo reboot

In diesem Abschnitt werden die empfohlenen Parameterwerte für die Verwendung im Abschnitt Feinabstimmung von Hardware-Interrupts und Empfangswarteschlangen — Auswirkungen auf CPU und Netzwerk festgelegt.

Familie Instance-Typ $ {interrupt_core_list} $ {rps_core_mask}

c7 i

  • c7i.24xlarge

  • c7i.12xlarge

  • 0,1,48,49

  • 0,1,24,25

  • ffffffff, ffffffff, ffffffff

  • ffff, ffffffff

c6i

  • c6i.32xlarge

  • 0,1,64,65

  • ffffffff, ffffffff, ffffffff, ffffffff

c5

  • c5.24xlarge

  • c5.18xlarge

  • c5.12xlarge

  • 0,1,48,49

  • 0,1,36,37

  • 0,1,24,25

  • ffffffff, ffffffff, ffffffff

  • ff, ffffffff, ffffffff

  • ffff, ffffffff

c5n

  • c5n.metal

  • c5n.18xlarge

  • 0,1,36,37

  • 0,1,36,37

  • ff, ffffffff, ffffffff

  • ff, ffffffff, ffffffff

m5

  • m5.24xlarge

  • m5.12xlarge

  • 0,1,48,49

  • 0,1,24,25

  • ffffffff, ffffffff, ffffffff

  • ffff, ffffffff

r5

  • r5.metal

  • r5.24xlarge

  • 0,1,48,49

  • 0,1,48,49

  • ffffffff, ffffffff, ffffffff

  • ffffffff, ffffffff, ffffffff

r5n

  • r5n.metal

  • r5n.24xlarge

  • 0,1,48,49

  • 0,1,48,49

  • ffffffff, ffffffff, ffffffff

  • ffffffff, ffffffff, ffffffff

g4dn

  • g4dn.metal

  • g4dn.16xgroß

  • g4dn.12xgroß

  • 0,1,48,49

  • 0,1,32,33

  • 0,1,24,25

  • ffffffff, ffffffff, ffffffff

  • ffffffff, ffffffff

  • ffff, ffffffff

p4d

  • p4d.24xgroß

  • 0,1,48,49

  • ffffffff, ffffffff, ffffffff

p3dn

  • p3dn.24xgroß

  • 0,1,48,49

  • ffffffff, ffffffff, ffffffff