Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
VMs (Máquinas Virtuais) do Azure têm configurações de rede padrão que podem ser mais otimizadas para taxa de transferência de rede. Este artigo descreve como otimizar a taxa de transferência de rede para VMs do Windows e do Linux, incluindo as principais distribuições como o Ubuntu e o Red Hat.
Máquinas virtuais do Windows
Se a máquina virtual do Windows der suporte à rede acelerada, habilite esse recurso para a taxa de transferência ideal. Para obter mais informações, confira Criar uma VM do Windows com rede acelerada.
Para todas as outras VMs do Windows, usar RSS (Receive Side Scaling) pode alcançar uma taxa de transferência máxima maior que uma VM sem RSS. O RSS pode ser desabilitado por padrão em uma VM do Windows. Para verificar se o RSS está habilitado e habilitá-lo, siga estas etapas:
Veja se o RSS está habilitado para um adaptador de rede com o comando do PowerShell Get-NetAdapterRss. Na saída do exemplo seguinte retornada do
Get-NetAdapterRss, o RSS não está habilitado.Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : FalsePara habilitar o RSS, insira o seguinte comando:
Get-NetAdapter | % {Enable-NetAdapterRss -Name $_.Name}Esse comando não tem nenhuma saída. O comando altera as configurações da NIC (placa de adaptador de rede). Isso causa perda temporária de conectividade por cerca de um minuto. Aparece uma caixa de diálogo Reconectando durante a perda de conectividade. Normalmente, a conectividade for restaurada após a terceira tentativa.
Confirme se o RSS está habilitado na VM inserindo o
Get-NetAdapterRsscomando novamente. Se for bem-sucedido, será retornada a seguinte saída de exemplo:Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : True
Máquinas virtuais do Linux
O RSS é sempre habilitado por padrão em uma VM (Máquina Virtual) linux no Azure. Kernels do Linux liberados desde outubro de 2017 incluem novas opções de otimização de rede que permitem que uma VM Linux obtenha maior taxa de transferência de rede.
Habilitar a Rede Acelerada do Azure para uma taxa de transferência ideal
O Azure fornece rede acelerada que pode realmente melhorar o desempenho da rede, latência e tremulação. Atualmente, há duas tecnologias diferentes que são usadas dependendo do tamanho da máquina virtual, Mellanox , que é amplamente disponível e MANA , que é desenvolvida pela Microsoft.
Kernels Ajustados do Azure
Algumas distribuições, como Ubuntu (Canonical) e SUSE, têm kernels ajustados para o Azure.
Use o comando a seguir para garantir que você esteja usando o kernel do Azure, que geralmente tem a azure cadeia de caracteres na nomenclatura.
uname -r
#sample output on Azure kernel on a Ubuntu Linux VM
6.8.0-1017-azure
Outras distribuições do Linux
A maioria das distribuições modernas tem melhorias significativas com núcleos mais recentes. Verifique a versão atual do kernel para verificar se você está executando um kernel mais recente que 4.19, que inclui algumas melhorias excelentes na rede, por exemplo, suporte para o BBR Congestion-Based Congestion Control.
Obtendo velocidades de transferência consistentes em VMs do Linux no Azure
As VMs do Linux geralmente enfrentam problemas de desempenho de rede, especialmente ao transferir arquivos grandes (de 1 GB a 50 GB) entre regiões, como Europa Ocidental e Oeste dos EUA. Esses problemas são causados por versões de kernel mais antigas, bem como configurações de kernel padrão, configurações de buffer de rede padrão e algoritmos de controle de congestionamento padrão, que resultam em pacotes atrasados, taxa de transferência limitada e uso ineficiente de recursos.
Para obter um desempenho de rede consistente, considere implementar as seguintes otimizações que são comprovadamente eficazes em muitas situações no Azure:
-
Configurações de buffer de rede: ajuste os parâmetros do kernel para maximizar os buffers de memória de leitura e gravação. Adicione estas configurações a
/etc/sysctl.d/99-azure-network-buffers.conf:
net.ipv4.tcp_mem = 4096 87380 67108864
net.ipv4.udp_mem = 4096 87380 33554432
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.core.rmem_default = 33554432
net.core.wmem_default = 33554432
net.ipv4.udp_wmem_min = 16384
net.ipv4.udp_rmem_min = 16384
net.core.wmem_max = 134217728
net.core.rmem_max = 134217728
net.core.busy_poll = 50
net.core.busy_read = 50
-
Congestion-Based Controle de congestionamento para kernels 4.19 e posteriores: Habilitar o controle de congestionamento BBR (Bottleneck Bandwidth and Round-trip propagation time) geralmente pode resultar em uma melhor taxa de transferência. Adicione essa configuração a
/etc/sysctl.d/99-azure-congestion-control.conf:
net.ipv4.tcp_congestion_control = bbr
-
Parâmetros TCP extras que geralmente ajudarão com melhor consistência, taxa de transferência: Adicione estas configurações a
/etc/sysctl.d/99-azure-network-extras.conf:
# For deployments where the Linux VM is BEHIND an Azure Load Balancer, timestamps MUST be set to 0
net.ipv4.tcp_timestamps = 1
# Reuse does require tcp_timestamps to be enabled. If tcp_timestamps are disabled because of load balancers, you should set reuse to 2.
net.ipv4.tcp_tw_reuse = 1
# Allowed local port range. This will increase the number of locally available ports (source ports)
net.ipv4.ip_local_port_range = 1024 65535
# Maximum number of packets taken from all interfaces in one polling cycle (NAPI poll). In one polling cycle interfaces which are # registered to polling are probed in a round-robin manner.
net.core.netdev_budget = 1000
# For high-performance environments, it's recommended to increase from the default 20KB to 65KB, in some extreme cases, for environments that support 100G+ networking, you can
# increase it to 1048576
net.core.optmem_max = 65535
# F-RTO is not recommended on wired networks.
net.ipv4.tcp_frto = 0
# Increase the number of incoming connections / number of connections backlog
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768
net.core.dev_weight = 64
-
Disciplina de fila (qdisc): o processamento de pacotes no Azure é aprimorado definindo o qdisc padrão como
fq. Adicione essa configuração a/etc/sysctl.d/99-azure-qdisc.conf:
net.core.default_qdisc = fq
-
Otimizar buffers de anel NIC para TX/RX: crie uma regra udev em
/etc/udev/rules.d/99-azure-ring-buffer.rulespara garantir que elas sejam aplicadas a interfaces de rede:
# Setup Accelerated Interface ring buffers (Mellanox / Mana)
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 1024 tx 1024"
# Setup Synthetic interface ring buffers (hv_netvsc)
SUBSYSTEM=="net", DRIVERS=="hv_netvsc*", ACTION=="add", RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 1024 tx 1024"
- Crie uma regra
/etc/udev/rules.d/99-azure-qdisc.rulesudev para garantir que o qdisc seja aplicado a interfaces de rede:
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="enP*", PROGRAM="/sbin/tc qdisc replace dev \$env{INTERFACE} root noqueue"
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="eth*", PROGRAM="/sbin/tc qdisc replace dev \$env{INTERFACE} root fq“
-
Agendamento de solicitação de interrupção (IRQ): dependendo da carga de trabalho, talvez você queira restringir o serviço irqbalance de agendar IRQs em determinados nós. Ao usar IRQBalance, você pode atualizar
/etc/default/irqbalancepara especificar quais CPUs não devem ter IRQs agendadas, você precisará determinar a máscara que excluirá as CPUs que precisam de exclusão.
Mais informações sobre como calcular a máscara disponível aqui.
O exemplo a seguir pressupõe que você deseja excluir CPUs 8-15
IRQBALANCE_BANNED_CPULIST=0000ff00
-
Regras de UDEV: adicione regras para otimizar o comprimento da fila e gerenciar sinalizadores de dispositivo com eficiência. Crie a seguinte regra em
/etc/udev/rules.d/99-azure-txqueue-len.rules:
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="eth*", ATTR{tx_queue_len}="10000“
Para pacotes atrasados duas vezes
Quando se trata de desempenho de rede no Linux, usamos SR-IOV com drivers Mellanox (mlx4 ou mlx5). Algo específico do Azure é que isso cria duas interfaces: uma interface sintética e uma interface virtual. Saiba mais.
Notas adicionais
Os administradores do sistema podem implementar essas soluções editando arquivos de configuração, como /etc/sysctl.d/, /etc/modules-load.d/e /etc/udev/rules.d/. Verifique se as atualizações do driver de kernel e as configurações sistemadas são revisadas para possíveis regressões.
Para obter mais informações sobre configurações específicas e solução de problemas, consulte a documentação do Azure sobre o desempenho de rede.
Conteúdo relacionado
- Implantar VMs próximas umas às outras para baixa latência com o grupo de posicionamento por proximidade.
- Veja o resultado otimizado com o teste de Largura de Banda/Taxa de Transferência para o seu cenário.
- Leia mais sobre como a largura de banda é alocada a máquinas virtuais.
- Saiba mais com as Perguntas frequentes sobre a Rede Virtual do Microsoft Azure.