LINUX.ORG.RU
ФорумAdmin

htb - не могу сообразить с правилами.


0

0

Есть два типа трафика - обычный и низкоприоритетный. И есть ряд одинаковых клиентов - пусть для определённости будет пять - A, B, C, D, E соответсвенно (хотя на самом деле их больше).

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

Т. е. к примеру пусть клиент A и B ничего не качают, а C качает только обычный трафик. 1. Если D качает только обычный трафик, а E - только низкоприоритетный, то C и D должны получить 2/5 канала, E - 1/5. 2. Если D и E качают только низкоприоритетный трафик, то C должен получить 1/2, D и E - 1/4 канала. 3. Если D качает только обычный трафик, а E - обычный и низкоприоритетный, то клиенты C, D, E должны получить по 1/3 канала.

Если сделать TC="tc class add dev eth0 parent" tc qdisc add dev imq0 handle 1:0 root htb $TC 1:0 classid 1:1 htb rate $[RATE]kbit for num in `seq 1 5` ; do $TC 1:1 classid 1:2${num} htb rate $[(2*RATE)/15]kbit ceil $[RATE]kbit $TC 1:1 classid 1:3${num} htb rate $[RATE/15]kbit ceil $[RATE]kbit done то будет выполняться условия 1, 2. Но в случае 3 кленты C и D получат по 2/7, E - 3/7 канала.

Если сделать for num in `seq 1 5` ; do $TC 1:1 classid 1:1${num} htb rate $[RATE/5]kbit ceil $[RATE]kbit $TC 1:1${num} classid 1:2${num} htb rate $[(2*RATE)/15]kbit ceil $[RATE]kbit $TC 1:1${num} classid 1:3${num} htb rate $[RATE/15]kbit ceil $[RATE]kbit done то во всех случаях клиенты C, D, E получат по 1/3 канала.

Если же сделать for num in `seq 1 5` ; do $TC 1:1 classid 1:1${num} htb rate $[RATE/5]kbit ceil $[RATE]kbit $TC 1:1${num} classid 1:2${num} htb rate $[(2*RATE)/15]kbit ceil $[RATE]kbit prio 0 $TC 1:1${num} classid 1:3${num} htb rate $[RATE/15]kbit ceil $[RATE]kbit prio 1 done то будут выполняться условия 1 и 3. В случае 2 клиенты D и E получат по 1/5, C - 3/5 канала.

anonymous

Есть два типа трафика - обычный и низкоприоритетный. И есть ряд одинаковых клиентов -
пусть для определённости будет пять - A, B, C, D, E соответсвенно (хотя на самом деле
их больше).

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

Т. е. к примеру пусть клиент A и B ничего не качают, а C качает только обычный трафик.
1. Если D качает только обычный трафик, а E -  только низкоприоритетный, то C и D
должны получить 2/5 канала, E - 1/5.
2. Если D и E качают только низкоприоритетный трафик, то C должен получить 1/2,
D и E - 1/4 канала.
3. Если D качает только обычный трафик, а E - обычный и низкоприоритетный, то клиенты
C, D, E должны получить по 1/3 канала.

Если сделать
TC="tc class add dev eth0 parent"
tc qdisc add dev imq0 handle 1:0 root htb
$TC 1:0 classid 1:1 htb rate $[RATE]kbit
for num in `seq 1 5` ; do
 $TC 1:1 classid 1:2${num} htb rate $[(2*RATE)/15]kbit ceil $[RATE]kbit
 $TC 1:1 classid 1:3${num} htb rate $[RATE/15]kbit ceil $[RATE]kbit
done
то будет выполняться условия 1, 2. Но в случае 3 кленты C и D получат
по 2/7, E - 3/7 канала.

Если сделать
for num in `seq 1 5` ; do
 $TC 1:1 classid 1:1${num} htb rate $[RATE/5]kbit ceil $[RATE]kbit
 $TC 1:1${num} classid 1:2${num} htb rate $[(2*RATE)/15]kbit ceil $[RATE]kbit
 $TC 1:1${num} classid 1:3${num} htb rate $[RATE/15]kbit ceil $[RATE]kbit
done
то во всех случаях клиенты C, D, E получат по 1/3 канала.

Если же сделать
for num in `seq 1 5` ; do
 $TC 1:1 classid 1:1${num} htb rate $[RATE/5]kbit ceil $[RATE]kbit
 $TC 1:1${num} classid 1:2${num} htb rate $[(2*RATE)/15]kbit ceil $[RATE]kbit prio 0
 $TC 1:1${num} classid 1:3${num} htb rate $[RATE/15]kbit ceil $[RATE]kbit prio 1
done
то будут выполняться условия 1 и 3. В случае 2 клиенты D и E получат по 1/5,
C - 3/5 канала.

anonymous
()
Ответ на: комментарий от anonymous

=)) а если от пользователя 2 потока и приоритетный и нет? =)) как быть?
по-моему если решать вопрос то делать с помощью sfq, а перед sfq поставить классы с ограничением скорости и заимствованием полосы пропускания у вышестоящего класса.

tommi
()
Ответ на: комментарий от tommi

> =)) а если от пользователя 2 потока и приоритетный и нет? =)) как быть?

Как в случае 3.

> по-моему если решать вопрос то делать с помощью sfq, а перед sfq поставить классы с ограничением скорости и заимствованием полосы пропускания у вышестоящего класса.

При чём тут sfq - мне надо разделить по пользователям, а не по соединениям.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.