

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Ajuste sua instância do EC2 para melhorar o desempenho
<a name="ec2-instance-performance-tuning"></a>

**nota**  
Se você provisionou seus recursos da AWS usando CloudFormation modelos, esses ajustes serão aplicados automaticamente. Se você usou uma AMI ou criou manualmente sua instância do EC2, esses ajustes de desempenho devem ser aplicados para obter o desempenho mais confiável.

Lembre-se de reinicializar sua instância depois de aplicar qualquer ajuste.

**Tópicos**
+ [Ajuste as interrupções de hardware e receba filas - afeta a CPU e a rede](#tune-hardware-interrupts)
+ [Tune Rx interrompe a coalescência - afeta a rede](#tune-rx-interrupts)
+ [Tune Rx ring buffer - afeta a rede](#tune-rx-ring-buffer)
+ [Defina os parâmetros de inicialização do kernel (nomenclatura da CPU C-State e da interface) - afeta a CPU e a rede](#tune-cpu-c-state)
+ [Reservar portas de entrada - impacta a rede](#reserve-ingress-ports)
+ [Reinicializar](#reboot)

## Ajuste as interrupções de hardware e receba filas - afeta a CPU e a rede
<a name="tune-hardware-interrupts"></a>

Esta seção configura o uso principal da CPU do systemd, SMP IRQs, Receive Packet Steering (RPS) e Receive Flow Steering (RFS). Consulte [Apêndice: Parâmetros recomendados para ajuste interrupt/RPS](#recommended-parameters) para ver um conjunto de configurações recomendadas com base no tipo de instância que você está usando.

**Importante**  
 **Somente Amazon Linux 2023: ** instale e habilite o daemon cron antes de continuar.   

```
sudo dnf install -y cronie
sudo systemctl enable --now crond
```
 Esta seção e as duas seguintes adicionam entradas `@reboot` crontab, que exigem que um daemon cron em execução entre em vigor em cada inicialização. No Amazon Linux 2023, o daemon cron ** não é ** instalado por padrão, portanto, sem os comandos acima, essas entradas são gravadas, mas nunca são executadas. No Amazon Linux 2, o daemon cron já está instalado e habilitado; nenhuma ação é necessária. 

1. Afaste os processos do systemd dos núcleos da CPU do agente.

1. Redirecione as solicitações de interrupção de hardware para fora dos núcleos da CPU do agente.

1. Configure o RPS para evitar que a fila de hardware de uma única placa de interface de rede se torne um gargalo no tráfego da rede.

1. Configure o RFS para aumentar a taxa de acertos de cache da CPU e, assim, reduzir a latência da rede.

O script `set_irq_affinity.sh` fornecido pelo RPM configura todas as opções acima para você. Adicione ao crontab, para que seja aplicado em cada inicialização:

```
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`Substitua por núcleos reservados para o kernel e o sistema operacional - normalmente o primeiro e o segundo, juntamente com pares de núcleos hiper-segmentados. Isso não deve se sobrepor aos núcleos selecionados acima. (Ex: '0,1,48,49' para uma instância hipersegmentada de 96 CPUs).
+ `rps_core_mask` é uma máscara de bits hexadecimal que especifica quais CPUs devem processar pacotes de entrada, com cada dígito representando quatro CPUs. Também deve ser separado por vírgula a cada oito caracteres, começando pela direita. É recomendável permitir todas as CPUs e deixar que o cache cuide do balanceamento.
  + Para ver a lista de parâmetros recomendados para cada tipo de instância, consulte [Apêndice: Parâmetros recomendados para ajuste interrupt/RPS](#recommended-parameters).
+  Exemplo de instância de 96 CPUs: 

  ```
  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 interrompe a coalescência - afeta a rede
<a name="tune-rx-interrupts"></a>

 A coalescência de interrupções ajuda a evitar inundar o sistema host com muitas interrupções e ajuda a aumentar o throughput da rede. Com essa configuração, os pacotes são coletados e uma única interrupção é gerada a cada 128 microssegundos. Adicione ao crontab, para que seja aplicado em cada inicialização: 

```
echo "@reboot sudo ethtool -C ${interface} rx-usecs 128 tx-usecs 128 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
```
+ Substitua `interface` pela interface de rede (adaptador Ethernet) configurada para receber dados. Normalmente, isso ocorre `eth0` porque essa é a interface de rede padrão atribuída a uma instância do EC2.

## Tune Rx ring buffer - afeta a rede
<a name="tune-rx-ring-buffer"></a>

 Aumente o número de entradas de anel para o buffer de anel Rx para evitar quedas ou sobrecargas de pacotes durante conexões intermitentes. Adicione ao crontab para que ele seja configurado corretamente em cada inicialização: 

```
echo "@reboot sudo ethtool -G ${interface} rx 16384 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
```
+ Substitua `interface` pela interface de rede (adaptador Ethernet) configurada para receber dados. Normalmente, isso ocorre `eth0` porque essa é a interface de rede padrão atribuída a uma instância do EC2.
+ Ao configurar uma instância `c6i` familiar, o comando precisa ser modificado para definir o buffer de anel como`8192`, em vez de`16384`.

## Defina os parâmetros de inicialização do kernel (nomenclatura da CPU C-State e da interface) - afeta a CPU e a rede
<a name="tune-cpu-c-state"></a>

 Esses parâmetros de inicialização do kernel evitam a inatividade da CPU por meio da configuração. `intel_idle.max_cstate=1 processor.max_cstate=1 max_cstate=1` A inatividade da CPU pode causar a perda de pacotes no início de um contato. Os parâmetros também incluem`net.ifnames=0 biosdevname=0`, que renomeiam a interface de rede do receptor para`eth0`. Assim como as outras etapas de ajuste deste capítulo, esses parâmetros entram em vigor na reinicialização descrita em[Reinicializar](#reboot). Você pode aplicá-las em qualquer ordem em relação às outras seções. 

 Use `grubby` para definir os argumentos do kernel. Isso funciona tanto no Amazon Linux 2023 (UEFI) quanto no Amazon Linux 2 porque `grubby` gerencia a configuração do bootloader diretamente em 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**  
 O `net.ifnames=0` argumento renomeia a interface de rede para `eth0` na próxima inicialização. As outras seções de ajuste e o destino da configuração do agente`eth0`, portanto, aplicar esses parâmetros e reinicializar é o caminho recomendado. Se você optar por não aplicar esses parâmetros, a interface manterá seu nome padrão (por exemplo, `ens5` no Amazon Linux 2023). Nesse caso, substitua o nome real da interface — encontrado ao executar `ip link show` — em todos os lugares usados neste guia`eth0`. 

## Reservar portas de entrada - impacta a rede
<a name="reserve-ingress-ports"></a>

 Reserve todas as portas no intervalo de portas do endereço de entrada de `AwsGroundStationAgentEndpoint` para evitar conflitos com o uso do kernel. O conflito de uso da porta levará à falha no contato e na entrega de dados. 

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

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

Depois que todos os ajustes forem aplicados com êxito, reinicialize a instância para que os ajustes entrem em vigor.

```
sudo reboot
```

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

 Esta seção determina os valores de parâmetros recomendados para uso na seção Ajustar interrupções de hardware e filas de recebimento: impactam a CPU e a rede. 


| Família | Tipo de instância | ${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  | 