Traffic shaper: внешний классификатор sfq не работает должным образом

У меня Ubuntu 14.04.1 LTS с общим ядром 3.13.0-44. Мои правила формирования трафика:

# 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

HTB-дисциплина работает нормально, но внешний классификатор sfq не работает должным образом. Два хоста одного класса с запущенными торрент-клиентами не имеют одинаковой пропускной способности. Один клиент может получить гораздо больше общей пропускной способности.

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

Где моя ошибка?

0
задан 7 May 2017 в 13:26

1 ответ

Я совершил некоторые ошибки в конфигурации. Вот исправленная версия:

# 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

SFQ qdisc ДОЛЖЕН иметь дескриптор, и внешний классификатор SFQ ДОЛЖЕН использовать этот дескриптор для соединения с ним. Формирователь теперь работает по мере необходимости.

1
ответ дан 7 May 2017 в 13:26

Другие вопросы по тегам:

Похожие вопросы: