Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
As máquinas virtuais (VMs) do Azure têm definições de rede predefinidas que podem ser otimizadas para melhorar o débito e a consistência. Este artigo descreve como otimizar o desempenho da rede para VMs Windows e Linux.
Importante
Muitas das otimizações descritas neste artigo (por exemplo, controlo de congestionamento, disciplina de fila, tamanhos de buffer e sintonia de NIC) afetam a forma como o tráfego flui entre sistemas.
Para melhores resultados, aplique estas definições de forma consistente em todas as máquinas virtuais participantes na carga de trabalho, incluindo:
- Sistemas clientes
- Sistemas servidores
Aplicar estas configurações apenas a um subconjunto de máquinas virtuais pode levar a:
- Rendimento inconsistente
- Aumento das retransmissões de pacotes
- Comportamento de congestão subótimo
Valide sempre as alterações ao longo de todo o percurso de dados e teste o desempenho de ponta a ponta.
Máquinas virtuais do Windows
Se a sua VM do Windows oferecer suporte a rede acelerada, habilite esse recurso para uma taxa de transferência ideal. Para obter mais informações, consulte Criar uma VM do Windows com rede acelerada.
Para todas as outras VMs do Windows, o Receive Side Scaling (RSS) pode proporcionar um maior débito máximo do que uma VM sem RSS. O RSS pode estar desativado por defeito. Para verificar se o RSS está ativado e habilitá-lo, siga estes passos:
Verifique se o RSS está ativado para um adaptador de rede usando o comando PowerShell Get-NetAdapterRss . No exemplo seguinte, a saída de
Get-NetAdapterRssmostra que o RSS não está ativado.Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : FalsePara ativar o RSS, introduza o seguinte comando:
Get-NetAdapter | % {Enable-NetAdapterRss -Name $_.Name}Este comando não tem saída. Altera as definições da placa de interface de rede (NIC) e causa perda temporária de conectividade durante cerca de um minuto. Uma caixa de diálogo Reconectando aparece durante a perda de conectividade. A conectividade normalmente é restaurada após a terceira tentativa.
Confirme se o RSS está habilitado na VM inserindo o
Get-NetAdapterRsscomando novamente. Se bem-sucedida, a saída de exemplo a seguir é retornada:Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : True
Máquinas virtuais do Linux
O RSS está ativado por defeito nas máquinas virtuais Linux (VMs) no Azure. Os kernels Linux lançados desde outubro de 2017 incluem opções adicionais de otimização de rede que ajudam as VMs Linux a alcançar maior rendimento.
Habilite a Rede Acelerada do Azure para uma taxa de transferência ideal
O Azure Accelerated Networking pode melhorar significativamente o throughput e reduzir a latência e o jitter. Dependendo do tamanho da VM e da geração da plataforma, o Azure utiliza uma de duas tecnologias: Mellanox, amplamente disponível, e MANA, desenvolvido pela Microsoft.
Kernels otimizados para o Azure
Algumas distribuições, como Ubuntu (Canonical) e SUSE, fornecem kernels ajustados para Azure.
Use o comando seguinte para verificar se está a usar o kernel do Azure, que normalmente inclui azure o nome do kernel.
uname -r
# Sample output for an Azure kernel on an Ubuntu Linux VM
6.8.0-1017-azure
Outras distribuições Linux
A maioria das distribuições modernas inclui grandes melhorias de rede em kernels mais recentes. Verifica a versão do teu kernel e usa a 4.19 ou posterior sempre que possível. Kernels mais recentes incluem melhor comportamento de rede e suportam opções modernas de controlo de congestionamento, como o BBR.
Alcançando velocidades de transferência consistentes em VMs Linux no Azure
As VMs Linux podem apresentar velocidades de transferência inconsistentes, especialmente durante grandes transferências regionais (por exemplo, 1 GB a 50 GB entre a Europa Ocidental e o Oeste dos EUA). As causas comuns incluem núcleos mais antigos, tamanhos predefinidos do buffer e controlo de congestionamento ou definições de disciplina de fila não ajustados.
Para obter um débito mais consistente, aplica a seguinte afinação de base e depois testa as combinações de congestionamento/qdisc para a tua carga de trabalho.
Configuração base do sysctl (copiar/colar)
Aplique as seguintes definições básicas de sysctl:
sudo tee /etc/sysctl.d/99-azure-network-tuning.conf > /dev/null <<'EOF'
# Buffer and memory tuning
# Overall TCP memory pressure thresholds (min, pressure, max pages)
net.ipv4.tcp_mem = 4096 87380 67108864
# Overall UDP memory pressure thresholds (min, pressure, max pages)
net.ipv4.udp_mem = 4096 87380 33554432
# Per-socket TCP read buffer limits (min, default, max bytes)
net.ipv4.tcp_rmem = 4096 87380 67108864
# Per-socket TCP write buffer limits (min, default, max bytes)
net.ipv4.tcp_wmem = 4096 65536 67108864
# Default socket receive buffer size in bytes
net.core.rmem_default = 33554432
# Default socket send buffer size in bytes
net.core.wmem_default = 33554432
# Minimum UDP send buffer per socket in bytes
net.ipv4.udp_wmem_min = 16384
# Minimum UDP receive buffer per socket in bytes
net.ipv4.udp_rmem_min = 16384
# Maximum socket send buffer size in bytes
net.core.wmem_max = 134217728
# Maximum socket receive buffer size in bytes
net.core.rmem_max = 134217728
# Busy polling time in microseconds for low-latency packet receive
net.core.busy_poll = 50
# Busy read time in microseconds when polling sockets
net.core.busy_read = 50
# Extra TCP and networking settings
# Enable TCP timestamps for RTT measurement and PAWS protection
net.ipv4.tcp_timestamps = 1
# Allow safer TIME-WAIT socket reuse for outbound connections
net.ipv4.tcp_tw_reuse = 1
# Expand available ephemeral source port range
net.ipv4.ip_local_port_range = 1024 65535
# Increase packets processed per NAPI polling cycle
net.core.netdev_budget = 1000
# Increase per-socket ancillary/option memory limit in bytes
net.core.optmem_max = 65535
# Disable F-RTO (typically unnecessary on stable wired paths)
net.ipv4.tcp_frto = 0
# Increase maximum listen backlog for pending connections
net.core.somaxconn = 32768
# Increase ingress packet backlog queue length
net.core.netdev_max_backlog = 32768
# Increase per-CPU packet processing quota per softirq cycle
net.core.dev_weight = 64
EOF
sudo sysctl --system
Controlo de congestão e testes qdisc (sysctl)
Diferentes cargas de trabalho comportam-se de forma diferente. Teste estas combinações e fique com aquela que der os melhores resultados para a sua latência, débito e perfil de retransmissão.
-
BBR + FQ (frequentemente um padrão forte para transferências de alto rendimento e de longa distância)
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr sudo sysctl -w net.core.default_qdisc=fq -
BBR + PFIFO_FAST (útil para comparar o comportamento da fila sob tráfego em rajadas ou misto)
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr sudo sysctl -w net.core.default_qdisc=pfifo_fast -
CUBIC + PFIFO_FAST (linha base legada comum para compatibilidade e comparação)
sudo sysctl -w net.ipv4.tcp_congestion_control=cubic sudo sysctl -w net.core.default_qdisc=pfifo_fast
Meça cada opção com tráfego representativo e depois use a combinação com melhor desempenho para o seu ambiente.
Nota
pfifo_fast disponibilidade pode variar dependendo da distro/do kernel. Se não estiver disponível, use a opção qdisc suportada mais próxima no seu ambiente e continue a fazer benchmarks.
Regra UDEV para buffers de anel de NIC (TX/RX)
Crie uma regra udev em /etc/udev/rules.d/99-azure-ring-buffer.rules para aplicar definições do buffer circular às interfaces de rede:
Utilize rx 4096 tx 4096 para interfaces de Rede Acelerada (hv_pci) e mantenha rx 1024 tx 1024 para interfaces hv_netvsc sintéticas.
Se preferir uma abordagem interativa para a afinação do ring buffer, também pode usar esta ferramenta auxiliar: Azure Linux NIC setup (bash).
Nota
Esta ferramenta do GitHub é um auxiliar opcional e não faz parte da documentação do produto Microsoft Learn. Revê os scripts e testa as alterações num ambiente de não produção antes de uma implementação alargada.
# Setup Accelerated Interface ring buffers (Mellanox / Mana)
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 4096 tx 4096"
# 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"
Regra UDEV para comprimento da fila de transmissão da NIC
Crie a seguinte regra em /etc/udev/rules.d/99-azure-txqueue-len.rules para aumentar o tamanho da fila de transmissão:
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="eth*", ATTR{tx_queue_len}="10000"
Comportamento de dupla interface e efeitos secundários do SR-IOV
Em redes de alto desempenho Linux, Azure utiliza SR-IOV (por exemplo, com drivers Mellanox como mlx4 ou mlx5). Neste modelo, pode ver tanto uma interface sintética como uma interface de função virtual (VF) para o mesmo percurso de rede da VM.
Saiba mais.
Este design é esperado, mas pode criar confusão durante a afinação e resolução de problemas se ambas as interfaces forem tratadas como caminhos de dados independentes.
Os possíveis efeitos secundários incluem:
- Resultados de benchmarks inconsistentes quando as definições são aplicadas a uma interface mas o tráfego usa a outra.
- Picos inesperados de latência ou retransmissões durante o failover entre caminhos sintéticos e VF.
- Diagnósticos erróneos se os contadores e as capturas de pacotes forem obtidos a partir da interface errada.
Para reduzir o risco:
- Valide qual interface encaminha o tráfego da sua carga de trabalho antes de efetuar ajustes.
- Mantenha a configuração do udev e do sysctl consistente com a sua estratégia para as interfaces.
- Volte a testar a taxa de transferência e a latência após reiniciar, atualizações de controladores ou alterações ao estado da rede acelerada.
Notas adicionais
Os administradores de sistemas podem implementar estas recomendações editando ficheiros de configuração como /etc/sysctl.d/, /etc/modules-load.d/, e /etc/udev/rules.d/. Reveja cuidadosamente as atualizações do kernel e dos drivers para evitar regressões.
Para mais informações sobre configurações específicas e resolução de problemas, consulte a documentação do Azure sobre desempenho em rede.
Conteúdo relacionado
- Implante VMs próximas umas das outras para baixa latência com grupos de posicionamento de proximidade.
- Veja o resultado otimizado com testes de largura de banda/taxa de transferência para o seu cenário.
- Leia sobre como a largura de banda é alocada para máquinas virtuais.
- Leia as perguntas frequentes do Rede Virtual do Azure.