2804 Views
Tempo de leitura: 6 MinutosPacotes 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.
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
<
p align=”justify”>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.
ip
:ip link list | grep --color mtu
Teremos uma saída de tela similar a esta:
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.
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
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
Alterando o valor de MTU no Linux. Modo persistido.
<
p align=”justify”>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.
ping -D -s 8184 192.168.10.100
ping -M do -s 8972 192.168.10.100
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.