URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 88595
[ Назад ]

Исходное сообщение
"tc cbq"

Отправлено answer , 01-Апр-10 20:19 
Есть вопрос по tc.
Изначальная сверхзадача следующая:
Для всех подключений равномерно распределять скорость (не касается медленных клиентов, у которых своя скорость мала – настроить, чтобы такие  клиенты не отваливались из-за специфичных сетевых настроек).
Для нового подключения выделять скорость 1 MBit/s, если канал свободен более чем на 30% увеличить скорость до максимальной к клиенту.
При падении общей скорости,  участников, менее 256Kbit/s блокировать новые подключения.

Написаны соответствующие правила для tc:
$TC qdisc add dev $IF root handle 1: cbq bandwidth 500Mbit avpkt 5000 cell 8 allot 1514

$TC class add dev $IF parent 1:0 classid 1:112 cbq bandwidth 150mbit rate 100mbit cell 8 allot 1514 sharing borrow prio 2
$TC class add dev $IF parent 1:0 classid 1:113 cbq bandwidth 500mbit rate 1mbit cell 8 allot 1514 sharing borrow prio 2
$TC class add dev $IF parent 1:0 classid 1:114 cbq bandwidth 500mbit cell 8 allot 1514 rate 256kbit sharing borrow prio 2
$TC qdisc add dev $IF parent 1:112 handle 20: esfq perturb 5 hash dst
$TC qdisc add dev $IF parent 1:113 handle 30: esfq perturb 5 hash dst
$TC qdisc add dev $IF parent 1:114 handle 40: esfq perturb 5 hash dst

Вроде бы работает, но почему-то трафик попадает только в самый широкий класс. В другие же при нагрузке он не попадает в принципе. Может быть кто-то подскажет, как правильнее реализовать задачку?


Содержание

Сообщения в этом обсуждении
"tc cbq"
Отправлено John , 02-Апр-10 22:14 
>[оверквотинг удален]
>$TC qdisc add dev $IF parent 1:112 handle 20: esfq perturb 5
>hash dst
>$TC qdisc add dev $IF parent 1:113 handle 30: esfq perturb 5
>hash dst
>$TC qdisc add dev $IF parent 1:114 handle 40: esfq perturb 5
>hash dst
>
>Вроде бы работает, но почему-то трафик попадает только в самый широкий класс.
>В другие же при нагрузке он не попадает в принципе. Может
>быть кто-то подскажет, как правильнее реализовать задачку?

Вы создали классовую дисциплину. Теперь надо добавить фильтры к самой дисциплине и к внутренним классам, которые будут по каким-то критериям отправлять трафик в тот или иной внутренний класс. Смотрите tc filter.


"tc cbq"
Отправлено John , 02-Апр-10 22:16 
>[оверквотинг удален]
>>$TC qdisc add dev $IF parent 1:114 handle 40: esfq perturb 5
>>hash dst
>>
>>Вроде бы работает, но почему-то трафик попадает только в самый широкий класс.
>>В другие же при нагрузке он не попадает в принципе. Может
>>быть кто-то подскажет, как правильнее реализовать задачку?
>
>Вы создали классовую дисциплину. Теперь надо добавить фильтры к самой дисциплине и
>к внутренним классам, которые будут по каким-то критериям отправлять трафик в
>тот или иной внутренний класс. Смотрите tc filter.

Даже, немного не так: в Вашем случае необходимы фильтры только к самой дисциплине.


"tc cbq"
Отправлено answer , 02-Апр-10 23:17 
>[оверквотинг удален]
>>>Вроде бы работает, но почему-то трафик попадает только в самый широкий класс.
>>>В другие же при нагрузке он не попадает в принципе. Может
>>>быть кто-то подскажет, как правильнее реализовать задачку?
>>
>>Вы создали классовую дисциплину. Теперь надо добавить фильтры к самой дисциплине и
>>к внутренним классам, которые будут по каким-то критериям отправлять трафик в
>>тот или иной внутренний класс. Смотрите tc filter.
>
>Даже, немного не так: в Вашем случае необходимы фильтры только к самой
>дисциплине.

Трафик всегда исходящий и с двух сервисов - http и ftp. Как в этом случае их можно различать по уровням? Ведь те, кто запросил тот или иной файл всегда разные.
Можно ли какими-нибудь средствами iproute2 вычислять общую нагруженность полосы, если известна номинальная ширина?


"tc cbq"
Отправлено John , 03-Апр-10 09:56 
>[оверквотинг удален]
>>>тот или иной внутренний класс. Смотрите tc filter.
>>
>>Даже, немного не так: в Вашем случае необходимы фильтры только к самой
>>дисциплине.
>
>Трафик всегда исходящий и с двух сервисов - http и ftp. Как
>в этом случае их можно различать по уровням? Ведь те, кто
>запросил тот или иной файл всегда разные.
>Можно ли какими-нибудь средствами iproute2 вычислять общую нагруженность полосы, если известна номинальная
>ширина?

Прочтите это:
http://gazette.linux.ru.net/rus/articles/lartc/c1452.html

Если что-то будет непонятно, прочтите этот документ с самого начала - там расписано практически все.

Пример фильтра отбора по порту источника
tc filter add dev $IF protocol ip parent 1: prio 1 u32 match ip sport 80 0xffff flowid 1:113