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

TC: какую дисциплину выбрать?! наименее прожорливую

есть писюковый роутер

на нем через ТС настроен шейпинг...

встал вопрос, какую дисциплину использовать, что минимизировать нагрузку на процессор

 

нарезка на приблизительно полтысячи пользователей, для каждого создается такой вот набор правил:

 

tc class replace dev eth1 parent $tc_parent classid 1:$code_user htb rate 1kbit ceil ${ceil}kbit quantum 2000

tc qdisc add dev eth1 parent 1:$code_user handle $code_user: sfq perturb 10

tc filter replace dev eth1 protocol ip parent 1:0 prio 5 handle $code_user fw classid 1:$code_user

...

tc class replace dev eth0 parent $tc_parent classid 1:$code_user htb rate 1kbit ceil ${ceil}kbit quantum 2000

tc qdisc add dev eth0 parent 1:$code_user handle $code_user: sfq perturb 10

tc filter replace dev eth0 protocol ip parent 1:0 prio 5 handle $code_user fw classid 1:$code_user

...

 

 

Share this post


Link to post
Share on other sites

хм...

 

я читал, что айпитейблз "есть" мало процессора...

 

ю32 - говорят еще больше есть

 

как тогда мне быть?

Share this post


Link to post
Share on other sites
хм...

 

я читал, что айпитейблз "есть" мало процессора...

 

ю32 - говорят еще больше есть

 

как тогда мне быть?

FreeBSD+Radius+mpd5+ng_car спасут Отца Русской демократии. ;)

У меня данная связка держит полторы сотни он-лайн зверей с персональным шейпом (именно шейп, не рейт-лимит) на каждом.

Говорят, что без напряга потащит 500 и более зверей..

На пиюковом рутере только нарезаю полосы для тарифных планов. Ну Вы наверное читали тут.

Share this post


Link to post
Share on other sites

Вот только, что (на той неделе) разбилался с таким случаем.

iptables - метит пакеты. Далее соовт. фильтр и 1 класс HTB.

1500 клиентов. Тормоза...

Узким местом оказалась цепочка из 3000 правил iptables -t mangle

Порезал на подсети. Теперь все летает.

Xeon 2Г

Share this post


Link to post
Share on other sites

а подробней можно?!

в теории как это будет выглядеть

Share this post


Link to post
Share on other sites

Было:

/sbin/iptables -t mangle -A FORWARD -s $IP -j MARK --set-mark $SMARK

/sbin/iptables -t mangle -A FORWARD -d $IP -j MARK --set-mark $DMARK

1500 клиентов и соответственно 3000 строк.

Результат - поток в 100Мб/s укладывал XEON 2Г с "крутыми" интеловскими сетевухами НАГЛУХО. Временами такой бридж не мог пропускать более 50-60 Мб при задержках 2-3 секунды на отдельных пакетах. Что конечно неприемлимо.

 

Решение:

 

sn_list="10.129.0.0 10.100.0.0 10.100.1.0 10.0.0.0" ..... и так много

 

/sbin/iptables -t mangle -F FORWARD

for i in $sn_list

do

/sbin/iptables -t mangle -A FORWARD -s $i/24 -j SUBNET-$i

/sbin/iptables -t mangle -A FORWARD -d $i/24 -j SUBNET-$i

done

/sbin/iptables -t mangle -A FORWARD -j SUBNET-OTHER

 

insert_rule() {

sn=`echo $1 | sed -r "s/\.[0-9]+$/.0/"`

fl=0

for i in $sn_list

do

if [ $i = $sn ]

then

/sbin/iptables -t mangle -A SUBNET-$sn -d 0/0 -s $1 -j MARK --set-mark $2

/sbin/iptables -t mangle -A SUBNET-$sn -s 0/0 -d $1 -j MARK --set-mark $3

fl=1

fi

done

if [ $fl = 0 ]

then

 

/sbin/iptables -t mangle -A SUBNET-OTHER -d 0/0 -s $1 -j MARK --set-mark $2

/sbin/iptables -t mangle -A SUBNET-OTHER -s 0/0 -d $1 -j MARK --set-mark $3

fi

}

 

Возможно код скрипта не оптимален, но суть отражает. Цепочка SUBNET-OTHER создана для подсетей, которые возможно забыл внести в список sn_list

Разбиение на подсети /24 позволило сильно не заботится о дальнейшем росте числа абонентов.

Теперь загрузка при потоке 100Мб:

# uptime

14:10:33 up 12 days, 19:04, 1 user, load average: 0.00, 0.01, 0.00

 

Share this post


Link to post
Share on other sites

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

 

тогда вопрос, количество марков не изменилось, они лишь разнесеные по разным цепочкам...

почему от этого становицо легче процу?

Share this post


Link to post
Share on other sites

Потому, что при линейной цепочке пакет проходил 3000 правил. А при "древовидной" схеме - максимум ~500

 

Share this post


Link to post
Share on other sites

ну, скажем, я был не уверен в столь интеллектуальности iptables...

если он знает в какой цепочке искать - эт хорошо

 

ок, благодарю, бум думать, как бы поправильней сделать цепочек...

Share this post


Link to post
Share on other sites

вопрос по сути сводится к переходу от линейного поиска к индексированному. стоит взглянуть на ipset

 

Share this post


Link to post
Share on other sites

ipset для маркировки не применим. Я уже обьяснял в другом топике.

>если он знает в какой цепочке искать...

 

iptables сам ничего незнает :-) Куда Вы его направите, туда он и пойдет.

Edited by Ivan Rostovikov

Share this post


Link to post
Share on other sites

насчет 150 клиентов на фре - на accel-pptp c tc с индивидуальными скоростями из радиуса до 500 сессий от 128 до 2048 кбит. проц celeron 2.8

 

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