

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Ottimizza la tua istanza EC2 per migliorarne le prestazioni
<a name="ec2-instance-performance-tuning"></a>

**Nota**  
Se hai effettuato il provisioning delle risorse AWS utilizzando CloudFormation modelli, queste ottimizzazioni vengono applicate automaticamente. Se hai utilizzato un'AMI o hai creato manualmente l'istanza EC2, questi aggiustamenti delle prestazioni devono essere applicati per ottenere le prestazioni più affidabili.

Ricordati di riavviare l'istanza dopo aver applicato una o più ottimizzazioni.

**Argomenti**
+ [Ottimizza le interruzioni hardware e le code di ricezione: influisce sulla CPU e sulla rete](#tune-hardware-interrupts)
+ [Tune Rx interrupt coalescenza: influisce sulla rete](#tune-rx-interrupts)
+ [Tune Rx ring buffer: influisce sulla rete](#tune-rx-ring-buffer)
+ [Imposta i parametri di avvio del kernel (denominazione della CPU C-State e dell'interfaccia): influisce sulla CPU e sulla rete](#tune-cpu-c-state)
+ [Riserva le porte di ingresso: influisce sulla rete](#reserve-ingress-ports)
+ [Riavviare](#reboot)

## Ottimizza le interruzioni hardware e le code di ricezione: influisce sulla CPU e sulla rete
<a name="tune-hardware-interrupts"></a>

Questa sezione configura l'utilizzo dei core della CPU di systemd, SMP IRQ, Receive Packet Steering (RPS) e Receive Flow Steering (RFS). Vedi una serie [Appendice: Parametri consigliati per l'accordatura interrupt/RPS](#recommended-parameters) di impostazioni consigliate in base al tipo di istanza che stai utilizzando.

**Importante**  
 **Solo Amazon Linux 2023:** installa e abilita il demone cron prima di continuare.   

```
sudo dnf install -y cronie
sudo systemctl enable --now crond
```
 Questa sezione e le due successive aggiungono voci `@reboot` crontab, che richiedono un demone cron in esecuzione per avere effetto su ogni avvio. In Amazon Linux 2023, il demone cron **non** è installato per impostazione predefinita, quindi senza i comandi precedenti queste voci vengono scritte ma non vengono mai eseguite. Su Amazon Linux 2, il demone cron è già installato e abilitato; non è necessaria alcuna azione. 

1. Allontana i processi systemd dai core della CPU dell'agente.

1. Indirizza le richieste di interruzione hardware lontano dai core della CPU dell'agente.

1. Configura RPS per evitare che la coda hardware di una singola scheda di interfaccia di rete diventi un collo di bottiglia nel traffico di rete.

1. Configura RFS per aumentare la frequenza di accesso alla cache della CPU e quindi ridurre la latenza di rete.

Lo `set_irq_affinity.sh` script fornito dall'RPM configura tutto quanto sopra per te. Aggiungilo a crontab, in modo che venga applicato ad ogni avvio:

```
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
```
+ Sostituiscilo `interrupt_core_list` con core riservati al kernel e al sistema operativo, in genere il primo e il secondo insieme a coppie di core hyperthreaded. Questo non dovrebbe sovrapporsi ai core selezionati sopra. (Es: '0,1,48,49' per un'istanza Hyper-Thread da 96 CPU).
+ `rps_core_mask`è una maschera di bit esadecimale che specifica quali CPU devono elaborare i pacchetti in entrata, con ogni cifra che rappresenta 4 CPU. Deve inoltre essere separato da virgole ogni 8 caratteri a partire da destra. Si consiglia di abilitare tutte le CPU e lasciare che la cache gestisca il bilanciamento.
  + Per visualizzare l'elenco dei parametri consigliati per ogni tipo di istanza, fare riferimento a. [Appendice: Parametri consigliati per l'accordatura interrupt/RPS](#recommended-parameters)
+  Esempio di istanza da 96 CPU: 

  ```
  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 coalescenza: influisce sulla rete
<a name="tune-rx-interrupts"></a>

 La coalescenza delle interruzioni aiuta a prevenire l'inondazione del sistema host con troppe interruzioni e aiuta ad aumentare la velocità di trasmissione della rete. Con questa configurazione, i pacchetti vengono raccolti e viene generata una singola interruzione ogni 128 microsecondi. Aggiungi a crontab, in modo che venga applicato ad ogni avvio: 

```
echo "@reboot sudo ethtool -C ${interface} rx-usecs 128 tx-usecs 128 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
```
+ Sostituisci `interface` con l'interfaccia di rete (adattatore ethernet) configurata per ricevere dati. In genere, si `eth0` tratta dell'interfaccia di rete predefinita assegnata a un'istanza EC2.

## Tune Rx ring buffer: influisce sulla rete
<a name="tune-rx-ring-buffer"></a>

 Aumenta il numero di ingressi ad anello per il ring buffer Rx per evitare cadute o sovraccarichi di pacchetti durante le connessioni interrotte. Aggiungi al crontab, in modo che sia impostato correttamente su ogni avvio: 

```
echo "@reboot sudo ethtool -G ${interface} rx 16384 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
```
+ Sostituisci `interface` con l'interfaccia di rete (adattatore ethernet) configurata per ricevere dati. In genere, si `eth0` tratta dell'interfaccia di rete predefinita assegnata a un'istanza EC2.
+ Se si configura un'istanza `c6i` familiare, è necessario modificare il comando per impostare il ring buffer su`8192`, anziché. `16384`

## Imposta i parametri di avvio del kernel (denominazione della CPU C-State e dell'interfaccia): influisce sulla CPU e sulla rete
<a name="tune-cpu-c-state"></a>

 Questi parametri di avvio del kernel impediscono l'inattività della CPU mediante l'impostazione. `intel_idle.max_cstate=1 processor.max_cstate=1 max_cstate=1` L'inattività della CPU può causare la perdita di pacchetti all'inizio di un contatto. I parametri includono anche`net.ifnames=0 biosdevname=0`, che rinomina l'interfaccia di rete del ricevitore in. `eth0` Come le altre fasi di ottimizzazione descritte in questo capitolo, questi parametri hanno effetto al riavvio descritto in. [Riavviare](#reboot) È possibile applicarli in qualsiasi ordine rispetto alle altre sezioni. 

 Si usa `grubby` per impostare gli argomenti del kernel. Funziona sia su Amazon Linux 2023 (UEFI) che su Amazon Linux 2 perché `grubby` gestisce la configurazione del bootloader direttamente su entrambi. 

```
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"
```

**Nota**  
 L'`net.ifnames=0`argomento rinomina l'interfaccia di rete all'avvio successivo`eth0`. Le altre sezioni di ottimizzazione e l'obiettivo di configurazione dell'agente`eth0`, quindi l'applicazione di questi parametri e il riavvio sono il percorso consigliato. Se scegli di non applicare questi parametri, l'interfaccia mantiene il nome predefinito (ad esempio, `ens5` su Amazon Linux 2023). In tal caso, sostituisci il nome effettivo dell'interfaccia, trovato eseguendo, `ip link show` ovunque venga utilizzata `eth0` questa guida. 

## Riserva le porte di ingresso: influisce sulla rete
<a name="reserve-ingress-ports"></a>

 Riservate tutte le porte nell'intervallo `AwsGroundStationAgentEndpoint` di porte degli indirizzi di ingresso per evitare conflitti con l'utilizzo del kernel. Il conflitto di utilizzo delle porte porterà a problemi di contatto e di consegna dei dati. 

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

## Riavviare
<a name="reboot"></a>

Dopo che tutte le regolazioni sono state applicate correttamente, riavviate l'istanza per rendere effettive le regolazioni.

```
sudo reboot
```

## Appendice: Parametri consigliati per l'accordatura interrupt/RPS
<a name="recommended-parameters"></a>

 Questa sezione determina i valori dei parametri consigliati da utilizzare nella sezione di ottimizzazione Tune Hardware Interrupts and Receive Queues - Impact CPU and Network. 


| Family | Tipo di istanza | $ {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, ffffffff  | 
| c5n |  + c5n.metal<br />+ c5n.18xlarge  |  + 0,1,36,37<br />+ 0,1,36,37  |  + ff, ffffffff, ffffffff<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.16xlarge<br />+ g4dn.12xlarge  |  + 0,1,48,49<br />+ 0,1,32,33<br />+ 0,1,24,25  |  + ffffffff, ffffffff, ffffffff<br />+ ffffffff, ffffffff<br />+ ffff, ffffffff  | 
| p4d |  + p4d.24xlarge  |  + 0,1,48,49  |  + ffffffff, ffffffff, ffffffff  | 
| p3dn |  + p3dn.24xlarge  |  + 0,1,48,49  |  + ffffffff, ffffffff, ffffffff  | 