Redes > O que é e como configurar Jumbo Frame

Quer otimizar a transferência de arquivos no Linux? Aprenda a configurar o Jumbo Frame, que aumenta o tamanho dos pacotes TCP para reduzir o uso de CPU e acelerar a comunicação de rede. Descubra o que é e como ajustar o MTU corretamente, além dos cuidados necessários para uma implementação eficaz.

Pacotes TCP possuem por padrão 1500 byte. Ao transmitirmos arquivos entre dois pontos, usamos uma indeterminada quantidade de pacotes TCP. Cada um desses pacotes é aberto pelo sistema operacional, examinado e processado. Esse fluxo demanda recursos do sistema como CPU e memória. Quanto mais pacotes, maior consumo de recursos e maior tempo de transferência.

Mas como otimizar essa comunicação proporcionando menor consumo de recursos e, de quebra, menores tempos de transferência de arquivos? É aqui que entra o Jumbo Frame.

Neste artigo veremos o que é Jumbo Frame, o que é MTU, como consultar MTU, dicas e cuidados para evitar dores de cabeça e como testar o suporte a Jumbo Frame.

Aproveite e se inscreva na nossa newsletter e/ou feed RSS para ficar por dentro de materiais como este. Bora lá.

O que é Jumbo Frame

O Jumbo Frame é o nome dado a configuração de MTU que aumenta a quantidade de byte por pacote TCP. Ao invés de usarmos os 1.500 byte, podemos setar valores diferentes como os 3.000 e 9.000 destacados no exemplo abaixo:

O aumento da quantidade de byte por pacote diminuirá a quantidade de pacotes TCP trocados entre os sistemas, mas também diminuirá, consequentemente, a quantidade de ciclos de CPU para processamento desses pacotes resultando em menor consumo de recursos e menor tempo de transferência de arquivos.

O que é MTU

MTU, portanto, é a configuração que determina a quantidade de byte por pacote TCP e por interface de rede. Ou seja, pode-se ter diferentes valores de MTU no sistema, sendo um valor por interface de rede. A sigla MTU significa Maximum Transmission Unit ou Unidade Máxima de Transmissão.

O padrão de 1.500 byte por pacote TCP é intergalático, mas não é uma regra. Algumas placas Wireless, por exemplo, usam MTU de 1492.

Não basta apenas modificar o valor de MTU

Não basta trocar o valor de MTU e achar que tudo será melhor. O Jumbo Frame só funciona se houver suporte de ponta a ponta. Ao mudar sua configuração sem que haja suporte de ponta a ponta, pode e irá perder pacotes TCP, resultando em problemas de comunicação como lentidão e/ou indisponibilidade. Ou seja, é preciso que todos equipamentos envolvidos na comunicação possua esse suporte.

Como verificar o valor de MTU no Linux

