[FUG-BR] RES: WF2Q+ (era IPFW e VoIP)

Patrick Tracanelli eksffa em freebsdbrasil.com.br
Sexta Abril 18 18:03:52 BRT 2008


Eduardo Schoedler escreveu:
> Realmente, show de bola a explicação! =)
> Se eu tivesse um pipe para cada queue... claro que somente as queues teriam 
> weigth maior, só essas seriam priorizadas, certo?
> 
> Obrigado!

Eduardo, 1 pipe por queue, faz essa queue concorrer pelo pipe com ela 
mesma. Ou seja é a mesma coisa que ter apenas 1 pipe por endereços IP, o 
mais trivial.

Usamos queue quando queremos priorizar 1 trafego em relacao ao outro 
dentro de 1 mesmo pipe.

Se voce tiver por exemplo 2 pipes, com 4 queues CADA UM, essa política é 
totalmente independente. Ou seja nunca havera prioridade de peso em um 
queue do pipe 2 sobre algum do pipe 1. Eles sequer vão se conhecer/saber 
q existem.

Resumindo uma ideia de abordagem de QoS:

1 pipe com TODO SEU LINK.
N queues dentro desse pipe...

E ai sim, depois, se alem de trabalhar a relacao de pesos quiser ainda 
limitar banda maxima, outro pipe sem queue pra cada um que vc queira 
limitar.

Por exemplo. QoS basico

pipe 1 4Mbit/s, e conectado nesse pipe:

Q1:W5 - DNS
Q2:W5 - SSH
Q3:W10 - FTP
Q4:W30 - SMTP/POP/IMAP
Q5:W20 - VOIP
Q6:W25 - HTT/HTTPs
Q7:W5 - outros

Note que propositadamente fiz um esquema de W (pesos) cuja soma de 100. 
Na pior situacao possivel, os 4Mbt/s do pipe estrapolado e todos esses 
servindo demandando banda, eles teriam garantia em porcentagem do pipe 
total, portanto 25% dos 4Mbit/s pra VOIP, 30% pra SMTP/POP/IMAP, etc.

Mas pense, numa situação em que nao eh o pior cenario... so tem la SMTP 
e DNS e outros consumindo banda... nao havendo demanda nos outros 
queues, esses que estao demandando vao dividir, na proporção de seus 
pesos, os 4Mbit/s. Ou seja SMTP pode chegar a consumir uma penca, até 
perto dos 4Mbit/s totais. Otimo! Ehisso q a gente quer, se tiver 
sobrando deixa usar a vontade, priorizando de forma justa de acordo com 
seus pesos, certo?

Pra mim isso é o cenário perfeito.

Mas pra você pode não ser. Vamos supor que você queira por algum motivo 
que SMTP *jamais* ultrapasse 2Mbit/s?

Ai voce joga one_pass do ipfw pra 0 e depois desses queue/pipes 
simplesmente cria um pipe simples

ipfw add pipe 25 tcp from any to $email_servers dst-port 25,110,143 in
ipfw add pipe 26 tcp from $email_servers src-port 25,110,143 to any out
ipfw pipe 25 config bw 2Mbit/s
ipfw pipe 26 config bw 2Mbit/s

Pronto. No QUEUE haverá o QoS, e como one_pass=0 garante que todos os 
pacotes continuem no firewall até encontrar uma ação 
(allow/deny/fwd/etc), passará por todas regras dummynet q existirem. 
Portanto ao chegar nesse pipe o fluxo 25,110,143 (smtp/pop/imap) não 
passará de 2Mbit/s, mesmo tendo sido "permitido" mais q isso no 
queue+pipe anterior.

Ou seja sao politicas independentes.

Primeiro fazemos o QoS, e depois pipes independentes *se desejável*. 
Nesse caso o pipe indepdentemente do que o QoS definiu vai limitar a 
2Mbit/s o tráfego em questão.

Cara, pode ser que ainda tenha ficado confuso, eu reconheço. Mas 
explicar mais que isso eu não dou conta, e qq confusão que ainda restar 
sabe como resolver? mãos a massa! hehehe ;) esse é o tipo de coisa que a 
gente só "vê pra entender" quando faz.

Faça um teste simples em um ambiente controlado (de testes), por 
exemplo, limite sua banda a 128Kbit/s e coloque peso super alto pro ssh 
(tcp 22) e baixo pra todo o resto, ai faça um sftp de um arquivo enorme, 
e veja como sua navegação vai ficar; ai suspenda o sftp e veja o 
comportamento da navegação, etc. Depois usando o mesmosetup coloque 
outro pipe limitando a máxima do tcp:22. Já era, você vai ter controle 
pleno do dummynet.

Ai você pode passar pra algo mais avançado depois.

