Considerações sobre o Nitro System para ajuste de performance - Amazon Elastic Compute Cloud

Considerações sobre o Nitro System para ajuste de performance

O Sistema Nitro é uma coleção de hardware e componentes de software desenvolvidos pela AWS que permitem alta performance, alta disponibilidade e alta segurança. O Nitro System fornece funcionalidades semelhantes às funcionalidades do bare metal que eliminam a sobrecarga de virtualização e são compatíveis com workloads que requerem acesso total ao hardware de host. Para obter informações mais detalhadas, consulte AWS Nitro System.

Todos os tipos de instância do EC2 da geração atual executam o processamento de pacotes de rede em cartões Nitro do EC2. Este tópico aborda a manipulação de pacotes de alto nível no cartão Nitro, os aspectos conhecidos da arquitetura e da configuração de rede que afetam a performance da manipulação de pacotes e as ações você pode executar para atingir a performance máxima para as instâncias baseadas no Nitro.

Os cartões Nitro lidam com todas as interfaces de entrada e saída (E/S), como aquelas necessárias para as nuvens privadas virtuais (VPCs). Para todos os componentes que enviam ou recebem informações pela rede, os cartões Nitro atuam como um dispositivo de computação independente para o tráfego de E/S que é fisicamente separado da placa principal do sistema na qual as workloads do cliente são executadas.

Fluxo de pacotes de rede em cartões Nitro

As instâncias do EC2 desenvolvidas no Nitro System têm funcionalidades de aceleração de hardware que facilitam um processamento de pacotes mais rápido, conforme medido pelas taxas de throughput de pacotes por segundo (PPS). Quando um cartão Nitro executa a avaliação inicial para um novo fluxo, ele salva informações semelhantes para todos os pacotes no fluxo, como os grupos de segurança, as listas de controle de acesso e as entradas da tabela de rotas. Ao processar pacotes adicionais para o mesmo fluxo, ele pode usar as informações salvas para reduzir a sobrecarga desses pacotes.

A taxa de conexão é medida pela métrica de conexões por segundo (CPS). Cada nova conexão requer uma sobrecarga de processamento adicional que deve ser considerada nas estimativas de capacidade para a workload. É importante considerar as métricas de CPS e de PPS ao projetar as workloads.

Como uma conexão é estabelecida

Quando uma conexão é estabelecida entre uma instância baseada no Nitro e outro endpoint, o cartão Nitro avalia o fluxo completo do primeiro pacote enviado ou recebido entre os dois endpoints. Em geral não é necessária uma reavaliação completa para pacotes subsequentes do mesmo fluxo. No entanto, existem exceções. Para obter mais informações sobre as exceções, consulte Pacotes que não usam a aceleração de hardware.

As propriedades apresentadas a seguir definem os dois endpoints e o fluxo de pacotes entre eles. Essas cinco propriedades em conjunto são conhecidas como um fluxo de cinco tuplas.

  • IP de origem

  • Porta de origem

  • IP de destino

  • Porta de destino

  • Protocolo de comunicação

A direção do fluxo de pacotes é conhecida como ingress (entrada) e egress (saída). As descrições de alto nível apresentadas a seguir resumem o fluxo de pacotes de rede de ponta a ponta.

  • Ingress: quando um cartão Nitro lida com um pacote de rede de entrada, ele avalia o pacote em relação a regras de firewall com estado e a listas de controle de acesso. Ele rastreia a conexão, realiza a medição dela e executa outras ações, conforme aplicável. Em seguida, ele encaminha o pacote ao destino na CPU de host.

  • Egress: quando um cartão Nitro lida com um pacote de rede de saída, ele procura o destino da interface remota, avalia diversas funções da VPC, aplica limites de taxa e executa outras ações aplicáveis. Em seguida, ele encaminha o pacote para o destino do próximo salto na rede.

Projetar sua rede para desempenho ideal

