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:
- em qualquer movimento de dados pesado, seja upload ou download, a performance de serviços interativos como SSH e VNC vão pro saco;
- 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