Jump to content
Калькуляторы

вопрос по HTB

хочу ограничть общую скорость нескольких абонентов с помощью HTB.

делаю так:

INDEV="eth0"
OUTDEV="eth1"

/sbin/tc qdisc add dev $INDEV root handle 1: htb default ffff r2q 1
/sbin/tc qdisc add dev $OUTDEV root handle 1: htb default ffff r2q 1

##delay pool
/sbin/tc class add dev $INDEV  parent 1:0 classid 1:fffe htb rate 5mbit  burst 8k prio 1
/sbin/tc class add dev $OUTDEV parent 1:0 classid 1:fffe htb rate 5mbit  burst 8k prio 1

#default
/sbin/tc class add dev $INDEV parent 1:0 classid 1:ffff htb rate 1000mbit burst 4k prio 3
/sbin/tc qdisc add dev $INDEV parent 1:ffff handle ffff: sfq perturb 10 quantum 1500

/sbin/tc class add dev $OUTDEV parent 1:0 classid 1:ffff htb rate 1000mbit burst 4k prio 3
/sbin/tc qdisc add dev $OUTDEV parent 1:ffff handle ffff: sfq perturb 10 quantum 1500

##добавляю правила
/sbin/tc class add dev eth0 parent  1:fffe classid 1:7 htb rate 10mbit  burst 8k prio 1
/sbin/tc qdisc add dev eth0 parent 1:7 handle 7: sfq perturb 10 quantum 5000

/sbin/tc class add dev eth1 parent  1:fffe classid 1:7 htb rate 10mbit  burst 8k prio 1
/sbin/tc qdisc add dev eth1 parent 1:7 handle 7: sfq perturb 10 quantum 5000

/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 7 fw flowid 1:7
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 1 handle 7 fw flowid 1:7

iptables -I FORWARD -t mangle -s 192.168.5.5 -j MARK --set-mark 7
iptables -I FORWARD -t mangle -d 192.168.5.5 -j MARK --set-mark 7

 

в результате получаем скорость 10 Мбит/c, а не 5 как ожидалось

не могу понять что я не так делаю

 

Share this post


Link to post
Share on other sites

ой

прошу прощения

за пост не в тот раздел

что-то не могу найти как удалить сообщение :(

Share this post


Link to post
Share on other sites

что-то вы наворотили с дисциплинами и классами, перемешали и htb и sfq в одну кучу

 

должно быть примерно так:

# для eth0 - download
#
# удаляем очередь
$tc qdisc del dev eth0 root 2>/dev/null
# создаём очередь
$tc qdisc add dev eth0 root handle 1: htb
# создаём корневой класс
$tc class add dev eth0 parent 1: classid 1:1 htb rate 320mbit

# создаём класс с низким рейтом для неклассифицируемого трафика
$tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100kbit burst 5k
# и направляем туда неклассифицированный трафик
$tc filter add dev eth0 parent 1: protocol ip prio 3 handle 1 fw classid 1:10

 

ну а потом для каждого клиента примерно так:

$ipt -t mangle -A segment_0 -s 0/0 -d 172.16.0.33 -j MARK --set-mark 201
$tc filter add dev eth0 parent 1: protocol ip prio 3 handle 201 fw classid 1:201
$tc class add dev eth0 parent 1:1 classid 1:201 htb rate 10mbit

 

 

Share this post


Link to post
Share on other sites
что-то вы наворотили с дисциплинами и классами, перемешали и htb и sfq в одну кучу

 

должно быть примерно так:

# для eth0 - download
#
# удаляем очередь
$tc qdisc del dev eth0 root 2>/dev/null
# создаём очередь
$tc qdisc add dev eth0 root handle 1: htb
# создаём корневой класс
$tc class add dev eth0 parent 1: classid 1:1 htb rate 320mbit

# создаём класс с низким рейтом для неклассифицируемого трафика
$tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100kbit burst 5k
# и направляем туда неклассифицированный трафик
$tc filter add dev eth0 parent 1: protocol ip prio 3 handle 1 fw classid 1:10

 

ну а потом для каждого клиента примерно так:

$ipt -t mangle -A segment_0 -s 0/0 -d 172.16.0.33 -j MARK --set-mark 201
$tc filter add dev eth0 parent 1: protocol ip prio 3 handle 201 fw classid 1:201
$tc class add dev eth0 parent 1:1 classid 1:201 htb rate 10mbit

спасибо

вроде sfq рекомандуют в конец ставить что бы одно соединение весь канал не заняло

мне еще хочется ограничить общую скорость на группу абонентов поэтому там 2 класса htb

из более внимательного чтения доки я понял что в моем случае надо использовать ceil, а не rate

 

 

Share this post


Link to post
Share on other sites
мне еще хочется ограничить общую скорость на группу абонентов поэтому там 2 класса htb

Создаете class на ту скорость какую хотите для группы (1:11 например)

и U32 фильтром в этот класс направляете IP адреса абонентов из вашей группы.. скорость в классе между ними поделится, и суммарно не привысит class rate

если не так - поправьте меня кто нибудь :0)

 

 

