Skip to topic | Skip to bottom
www.postcogito.org
          ...sine propero notiones
Kiko
Você está aqui: Kiko > PostsEmPortugues > PtBrBlogEntry2006Mar25A Imprimível | fim do tópico


Start of topic | Skip to actions

WonderShaper: mais desempenho no meu ADSL

Rec 25-mar-2006 18:08

O Tutorial de Roteamento Avançado do Linux estava há mais de um ano na minha crescente lista de 'coisas interessantes a ler'. Eu já tinha lido em vários lugares que o sistema de roteamento IP do cerne do Linux tem filas avançadas que não deixam nada a dever -- e até superam -- muitos roteadores dedicados profissionais.

Nesta última quinta resolvi quitar essa pendência e fui bem recompensado: descobri um script chamado WonderShaper que resolve um problema que me irrita há anos.

O Problema

Quem tem um canal de comunicação assimétrico (i.e., cuja velocidade de descida é diferente da de subida), tal como o meu serviço ADSL 'Velox' da Telemar, sofre com com dois problemas:

  1. em qualquer movimento de dados pesado, seja upload ou download, a performance de serviços interativos como SSH e VNC vão pro saco;
  2. ao fazer um upload pesado, a performance do download cai absurdamente;

Uma explicação simplista para o problema 1 é o aumento da latência (o tempo que o pacote demora para chegar até o destino): os pacotes pequenos do tráfego interativo têm de aguardar que a transmissão dos pacotes grandes termine. Isso acontece em qualquer tipo de canal, inclusive nos simétricos.

Mas no caso do ADSL é pior que isso.

A Causa: Filas Imensas

Os modems e concentradores ADSL têm filas imensas, às vezes de dezenas de kilobytes. Isso melhora a performance dos downloads -- afinal, isso que os provedores vendem e é por isso que os consumidores compram.

Filas grandes, porém, destroem a performance interativa: um pacote interativo recém chegado a uma fila cheia pode passar um ou dois segundos nela antes de chegar a vez dele de ser transmitido. Ninguém aguenta apertar uma tecla e esperar dois a cinco segundos para ver o caractere ser ecoado.

A razão do problema 2 é um pouco mais sutil: os pacotes ACK de retorno também são atrasados pela fila. Isso faz com que a estimativa do tempo de ida-e-volta do TCP do servidor dê um salto, o que ele interpreta como rede congestionada. Tipicamente isso o faz entrar no chamado chamado algoritmo de 'partida lenta' (slow start): ele fecha a janela de transmissão para um segmento, depois dois segmentos, etc., até reequilibrar novamente com a velocidade dos ACKs.

Só que como os ACKs estão lutando contra a fila, a conexão TCP estabiliza na velocidade do nosso link de subida, não do de descida! No meu caso, ao invés de baixar a 100kbytes/seg, fico limitado a uns 28kbytes/seg.

Substituindo a fila do provedor

Em um primeiro momento, pode-se pensar que não há nada a fazer, pois a fila está no modem ADSL e/ou no concentrador ADSL no provedor -- nenhum dos dois sob nosso controle.

A sacada genial do WonderShaper é aplicar uma fila HTB (Hierarchical Token Bucket) com taxa de saída ligeiramente menor do que nossa capacidade de upload. Isso nos faz perder alguns porcento de performance, mas põe a coisa sob nosso controle: como nossa fila é menor, ela enche primeiro; isso garante que a fila do modem e do concentrador estarão sempre vazias.

Com uma fila sob nosso controle, o WonderShaper instala uma política de classificação em que pacotes de tráfego interativo (com o campo 'tipo de serviço' definido como 0x10, tais como gerados pelo aplicativo ssh linha de comando) e ACKs tenham prioridade.

Assim, voam os dois problemas: os ACKs voltam à velocidade máxima, o que desengata a performance dos downloads e a linha de comando remota via SSH fica com excelente resposta mesmo com os dowloads e uploads simultâneos.

Filme de Demonstração

O filme abaixo mostra um exemplo do problema e do WonderShaper em ação: começo baixando um arquivo grande com boa performance; ao fazer um scp para subir um arquivo para outro servidor, a performance fica ruim. Um ssh interativo beira o insuportável. Ligo então o WonderShaper e tudo melhora (ainda que eu já tenha obtido velocidades de download bem maiores do que mostrado nesse filme).


Implicações filosóficas

Uma observação interessante é que os algoritmos de controle de fluxo do TCP assumem que os canais são simétricos. Antigamente era realmente raro ter-se canais assimétricos; hoje é comum.

Não parece exagero dizer que a característica que permite aos provedores de acesso ADSL mostrar velocidades de download impressionantes -- filas imensas -- é a mesma que impede muitos usuários de atingir esses níveis de performance, especialmente aqueles que fazem uploads concomitantes com downloads, como os usuários de programas peer-to-peer (eMule, etc).

Só usuários que tenham gateways com controle de banda avançado conseguem realmente espremer o máximo de performance dos seus canais ADSL em situações de downloads com uploads simultâneos. Suspeito que sejam muito poucos. A grande maioria não faz a menor idéia. Afinal, todo mundo já se acostumou que a Internet é lenta mesmo.

Será que a turma que originalmente projetou o padrão ADSL anteviu esse efeito? Ou, um prato cheio para os amantes de teoria da conspiração: será que não foi proposital?
topo


Você está aqui: Kiko > PostsEmPortugues > PtBrBlogEntry2006Mar25A

topo

Creative Commons License   O conteúdo deste site está disponibilizado nos termos de uma Licença Creative Commons, exceto onde dito em contrário.
  The content of this site is made available under the terms of a Creative Commons License, except where otherwise noted.