LINUX.ORG.RU
ФорумAdmin

Сколько очередей для счастья нужно?


0

1

Добрейшего вечера. Вот к этому: Узкий канал...

Разрулил всё пока приоритизатором на выходе маршрутизатора (ДО узкого места). Каналы к конечным юзверям, после узкой трубы, прижал умным свичом. У порядочных людей сип не булькает, хттп грузится в момент, итд. А вот качки-торрентоманы (сиречь начальство) гасят сип в СВОЕЙ вилане в зародыше.

Это что ж получается? Помимо 5 очередей на головном рутере, мне заводить еще по 5 очередей на мосте на КАЖДУЮ вилану? 50 на десять вилан, 500 на сто?

А как вы ветвите шейперы у себя?


шейпер на чем сделан? Linux? какая дисциплина диспетчеризации? htb? cbq? Может стоит попробовать hfsc, если надо отшейпить интерактивный трафик?

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

Да, линух. Классы htb, очереди sfq, раскрашиваем -m opendpi. Получается 5 очередей на интерфейс головного рутера, глядящий в узкий канал. После канала стоит просто умный свич, который придавливает полосу до максимально указанной для конкретной виланы. В прошлом посте я выдвигал идею поставить до него еще и линуховый бридж, который бы не только шейпил виланы «оптом», но и приоритизировал трафик на входе в каждую.

Вот думаю, стоит овчинка выделки, или баловство это всё.

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

баловство однозначно. Даже при такой топологии на роутере можно зашейпить ИМХО

Pinkbyte ★★★★★
()
Ответ на: комментарий от billy

и да, попробуй для голосового трафика hfsc. Люди, его пользовавшие, чувствовали профит на сильно загруженных каналах...

Pinkbyte ★★★★★
()

а чего бы начальство в отдельный влан не засунуть?

xtraeft ★★☆☆
()
Ответ на: комментарий от Pinkbyte

Pinkbyte, спасибо. Да, можно, конечно, строить классы не по интерфейсу, а по айпи, но не костыль ли это? (А, да - забыл сказать, свич-то L3, на нем терминируются все виланы филиала. Не на головном рутере.) hsfc попробую, благодарю за подсказку.

xtraeft, а оно в отдельном и сидит, и соседям уже не так мешает. А вот самому себе пока что - вполне. :D

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

>можно, конечно, строить классы не по интерфейсу, а по айпи, но не костыль ли это?

не, не костыль. можно классы фигачить как по одиночному ip, так и по подсетям(капитан очевидность!) - я так и делаю собственно...

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

Извини за тупой вопрос, а КАК ты это делаешь? Сейчас интерфейс у меня ветвится на пять классов, а как к этим пяти классам подцепить еще и классификатор по айпи? Что-то я засел.

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

ну так классы на то и существуют, что можно в них вкладывать другие классы. Вкладываешь в них что нужно, ну и фильтр на вложенный класс прописываешь... Короче, выложи куда-нибудь свой конфиг(желательно с каментами «кто есть кто»), я покурю...

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

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

#!/bin/bash 

IPTABLES=«/sbin/iptables»
TC=«/sbin/tc»
IP=«/sbin/ip»

DEV=vlan502
# to clients 
RATEUP=10240

# 
#  Поехали! 
# 

if [ «$1» = «status» ]
then
        echo "[qdisc]"
        $TC -s qdisc show dev $DEV
        echo "[class]"
        $TC -s class show dev $DEV
        echo "[filter]"
        $TC -s filter show dev $DEV
        echo "[iptables]"
        $IPTABLES -t mangle -L MYSHAPER-OUT -v -x 2> /dev/null
        $IPTABLES -t mangle -L MYSHAPER-IN -v -x 2> /dev/null
        exit
fi

# Сбросить все 
$TC qdisc del dev $DEV root    2> /dev/null > /dev/null
$IPTABLES -t mangle -D POSTROUTING -o $DEV -j MYSHAPER-OUT 2> /dev/null > /dev/null
$IPTABLES -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
$IPTABLES -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null

if [ «$1» = «stop» ]
then
        echo «Shaping removed on $DEV.»
        exit
fi

########################################################### 
# 
# Ограничение исходящего потока (ограничивает пропускную способность до RATEUP) 


