linux tc largura de banda htb sendo ignorada e dando resultados impróprios

4

Estou configurando algumas filas de pacotes htb assim:

tc qdisc add dev eth0 root handle 10: htb
tc qdisc add dev eth1 root handle 10: htb

tc class add dev eth0 parent 10: classid 10:1012 htb rate 750kbps ceil 750kbps
tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup
tc class add dev eth1 parent 10: classid 10:1012 htb rate 750kbps ceil 750kbps
tc filter add dev eth1 parent 10: protocol ip prio 10 handle 1: cgroup

E estou testando isso baixando um arquivo de 10MB usando o wget. Eu verifiquei que os pacotes têm o classid correto neles.

Quando faço o download sem essas regras, obtenho uma velocidade média de download de ~ 9MB / s

Quando eu aplico o limite, minha velocidade cai, mas cai para o número errado. Atinge consistentemente 3,7MB / s.

Eu não tenho ideia de por que meu limite está passando muito, especialmente considerando que eu tenho um conjunto de teto. Eu notei que o download parece começar limitado a 750kbps, mas depois começa a ganhar velocidade.

Alguém tem alguma idéia do que estou fazendo de errado?

Felicidades!

    
por Rooster 21.06.2014 / 00:54

1 resposta

1

Sem mais conhecimento sobre sua configuração atual, presumiremos que você tenha um problema cgroup.

Tente excluir seus cgroups e limitar o próprio dispositivo.

#!/bin/bash

# Using ifb device to shape ingress traffic
modprobe ifb
ifconfig ifb0 up

# flush tc
tc qdisc del dev eth0 root &> /dev/null
tc qdisc del dev eth0 ingress &> /dev/null
tc qdisc del dev ifb0 root &> /dev/null

# limit all outbound traffic
tc qdisc add dev eth0 root handle 1: htb default 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit

# forward inbound traffic to ifb
tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol all u32 match u32 0 0 action mirred egress redirect dev ifb0

# limit all inbound traffic via ifb egress
tc qdisc add dev ifb0 root handle 1: htb default 1
tc class add dev ifb0 parent 1: classid 1:1 htb rate 1mbit

Teste e você verá que funciona tanto de entrada quanto de saída. Se você quiser limitar apenas em uma direção, simplesmente ignore a outra parte.

    
por 30.07.2014 / 17:52