Compartilhar via


Configurar a MTU (Unidade Máxima de Transmissão) para máquinas virtuais no Azure

A MTU (Unidade Máxima de Transmissão) é uma medida que representa o maior tamanho de quadro Ethernet (pacote) transmitido por um dispositivo ou uma interface de rede. Se um pacote exceder o maior tamanho aceito pelo dispositivo, ele será fragmentado em diversos pacotes menores e será remontado no destino.

A fragmentação e a remontagem podem introduzir problemas de desempenho e ordenação, o que resulta em uma experiência abaixo do ideal. Otimizar a MTU para sua solução pode fornecer benefícios de desempenho de largura de banda de rede ao reduzir o número total de pacotes necessários para enviar um conjunto de dados. A configuração de tamanhos maiores de MTU pode potencialmente melhorar a taxa de transferência da rede, pois reduz o número de pacotes e a sobrecarga de cabeçalho necessários para enviar um conjunto de dados.

A MTU é uma definição configurável no sistema operacional de uma máquina virtual. A configuração padrão das MTUs no Azure é 1500 bytes.

As VMs no Azure só dão suporte a MTUs maiores que o padrão de 1.500 bytes para o tráfego que permanece na rede virtual.

A seguinte tabela mostra o maior tamanho de MTU com suporte nas interfaces de rede do Azure disponíveis no Azure:

Sistema operacional Interface de rede Maior tamanho de MTU para o tráfego entre redes virtuais
Windows Server Mellanox Cx-3, Cx-4, Cx-5 3900
Ao configurar o valor da MTU com Set-NetAdapterAdvancedProperty, use o valor 4088.. Para persistir reinicializações, o valor retornado por Test-Connection também deve ser definido com Set-NetIPInterface.
Windows Server (Versão prévia) Adaptador de rede MANA do Microsoft Azure 9000
Ao definir o valor da MTU com Set-NetAdapterAdvancedProperty, use o valor 9014. Para persistir reinicializações, o valor retornado por Test-Connection também deve ser definido com Set-NetIPInterface.
Linux Mellanox Cx-3, Cx-4, Cx-5 3900
Linux (Versão prévia) Adaptador de rede do Microsoft Azure 9000

Pré-requisitos

  • Uma conta do Azure com uma assinatura ativa. Crie um gratuitamente.

  • Duas máquinas virtuais do Linux na mesma rede virtual no Azure. Para saber como criar uma máquina virtual do Linux, confira Criar uma máquina virtual do Linux no portal do Azure. O acesso remoto às máquinas virtuais é necessário para a conclusão do artigo. Para obter mais informações sobre como se conectar às Máquinas Virtuais do Azure com segurança, confira O que é o Azure Bastion?

    • Para fins deste artigo, as máquinas virtuais são denominadas vm-1 e vm-2. Substitua esses valores pelos seus valores.

Exemplos de recursos

Os recursos a seguir são usados ​​como exemplos neste artigo. Substitua esses valores pelos seus valores.

Recurso Nome Endereço IP
Máquina virtual 1 vm-1 10.0.0.4
Máquina virtual 2 vm-2 10.0.0.5

Precauções

  • As VMs no Azure só podem dar suporte a MTUs maiores que o padrão de 1.500 bytes para o tráfego que permanece na rede virtual. Não há suporte para uma MTU maior em cenários diferentes do tráfego de VM para VM na rede virtual interna. Pode não haver suporte para o tráfego que passa por gateways, peering ou para a Internet. A configuração de uma MTU maior pode resultar em fragmentação e redução no desempenho. Para o tráfego no caso desses cenários, utilize a MTU padrão de 1.500 bytes para testes a fim de garantir que uma MTU maior tenha suporte em todo o caminho da rede.

  • A MTU ideal é específica do sistema operacional, da rede e do aplicativo. O tamanho máximo de MTU com suporte pode não ser ideal para seu caso de uso.

  • Sempre teste as alterações nas configurações de MTU em um ambiente não crítico antes de aplicá-las amplamente ou em ambientes críticos.

PMTUD (Descoberta de MTU do caminho)

É importante entender a MTU com suporte no caminho de rede usado pelo aplicativo ou máquina. A descoberta da MTU de caminho é um meio de descobrir a maior MTU com suporte entre um endereço de origem e um de destino. Usar uma MTU maior do que a com suporte entre os endereços de origem e destino resulta em fragmentação, o que pode afetar negativamente o desempenho.