Para aproveitar as funcionalidades de performance do Nitro System, é necessário compreender quais são as suas necessidades de processamento de rede e como elas afetam a workload dos seus recursos do Nitro. Em seguida, será possível realizar um projeto para obtenção de uma performance ideal para seu cenário de rede. As definições de infraestrutura, design e configuração da workload da aplicação podem afetar o processamento de pacotes e as taxas de conexão. Por exemplo, se a aplicação tiver uma alta taxa de estabelecimento de conexão, como um serviço de DNS, um firewall ou um roteador virtual, ela terá menos oportunidades de aproveitar a aceleração de hardware que ocorre somente após o estabelecimento da conexão.

É possível definir as configurações da aplicação e da infraestrutura para simplificar as workloads e aprimorar a performance da rede. No entanto, nem todos os pacotes que estão qualificados para a aceleração. O Nitro System utiliza todo o fluxo de rede para novas conexões e para pacotes que não estão qualificados para a aceleração.

O restante desta seção se concentrará nas considerações de projeto para a aplicação e para a infraestrutura com a finalidade de ajudar a garantir que os pacotes fluam dentro do caminho com aceleração, tanto quanto possível.

Considerações de projeto de rede para o Nitro System

Ao configurar o tráfego de rede para a instância, existem muitos aspectos a serem considerados que podem afetar a performance de PPS. Depois que um fluxo é estabelecido, a maioria dos pacotes que entram ou saem regularmente está qualificado para a aceleração. No entanto, existem exceções para garantir que os projetos de infraestrutura e os fluxos de pacotes continuem atendendo aos padrões dos protocolos.

Para obter a melhor performance do cartão Nitro, é necessário considerar com atenção os prós e os contras dos detalhes de configuração apresentados a seguir para a infraestrutura e para as aplicações.

Considerações sobre infraestrutura

A configuração da infraestrutura pode afetar o fluxo de pacotes e a eficiência do processamento. A lista apresentada a seguir inclui algumas considerações importantes.

Configuração da interface de rede com assimetria

Os grupos de segurança usam o rastreamento de conexão para rastrear informações sobre o tráfego que flui de e para a instância. O roteamento assimétrico, em que o tráfego entra em uma instância por meio de uma interface de rede e sai por meio de uma interface de rede diferente, pode reduzir a performance máxima que uma instância poderá alcançar se os fluxos forem rastreados. Para obter mais informações sobre o rastreamento de conexões para grupos de segurança, conexões não rastreadas e conexões rastreadas automaticamente, consulte Rastreamento de conexão de grupo de segurança do Amazon EC2.

Drivers de rede

Os drivers de rede são atualizados e lançados regularmente. A performance poderá ser significativamente prejudicada se os drivers estiverem desatualizados. Mantenha os drivers atualizados para garantir que você tenha os patches mais recentes e possa aproveitar as vantagens fornecidas pelos aprimoramentos de performance, como o recurso de caminho com aceleração que está disponível somente para a última geração de drivers. Os drivers anteriores não são compatíveis com o recurso de caminho com aceleração.

Para aproveitar o recurso de caminho com aceleração, recomendamos instalar o driver do ENA mais recente nas instâncias.

Instâncias do Linux: driver do ENA para o Linux na versão 2.2.9 ou em versões posteriores. Para instalar ou atualizar o driver do ENA para Linux usando o repositório Amazon Drivers no GitHub, consulte a seção Driver compilation do arquivo “leia-me”.

Instâncias do Windows: driver do ENA para o Windows na versão 2.0.0 ou em versões posteriores. Para instalar ou atualizar o driver do ENA para o Windows, consulte Instalar o driver do ENA em instâncias do Windows do EC2.

Distância entre os endpoints

Uma conexão entre duas instâncias na mesma zona de disponibilidade pode processar mais pacotes por segundo do que uma conexão entre regiões, como resultado do janelamento de TCP na camada da aplicação, que define quantos dados podem estar em trânsito a qualquer momento. As longas distâncias entre as instâncias aumentam a latência e diminuem o número de pacotes que os endpoints podem processar.

Considerações sobre o projeto da aplicação

Existem aspectos do projeto e da configuração da aplicação que podem afetar a eficiência do processamento. A lista apresentada a seguir inclui algumas considerações importantes.

Tamanho do pacote

