

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ajuste su instancia EC2 para mejorar el rendimiento
<a name="ec2-instance-performance-tuning"></a>

**nota**  
Si ha aprovisionado sus recursos de AWS mediante CloudFormation plantillas, estos ajustes se aplican automáticamente. Si utilizó una AMI o creó manualmente la instancia EC2, debe aplicar estos ajustes de rendimiento para lograr el rendimiento más fiable.

Recuerde reiniciar la instancia después de aplicar cualquier ajuste.

**Temas**
+ [Ajuste las interrupciones del hardware y las colas de recepción: esto afecta a la CPU y a la red](#tune-hardware-interrupts)
+ [La fusión de interrupciones de Tune Rx afecta a la red](#tune-rx-interrupts)
+ [El búfer anular de Tune Rx: afecta a la red](#tune-rx-ring-buffer)
+ [Defina los parámetros de arranque del kernel (nombres de la CPU C-State y de la interfaz): afecta a la CPU y a la red](#tune-cpu-c-state)
+ [Reserve los puertos de entrada: afecta a la red](#reserve-ingress-ports)
+ [Reboot](#reboot)

## Ajuste las interrupciones del hardware y las colas de recepción: esto afecta a la CPU y a la red
<a name="tune-hardware-interrupts"></a>

En esta sección, se configura el uso del núcleo de la CPU de systemd, SMP IRQ, Receive Packet Steering (RPS) y Receive Flow Steering (RFS). Consulte [Apéndice: Parámetros recomendados para el ajuste interrupt/RPS](#recommended-parameters) para ver el conjunto de ajustes recomendados en función del tipo de instancia que utilice.

**importante**  
 **Solo para Amazon Linux 2023: ** instale y habilite el daemon cron antes de continuar.   

```
sudo dnf install -y cronie
sudo systemctl enable --now crond
```
 En esta sección y en las dos siguientes se añaden entradas de `@reboot` crontab, que requieren un daemon cron en ejecución para que surta efecto en cada arranque. En Amazon Linux 2023, el daemon cron ** no está ** instalado de forma predeterminada, por lo que sin los comandos anteriores, estas entradas se escriben pero nunca se ejecutan. En Amazon Linux 2, el demonio cron ya está instalado y habilitado; no es necesario realizar ninguna acción. 

1. Aleja los procesos de systemd de los núcleos de CPU de los agentes.

1. Redirija las solicitudes de interrupción de hardware lejos de los núcleos de la CPU de los agentes.

1. Configure el RPS para evitar que la cola de hardware de una sola tarjeta de interfaz de red se convierta en un cuello de botella en el tráfico de la red.

1. Configure RFS para aumentar la tasa de aciertos de la memoria caché de la CPU y reducir así la latencia de la red.

El script de `set_irq_affinity.sh` proporcionado por el RPM configura todas las opciones anteriores automáticamente. Añádalo a crontab para que se aplique en cada arranque:

```
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`Sustitúyalo por núcleos reservados para el núcleo y el sistema operativo (normalmente el primero y el segundo, junto con pares de núcleos con subprocesos múltiples). Esto no debe superponerse con los núcleos seleccionados anteriormente. (Por ejemplo: '0,1,48,49' para una instancia con 96 CPU con subprocesos múltiples).
+ `rps_core_mask` es una máscara de bits hexadecimal que especifica qué CPU deben procesar los paquetes entrantes, en la que cada dígito representa 4 CPU. También debe estar separada por comas cada 8 caracteres empezando por la derecha. Se recomienda utilizar todas las CPU y dejar que el almacenamiento en caché se encargue del equilibrio.
  + Para ver la lista de parámetros recomendados para cada tipo de instancia, consulte [Apéndice: Parámetros recomendados para el ajuste interrupt/RPS](#recommended-parameters).
+  Ejemplo para una instancia de 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
  ```

## La fusión de interrupciones de Tune Rx afecta a la red
<a name="tune-rx-interrupts"></a>

 La fusión de interrupciones ayuda a evitar que el sistema de host se inunde con demasiadas interrupciones y a aumentar el rendimiento de la red. Con esta configuración, se recopilan los paquetes y se genera una única interrupción cada 128 microsegundos. Añádalo a crontab para que se aplique en cada arranque: 

```
echo "@reboot sudo ethtool -C ${interface} rx-usecs 128 tx-usecs 128 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
```
+ Sustituya `interface` por la interfaz de red (adaptador Ethernet) configurada para recibir datos. Por lo general, `eth0` se trata de la interfaz de red predeterminada asignada a una instancia EC2.

## El búfer anular de Tune Rx: afecta a la red
<a name="tune-rx-ring-buffer"></a>

 Aumente el número de entradas de anillo en el búfer de anillo Rx para evitar que los paquetes se caigan o se sobrecarguen durante las conexiones interrumpidas. Añádalo al crontab para que quede correctamente configurado en cada arranque: 

```
echo "@reboot sudo ethtool -G ${interface} rx 16384 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
```
+ Sustituya `interface` por la interfaz de red (adaptador Ethernet) configurada para recibir datos. Por lo general, esto `eth0` se debe a que es la interfaz de red predeterminada asignada a una instancia EC2.
+ Si se está configurando una instancia `c6i` familiar, es necesario modificar el comando para configurar el búfer anular en`8192`, en lugar de `16384` hacerlo.

## Defina los parámetros de arranque del kernel (nombres de la CPU C-State y de la interfaz): afecta a la CPU y a la red
<a name="tune-cpu-c-state"></a>

 Estos parámetros de arranque del kernel evitan que la CPU esté inactiva mediante la configuración`intel_idle.max_cstate=1 processor.max_cstate=1 max_cstate=1`. La inactividad de la CPU puede provocar la pérdida de paquetes al inicio de un contacto. Los parámetros también incluyen los que `net.ifnames=0 biosdevname=0` cambian el nombre de la interfaz de red del receptor a. `eth0` Al igual que los demás pasos de ajuste de este capítulo, estos parámetros entran en vigor al reiniciar el equipo descrito en[Reboot](#reboot). Puede aplicarlos en cualquier orden en relación con las demás secciones. 

 Se utilizan `grubby` para establecer los argumentos del núcleo. Esto funciona tanto en Amazon Linux 2023 (UEFI) como en Amazon Linux 2 porque `grubby` gestiona la configuración del gestor de arranque directamente en ambos. 

```
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**  
 El `net.ifnames=0` argumento cambia el nombre de la interfaz de red a `eth0` en el siguiente arranque. Las demás secciones de ajuste son el objetivo de configuración del agente`eth0`, por lo que la ruta recomendada es aplicar estos parámetros y reiniciar. Si decide no aplicar estos parámetros, la interfaz mantendrá su nombre predeterminado (por ejemplo, `ens5` en Amazon Linux 2023). En ese caso, sustitúyalo por el nombre real de la interfaz (que se encuentra al ejecutar`ip link show`) en todos los lugares en los que se utilice esta guía`eth0`. 

## Reserve los puertos de entrada: afecta a la red
<a name="reserve-ingress-ports"></a>

 Reserve todos los puertos del rango de puertos de su dirección de entrada de `AwsGroundStationAgentEndpoint` para evitar conflictos con el uso del núcleo. Un conflicto en el uso de los puertos provocará un fallo en el contacto y en la entrega de datos. 

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

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

Cuando todas las afinaciones se hayan aplicado correctamente, reinicie la instancia para que se apliquen los cambios.

```
sudo reboot
```

## Apéndice: Parámetros recomendados para el ajuste interrupt/RPS
<a name="recommended-parameters"></a>

 Esta sección determina los valores de los parámetros recomendados para usarlos en la sección de ajustes de las interrupciones del hardware y las colas de recepción: afecta a la CPU y la red. 


| Familia | Tipo de instancia | ${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  | 