Otimizar desempenho da rede em instâncias do Windows do EC2
Para obter o máximo desempenho da rede nas instâncias do Windows com redes aperfeiçoadas, pode ser necessário modificar a configuração padrão do sistema operacional. Recomendamos as seguintes alterações de configuração para aplicações que exigem alta performance de rede. Outras otimizações (como ativar o descarregamento de soma de verificação e habilitar RSS, por exemplo) já estão configuradas nas AMIs oficiais do Windows.
nota
O descarregamento do TCP chimney deve ser desabilitado na maioria dos casos de uso e se tornou obsoleto a partir do Windows Server 2016.
Além dessas otimizações do sistema operacional, você também deve considerar a unidade de transmissão máxima (MTU - maximum transmission unit) de seu tráfego de rede e ajustá-la de acordo com sua workload e arquitetura de rede. Para obter mais informações, consulte Unidade de transmissão máxima (MTU) de rede para a instância do EC2.
A AWS mede regularmente as latências médias de ida e volta entre instâncias iniciadas em um grupo de posicionamento de cluster de 50 us e latência final de 200 us no percentil 99,9. Se suas aplicações exigirem baixas latências de forma consistente, recomendamos usar a versão mais recente dos drivers ENA em instâncias de performance fixa criadas no sistema Nitro.
Configurar a afinidade de CPU do Receive Side Scaling
O Receive Side Scaling (RSS) é usado para distribuir a carga da CPU do tráfego de rede em vários processadores. Por padrão, as AMIs oficiais do Amazon Windows são configuradas com RSS ativado. Interfaces de rede elástica do ENA fornecem até oito filas RSS. Com a definição de afinidade de CPU para filas RSS, bem como para outros processos do sistema, é possível distribuir a carga de CPU pelos sistemas com vários núcleos, permitindo que mais tráfego de rede seja processado. Em tipos de instância com mais de 16 vCPUs, recomendamos que você use o cmdlet Set-NetAdapterRSS
do PowerShell, que exclui manualmente o processador de inicialização (processador lógico 0 e 1 quando o hyper-threading está ativado) da configuração de RSS para todas as interfaces de rede elástica, para evitar a contenção com vários componentes do sistema.
O Windows reconhece o hyper-thread e garante que as filas RSS de uma única placa de interface de rede (NIC) sejam sempre colocadas em diferentes núcleos físicos. Portanto, a menos que o hyper-threading esteja desabilitado, para evitar completamente a contenção com outras NICs, propague a configuração RSS de cada NIC entre um intervalo de 16 processadores lógicos. O cmdlet Set-NetAdapterRss
permite que você defina o intervalo por NIC de processadores lógicos válidos definindo os valores de BaseProcessorGroup, BaseProcessorNumber, MaxProcessingGroup, MaxProcessorNumber e NumaNode (opcional). Se não houver núcleos físicos suficientes para eliminar completamente a contenção entre NICs, minimize os intervalos de sobreposição ou reduza o número de processadores lógicos nos intervalos de interface de rede elástica, dependendo da workload esperada da interface (ou seja, uma interface de rede administrativa de baixo volume talvez não precise de tantas filas RSS atribuídas). Além disso, como observado anteriormente, diversos componentes devem ser executados na CPU 0 e, por isso, recomendamos a exclusão em todas as configurações RSS quando houver vCPUs suficientes disponíveis.
Por exemplo, quando existem três interfaces de rede elástica em uma instância de 72 vCPUs com dois nós NUMA com o hyper-threading habilitado, os comandos a seguir distribuem a carga de rede entre as duas CPUs sem sobreposição e impedem completamente o uso do núcleo 0.
Set-NetAdapterRss -Name NIC1 -BaseProcessorGroup 0 -BaseProcessorNumber 2 -MaxProcessorNumber 16 Set-NetAdapterRss -Name NIC2 -BaseProcessorGroup 1 -BaseProcessorNumber 0 -MaxProcessorNumber 14 Set-NetAdapterRss -Name NIC3 -BaseProcessorGroup 1 -BaseProcessorNumber 16 -MaxProcessorNumber 30
Observe que essas configurações são persistentes para cada adaptador de rede. Se uma instância for redimensionada para outra com um número diferente de vCPUs, você deverá reavaliar a configuração de RSS para cada interface de rede elástica habilitada. A documentação completa da Microsoft para o cmdlet Set-NetAdapterRss
pode ser encontrada aqui: https://docs.microsoft.com/en-us/powershell/module/netadapter/set-netadapterrss
Observação especial para workloads SQL: também recomendamos que você revise suas configurações de afinidade de thread de E/S com sua configuração RSS da interface de rede elástica para minimizar a contenção de E/S e de rede para as mesmas CPUs. Consulte Opção de configuração do servidor de máscara de afinidade