Os pacotes com tamanhos maiores podem aumentar o throughput para os dados que uma instância pode enviar e receber na rede. Os pacotes com tamanhos menores podem aumentar a taxa de processamento de pacotes, mas podem reduzir a largura de banda máxima alcançada quando o número de pacotes excede as permissões de PPS.

Se o tamanho de um pacote exceder a Unidade Máxima de Transmissão (MTU) de um salto de rede, um roteador ao longo do caminho poderá fragmentá-lo. Os fragmentos de pacotes resultantes são considerados exceções e são processados ​​na taxa padrão (não acelerada). Isso pode causar variações na performance. O Amazon EC2 oferece suporte a frames jumbo de 9.001 bytes, mas não são todos os serviços que disponibilizam esse suporte. Recomendamos avaliar a topologia ao configurar a MTU.

Compensações de protocolo

Os protocolos confiáveis, ​​como o TCP, têm mais sobrecarga do que os protocolos não confiáveis, ​​como o UDP. A menor sobrecarga e o processamento de rede simplificado para o protocolo de transporte UDP podem resultar em uma taxa de PPS mais alta, mas às custas da entrega confiável de pacotes. Se a entrega confiável de pacotes não for crítica para a aplicação, o protocolo UDP pode ser uma boa opção.

Microexpansão

A Microexpansão ocorre quando o tráfego excede as permissões durante breves períodos de tempo, em vez de ser distribuído uniformemente. Isso costuma acontecer em uma escala de microssegundos.

Por exemplo, suponhamos que você tenha uma instância que pode enviar até 10 Gbps e a aplicação envie 10 Gb completos em meio segundo. Essa microexpansão excede o permitido durante a primeira metade do segundo e não deixa nada para o restante da segunda. Mesmo que você tenha enviado 10 Gb no período de um segundo, as permissões na primeira metade do segundo podem resultar em pacotes enfileirados ou descartados.

É possível usar um programador de rede, como o Traffic Control do Linux, para ajudar no controle do throughput e evitar provocar pacotes enfileirados ou descartados como resultado de uma microexpansão.

Número de fluxos

Um único fluxo é limitado a 5 Gbps, a menos que esteja em um grupo de posicionamento de cluster que oferece suporte para até 10 Gbps ou que use o ENA Express, que oferece suporte para até 25 Gbps.

Da mesma forma que um cartão Nitro pode processar mais pacotes em vários fluxos, em vez de usar um único fluxo. Para atingir a taxa máxima de processamento de pacotes por instância, recomendamos, no mínimo, cem fluxos em instâncias com largura de banda agregada de 100 Gbps ou superior. À medida que as funcionalidades agregadas de largura de banda aumentam, o número de fluxos necessários para atingir as taxas de processamento máximas também aumenta. A avaliação comparativa ajudará você a definir qual configuração é necessária para atingir as taxas máximas em sua rede.

Número de filas do Adaptador de Rede Elástica (ENA)

Por padrão, o número máximo de filas do ENA é alocado para uma interface de rede com base no tamanho e no tipo da instância. A redução da contagem de filas pode reduzir a taxa máxima de PPS alcançável. Recomendamos usar a alocação de fila padrão para obter a melhor performance.

Para o Linux, uma interface de rede é configurada com o máximo por padrão. Para as aplicações baseadas no Data Plane Development Kit (DPDK), recomendamos configurar o número máximo de filas disponíveis.

Sobrecarga no processamento de recursos

Os recursos, como o Espelhamento de Tráfego e o ENA Express, podem adicionar mais sobrecarga de processamento, o que pode reduzir a performance absoluta do processamento de pacotes. É possível limitar o uso de recursos ou desativá-los para aumentar as taxas de processamento de pacotes.

Rastreamento de conexão para manutenção do estado

Os grupos de segurança usam o rastreamento de conexão para armazenar as informações sobre o tráfego de entrada e de saída da instância. O rastreamento de conexão aplica regras a cada fluxo de tráfego de rede individual para determinar se o tráfego será permitido ou negado. O cartão Nitro usa o rastreamento de fluxo para realizar a manutenção do estado para o fluxo. À medida que mais regras do grupo de segurança são aplicadas, mais trabalho é necessário para avaliar o fluxo.

