Partilhar via


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

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

A fragmentação e a remontagem podem introduzir problemas de desempenho e ordenação, resultando em uma experiência abaixo do ideal. A otimização do MTU para sua solução pode fornecer benefícios de desempenho de largura de banda de rede, reduzindo 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ária para enviar um conjunto de dados.

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

As VMs no Azure podem dar suporte a MTU maior do que o padrão de 1.500 bytes apenas para o tráfego que permanece na rede virtual.

A tabela a seguir mostra o maior tamanho de MTU com suporte nas Interfaces de Rede do Azure disponíveis no Azure:

Sistema operativo Interface de Rede Maior MTU para tráfego de rede intervirtual
Windows Server Mellanox Cx-3, Cx-4, Cx-5 3900
Ao definir o valor MTU com Set-NetAdapterAdvancedProperty, use o valor 4088.. Para persistir as reinicializações, o valor retornado por Test-Connection também deve ser definido com Set-NetIPInterface.
Windows Server (Pré-visualização) Adaptador de Rede do Microsoft Azure MANA 9000
Ao definir o valor MTU com Set-NetAdapterAdvancedProperty, use o valor .9014 Para persistir as 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 (Pré-visualização) Adaptador de rede do Microsoft Azure 9000

Pré-requisitos

  • Uma conta do Azure com uma subscrição ativa. Crie um gratuitamente.

  • Duas máquinas virtuais Linux na mesma rede virtual no Azure. Para obter mais informações sobre como criar uma máquina virtual Linux, consulte Criar uma máquina virtual 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, consulte O que é o Azure Bastion?

    • Para os 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 máquinas virtuais no Azure podem suportar uma MTU maior do que o padrão de 1.500 bytes apenas para o tráfego que permanece na rede virtual. Uma MTU maior não é suportada para cenários fora do tráfego de VM para VM de rede intravirtual. O tráfego que atravessa gateways, peering ou para a Internet pode não ser suportado. A configuração de uma MTU maior pode resultar em fragmentação e redução no desempenho. Para o tráfego que utiliza esses cenários, utilize a MTU padrão de 1.500 bytes para testes para garantir que uma MTU maior seja suportada em todo o caminho de rede.

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

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

Descoberta de MTU de caminho

É importante entender a MTU suportada em todo o caminho de rede que seu aplicativo ou máquinas usam. A descoberta de MTU de caminho é um meio de descobrir a maior MTU suportada entre um endereço de origem e de destino. O uso de um MTU maior do que o suportado entre o endereço de origem e o endereço de destino resulta em fragmentação, o que pode afetar negativamente o desempenho.

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

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

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

Use as seguintes etapas para alterar o tamanho da MTU em uma máquina virtual Linux:

  1. Entrar no vm-1

  2. Use o ip comando para mostrar as interfaces de rede atuais e suas 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 MTU em vm-1 para o valor mais alto suportado pela interface de rede. Neste exemplo, o nome da interface de rede é eth0. Substitua este valor pelo seu valor.

    • Para o adaptador Mellanox, use o exemplo a seguir para definir o valor MTU como 3900:
    echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    
    • Para o Adaptador de Rede do Microsoft Azure, use o exemplo a seguir para definir o valor 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, consulte a documentação apropriada para sua distribuição Linux.

  4. Use o ip comando para verificar se as configurações de MTU são 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 no vm-2 para repetir as etapas anteriores para definir o valor MTU para o valor mais alto suportado pela interface de rede.

  6. Entre no vm-1.

  7. Use o exemplo a seguir para executar o shell script do Linux para 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 de vm-2.

    ./GetPathMtu.sh 10.0.0.5
    
  8. O resultado será semelhante ao seguinte exemplo. Se a saída do script não exibir a configuração na interface de rede, isso indica que o tamanho da MTU não está definido corretamente. Como alternativa, isso pode significar que um dispositivo de rede ao longo do caminho suporta apenas o tamanho da 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 PINGo . Para Linux, use os sinalizadores -M, -s e -c. A opção -M instrui ping para NÃO fragmentar, -s define o tamanho do pacote e -c define o número de pings a serem enviados. Para determinar o tamanho do pacote, subtraia 28 da configuração 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. Inicie sessão no vm-2.

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

    ./GetPathMtu.sh 10.0.0.4
    
  12. O resultado será semelhante ao seguinte exemplo. Se a saída do script não exibir a configuração na interface de rede, isso indica que o tamanho da MTU não está definido corretamente. Como alternativa, isso pode significar que um dispositivo de rede ao longo do caminho suporta apenas o tamanho da 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 PINGo . Para Linux, use os sinalizadores -M, -s e -c. A opção -M instrui ping para NÃO fragmentar, -s define o tamanho do pacote e -c define o número de pings a serem enviados. Para determinar o tamanho do pacote, subtraia 28 da configuração 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 alterações

Para reverter as alterações feitas neste artigo, use as seguintes etapas:

  1. Entre no vm-1.

  2. Use o exemplo a seguir para definir o valor MTU para 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, consulte a documentação apropriada para sua distribuição Linux.

  3. Use o ip comando para verificar se as configurações de MTU são 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 no vm-2 para repetir as etapas anteriores para definir o valor MTU para o valor padrão de 1500.