из более внимательного чтения доки я понял что в моем случае надо использовать ceil, а не rate

ceil - это скорость которая будет вместо rate для класса если в вышестоящем классе есть свободная полоса.. т.е. rate для него не достиг предела.

 

А где вы вычитали про ceil вместо рейт? можно ссылку..?

Share this post


Link to post
Share on other sites
А где вы вычитали про ceil вместо рейт? можно ссылку..?
если бы у меня была ссылка где это все расписано я бы не спрашивал

http://tldp.org/HOWTO/Traffic-Control-HOWT...ful-qdiscs.html

 

цитаты

rate Used to set the minimum desired speed to which to limit transmitted traffic. This can be considered the equivalent of a committed information rate (CIR), or the guaranteed bandwidth for a given leaf class.

 

и еще

 

Because HTB does not shape in any class except the leaf class, the sum of the rates of leaf classes should not exceed the ceil of a parent class. Ideally, the sum of the rates of the children classes would match the rate of the parent class, allowing the parent class to distribute leftover bandwidth (ceil - rate) among the children classes.

 

и еще

http://luxik.cdi.cz/~devik/qos/htb/htbfaq.htm

What if sum of child rates is greater than parent rate ?

Then interesting things can happen. Total rate delivered by children can be higher that parent's rate (thus its rate is not respected).

 

правда нигде не написано что будет при превышении

есть подозрение что rate это гарантированная скорость и она не зависит от родительского класса. поэтому и надо использовать ceil

Edited by msh_2

Share this post


Link to post
Share on other sites

насколько я понимаю работу, что rate - задает верхнюю границу скорости, которая может быть превышена до ceil, если есть свободные ресурсы, выше ceil она превышена быть не может.

можно создать например такой тариф:

$tc class add dev eth0 parent 1:1 classid 1:201 htb rate 10mbit ceil 15mbit burst 100k

т.е. тариф 10 мегабит, но при наличии свободного канала может повышаться до 15 мегабит всплесками по 100 килобайт, но обычно burst указывать не надо, он вычисляется автоматом

Share this post


Link to post
Share on other sites
rate - задает верхнюю границу скорости, которая может быть превышена до ceil, если есть свободные ресурсы

Да, и в идеале сумма рейт дочерних должна быть = рейт родительскому, а если родительский рейт имеет запас в полосе, то свободная полоса распределяется между ceil дочерних классов.

так и написано:

Ideally, the sum of the rates of the children classes would match the rate of the parent class, allowing the parent class to distribute leftover bandwidth (ceil - rate) among the children classes.

1) Мне кстати тоже интересно что будет когда сумма rate дочерей jrf;tncz больше rate родителя? кто сможет пояснить?

2) Причем интересно как должно быть достигнуто это превышение чтобы заглючило:)&

-Либо просто сумма всех rate созданных классов превысит рейт родительского - в цифрах

-Либо сумма не только в цифрах - а именно когда начнется реальное поедание полос абонентами (классами).

 

кто может сказать? кто пробовал?

 

Share this post


Link to post
Share on other sites

смысл рейт делать больше родительского? ставьте юзверям рейт на 10кбит, сеил на скорость по тарифу. Тогда при перегрузке канала все будут иметь равный приоритет, и алгоритм будет работать в штатном режиме.

Share this post


Link to post
Share on other sites
1) Мне кстати тоже интересно что будет когда сумма rate дочерей jrf;tncz больше rate родителя? кто сможет пояснить?

судя по 1 посту топикстартера, у него родительский рейт = 5 мегабит, а дочерние по 10 мегабит, и он жалуется, что скорость у клиентов не 5 мегабит а 10

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this