Experimentação Ambiente de algoritmos de adaptação de ... · Manipulação tráfego com TC e...
Transcript of Experimentação Ambiente de algoritmos de adaptação de ... · Manipulação tráfego com TC e...
Ambiente de Experimentação
Teste de efetividade de algoritmos de adaptação de
vídeo
Tópicos:● Servidor
● Aplicação de teste
● Manipulação tráfego com TC e HTB
● Cenários
● Estudo para de gráficos
ServidorRequisitos:
ServidorRequisitos:
1. Servidor Físico
1
ServidorRequisitos:
1. Servidor Físico2. Pilha LAMP
1
2
ServidorRequisitos:
1. Servidor Físico2. Pilha LAMP
1
2
ServidorRequisitos:
1. Servidor Físico2. Pilha LAMP 3. Vídeos
1
2
3
ServidorRequisitos:
1. Servidor Físico2. Pilha LAMP 3. Vídeos
1
2
3
ServidorRequisitos:
1. Servidor Físico2. Pilha LAMP 3. Vídeos4. Aplicação server
1
2
3
4
ServidorRequisitos:
1. Servidor Físico2. Pilha LAMP 3. Vídeos4. Aplicação server
1
2
3
4
ServidorRequisitos:
1. Servidor Físico2. Pilha LAMP 3. Vídeos4. Aplicação server5. Rotas Log
1
2
3
45
ServidorRequisitos:
1. Servidor Físico2. Pilha LAMP 3. Vídeos4. Aplicação server5. Rotas Log
1
2
3
45
Servidor
Servidor
ServerClients
Internet
4. Aplicação server:
Aciona o servidor para que o mesmo fique esperando (ouvindo) requisições realizadas por aplicações clientes (app).
Servidor
5. Rota para log:
Servidor
5. Rota para log:
Servidor
5. Rota para log:
Servidor
5. Rota para log:
Servidor
Aplicação de testePara usar e/ou editar o código fonte da app, faz-se necessário:
1. Android Studio. Download disponível em:
https://developer.android.com/studio/index.html
2. Conta GitHub para criar fork do projeto. Código Fonte disponível em:
https://github.com/juninhocruzg3/VideoStreaming
Aplicação de testeNome: Video-Streaming
● Player reprodução● Geração de logs de
chunk e travamentos
● Geração de gráficos
para avaliação.
Aplicação de testeNome: Video-Streaming
● Player reprodução● Geração de logs de
chunk e travamentos
Aplicação de testeNome: Video-Streaming
● Player reprodução● Geração de logs de
chunk e travamentos
Aplicação de testeNome: Video-Streaming
● Player reprodução● Geração de logs de
chunk e travamentos
Aplicação de testeAtravés da aplicação colhemos logs (informações) relativas a reprodução do vídeo e suas adaptações ao longo do tempo.
Aplicação de testeAtravés da aplicação colhemos logs (informações) relativas a reprodução do vídeo e suas adaptações ao longo do tempo.
Aplicação de testeAo final da reprodução enviamos as informações para o servidor atráves da aplicação server e rotas de post específica.
Aplicação de testeAo final da reprodução enviamos as informações para o servidor através da aplicação server e rotas de post específica.
Aplicação de testePara visualização dos resultados,
apenas deve-se entrar com o nome da equipe, escolher a sessão que deseja.
Aplicação de testePara visualização dos resultados,
apenas deve-se entrar com o nome da equipe, escolher a sessão que deseja.
Aplicação de testePara visualização dos resultados,
apenas deve-se entrar com o nome da equipe, escolher a sessão que deseja.
Manipulação tráfego com TC e HTB● O que é TC?
Do inglês Traffic Control, ferramenta do sistema linux disponível a partir do kernel 2.2 para controlar o tráfego de rede.
● Diferenças entre controle de tráfego e controle de banda:
Banda (ou bandwidth): É a diferença entre os limites superior e inferior de uma frequência, geralmente medida em hertz.
Tráfego: Quantidade de informações digitais transmitidas, geralmente medida em bits por segundo (b/s).
Manipulação tráfego com TC e HTBConceitos
Para utilizarmos o controle de tráfego com HTB temos que saber que o Linux possui os seguintes componentes para o controle de tráfego, são eles:
■ qdisc
■ class
■ filters
Manipulação tráfego com TC e HTB■ QDISC
■ Os qdiscs (qdisc é abreviação de Queueing Discipline - algo como Disciplina de Enfileiramento)
nada mais são do que as filas de saída dos pacotes. O Linux possui dois tipos de qdisc:
classless e classfull.
■ Os qdiscs classless não podem conter classes definidas pelo usuário, porém os qdiscs classfull
podem conter subclasses definidas pelo usuário, podendo desta forma separar e atribuir
quantidades de banda diferentes para cada tipo de fluxo definido.
Manipulação tráfego com TC e HTBCLASSFULL QDISCS
O HTB é um qdisc com suporte a classes, por isso ele pode ser usado como um qdisc (escalonador) ou apenas
uma classe. Quando utilizado com uma classe, ele possui o parâmetro opcional "default", que indica a
subclasse por onde o pacote deve ir quando não for classificado por nenhum filtro definido pelo usuário.
Como escalonador o HTB possui, dentre outros, os seguintes parâmetros :
■ rate - velocidade de transmissão dos pacotes.
■ ceil - velocidade total da classe superior. Utilizado para fazer o "borrowing", ou seja, empréstimo de banda
excedente de uma classe para outra.
Manipulação tráfego com TC e HTB■ CLASS
■ As classes só existem em qdiscs classfull, elas são utilizadas para dividir o tráfego, para assim
se necessário dar um tratamento diferenciado. Existem dois tipos de classes, as "leafs" (ou
"folhas"), que são classes que não possuem "filhos" e as "inner" (ou "internas"), que são
classes que possuem "filhos".
■ FILTER
■ Os filtros têm a função de separar o tráfego entre as diversas classes de um qdisc classfull.
Esta função é feita através de classificadores.
Manipulação tráfego com TC e HTBCLASSIFICADORES
Os classificadores no Linux são utilizados para identificar certas características e/ou padrões dos
pacotes e fluxo, permitindo assim a separação em classes.
U32:
O u32 é um classificador muito bom e que possui uns parâmetros interessantes, no qual é
possível identificar IP de origem/destino, porta de origem/destino e até mesmo o protocolo.
Manipulação tráfego com TC e HTB➔ Disciplinas de controle de tráfego● Classless
PFIFO (Packet First In First Out)
PFIFO Fast (Packet First In First Out Fast - default no Kernel Linux)
RED (Random Early Detection)
SFQ (Stochastic Fair Queuing)
TBF (Token Bucket Filter)
Manipulação tráfego com TC e HTB● Classful
CBQ (Class Based Queueing)
PRIO (Hierarchy Token Bucket)
HTB (Priority class)
Manipulação tráfego com TC e HTB● Classful
CBQ (Class Based Queueing)
PRIO (Hierarchy Token Bucket)
HTB (Priority class)
Atualmente, a melhor alternativa para o controle de tráfego é a associação do HTB com o PRIO.
Manipulação tráfego com TC e HTBTC usa as seguintes unidades de medidas:
kbps: Kilobytes por segundos
mbps: Megabytes por segundos
kbit: Kilobits por segundos
mbit: Megabits por segundos
bps: Bytes por segundos
Manipulação tráfego com TC e HTBAs quantidades de dados podem ser especificadas em:
kb or k: Kilobytes
mb or m: Megabytes
mbit: Megabits
kbit: Kilobits
Manipulação tráfego com TC e HTB➔ Como funciona o HTB
O HTB funciona de forma hierárquica e controla os pacotes que saem de uma determinada placa de rede. O pacote entra e é armazenado no buffer. Assim, só resta controlar sua saída do buffer para a rede.
Manipulação tráfego com TC e HTB➔ Como funciona o HTB
O HTB funciona de forma hierárquica e controla os pacotes que saem de uma determinada placa de rede. O pacote entra e é armazenado no buffer. Assim, só resta controlar sua saída do buffer para a rede.
Manipulação tráfego com TC e HTBO HTB possui um elemento principal conhecido como root, que receberá a designação numérica 1:0 ou, simplesmente 1:. o root possui um subordinado imediato, que controla o tráfego máximo total possível. Esse subordinado é uma classe e receberá a designação 1:1
Manipulação tráfego com TC e HTBO HTB possui um elemento principal conhecido como root, que receberá a designação numérica 1:0 ou, simplesmente 1:. o root possui um subordinado imediato, que controla o tráfego máximo total possível. Esse subordinado é uma classe e receberá a designação 1:1
Manipulação tráfego com TC e HTBCONFIGURAÇÃO DO CONTROLE DE TRÁFEGO
A configuração do controle de tráfego é feita toda através do comando tc, que tem a forma geral mostrada abaixo:
tc [opções] OBJETOS PARÂMETROS
Os OBJETOS do tc, como já foram conceituados, são: qdisc, class, filters.
Exemplos de comandos:
# tc qdisc
Utilizamos o objeto qdisc para adicionar, remover ou listar qdiscs.
Manipulação tráfego com TC e HTBADICIONANDO E REMOVENDO QDISCS
Para adicionar um qdisc precisamos indicar a interface, qual é o "handle" ou "identificador" do qdisc, quem é o
"pai" do qdisc e por final o tipo de qdisc e suas opções. Se estivermos adicionando um "qdisc root", seu pai
será o root, já para uma classe X:Y, devemos usar o "parent X:Y".
Adicionando um qdisc classfull e definindo a classe padrão:
# qdisc add dev eth0 root handle 1: htb default 10
Adicionando qdisc a uma classe:
# tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
Para remover qdiscs basta substituir a opção "add" por "del".
Manipulação tráfego com TC e HTBLISTAR QDISCS
Para listar qdiscs basta utilizar a opção "show" seguida da interface de rede, por exemplo:
# tc qdisc show dev eth0
TC CLASS
As "class" funcionam como uma subdivisão de classes dentro do qdisc classfull, permitindo desta
forma a separação do tráfego entre outras class/qdiscs.
Manipulação tráfego com TC e HTBLISTANDO CLASSES
Para listar classes basta utilizar a opção "show". Temos ainda como parâmetro a opção -s, que
mostra a quantidade de bytes enviados e pacotes e a opção -d, que mostra a descrição da
classe, com seu tipo e opções adicionadas, como exemplo abaixo.
# tc -s -d class dev eth0 root
Manipulação tráfego com TC e HTBHTB já com algumas classes (dentro de um script em shell bash):
#!/bin/bash
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1:0 htb default 40
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100kbit ceil 300kbit prio 0 # DNS / ACK / SYN
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 500kbit ceil 800kbit prio 1 # E-MAIL
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 1200kbit ceil 1600kbit prio 2 # HTTP / HTTPS
tc class add dev eth0 parent 1:1 classid 1:40 htb rate 300kbit ceil 500kbit prio 3 # GERAL
Manipulação tráfego com TC e HTB
Manipulação tráfego com TC e HTBPense nisso…
Manipulação tráfego com TC e HTBFoi necessário criar script em python para que a cada janela de tempo fosse
modificado os valores para largura de banda, perda de pacote e atrasos. Código completo de controle de tráfego (shell script) e código para modificação de valores de acordo com o tempo de cenários estabelecidos, disponíveis em:
https://github.com/VDBergF/Scenario
Manipulação tráfego com TC e HTBTutorial download HTB disponível em:
http://guiadoti.blogspot.com.br/2013/01/controle-de-banda-com-htb-tools.html
Mais informações e detalhes TC e HTB:
http://www.tldp.org/HOWTO/Traffic-Control-HOWTO/
http://br-linux.org/tutoriais/001794.html
https://www.vivaolinux.com.br/artigo/Controle-de-trafego-utilizando-HTB-no-Debian-Sarge
CenáriosOs cenários que constituem o ambiente, foram coletados por um projeto italiano chamado Neubot. Neubot é um projeto de pesquisa e desenvolvimento que estuda a Internet, executando medições a partir das bordas. Estudando o desempenho em banda larga, neutralidade de rede e censura na Internet. E desenvolvendo software de código aberto e publicar os dados coletados pelo software como dados abertos.
CenáriosPublicações relacionadas:
● Simone Basso, Antonio Servetti, Enrico Masala, Juan Carlos De Martin
Measuring DASH Streaming Performance from the End Users Perspective using Neubot
21-24 March 2014
Proceedings of the ACM Multimedia Systems (MMSys) 2014
● Giuseppe Futia, Enrico Zimuel, Simone Basso, Juan Carlos De Martin
The NeuViz Data Visualization Tool for Visualizing Internet-Measurements Data
3 March 2014
Mondo Digitale
CenáriosOs cenários são tratados por turnos. De forma a executar testes com cenários específicos colhidos pela manhã, tarde ou noite, dependendo do horário do teste, um destes é usado ou simulado para retratar a largura de banda de determinados horários.
CenáriosLargura de banda medida
a partir da operadora Claro,
no estado de São Paulo no
horário de 10 às 12h
CenáriosLargura de banda medida
a partir da operadora Claro,
no estado de São Paulo no
horário de 19 às 23h.
CenáriosPara os testes da disciplina serão realizadas sessões de 15 minutos com 3 (três) clientes compartilhando a mesma rede, porém da mesma equipe.
CenáriosExemplo de entrada para as sessões.
1ª coluna horário coleta.
2ª coluna tempo e. segundos que a coleta foi
feita.
3ª coluna largura de banda observada.
Estudo para geração de gráficosComo a qualidade de uma sessão é medida?
Estudo para geração de gráficosComo a qualidade de uma sessão é medida?
● Quantitativas:
● Qualitativas:
Estudo para geração de gráficosComo a qualidade de uma sessão é medida?
● Quantitativas:- Taxa média de bits
● Qualitativas:- Stalls (Travamentos)- Instabilidade (Amplitude e quantidade)- Justiça
Estudo para geração de gráficos● Taxa média de bits:- média da taxa de bit de segmento.
f(i), função que retorna o bitrate do segmento i.Di, duração do segmento.Ts, tempo de sessão.
Estudo para geração de gráficos● Instabilidade:- Instabilidade do algoritmo de adaptação.- Captura o impacto da captura de troca de qualidade para o usuário.- Valor entre 0-1 (maior instabilidade)- Observa a instabilidade nos últimos k segmentos.
bx,t taxa de bits do segmento i.K, tamanho da janela em segmentos.W(i) = k-i (Função de penalidade linear)
Estudo para geração de gráficos● Justiça:- Mede o grau de justiça no compartilhamento dos recursos;- Relação entre o recurso esperado (cenário ideal), e o recurso recebido- Valor entre 0-1(Justo).
N, número de clientes;Xi , é a razão entre a quantidade de recursos esperado pelo recursos recebidoRecurso esperado = razão entre a taxa média do conjunto de vídeo pela quantidade de clientes, multiplicado pela média de largura de banda (cenário)Recurso recebido = taxa média de bits;