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
Где моя ошибка?
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 ДОЛЖЕН использовать этот дескриптор для ссылки на него. Shaper теперь работает по мере необходимости.