Modelador de tráfego: o classificador externo sfq não está funcionando como esperado

0

Eu tenho um Ubuntu 14.04.1 LTS com o kernel 3.13.0-44-genérico. As regras do meu traffic shaper:

# Add disciplines for DL device
tc qdisc add dev $devDL root handle 1:0 htb default 12

# Add classes for DL device
tc class add dev $devDL parent 1:0 classid 1:1 htb rate $bwDL ceil $bwDL quantum $quantum
tc class add dev $devDL parent 1:1 classid 1:11 htb prio 1 rate $bwPrivateDL ceil $bwDL quantum $quantum
tc class add dev $devDL parent 1:1 classid 1:12 htb prio 2 rate $bwPublicDL ceil $bwPublicDL quantum $quantum

tc qdisc add dev $devDL parent 1:11 sfq divisor $divisor perturb $perturb
tc qdisc add dev $devDL parent 1:12 sfq divisor $divisor perturb $perturb

# Add filters for DL device
if [ -s $filePrivate ]; then
    for ip in 'grep -v "#" $filePrivate'; do
    if [ 'expr index $ip :' = 0 ]; then
        tc filter add dev $devDL protocol all prio 1 parent 1:0 u32 match ip dst $ip flowid 1:11
    else
        echo $ip
        tc filter add dev $devDL protocol all prio 1 parent 1:0 u32 match ip6 dst $ip flowid 1:11
    fi
    done
    tc filter add dev $devDL protocol all prio 1 parent 1:11 handle 11 flow hash keys dst divisor $divisor baseclass 1:11
fi

tc filter add dev $devDL protocol all prio 2 parent 1:0 u32 match ip dst 0/0 flowid 1:12
tc filter add dev $devDL protocol all prio 2 parent 1:0 u32 match ip6 dst ::/0 flowid 1:12
tc filter add dev $devDL protocol all prio 2 parent 1:12 handle 12 flow hash keys dst divisor $divisor baseclass 1:12

A disciplina HTB funciona bem, mas o classificador externo sfq não funciona como esperado. Dois hosts da mesma classe com clientes de torrent em execução não compartilham largura de banda igualmente. Um cliente pode captar muito mais da largura de banda compartilhada.

tc filter add dev $devDL protocol all prio 2 parent 1:12 handle 12 flow hash keys dst divisor $divisor baseclass 1:12

Onde está o meu erro?

    
por Dzmitry Shykuts 23.01.2015 / 17:16

1 resposta

1

Eu fiz alguns erros na configuração. Aqui está a versão corrigida:

# Add disciplines for DL device
tc qdisc add dev $devDL root handle 1: htb default 12

# Add classes for DL device
tc class add dev $devDL parent 1: classid 1:1 htb rate $bwDL ceil $bwDL quantum $quantum
tc class add dev $devDL parent 1:1 classid 1:11 htb prio 1 rate $bwPrivateDL ceil $bwDL quantum $quantum
tc class add dev $devDL parent 1:1 classid 1:12 htb prio 2 rate $bwPublicDL ceil $bwPublicDL quantum $quantum

tc qdisc add dev $devDL parent 1:11 handle 11: sfq divisor $divisor perturb $perturb
tc qdisc add dev $devDL parent 1:12 handle 12: sfq divisor $divisor perturb $perturb

tc filter add dev $devDL protocol all prio 1 parent 11: handle 11 flow hash keys dst divisor $divisor baseclass 1:11
tc filter add dev $devDL protocol all prio 2 parent 12: handle 12 flow hash keys dst divisor $divisor baseclass 1:12

# Add filters for DL device
if [ -s $filePrivate ]; then
    for ip in 'grep -v "#" $filePrivate'; do
    if [ 'expr index $ip :' = 0 ]; then
        tc filter add dev $devDL protocol all prio 1 parent 1: u32 match ip dst $ip flowid 1:11
    else
        echo $ip
        tc filter add dev $devDL protocol all prio 1 parent 1: u32 match ip6 dst $ip flowid 1:11
    fi
    done
fi

tc filter add dev $devDL protocol all prio 2 parent 1: u32 match ip dst 0/0 flowid 1:12
tc filter add dev $devDL protocol all prio 2 parent 1: u32 match ip6 dst ::/0 flowid 1:12
O qdisc do SFQ DEVE ter um identificador, e o classificador externo do SFQ DEVE usar esse identificador para vinculá-lo. O Shaper agora funciona conforme necessário.

    
por Dzmitry Shykuts 26.01.2015 / 07:19