Vamos verificar o valor atual da MTU. Podemos fazer isso com os comandos ip e ifconfig. Veremos como fazê-lo com cada um desses comandos.

  • Verificando a configuração de MTU usando o comando ip:
  • ip link list | grep --color mtu

    Teremos uma saída de tela similar a esta:

  • Verificando a configuração de MTU usando o comando ifconfig:
  • ifconfig | grep --color mtu

    A saída de tela será similar a esta:

    Alterando o valor de MTU no Linux. Modo volátil.

    A configuração pode ser feita de forma volátil ou persistida. Ou seja, em memória ou em disco. Veremos, primeiro, como fazer a configuração em memória usando os comandos ip e ifconfig:

    Lembrando que não é preciso usar os dois comandos; usa-se um ou outro. Aqui estamos mostrando como fazer isso por ambos, mas utilize aquele que preferir.

    Lembrando também que esta alteração refletirá somente enquanto o sistema estiver ligado. O ser reiniciado, a configuração será perdida. Para não perder, é preciso persití-la.

  • Alterando o valor de MTU usando o comando ip:
  • ip link set mtu VALOR dev INTERFACE-DE-REDE

    Substitua VALOR pelo valor desejado para a MTU e INTERFACE-DE-REDE pelo nome da interface, como neste exemplo:

    ip link set mtu 1492 dev wlan0
  • Alterando o valor de MTU usando o comando ifconfig:
  • ifconfig INTERFACE-DE-REDE mtu VALOR

    Novamente, substitua VALOR pelo valor desejado para a MTU e INTERFACE-DE-REDE pelo nome da interface, como neste exemplo:

    ifconfig wlan0 mtu 1492
    Ao rodar o comando acima, caso receba a mensagem “Error: mtu greater than device maximum“, significa que seu hardware não suporta valores altos de MTU.

    Alterando o valor de MTU no Linux. Modo persistido.

    Agora vamos configurar o sistema para persistir a mudança da MTU. Tanto para Debian, Debian-like como Ubuntu, Mint e outros, quanto para Red Hat e Red Hat-Like como CentOS, Oracle Linux e outros, basta acrescentar uma linha na configuração da interface de rede, sendo:

    Debian, Ubuntu e Mint:

    mtu valor

    Exemplo: Editando arquivo /etc/network/interfaces

    iface eth0 inet static
        address 192.168.0.1
        network 192.168.0.0
        gateway 192.168.0.254
        netmask 255.255.255.0
        mtu 1492

    Redhat, Oracle Linux, CentOS e OpenSuse

    Exemplo: Editando arquivo /etc/sysconfig/network-script/ifcfg-eth0

    MTU:valor
    DEVICE=eth0
    BOOTPROTO=static
    ONBOOT=yes
    IPADDR=192.168.0.1
    NETMASK=255.255.255.0
    MTU=1492

    Para que essas alterações passem a valer imediatamente, é preciso reiniciar a rede ou ao menos descer (ifdown) e subir (ifup) a interface alterada.

    Cuidado para não reiniciar uma interface de um servidor remoto e perder acesso ao servidor. Caso não tenha opção e precise subir a configuração, recomendo que faça primeiro a mudança em memória e depois persista em disco. Isso descartaria a necessidade de reinício.

    Testando Jumbo Frame com o comando ping

    O teste consiste em pingar o destino usando pacotes com a quantidade de bytes que usamos na MTU. Nos exemplos a seguir, veremos se nosso destino possui suporte a MTU 9.000.

  • No Mac:
    1. ping -D -s 8184 192.168.10.100
  • No Linux:
    1. ping -M do -s 8972 192.168.10.100
  • No Windows:
    1. ping -f -l 9000 192.168.10.100

    Por padrão o Mac não suporta MTU 9000. O Linux não encapsula pacotes ICMP, então a conta é 9.000 – 28 byte do ICMP.

    Diagnosticando

    A saída esperada para o Ping será similar a esta:

    8192 bytes from 192.168.10.100: icmp_seq=0 ttl=128 time=0.512 ms

    Isso indica que o destino suporta Jumbo Frame.

    No entanto, caso receba mensagem diferente desta, há algum problema ocorrendo.

    Message too long

    A mensagem acima significa que sua conexão não suporta Jumbo Frame. Nesse caso, precisará revê-la.

    Request timeout for icmp_seq

    Já a mensagem acima pode significar duas coisas:

      1 – ICMP bloqueado no firewall do destinatário;
      2 – Não há suporte a Jumbo Frame.

    Na certeza de não se tratar de um firewall bloqueando ICMP, é certo que não há suporte a Jumbo Frame no destino.

    Resumo

    Jumbo Frame se usado corretamente pode te render muitas alegrias e ótimo desempenho na troca de arquivos, mas se mal configurado pode te dar umas dores de cabeças bem chatas. Todo cuidado é pouco, mas o resultado, quando positivo, é muito satisfatório. Muito usado na comunicação entre servidor e storage, gera ganhos consideráveis na disposição de nossas infras.

    Grande abraço e até a próxima.

    7 - 0

    Thank You For Your Vote!

    Sorry You have Already Voted!

    Rolar para cima