# добавить корневую дисциплину HTB 
$TC qdisc add dev $DEV root handle 1: htb default 26

# добавить общее ограничение скорости по классу 
$TC class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit

# добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ «честную часть» полосы пропускания. 
#                       Этим способом мы избегаем возможности «голодания» классов. Каждому классу 
#                       разрешается занимать всю полосу пропускания, если другие классы не 
#                       используются. 
$TC class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 0
$TC class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 1
$TC class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 2
$TC class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 3
$TC class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 4
$TC class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 5
$TC class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 6

# подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса. 

$TC qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
$TC qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
$TC qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
$TC qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
$TC qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
$TC qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
$TC qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10

# направляем трафик в классы по fwmark - мы направляем трафик в классы, в соответствии со значением 
#                                        fwmark установленном на пакете (мы будем устанавливать это 
#                                        значение утилитой $IPTABLES позже). Обратите внимание, что 
#                                        выше мы установили класс по умолчанию1:26, так что 
#                                        немаркированные пакеты (или с неизвестными значениями fwmark 
#                                        будут направлены в низкоприоритетный класс. 
$TC filter add dev $DEV parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
$TC filter add dev $DEV parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21
$TC filter add dev $DEV parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22
$TC filter add dev $DEV parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23
$TC filter add dev $DEV parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24
$TC filter add dev $DEV parent 1:0 prio 0 protocol ip handle 25 fw flowid 1:25
$TC filter add dev $DEV parent 1:0 prio 0 protocol ip handle 26 fw flowid 1:26

# добавить цепочку MYSHAPER-OUT в таблицу mangle - сейчас мы настроим таблицу,которую будем 
#                                                  использовать для фильтрациии установки fwmark 
$IPTABLES -t mangle -N MYSHAPER-OUT

# маркируем пакеты с помощью fwmark - устанавливаем значения 20-26 в зависимости от 
#                                     нужного класса. Высший приоритет - 20. 

$IPTABLES -t mangle -A MYSHAPER-OUT -m opendpi --bittorrent -j MARK --set-mark 26
$IPTABLES -t mangle -A MYSHAPER-OUT -m opendpi --edonkey -j MARK --set-mark 26
$IPTABLES -t mangle -A MYSHAPER-OUT -m opendpi --gnutella -j MARK --set-mark 26
$IPTABLES -t mangle -A MYSHAPER-OUT -m opendpi --fasttrack -j MARK --set-mark 26
# торренты - самый низкий приоритет, 

$IPTABLES -t mangle -A MYSHAPER-OUT -m opendpi --ftp -j MARK --set-mark 25
# Низкоприоритетный трафик 

$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --dport 5190 -j MARK --set-mark 23
# aol-icq-etc 

$IPTABLES -t mangle -A MYSHAPER-OUT -m opendpi --ssh -j MARK --set-mark 22
# secure shell 

$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m length --length :64 -j MARK --set-mark 21
# маленькие пакеты 

$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --sport 80 -j MARK --set-mark 21
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --sport 443 -j MARK --set-mark 21
# хттп, средний приоритет 

$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --sport 53 -j MARK --set-mark 21
# распознавание имен DNS (маленькие пакеты) 

$IPTABLES -t mangle -A MYSHAPER-OUT -p icmp -j MARK --set-mark 20
# ICMP (ping) - высокий приоритет, 

$IPTABLES -t mangle -A MYSHAPER-OUT -m opendpi --sip -j MARK --set-mark 20
$IPTABLES -t mangle -A MYSHAPER-OUT -m opendpi --rtp -j MARK --set-mark 20
# SIP! 

# скорее всего ACK-пакеты 
#$IPTABLES -t mangle -A MYSHAPER-OUT -m mark --mark 0 -j MARK --set-mark 26 

$IPTABLES -t mangle -I POSTROUTING -o $DEV -j MYSHAPER-OUT

echo «Outbound shaping added to $DEV.  Rate: ${RATEUP}Kbit/sec.»
billy
() автор топика
Ответ на: комментарий от Pinkbyte

Не прокурилось? :) Вот я тоже пока додумался до очереди на СЛЕДУЮЩЕМ за vlan502 интерфейсе...

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