Existe uma maneira de priorizar velocidades de rede em aplicativos de rede?

1

Assim como há "alta prioridade, prioridade normal etc" ou "niceness" para o tempo de CPU, existe uma maneira de fazer algo assim para uma placa de rede / internet? Por exemplo, se eu estou baixando um arquivo do meu servidor através de Wi-Fi e assistindo a um vídeo do youtube, existe uma maneira de tornar o vídeo do youtube uma prioridade mais alta? Como isso seria feito no windows e no linux?

    
por agz 01.05.2013 / 03:42

1 resposta

5

Primeiro, alguns antecedentes (volte a esta resposta depois de ler isto) - na Wikipedia .

Agora, você pode pensar, "QoS" (Quality of Service) - essa é a passagem! Bem, não, provavelmente não. O problema é que a QoS realmente deve ser "ponta a ponta" para ser eficaz, mas muitos nós tenderão a não honrá-la, tornando-a inútil. Além disso, ele ainda não resolve um problema subjacente que está realmente causando o atraso do vídeo, provavelmente.

Intensidade do buffer .

Você pode começar a ler sobre o inchaço do buffer lendo os excelentes artigos de Jim Gettys em seu blog.

A resposta curta é que grandes downloads de arquivos HTTP que "saturam" a rede (usam até 100% da largura de banda disponível no nível do roteador) fazem com que o hardware roteador crie buffers cada vez maiores para armazenar todos os dados. Esses buffers enormes causam maior e maior latência para obter um pacote através da rede, maior é o seu buffer.

Para entender por que isso acontece, imagine que você tenha uma placa de rede recebendo dados a 100 KBps. Agora, lembre-se, todos os pacotes que entram ficam na linha no final da fila (na parte de trás da linha, como ao entrar na fila do almoço na escola).

Se você tiver um buffer de 100 KB, levará quanto tempo um pacote percorre o buffer? 1 segundo.

Se você tiver um buffer com 1 MB de tamanho, levará quanto tempo um pacote percorre o buffer, assumindo a taxa de transferência de 100 KBps acima? 10 segundos.

O problema, com toda probabilidade, é que o download do seu servidor de arquivos está fazendo com que seus buffers "inchem" (cresçam ridiculamente grandes) devido a uma técnica de programação perigosamente prejudicial em quase todos os hardwares de rede. nos últimos anos, de aumentar o buffer para evitar a perda de pacotes.

O problema é que, quando a latência passa de um certo ponto, o TCP (Transmission Control Protocol) começa a se desintegrar. Você vê, o TCP depende dos pacotes que chegam dentro de um determinado período de tempo e, em seguida, recebem um "ACK" (reconhecimento, como uma mensagem dizendo "OK, eu entendi!") Do outro lado. Quando não recebe um "ACK" a tempo, ele tenta enviar o pacote novamente, supondo que ele tenha sido perdido. Então, o efeito líquido é que, na tentativa de evitar a perda de pacotes, buffers inchados realmente causam perda de pacotes

Essa perda de pacotes às vezes faz com que o firmware aumente ainda mais os buffers, e o problema se deteriora até que a rede esteja completamente quebrada e as conexões sejam interrompidas. Só então os buffers encolhem novamente e restauram a funcionalidade.

Você pode não estar ciente disso, mas o YouTube funciona transmitindo pequenas quantidades de vídeo a cada poucos segundos. Ele vai transmitir em apenas o suficiente para dar-lhe cerca de 10 a 15 segundos de vídeo em ~ 5 segundos de download e, em seguida, parar de frio e, em seguida, iniciar novamente, ad nauseum. O problema é que, se você tiver buffers inchados, o vídeo ficará lento porque os pacotes de vídeo do YouTube não podem passar pelos seus buffers inchados a tempo!

Gerenciamento Ativo de Filas com Atraso Controlado para o resgate.

Você deve realmente tentar implantar o Delay Ativo de Gerenciamento de Filas Controladas (CoDel), se possível, no seu roteador - se você pode instalar o firmware do CeroWRT nele, seria melhor. O OpenWRT também pode ser configurado para usar o CoDel. Você também pode configurar o CoDel em um computador com Linux (laptop / desktop) e rotear seu tráfego por lá. O CoDel é a melhor solução atualmente conhecida para o problema do buffer bloat. Infelizmente, ainda não existe implementação para o Windows. Detalhes da instalação podem ser encontrados em bufferbloat.net .

Se você experimentar o CoDel e ele não funcionar, eu aposto que é sua configuração, ou eu sou um unicórnio voador. Se você tentar QoS e ele não funcionar, bem, isso é perfeitamente normal. ;)

    
por 01.05.2013 / 03:57