> 
> 
> --------------------------------------------------
> From: "Mario Augusto Mania" <m3.bsd.mania em gmail.com>
> Subject: Re: [FUG-BR] RES: WF2Q+ (era IPFW e VoIP)
> 
> Boa Eksffa hehehe
> 
> Como sempre, direto ao assunto hehehe :)
> 
> abracos.. m3
> 
> Em 18/04/08, Patrick Tracanelli<eksffa em freebsdbrasil.com.br> escreveu:
>> Eduardo Schoedler escreveu:
>>
>>> Valeu Renato!
>>  >
>>  > O que eu não estava entendendo é que as queues não possuem uma 
>> estrutura de
>>  > árvore...
>>  > Basta cada pipe ter seu weight e pronto, certo ?
>>  > Claro que eu devo colocar o restante do tráfego dentro de um pipe 
>> também, e
>>  > setar um peso.
>>  >
>>  > Muito Obrigado!
>>
>>
>> Existe uma relação de árvore sim.
>>  Pipes não tem weight. Quem tem weight são os queues, e os queues se
>>  conectam a um pipe (essa é a relacao de árvore), ex:
>>
>>
>>                    PIPE 10
>>                       |
>>                      /|\
>>                     / | \
>>                    Q1 Q2 Q3
>>
>>  Se Q1, Q2 e Q3 tem pesos. A soma dos pesos serão as fatias de banda em
>>  bits que o WF2Q+ tem que "livrar-se" por segundo. E ele o fará de forma
>>  justa (o F de FAIR da sigla) de acordo com o peso (W de weight da sigla).
>>
>>  Por exemplo, imagine que PIPE 10 seja 512Kbit/s, Q1 tenha peso 5, Q2
>>  tenha peso 15 e Q3 tenha peso 10. A soma de 5+10+15 é 30.
>>
>>  Os 512Kbit/s serão dividos em 30 slices, em bit/s, que na pior situação
>>  possível - Worst case, o W da sigla, ou seja numa situação em que a soma
>>  do Q1+Q2+Q3 em termos de demanda de banda for superior a largura de
>>  banda configurada no pipe - será dividido na proporcão, ou seja 5/30
>>  avos de 512Kbit/s para o Q1; 15/30 (portanto metade) de 512Kbit/s e Q3
>>  10/30 avos (1/3 de 512Kbit/s).
>>
>>  Claro né?
>>
>>  Transformando essa teoria em prática:
>>
>>  ----------------------------------------------
>>  ipfw pipe 10 config bw 512Kbit/s
>>
>>  ipfw add queue 1 all from <origem> to <destino>
>>  ipfw add queue 11 all from <destino> to <origem>
>>  ipfw queue 1 config pipe 10 weight 5
>>  ipfw queue 11 config pipe 10 weight 5
>>
>>  ipfw queue 2 all from <origem> to <destino>
>>  ipfw queue 22 all from <destino> to <origem>
>>  ipfw queue 2 config pipe 10 weight 15
>>  ipfw queue 22 config pipe 10 weight 15
>>
>>  ipfw queue 3 all from <origem> to <destino>
>>  ipfw queue 33 all from <destino> to <origem>
>>  ipfw queue 3 config pipe 10 weight 10
>>  ipfw queue 33 config pipe 10 weight 10
>>  ----------------------------------------------
>>
>>  Pronto. Simples. Note que eu criei 2 queues, em fluxo IN e OUT pra
>>  garantir full-duplex a papagaiada toda ok? Os numeros de queue e pipe
>>  são apenas identicadores e não faz a menor diferença se quiser colocar
>>  outros.
>>
>>  O corpo da regra é um protótipo. Normalmente você vai querer orienta-las
>>  a fluxos e interfaces.
>>
>>  Pro seu VOIP basta criar 2 queues, um com weight baixo e outro alto, na
>>  proporção de consumo de banda que você queira dar peso preferencial ao
>>  VOIP, exemplo
>>
>>  Q1 = todos
>>  Q1 = weight 5
>>
>>  Q2 = voip
>>  Q2 = weight 50
>>
>>
>>  --
>>  Patrick Tracanelli
>>
>>  FreeBSD Brasil LTDA.
>>  Tel.: (31) 3516-0800
>>  316601 em sip.freebsdbrasil.com.br
>>  http://www.freebsdbrasil.com.br
>>  "Long live Hanin Elias, Kim Deal!"
>>
>>
>>  -------------------------
>>  Histórico: http://www.fug.com.br/historico/html/freebsd/
>>  Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>>
> 
> 


-- 
Patrick Tracanelli

FreeBSD Brasil LTDA.
Tel.: (31) 3516-0800
316601 em sip.freebsdbrasil.com.br
http://www.freebsdbrasil.com.br
"Long live Hanin Elias, Kim Deal!"



Mais detalhes sobre a lista de discussão freebsd