Porque dois testes de velocidade VPN no mesmo túnel não coincidem
Uma nova saída muda o servidor de teste, e um arranque lento muda o resultado. Fixe o destino, iguale o número de fluxos e separe o custo do processador da capacidade da ligação.
Duas execuções, um túnel, e os números diferem por um fator de três. O túnel não mudou entre elas. O que mudou foi a medição: um site de teste que escolhe um servidor com base na sua localização aparente, um número de fluxos que decide se um arranque lento ou seis enchem o tubo, e uma duração curta o suficiente para terminar antes de o caminho começar a ser usado como deve ser. Os testes de velocidade não estão errados, mas respondem a uma pergunta mais estreita do que aquela que as pessoas lhes fazem.
Um novo endereço de saída muda o destino do teste
A maioria dos sites de teste escolhe automaticamente um servidor de medição, e escolhe-o em parte olhando de onde a sua ligação parece vir. Ligue o túnel e o seu país aparente muda, logo o servidor escolhido muda, e a comparação passa a abranger duas rotas diferentes para dois anfitriões diferentes.
O resultado não é, de todo, uma medição da VPN. É uma medição do seu caminho até um servidor que não escolheu, e a diferença entre as duas execuções pode ser dominada pelo peering desse servidor e não por qualquer coisa que o túnel tenha feito.
Fixe o destino antes de mudar mais alguma coisa. Todas as ferramentas credíveis permitem escolher um servidor explicitamente, e quando não permitem, a página de resultados costuma indicar o que foi usado, o que basta para notar que as duas execuções não são comparáveis. Confirme o que o site viu antes de confiar na escolha que fez:
curl -sS https://ipinfo.io/json | grep -E '"ip"|"org"|"country"'
Se o país mudou entre execuções, tudo o que o teste escolheu depois também mudou. Anote a saída observada ao lado de cada resultado e a confusão desaparece em grande parte.
O arranque lento termina depois de acabarem a maioria dos testes curtos
Uma ligação TCP não começa à velocidade da linha. Começa com uma janela de congestão pequena, duplica-a mais ou menos a cada ida e volta, e só atinge a capacidade do caminho ao fim de várias idas e voltas. Um teste de dez segundos num caminho com latência alta pode passar uma parte substancial da sua vida nessa subida.
É por isso que um túnel com mais latência pontua pior num teste curto do que merece, e por isso uma execução mais longa relata muitas vezes um número mais alto sem qualquer alteração de configuração. O quadro de débito RFC 6349 trata isto explicitamente, e é por isso que as medições sérias duram o suficiente para atingir um estado estável. Uma execução de cinco segundos num caminho por satélite mede o acelerador, não a estrada.
Olhe para as fases da ligação em vez de confiar num único número. O Curl relata cada etapa em separado, por isso pode ver se o tempo vai para o handshake, para a subida ou para a transferência:
curl -sS -o /dev/null -w 'dns=%{time_namelookup} tcp=%{time_connect} tls=%{time_appconnect} total=%{time_total} bytes/s=%{speed_download}\n' \
https://mirror.example.net/testfile.bin
Execute-o duas vezes seguidas para o mesmo destino. Se a segunda execução for muito mais rápida, estava a medir a subida e não o caminho, e qualquer comparação que tenha usado só a primeira é suspeita.
Um fluxo e seis fluxos medem coisas diferentes
Um único fluxo TCP é limitado pela janela que consegue manter em voo, que é aproximadamente o tempo de ida e volta multiplicado pela taxa. Num caminho longo esse produto excede o que um fluxo vai usar, por isso um único download reporta abaixo da capacidade que existe. Seis fluxos paralelos preenchem a lacuna e produzem um número maior.
iperf3 -c speed.example.net -t 20
iperf3 -c speed.example.net -t 20 -P 6
mtr -rwc 50 speed.example.net
Ambos os números são verdadeiros. O número de um fluxo diz o que um download fará, que é o que um separador do navegador costuma obter. O número paralelo diz o que o caminho pode transportar no total, que é o que um torrent ou um download em partes pode aproveitar. Citar um como se fosse o outro é como se substitui um túnel saudável sem motivo.
Comparar um resultado paralelo com um resultado de um só fluxo é a forma mais comum de as pessoas concluírem que a VPN lhes reduziu a velocidade para metade. Iguale o método e só depois compare. O rasto do terceiro comando acrescenta o contexto que falta: um caminho com jitter alto dará resultados inconsistentes nos dois modos, e nenhum número de fluxos corrige isso.
A cifra custa tempo de processador, o encapsulamento custa bytes
Dois mecanismos actuam em cada pacote, independentemente da velocidade da ligação. A cifra consome processador por byte, e o encapsulamento acrescenta bytes de cabeçalho que a ligação continua a ter de transportar. Ambos aparecem como um tecto, e têm sintomas diferentes.
O tecto do processador aparece como um planalto: o débito deixa de subir por muitos fluxos que acrescente, e o processador da máquina está ocupado enquanto a ligação não está. Num router pequeno ou num telefone é muitas vezes o limite real, e é por isso que uma linha rápida pode ainda dar um túnel modesto.
O custo em bytes é menor mas constante. Cabeçalhos extra significam menos carga útil por pacote, e num caminho com uma unidade máxima de transmissão fixa também podem provocar fragmentação ou buraco negro que se manifesta como um bloqueio nas transferências grandes em vez de uma média lenta.
| Observation | Likely mechanism | What to measure |
|---|---|---|
| Throughput flat as streams increase | CPU per packet on one core | Per-core utilisation during the test |
| Fast small transfers, stalled large ones | MTU and fragmentation | Payload size at which it breaks |
| Good average, unusable calls | Queueing delay behind a full buffer | Latency under load |
Estes três são frequentemente confundidos porque os utilizadores descrevem todos como «a VPN está lenta». Apenas o primeiro reage a uma máquina maior, apenas o segundo reage a uma MTU menor, e apenas o terceiro reage à gestão de filas.
Ponha o método no registo
Um resultado que vale a pena guardar nomeia o dispositivo, a rede de acesso, a saída, o servidor de medição, o sentido, o número de fluxos e a duração. Sem isso, dois números não podem ser comparados, e um ticket que contém um único número é na verdade um estado de espírito.
Guarde também as execuções más. Uma série em que uma saída provoca um bloqueio de cada vez é muito mais informativa do que uma média, e os bloqueios são exactamente o que as médias escondem.
Depois teste o que realmente lhe importa. Se o objetivo é um download grande, descarregue o ficheiro. Se o objetivo é uma chamada, meça a latência sob carga em vez do débito em repouso, porque um túnel pode pontuar bem num teste de velocidade e ainda tornar cada reunião inaudível.