Otimização do desempenho da rede em instâncias do Windows - Amazon Elastic Compute Cloud

Otimização do desempenho da rede em instâncias do Windows

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 afinidade de CPU RSS

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. ENIs 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 todos os ENIs, a fim de evitar a contenção com vários componentes do sistema.

O Windows reconhece o hyper-thread e garantirá que as filas RSS de uma única 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 ENI dependendo da workload esperada da ENI (ou seja, uma ENI de rede administrativa de baixo volume pode não precisar 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 há três ENIs em uma instância de 72 vCPUs com 2 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 uma com um número diferente de vCPUs, você deverá reavaliar a configuração RSS para cada ENI 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 juntamente com sua configuração RSS da ENI 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.