Usar a pasta codigoexemplo cedida no enunciado do trabalho como base. Copiar os arquivos controller.cc e controller.hh das pastas exercicioa, exerciciob, exercicioc, para dentro da pasta codigoexemplo/datagrump (para cada exercício a ser executado).
Executar na pasta codigoexemplo:
$ ./autogen.sh $ ./configure $ make
Executar na pasta codigoexemplo/datagrump:
./run-conteste "NOME"
Para o exercício A foram testados diferentes valores de janela com 10 repetições para cada valor, acrescendo o tamanho de 10 em 10.
A ideia principal foi identificar uma faixa de janela otimizada (melhores valores de potência para cada valor de janela) e posteriormente realizar mais testes dentro dessa faixa para identificar a estabilidade com a janela escolhida.
Podemos observar as variações nos valores de janela e a potência obtida , na Tabela 1. O gráfico que representa o Atraso x Largura de Banda pode ser observado na Figura 1.
A faixa otimizada de janelas ficou entre 10 e 15. Testes com a janela fixada acima de 15 levavam a uma queda na potência, essa tendência pode ser observada na Figura 2.
Após identificar a faixa de melhores resultados, foram realizadas 40 repetições com as janelas em valor 10, 11, 12, 13, 14, 15 e 16. A potência foi maior com o valor de janela 15. Na tabela 2 podemos observar a estatística descritiva dos dados.
Para o exercício B foi adicionado um mecanismo simples, tentando replicar o funcionamento do AIMD (additive-increase/multiplicative-decrease). O funcionamento básico do AIMD é atuar sobre o tamanho da janela quando ele se depara com congestionamento. Com base no algoritmo original, fora estipuladas algumas variáveis de controle, sendo as principais uma ação a ser tomada quando se identifica o congestionamento, e um mecanismo de controle para limitar o envio em massa e aumentar gradativamente o tamanho da janela depois do congestionamento.
O algoritmo original foi modificado com base em valores fixos, ele não calcula os valores de redução e acréscimo automaticamente, sendo necessária a configuração no início de cada teste.
Inicialmente o algoritmo foi implementado, posteriormente alguns testes foram realizados nos tamanhos de redução de janela, limite para início do controle de congestionamento e valor de acréscimo da janela, para refinar e obter melhores valores na potência.
Para calibração inicial do algoritmo modificado, foram utilizados os valores do exercício A para identificar o melhor tamanho de janela x Potência, e melhor valor de atraso obtido.
No decorrer dos experimentos os testes foram feitos com valores diferentes ao detectar o congestionamento e também com a mudança nos valores de aumento da janela ao chegar em um determinado limite, conforme observado na tabela 3.
Após identificar os melhores valores, testes de estabilidade com os valores ótimos foram realizados, com o objetivo de analisar se os valores são constantes após várias repetições.
A média de 31 repetições foi 22,08. Observou-se que em alguns dos testes a potência caia drásticamente, mesmo sem nenhuma alteração no esquema. Não foi possível identificar a causa dos valores discrepantes, podendo a causa ser o código do esquema ou o sistema de fluxos utilizado na implementação remota.
A estatística das repetições pode ser observada na Tabela 4. O gráfico com os valores das repetições pode ser observado na Figura 3.
Para o exercício D, foram realizadas melhorias no esquema anterior, com mudanças sutis, mas que permitiram maior variação dos valores assumidos pela janela. O incremento com valores menores (0,1), possibilitou um ajuste mais fino, melhorando sensivelmente a potência, e oferecendo maior estabilidade, conforme visto na Figura 3.
Outro benefício pode ser obtido por conta da utilização do RTT como variável de controle para o Treshold, ao contrário de simplesmente utilizar um valor fixo como gatilho.
A experiência adquirida nos exercícios A e B fez com que o esquema fosse ajustado de forma facilitada, muitos dos valores ótimos já haviam sido identificados, mesmo assim vários testes foram realizados até o ajuste final.
Por ser um esquema muito simples, a principal dificuldade é encotrar o equilíbrio entre o envio de segmentos e as ações a serem tomadas no início do congestionamento. Um tamanho de janela que permita um envio mais agressivo gera uma melhor vazão, mas penaliza o esquema no caso de congestionamento. O melhor equilibrio foi alcançado no esquema atual, tentando controlar o envio de forma mais racional, e sendo relativamente conservador no caso de congestionamento.
As variações testadas, foram feita basicamente na variação da janela no caso de congestionamento, no incremento dos valores quando a taxa de envio é relativamente baixa (anterior ao treshold), e no valor de timeout.
Os valores obtidos em 33 repetições foi mais regular quando comparado ao esquema similar ao AIMD simples no exercício B, o que pode ser comprovado na estatística descritiva na Tabela 4.
melhorQigual
Link com resultados de teste: http://cs344g.keithw.org/report?melhorQigual-1541086593-voingeez
Average capacity: 5.04 Mbits/s
Average throughput: 3.62 Mbits/s (71.8% utilization)
95th percentile per-packet queueing delay: 51 ms
95th percentile signal delay: 94 ms