

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 Leistung
<a name="ec2-instance-performance-tuning"></a>

**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 eine möglichst zuverlässige 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](#tune-hardware-interrupts)
+ [Tune Rx Interrupt Coalescing — wirkt sich auf das Netzwerk aus](#tune-rx-interrupts)
+ [Tune Rx Ringbuffer — wirkt sich auf das Netzwerk aus](#tune-rx-ring-buffer)
+ [Legen Sie die Kernel-Boot-Parameter fest (CPU C-State - und Schnittstellenbenennung) — wirkt sich auf CPU und Netzwerk aus](#tune-cpu-c-state)
+ [Eingangsports reservieren — wirkt sich auf das Netzwerk aus](#reserve-ingress-ports)
+ [Starten Sie neu](#reboot)

## Optimieren Sie Hardware-Interrupts und Empfangswarteschlangen — das wirkt sich auf CPU und Netzwerk aus
<a name="tune-hardware-interrupts"></a>

In diesem Abschnitt wird die CPU-Auslastung von Systemd, SMP IRQs, Receive Packet Steering (RPS) und Receive Flow Steering (RFS) konfiguriert. Eine Reihe von empfohlenen Einstellungen, [Anhang: Empfohlene Parameter für Tune interrupt/RPS](#recommended-parameters) die auf dem von Ihnen verwendeten Instance-Typ 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
```
 Dieser Abschnitt und die beiden darauf folgenden fügen `@reboot` Crontab-Einträge hinzu, für die ein laufender Cron-Daemon erforderlich ist, damit er bei jedem Start wirksam wird. Auf Amazon Linux 2023 ist der Cron-Daemon standardmäßig ** nicht ** installiert. Ohne die obigen 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. Ordnen Sie systemd-Prozesse von den CPU-Kernen der Agenten ab.

1. Leiten Sie Hardware-Interrupt-Anfragen von den CPU-Kernen der Agenten weg.

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

1. Konfigurieren Sie RFS, um die CPU-Cache-Trefferrate 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, damit 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_list`Ersetzen Sie die Kerne 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_mask`ist 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 Caching den Ausgleich übernehmen zu lassen.
  + Eine Liste der empfohlenen Parameter für jeden Instanztyp finden Sie unter. [Anhang: Empfohlene Parameter für Tune interrupt/RPS](#recommended-parameters)
+  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
<a name="tune-rx-interrupts"></a>

 Interrupt-Coalescing verhindert, dass das Hostsystem mit zu vielen Interrupts überflutet wird, und trägt zur Erhöhung des Netzwerkdurchsatzes bei. Bei dieser Konfiguration werden Pakete gesammelt und alle 128 Mikrosekunden wird ein einziger Interrupt generiert. Fügen Sie es zu Crontab hinzu, damit 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
```
+ `interface`Ersetzen Sie es durch die Netzwerkschnittstelle (Ethernet-Adapter), die für den Empfang von Daten konfiguriert ist. In der `eth0` Regel ist dies die Standardnetzwerkschnittstelle, die einer EC2-Instance zugewiesen ist.

## Tune Rx Ringbuffer — wirkt sich auf das Netzwerk aus
<a name="tune-rx-ring-buffer"></a>

 Erhöhen Sie die Anzahl der Ringeinträge für den Rx-Ringpuffer, um Paketverluste oder Überläufe bei Bursting-Verbindungen zu verhindern. Fügen Sie das Crontab 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
```
+ `interface`Ersetzen Sie es durch die Netzwerkschnittstelle (Ethernet-Adapter), die für den Empfang von Daten konfiguriert ist. In der `eth0` Regel ist dies die Standardnetzwerkschnittstelle, 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) — wirkt sich auf CPU und Netzwerk aus
<a name="tune-cpu-c-state"></a>

 Diese Kernel-Boot-Parameter verhindern durch Einstellung `intel_idle.max_cstate=1 processor.max_cstate=1 max_cstate=1` den CPU-Leerlauf. Ein CPU-Leerlauf kann zu Beginn eines Kontakts zum Verlust von Paketen führen. Zu den Parametern gehören auch`net.ifnames=0 biosdevname=0`, mit denen die Netzwerkschnittstelle des Empfängers umbenannt wird. `eth0` Wie die anderen Optimierungsschritte in diesem Kapitel werden auch diese Parameter bei dem unter beschriebenen Neustart wirksam[Starten Sie neu](#reboot). Sie können sie in beliebiger Reihenfolge relativ zu den anderen Abschnitten anwenden. 

 Wird verwendet`grubby`, um die Kernel-Argumente festzulegen. Dies funktioniert sowohl auf Amazon Linux 2023 (UEFI) als auch auf Amazon Linux 2, da die Bootloader-Konfiguration direkt auf beiden `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 beim nächsten Start in um`eth0`. Die anderen Tuning-Abschnitte und die Agentenkonfiguration zielen darauf ab`eth0`, 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. bei `ens5` Amazon Linux 2023). Ersetzen Sie in diesem Fall den tatsächlichen Schnittstellennamen, den Sie durch Ausführen `ip link show` gefunden haben, überall in diesem Handbuch`eth0`. 

## Eingangsports reservieren — wirkt sich auf das Netzwerk aus
<a name="reserve-ingress-ports"></a>

 Reservieren Sie alle Ports in Ihrem `AwsGroundStationAgentEndpoint` Portbereich für Eingangsadressen, um Konflikte mit der Kernelnutzung zu vermeiden. Ein Konflikt bei der Portnutzung führt zu einem Kontakt- und Datenübermittlungsausfall. 

```
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
<a name="reboot"></a>

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

```
sudo reboot
```

## Anhang: Empfohlene Parameter für Tune interrupt/RPS
<a name="recommended-parameters"></a>

 In diesem Abschnitt werden die empfohlenen Parameterwerte für den Tuning-Abschnitt Hardware-Interrupts und Empfangswarteschlangen optimieren — Auswirkungen auf CPU und Netzwerk festgelegt. 


| Familie | Instance-Typ | $ {interrupt\_core\_list} | $ {rps\_core\_mask} | 
| --- | --- | --- | --- | 
| c7i |  + c7i.24xlarge<br />+ c7i.12xlarge  |  + 0,1,48,49<br />+ 0,1,24,25  |  + ffffffff, ffffffff, ffffffff<br />+ ffff, ffffffff  | 
| c6i |  + c6i.32xlarge  |  + 0,1,64,65  |  + ffffffff, ffffffff, ffffffff, ffffffff  | 
| c5 |  + c5.24xlarge<br />+ c5.18xlarge<br />+ c5.12xlarge  |  + 0,1,48,49<br />+ 0,1,36,37<br />+ 0,1,24,25  |  + ffffffff, ffffffff, ffffffff<br />+ ff, ffffffff, ffffffff<br />+ ffff, ffffff  | 
| c5n |  + c5n.metal<br />+ c5n.18xlarge  |  + 0,1,36,37<br />+ 0,1,36,37  |  + ff, ffffff, ffffff<br />+ ff, ffffffff, ffffffff  | 
| m5 |  + m5.24xlarge<br />+ m5.12xlarge  |  + 0,1,48,49<br />+ 0,1,24,25  |  + ffffffff, ffffffff, ffffffff<br />+ ffff, ffffffff  | 
| r5 |  + r5.metal<br />+ r5.24xlarge  |  + 0,1,48,49<br />+ 0,1,48,49  |  + ffffffff, ffffffff, ffffffff<br />+ ffffffff, ffffffff, ffffffff  | 
| r5n |  + r5n.metal<br />+ r5n.24xlarge  |  + 0,1,48,49<br />+ 0,1,48,49  |  + ffffffff, ffffffff, ffffffff<br />+ ffffffff, ffffffff, ffffffff  | 
| g4dn |  + g4dn.metal<br />+ g4dn.16xgroß<br />+ g4dn.12xgroß  |  + 0,1,48,49<br />+ 0,1,32,33<br />+ 0,1,24,25  |  + ffffffff, ffffffff, ffffffff<br />+ ffffffff, ffffffff<br />+ ffff, ffffff  | 
| p4d |  + p4d.24xgroß  |  + 0,1,48,49  |  + ffffffff, ffffffff, ffffffff  | 
| p3dn |  + p3dn.24xgroß  |  + 0,1,48,49  |  + ffffffff, ffffffff, ffffffff  | 