Mecanismos de QoS em Linux
tc – Traffic Control
Edgard Jamhour
Edgard Jamhour
Controle de Tráfego (TC)
Elementos do TC
Camadas Superiores
(TCP, UDP)
S
Interface de
Entrada
Destino é
Interno?
N
Rotamento
Policiamento
Classificação
Enfileiramento na
Saída
Escalonamento
Formatação de
Tráfego
Interface de
Saída
Edgard Jamhour
Política de QoS e Elementos do TC
Qdisc da classe
Qdisc principal
Edgard Jamhour
Comandos tc: Criar a qdisc principal
> tc qdisc add dev eth0
root handle 1:0
htb
> tc class add dev eth0
parent 1:0 classid 1:1
htb rate 500Kbit
> tc class add dev eth0
parent 1:0 classid 1:2
htb rate 300Kbit
Edgard Jamhour
Comandos: Criar as qdisc das classes
> tc qdisc add dev eth0 parent 1:1 handle 10:0
pfifo limit 10
> tc qdisc add dev eth0 parent 1:2 handle 20:0
pfifo limit 10
> tc filter add dev eth0 parent 1:0
protocol ip u32 match ip protocol 0x06 0xff
flowid 1:1
> tc filter add dev eth0 parent 1:0
protocol ip u32 match ip protocol 0x11 0xff
flowid 1:2
Edgard Jamhour
Seqüência de filtros u32
• Pacotes HTTP recebidos por 192.168.0.1/24 vão para classe
1:1. Os demais pacotes TCP recebidos por esse host vão
para classe 1:2
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32
match ip protocol 0x06 0xff
match ip sport 80 0xfff
match ip dst 192.168.0.1/24
flowid 1:1
tc filter add dev eth0 parent 1:0 protocol ip prio 2 u32
match ip protocol 0x06 0xff
match ip dst 192.168.0.1/24
flowid 1:2
Edgard Jamhour
Verificando as regras com o tc
• tc [-s] qdisc/class/filter show dev eth0
– mosta as qdisc/class/filter associadas a interface
– –s mostra as estatísticas do uso da qdisc/class/filter
• tc qdisc del root dev eth0
– limpa as regras de QoS
• iplink show
– mostra a classe default associada a interface
Edgard Jamhour
Queueing Disciplines
•
•
•
•
•
•
•
•
FIFO: First In First Out
SFQ: Stochastic Fair Queuing
TBF: Token Bucket Flow
DS_MARK: Diff-Serv Marker
RED: Random Early Detection
PRIO: Priority Queue
[CBQ: Class-Based Queueing] = OBSOLETA
HTB: Hierarquical Token Bucket
Edgard Jamhour
FIFO: First In First Out
> tc qdisc add dev eth0 root handle 1:0
pfifo limit 10
> tc qdisc add dev eth0 parent 1:1 handle 10:0
pfifo limit 10
Edgard Jamhour
PRIO: Priorização Injusta
> tc qdisc add dev eth0 root handle 1:0
prio
Edgard Jamhour
TBF: Token Bucket Function
> tc qdisc add dev eth0 root handle 1:0
prio
> tc qdisc add dev eth0 parent 1:1
tbf rate 0.5mbit burst 5k latency 70ms
peakrate 1mbit minburst 1500
Edgard Jamhour
SFQ: Stochastic Fair Queuing
> tc qdisc add dev eth0 root handle 1:0
sfq perturb 10
> tc qdisc add dev eth0 parent 1:1 handle 10:0
sfq perturb 10
Edgard Jamhour
HTB: Hierarquical Token Bucket
Link
(3 Mbps)
200.1.2.0/24
200.1.3.0/24
Subrede A
(rate 2 Mbps) (ceil 2 Mbps)
telnet
(rate 200 kbps)
(ceil 2 Mbps)
http
(rate 800 kbps)
(ceil 2 Mbps)
outros
(rate 1 Mbps)
(ceil 2 Mbps)
Subrede B
(rate 1 Mbps) (ceil 1 Mbps)
http
(rate 500 kbps)
(ceil 1 Mbps)
outros
(rate 500 kbps)
(ceil 1 Mbps)
> tc qdisc add dev eth0 root handle 1: htb
> tc class add dev eth0 parent 1:0 classid 1:1
htb rate rate ceil rate burst bytes
[ cburst bytes ] [ prio priority ]
Edgard Jamhour
HTB: Criação da Classes
1:0
1:1
qdisc
root HTB
Link
(3 Mbps)
200.1.2.0/24
1:2
200.1.3.0/24
Subrede A
(rate 2 Mbps) (ceil 2 Mbps)
1:3
Subrede B
(rate 1 Mbps) (ceil 1 Mbps)
1:21
1:22
1:23
1:31
1:32
telnet
(rate 200 kbps)
(ceil 2 Mbps)
http
(rate 800 kbps)
(ceil 2 Mbps)
outros
(rate 1 Mbps)
(ceil 2 Mbps)
http
(rate 500 kbps)
(ceil 1 Mbps)
outros
(rate 500 kbps)
(ceil 1 Mbps)
Edgard Jamhour
HTB: Qdisc das Classes
1:0
qdisc
root HTB
Link
(3 Mbps)
1:1
200.1.2.0/24
1:2
200.1.3.0/24
Subrede A
(rate 2 Mbps) (ceil 2 Mbps)
1:3
Subrede B
(rate 1 Mbps) (ceil 1 Mbps)
1:21
1:22
1:23
1:31
1:32
telnet
(rate 200 kbps)
(ceil 2 Mbps)
http
(rate 800 kbps)
(ceil 2 Mbps)
outros
(rate 1 Mbps)
(ceil 2 Mbps)
http
(rate 500 kbps)
(ceil 1 Mbps)
outros
(rate 500 kbps)
(ceil 1 Mbps)
qdis 210:0
c
FIF
O
220:0
qdisc
FIFO
230:0
qdisc
FIFO
310:0
qdisc
FIFO
320:0
qdisc
FIFO
Edgard Jamhour
HTB: Filtros
1:0
qdisc
root HTB
Link
(3 Mbps)
1:1
200.1.2.0/24
1:2
200.1.3.0/24
Subrede A
(rate 2 Mbps) (ceil 2 Mbps)
1:3
Subrede B
(rate 1 Mbps) (ceil 1 Mbps)
1:21
1:22
1:23
1:31
1:32
telnet
(rate 200 kbps)
(ceil 2 Mbps)
http
(rate 800 kbps)
(ceil 2 Mbps)
outros
(rate 1 Mbps)
(ceil 2 Mbps)
http
(rate 500 kbps)
(ceil 1 Mbps)
outros
(rate 500 kbps)
(ceil 1 Mbps)
qdis 210:0
c
FIF
O
filtro
prio 1
220:0
qdisc
FIFO
filtro
prio 2
230:0
310:0
qdisc
FIFO
qdisc
FIFO
filtro
prio 3
filtro
prio 4
320:0
qdisc
FIFO
filtro
prio 5
Edgard Jamhour
DSMARK: Marcação do Byte DS
new_DS = (old_DS & mask) | value
> tc qdisc add dev eth0 root handle 1:0
dsmark indices n default_index id
> tc class change dev eth0 classid 1:id
dsmark mask mask value value
Edgard Jamhour
Byte DS X DSCP para PHBs padronizados
Drop Precedence
DSCP em Hexa
DS em Hexa
Edgard Jamhour
Policiamento: Policing
Controle do
excesso de
tráfego e
marcação para
classe de core
• Tráfego garantido: AF11
• Tráfego excedente: AF12
• Tráfego violado: DROP
Roteador de
borda
Roteador de
core
> tc filter ....
police rate kbit burst BYTES
[reclassify | drop | continue]
Edgard Jamhour
Policiamento: Policing
ENVIADO PARA CLASSE
NORMAL
ENVIADO PARA CLASSE DE
TRATAMENTO DE EXCESSO
e.g. AF11
e.g. AF12
rate:
e.g. 500 kbps
tráfego
total
rate:
e.g. 500 kbps
continue
balde 1
burst:
e.g. 62,5 kbytes
(excesso)
drop
balde 2
(excesso)
X
drop
burst:
e.g. 62,5 kbytes
Edgard Jamhour
RED: Random Early Detection
> tc qdisc add dev eth0 root handle 1:0 \
red limit <bytes> min <bytes> max <bytes> avpkt <bytes> \
burst <packets> probability <number> bandwidth <kbps> [ecn]
> tc qdisc add dev eth0 parent 1:1 handle 10:0 red ...
Edgard Jamhour
RED: Random Early Detection
descarte total para fila
instantânea
256 kbytes
descarte probabilístico
máximo
32 kbytes
descarte probabilístico
variável
12 kbytes
sem descarte
0
> tc qdisc add dev eth0 root handle 1:0 \
red limit 256000 min 12000 max 32000 avpkt 1000 \
burst 20 probability 0.02 bandwidth 512 ecn
Edgard Jamhour
Conclusão
• O tc do linux apresenta um conjunto de algoritmos para controlar
a forma como o tráfego é transmitido.
• As políticas de QoS são feitas de forma independente para cada
interface do computador/roteador
• Os algoritmos de enfileiramento afetam apenas os pacotes que
saem pela interface, e não os que entram.
• Em um roteador, cada interface controla o QoS do tráfego em
um único sentido.
Edgard Jamhour
Download

Document