nota

Não são todos os fluxos de tráfego de rede que são rastreados. Se uma regra do grupo de segurança estiver configurada com Conexões não rastreadas, nenhum trabalho adicional será necessário, exceto para conexões que são rastreadas automaticamente a fim de garantir o roteamento simétrico quando houver vários caminhos de resposta válidos.

Pacotes que não usam a aceleração de hardware

Não são todos os pacotes que podem aproveitar a aceleração de hardware. O tratamento dessas exceções envolve alguma sobrecarga de processamento necessária para garantir a integridade dos fluxos de rede. Os fluxos de rede devem atender aos padrões de protocolo com confiabilidade, estar em conformidade com as alterações no projeto da VPC e rotear pacotes somente para destinos permitidos. No entanto, a sobrecarga reduz a performance.

Fragmentos de pacote

Conforme mencionado em Considerações da aplicação, os fragmentos de pacotes resultantes de pacotes que excedem a MTU da rede são tratados como exceções e não podem aproveitar a aceleração de hardware.

Conexões ociosas

Quando uma conexão não tiver atividade por um período, mesmo que não tenha atingido o tempo limite, o sistema pode deixar de priorizá-la. Assim, se os dados forem recebidos depois que a conexão deixar de ser priorizada, o sistema precisará tratá-los como uma exceção para se reconectar.

Para gerenciar as conexões, é possível usar tempos limite de rastreamento de conexão para fechar as conexões ociosas. Além disso, é possível usar a opção keep-alive do TCP para manter as conexões ociosas abertas. Para ter mais informações, consulte Tempo limite de rastreamento de conexão ociosa.

Mutação da VPC

As atualizações em grupos de segurança, tabelas de rotas e listas de controle de acesso precisam ser avaliadas novamente no caminho de processamento para garantir que as entradas de rota e as regras do grupo de segurança ainda sejam aplicadas conforme o esperado.

Fluxos ICMP

O Internet Control Message Protocol (ICMP) é um protocolo de camada de rede que os dispositivos de rede usam para diagnosticar problemas de comunicação de rede. Esses pacotes sempre usam o fluxo completo.

Maximização da performance da rede no Nitro System

Antes de tomar qualquer decisão em relação ao projeto ou ajustar quaisquer configurações de rede na instância, recomendamos que você siga etapas apresentadas a seguir para obter o melhor resultado:

  1. Compreenda os prós e os contras das ações que você pode executar para aprimorar a performance ao analisar as Considerações de projeto de rede para o Nitro System.

    Para obter mais considerações e as práticas recomendadas para a configuração da instância no Linux, consulte ENA Linux Driver Best Practices and Performance Optimization Guide no GitHub.

  2. Faça uma avaliação comparativa das workloads com a contagem máxima de fluxo ativo para definir uma referência para a performance da aplicação. Com uma referência para a performance, é possível testar variações nas configurações ou no projeto da aplicação para compreender quais considerações terão maior impacto, sobretudo se você planeja aumentar a escala verticalmente ou aumentar a escala horizontalmente.

A seguinte lista contém ações que podem ser executadas para ajustar a performance de PPS, conforme as necessidades do sistema.

  • Reduzir a distância física entre duas instâncias. Quando as instâncias de envio e de recebimento estão localizadas na mesma zona de disponibilidade ou usam grupos de posicionamento de cluster, é possível reduzir o número de saltos que um pacote precisa realizar para se deslocar de um endpoint para outro.

  • Usar Conexões não rastreadas.

  • Usar o protocolo UDP para o tráfego de rede.

  • Para instâncias do EC2 com largura de banda agregada de 100 Gbps ou mais, distribuir a workload em cem ou mais fluxos individuais para distribuir o trabalho uniformemente pelo cartão Nitro.

Monitoramento da performance em instâncias do Linux

É possível usar métricas do plug-in Ethtool em instâncias do Linux para monitorar indicadores de performance de rede de instâncias, como a largura de banda, a taxa de pacotes e o rastreamento de conexão. Para ter mais informações, consulte Monitorar o desempenho de rede de instâncias do EC2.