Neste artigo, os exemplos usados ​​testam o caminho da MTU entre duas máquinas virtuais. Testes subsequentes podem ser realizados de uma máquina virtual para qualquer destino roteável.

Siga as etapas a seguir para definir um tamanho de MTU maior em uma máquina virtual de origem e de destino. Verifique a MTU de caminho com um script de shell para Linux ou PowerShell para Windows. Quando não há suporte para a MTU maior, os resultados mostrados no teste de descoberta de MTU de caminho diferem das configurações definidas na interface da máquina virtual de origem ou de destino.

O script de shell está disponível na galeria de exemplos do Azure. Baixe o script para Linux no link a seguir e salve-o na vm-1 e na vm-2.

Siga estas etapas para alterar o tamanho da MTU em uma máquina virtual do Linux:

  1. Entrar na vm-1

  2. Use o comando ip para mostrar as interfaces de rede atuais e as respectivas configurações de MTU. Registre o endereço IP para as etapas subsequentes. Neste exemplo, o endereço IP é 10.0.0.4 e a interface Ethernet é eth0.

    ip address show
    
    azureuser@vm-1:~$ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        altname enP46433p0s2
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    
  3. Defina o valor de MTU na vm-1 para o valor mais alto com suporte da interface de rede. Neste exemplo, o nome da interface de rede é eth0. Substitua esse valor pelo seu valor.

    • Para o adaptador Mellanox, use este exemplo a fim de definir o valor da MTU para 3900:
    echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    
    • Para o adaptador de rede do Microsoft Azure, use este exemplo para definir o valor da MTU como 9000:
    echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Importante

    As alterações de MTU feitas nas etapas anteriores não persistem durante uma reinicialização. Para tornar as alterações permanentes, confira a documentação apropriada para sua distribuição do Linux.

  4. Use o comando ip para verificar se as configurações de MTU foram aplicadas à interface de rede:

    ip address show
    
    azureuser@vm-1:~$ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 3900 qdisc mq state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 3900 qdisc mq master eth0 state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        altname enP46433p0s2
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    
  5. Entre na vm-2 para repetir as etapas anteriores a fim de definir o valor de MTU para o maior valor com suporte da interface de rede.

  6. Entre na vm-1.

  7. Use o exemplo a seguir para executar o script de shell do Linux a fim de testar o maior tamanho de MTU que pode ser usado para um caminho de rede específico. Substitua o valor do host de destino pelo endereço IP da vm-2.

    ./GetPathMtu.sh 10.0.0.5
    
  8. A saída deverá ser semelhante ao seguinte exemplo: Se a saída do script não exibir a configuração na interface de rede, isso indicará que o tamanho da MTU não está definido corretamente. Isso também pode significar que um dispositivo de rede ao longo do caminho só dá suporte ao tamanho de MTU retornado pelo script GetPathMTU.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5
    destination: 10.0.0.5
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  9. Verifique o tamanho da MTU na interface de rede usando PING. Para Linux, use as marcas -M, -s e -c. A opção -M instrui o ping a NÃO realizar a fragmentação, -s define o tamanho do pacote e -c define o número de pings que serão enviados. Para determinar o tamanho do pacote, subtraia 28 da configuração da MTU de 3900.

    ping 10.0.0.5 -c 10 -M do -s 3872
    
    azureuser@vm-1:~/GetPathMTU$ ping 10.0.0.5 -c 10 -M do -s 3872
    PING 10.0.0.5 (10.0.0.5) 3872(3900) bytes of data.
    3880 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=3.70 ms
    3880 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=1.08 ms
    3880 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=1.51 ms
    3880 bytes from 10.0.0.5: icmp_seq=4 ttl=64 time=1.25 ms
    3880 bytes from 10.0.0.5: icmp_seq=5 ttl=64 time=1.29 ms
    3880 bytes from 10.0.0.5: icmp_seq=6 ttl=64 time=1.05 ms
    3880 bytes from 10.0.0.5: icmp_seq=7 ttl=64 time=5.67 ms
    3880 bytes from 10.0.0.5: icmp_seq=8 ttl=64 time=1.92 ms
    3880 bytes from 10.0.0.5: icmp_seq=9 ttl=64 time=2.72 ms
    3880 bytes from 10.0.0.5: icmp_seq=10 ttl=64 time=1.20 ms
    
    --- 10.0.0.5 ping statistics ---
    10 packets transmitted, 10 received, 0% packet loss, time 9014ms
    rtt min/avg/max/mdev = 1.051/2.138/5.666/1.426 ms
    

    Uma indicação de que há uma incompatibilidade nas configurações entre a origem e o destino é exibida como uma mensagem de erro na saída. Nesse caso, a MTU não está definida na interface de rede de origem.

    azureuser@vm-1:~/GetPathMTU$ ping 10.0.0.5 -c 10 -M do -s 3872
    PING 10.0.0.5 (10.0.0.5) 3872(3900) bytes of data.
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    
    --- 10.0.0.5 ping statistics ---
    10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9248ms
    
  10. Entre na vm-2.

  11. Use o seguinte exemplo para executar o script de shell do Linux a fim de testar o maior tamanho de MTU que pode ser usado para um caminho de rede específico:

    ./GetPathMtu.sh 10.0.0.4
    
  12. A saída deverá ser semelhante ao seguinte exemplo: Se a saída do script não exibir a configuração na interface de rede, isso indicará que o tamanho da MTU não está definido corretamente. Isso também pode significar que um dispositivo de rede ao longo do caminho só dá suporte ao tamanho de MTU retornado pelo script GetPathMTU.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4
    destination: 10.0.0.4
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  13. Verifique o tamanho da MTU na interface de rede usando PING. Para Linux, use as marcas -M, -s e -c. A opção -M instrui o ping a NÃO realizar a fragmentação, -s define o tamanho do pacote e -c define o número de pings que serão enviados. Para determinar o tamanho do pacote, subtraia 28 da configuração da MTU de 3900.

    ping 10.0.0.4 -c 10 -M do -s 3872
    
    azureuser@vm-2:~/GetPathMTU$ ping 10.0.0.4 -c 10 -M do -s 3872
    PING 10.0.0.4 (10.0.0.4) 3872(3900) bytes of data.
    3880 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=3.70 ms
    3880 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=1.08 ms
    3880 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=1.51 ms
    3880 bytes from 10.0.0.4: icmp_seq=4 ttl=64 time=1.25 ms
    3880 bytes from 10.0.0.4: icmp_seq=5 ttl=64 time=1.29 ms
    3880 bytes from 10.0.0.4: icmp_seq=6 ttl=64 time=1.05 ms
    3880 bytes from 10.0.0.4: icmp_seq=7 ttl=64 time=5.67 ms
    3880 bytes from 10.0.0.4: icmp_seq=8 ttl=64 time=1.92 ms
    3880 bytes from 10.0.0.4: icmp_seq=9 ttl=64 time=2.72 ms
    3880 bytes from 10.0.0.4: icmp_seq=10 ttl=64 time=1.20 ms
    
    --- 10.0.0.4 ping statistics ---
    10 packets transmitted, 10 received, 0% packet loss, time 9014ms
    rtt min/avg/max/mdev = 1.051/2.138/5.666/1.426 ms
    

    Uma indicação de que há uma incompatibilidade nas configurações entre a origem e o destino é exibida como uma mensagem de erro na saída. Nesse caso, a MTU não está definida na interface de rede de origem.

    azureuser@vm-2:~/GetPathMTU$ ping 10.0.0.4 -c 10 -M do -s 3872
    PING 10.0.0.4 (10.0.0.4) 3872(3900) bytes of data.
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    
    --- 10.0.0.4 ping statistics ---
    10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9248ms
    

Reverter as alterações

Para reverter as alterações feitas neste artigo, siga estas etapas:

  1. Entre na vm-1.

  2. Use este exemplo para configurar o valor da MTU como o valor padrão de 1500:

    echo '1500' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Importante

    As alterações de MTU feitas nas etapas anteriores não persistem durante uma reinicialização. Para tornar as alterações permanentes, confira a documentação apropriada para sua distribuição do Linux.

  3. Use o comando ip para verificar se as configurações de MTU foram aplicadas à interface de rede:

    ip address show
    
    azureuser@vm-1:~$ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        altname enP46433p0s2
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    
  4. Entre na vm-2 para repetir as etapas anteriores a fim de definir o valor da MTU como o valor padrão de 1500.