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

Исходное сообщение
"Равномерное распределение канала"

Отправлено TrueHead , 22-Июн-09 14:47 
Возникла необходимость равномерно распределять канал на пользователей, а точнее на IP адреса.
К примеру есть канал 2 МБита и нужно динамически делить его поровну между активными пользователями(IP адресами).
Пробовал использовать дисциплину SFQ шейпера tc, но столкнулся с тем, что SFQ оперирует сессиями и распределение канала зависит от количества сессий с одного IP. Например торрент качалки забирают большую часть канала, мешая другим нормально пользоваться Интернетом.
Нашёл описание дисциплины ESFQ, похоже решает эту задачу, но требует наложения патчей на ядро, но в системе стоит ядро гораздо новее, чем последний патч.

Какие ещё варианты решения данной задачи? На данный момент рассматриваются любые решения, но хотелось бы решение на линухе.


Содержание

Сообщения в этом обсуждении
"Равномерное распределение канала"
Отправлено www2 , 23-Июн-09 07:30 
Попробуйте дисциплину HTB.

"Равномерное распределение канала"
Отправлено TrueHead , 23-Июн-09 08:45 
>Попробуйте дисциплину HTB.

Я и так её использую:

/sbin/tc qdisc add dev eth1 root handle 1 htb default 0 r2q 20
/sbin/tc class add dev eth1 parent 1: classid 1:1 htb rate 1536Kbit ceil 1536Kbit burst 32k prio 0
/sbin/tc qdisc add dev eth1 parent 1:1 handle 1 sfq perturb 10
/sbin/tc class add dev eth1 parent 1:1 classid 1:11 htb rate 8Kbit ceil 1536Kbit burst 32k prio 0
/sbin/tc qdisc add dev eth1 parent 1:11 handle 1 sfq perturb 10
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 200 handle 1 fw classid 1:11

Пакеты маркируются правилом:
iptables -t mangle -A FORWARD -d 192.168.0.1 -j MARK --set-mark 1


"Равномерное распределение канала"
Отправлено Z0termaNN , 24-Июн-09 12:03 
>[оверквотинг удален]
>
>К примеру есть канал 2 МБита и нужно динамически делить его поровну
>между активными пользователями(IP адресами).
>Пробовал использовать дисциплину SFQ шейпера tc, но столкнулся с тем, что SFQ
>оперирует сессиями и распределение канала зависит от количества сессий с одного
>IP. Например торрент качалки забирают большую часть канала, мешая другим нормально
>пользоваться Интернетом.
>Нашёл описание дисциплины ESFQ, похоже решает эту задачу, но требует наложения патчей
>на ядро, но в системе стоит ядро гораздо новее, чем последний
>патч.

ну вообще-то патч на ядро необязательно накладывать, можно просто собрать esfq как модуль,
например используя dkms (конечно tc все равно придется патчить).
не помню, начиная с какого ядра (кажется c 2.6.25 ) для этих целей возможно использовать
flow classifier.
по умолчанию потоки в sfq разбиваются так:
tc filter add .... flow hash \
         keys src,dst,proto,proto-src,proto-dst divisor 1024

нужно переделать на :

tc filter add dev eth0 protocol ip pref 1 parent x: handle y \
         flow hash keys dst divisor 1024

есть или нет в ядре flow classifier  - можно поглядеть в исходниках в районе pkt_cls.h или
посмотреть параметр NET_CLS_FLOW в конфигурации ядра.

>Какие ещё варианты решения данной задачи? На данный момент рассматриваются любые решения,
>но хотелось бы решение на линухе.