Ver Feed RSS

Tecnologia de Redes, Mobilidade e Inovação

Melhorando a Performance de Transferência de Grandes Arquivos No Linux: Jumbo Frame.

Avalie este Post de Blog
Como todos sabemos, o tamanho dos arquivos transmitidos em rede é cada vez maior. Por isso otimizar a transferência de grandes quantidades de dados é importante. Este texto descreve o que é Jumbo Frame, como essa tecnologia ajuda a aumentar a performance da rede e como configura-lo no Linux.

Histórico do Ethernet

Quando o Ethernet foi criado, lá no período paleozóico, quando os tiranossauros dominavam a Terra, a taxa de transmissão era 10Mbps, compartilhada com toda a rede. Os computadadores tinham discos de 5 megabytes e os arquivos transmitidos tinham tamanhos na ordem de alguns quilobytes.

Naquela época, por essas (e outra razões) foi especificado que o tamanho máximo de um pacotes seria de 1.500 bytes (mais CRC, cabeçalho e outras coisas, dá um total de 1.518 bytes). Qualquer informação (ou arquivo) maior que 1.500 bytes deveria ser dividida em pacotes menores (com tamanho máximo de 1.500 bytes cada) para serem transmitidos e depois remontados no destino.

Esse é o MTU, Maximum Transmit Unit ou a unidade máxima de transmissão.

A Transmissão de Grande Quantidades de Informações

Por outro lado, é um fato que quanto menor a quantidade de pacotes, menos esforço para os equipamentos de redes. Assim, se você usar pacotes grandes para transmitir um arquivo, será mais fácil para o servidor.

Exemplificando: para transmitir um arquivo de 100MB, se você usar pacotes de 500 bytes de tamanho, vai gastar mais CPU do servidor do que se utilizar pacotes de 1.500bytes.

Não vou detalhar porque é melhor usar pacotes maiores para transmitir a mesma quantidade de informações, tem a ver com interrupções e I/O. O importante é que você saiba que quanto maior o tamanho do pacote, mais fácil para o servidor.

O Jumbo Frame

Jumbo Frame não é a armação de um avião de grande (ok, piada sem graça... mas foi o melhor que consegui).

Jumbo Frame é o nome que se dá aos pacotes maiores que o limite de 1.500 bytes. A sua principal aplicação (como você deve ter imaginado) é melhorar a performance de servidores que necessitem trafegar grandes quantidades de informações, como grandes arquivos.

Repare que o Jumbo Frame não ajuda para servidores que tenham que trafegar grande quantidade de informações pequenas.

A principal aplicação então do jumbo frame é em servidores de arquivos, para redes aonde seja comum o tráfego de grandes arquivos, como backup de banco de dados, vídeos, etc.

Considerações Antes de Usar Jumbo Frames

Não basta habilitar o uso do Jumbo Frames, temos alguns outros pontos que nos preocupar.

Em primeiro lugar, a placa de rede do Linux deve suportar Jumbo Frame. Como configuramos o MTU individualmente em cada interface, não preciso que todas as placas de rede do meu Linux suportem Jumbo Frame, mas só posso habilitar esse recurso nas placas que suportem.

Depois os switchs de rede precisam suportar Jumbro Frames, pois os switchs tradicionais descartam qualquer pacote maior que 1.500 bytes.

Depois, todos os equipamentos que falem com o servidor também tem que suporta Jumbo Frames. Assim o ideal é usar Jumbo Frames para tráfego entre os servidores Linux, em uma rede fechada. Por exemplo, colocamos uma placa de rede extra em cada servidor Linux e conectamos todas a um switch que suporte Jumbo Frames, de forma que toda a troca de tráfego entre eles sejam feita através dessa estrutura de alta performance.

Também existem equipamentos de armazenamento (SAN - Storage Area Network) que mantém vários terabytes de disco, que também suportam Jumbo Frames, assim esses equipamentos de SAN podem fazer parte dessa rede e disponibilizar grandes quantidades de armazenamento com alta performance para os servidores Linux.

Qual MTU Utilizar

Se quanto maior o pacote, melhor, qual o tamanho do MTU que devemos utilizar? Resposta: o maior possível que seja suportado por todos os equipamentos. Ou seja, verificar qual dos equipamentos tem o menor MTU e esse será o limitante da rede.

Por exemplo, se a placa de rede do Linux suportar MTU de 9.000 bytes, o switch suportar 12.000 bytes e o SAN suportar 10.000 bytes, o MTU utilizado deve ser 9.000 bytes.

Procure nas especificações dos equipamentos a informação de Jumbo Frame Size ou Maximum MTU. Também repare que em muitos switchs o Jumbo Frame vem desabilitado e deve então ser habilitado antes de se tentar utiliza-lo.

Configurando Jumbo Frame no Linux

Depois que você tenha uma placa de rede com suporte a Jumbo Frame e switchs que suportem Jumbo Frame, configurar o Linux é tarefa relativamente simples.

Primeiro, precisamos usar Kernel versão 2.6.17 ou superior.

O comando para ativar o jumbo frame é simples:

ifconfig PLACA mtu TAMANHO

Por exemplo, para configurar a eth1 com MTU de 4.096, basta digitar:

ifconfig eth1 mtu 4096

No entanto é importante fazer a configuração ser permanente, através dos arquivos de inicialização, o que depende de cada distribuição

No Fedora, deve ser configurado o arquivo /etc/sysconfig/network-script/ifcfg-eth1 (ou o eth apropriado) com a linha

MTU 4096

No Debian ou Ubuntu, configure o arquivo /etc/network/interfaces, no grupo de parâmetros da eth de interesse, o parâmetro

MTU 4096

No Redhat, o arquivo /etc/sysconfig/network-scripts/ifcfg-eth1 (ou apropriado) deve ter o sinal de '='

MTU=4096

Verificando a Configuração

Utilize o comando

ip link list

Para ver a lista de interfaces e, dentro dos parâmetros de cada interface, você terá o MTU.

Se você tiver dúvida sobre qual MTU está sendo utilizado no tráfego entre seu Linux e uma máquina de destino, utilize o comando:

ip route get IPDESTINO

Para saber qual o MTU será utilizado entre o Linux e o um IP de destino. Por exemplo para saber qual o MTU entre o Linux e o IP 192.168.111.1 utilize o comando:

ip route get 192.168.111.1

A resposta será algo como:

192.168.111.1 dev eth0 src 192.168.111.103
cache mtu 4096 advmss 1460 hoplimit 64

Repare o parâmetro mtu 4096.

Atualizado 19-07-2009 em 20:20 por mlrodrig

Categorias
Não Categorizado

Comentários

  1. Avatar de Lincoln
    boa dica!
  2. Avatar de wps
    A relação tamanho do frame/cpu utilizada acontece que quanto mais "fragmentada" a informação maior quantidade de cabeçalhos serão inseridos entre os segmentos, logo:

    100Mbytes = 104857600
    104857600 / 9000(mtu jumbo frame) = 11650 (cabeçalhos)
    104857600 / 1500(mtu padrão) = 69905 (cabeçalhos)
    104857600 / 500(mtu bisonho) = 209715 (cabeçalhos)

    Obviamente como dito no artigo isso vai causar maior quantidade de interrupções na placa
    o que vai aumentar consideravelmente o IO e processamento da placa.

    No período mesozóico (1974 ) a Xerox utilizava-se de um tipo de rede de 3Mbit/s que depois virou ethernet graças a Metacalf que depois fundou a 3Com mas isso é antigo demais.

    Abraço e belo artigo

+ Enviar Comentário