Update 2020: ajustes para o texto ficar mais didático e para as imagens terem maior coerência.
Dizemos que usamos Jumbo Frames ao alterar o MTU (Maximum Transmission Unit) da placa de rede dos 1500 bytes padrões para 9000 bytes.
Isso significa que o tamanho dos pacotes enviados pela interface de rede passa para 9000 bytes ao invés dos 1500 originais, ou seja, os pacotes ficam 6 vezes maiores.
O padrão original de 1500 bytes tem origem nos primórdios das interfaces de rede e da Internet, mais especificamente quando determinaram o padrão 10BASE-5 (10Mbits/s), e é mantido por compatibilidade com equipamentos mais antigos. Ao mesmo tempo que apenas as placas de rede mais recentes (de 1Gbit/s para cima) suportam jumbo frames.
Essa configuração é normalmente feita no Sistema Operacional, nas configurações da interface de rede, e nos Switches e Roteadores, também para cada interface.
A vantagem de usar um tamanho de pacote maior é diminuir o overhead relativo; um pacote TCP/IP em IPv4 tem 40 bytes de cabeçalho, usado para endereçar IPs, portas e outras opções de controle da conexão, isso nos cria o seguinte overhead:
Ou seja, utilizando os pacotes comuns, 2,66% do tráfego é apenas para os cabeçalhos, enquanto que usando jumbo frames representa apenas 0,44% do tráfego.
Em um exemplo real, na transmissão de um arquivo de 1Gbyte:
Na prática, uma conexão com jumbo frames usa até 6,1 vezes menos pacotes para transmitir a mesma quantidade de dados, exemplificando:
Com menos pacotes, o primeiro ganho é para o sistema operacional, que precisa processar menos pacotes, isso é extremamente benéfico em termos de uso de CPU.
O segundo ganho é o total de bytes transmitidos, que podemos calcular considerando o overhead:
Total de 23,4 Mbytes transferidos a menos usando jumbo frames, cerca de 2% a menos de tráfego.
A terceira diferença aparece no tempo de transmissão do arquivo, numa transmissão, em uma rede de 10Mbits/s temos:
Uma redução de 19 segundos no nosso exemplo, ou 2% a menos no tempo de transmissão usando jumbo frames versus pacotes comuns.
Quando usar?
Em um ambiente controlado, você pode ligar os jumbo frames (é necessário configurar no Switch e nas portas dos servidores) e fazer a configuração correta nos hosts.
Por exemplo, em uma SAN iSCSI o uso de jumbo frames são boa prática, mas também é boa prática que essas redes sejam isoladas da LAN comum.
É comum que essa rede transmita milhares de Gigabytes por dia, com isso, a diferença de menor uso de CPU e de tempo de rede passa a ser mais significativa ainda.
Quando não usar?
O principal problema de habilitar jumbo frames acontece ao comunicar com equipamentos que não tem os jumbo frames ligados.
Quando ocorre essa comunicação, o sistema operacional precisa renegociar o tamanho máximo de pacote daquela conexão; pra isso, é usado o PMTU, um protocolo baseado em ICMP.
Nesse exemplo, a primeira conexão iniciou-e com um pacote jumbo de 9000 bytes, mas recebeu um pacote de volta e reiniciou a conexão usando pacotes de 1500 bytes.
Isso causa um pequeno atraso no início da conexão.
Ao tentar transmitir um pacote com tamanho maior que o permitido para a Internet, o roteador de borda tem duas alternativas: renegociar o tamanho máximo de pacote usando PMTU, ou fragmentar ele mesmo o pacote, consumindo mais CPU:
A primeira opção é a mais comum, mas envolve mais tráfego de rede na negociação da conexão, causando um delay inicial. A segunda opção, ilustrada na figura acima, usa mais recursos do roteador, e dependendo da capacidade de CPU do mesmo, pode acabar causando lentidão ou perda de pacotes.
Pode acontecer também do servidor ou cliente ter pacotes ICMP bloqueados e nunca renegociar o PMTU, nesse caso, a conexão é interrompida:
Isso causa um fenômeno difícil de diagnosticar, com sintomas bem estranhos:
- um site pode carregar normal, mas um download apresenta problemas;
- recebe e envia e-mails pequenos, mas se tiver anexo não transmite;
- a conexão estabelece, mas não consegue transferir dados.
Vale a pena usar Jumbo Frames?
Para apenas 2% de ganho? Sim quando falamos de ambientes de altíssima performance, como redes iSCSI, clusters de servidores ou ambientes de virtualização.
Esse ganho de 2% a menos de tráfego e 6 vezes menos pacotes também se refletem no uso de CPU, que pode consumir até 1Ghz de uso apenas para processar os pacotes, essa economia pode ser o suficiente para suportar mais algumas centenas de usuários.
Já, ao se comunicar com a Internet, em algum momento vai precisar executar o processo de PMTU, causando um delay inicial nas conexões e usando mais processamento, anulando o benefício inicial e algumas vezes gerando problemas difíceis de diagnosticar, por isso, na comunicação com a Internet ainda não é recomendado o uso de jumbo frames.