Jump to content

Recommended Posts

Posted

Заметил весьма странное поведение шейпера на PPTP сервере (проявляется нерегулярно): периодически у некоторых пользователей появляется либо удвоенная, либо вообще неограниченная (последнее - не застал вживую) скорость. Причем - периодичность случайная.

Вот в один из моментов сделал tc -d class show:

class htb 1:1 root rate 256000bit ceil 256000bit burst 512Kb cburst 1632b
Sent 364162938 bytes 451587 pkt (dropped 0, overlimits 0 requeues 0)
rate 459320bit 59pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -59999999 ctokens: -59999999

class htb 1:10 parent 1:1 leaf 10: prio 1 rate 256000bit ceil 256000bit burst 512Kb cburst 1632b
Sent 68378042 bytes 50855 pkt (dropped 0, overlimits 0 requeues 0)
rate 203456bit 18pps backlog 0b 0p requeues 0
lended: 50855 borrowed: 0 giants: 0
tokens: 16340250 ctokens: 7250

class htb 1:20 parent 1:1 leaf 20: prio 2 rate 256000bit ceil 256000bit burst 512Kb cburst 1632b
Sent 296048886 bytes 400799 pkt (dropped 2589, overlimits 0 requeues 0)
rate 256336bit 41pps backlog 0b 67p requeues 0
lended: 400732 borrowed: 0 giants: 0
tokens: 16245600 ctokens: -87400

Как видно, родительский класс отказывается резать скорость. Вопрос - почему?

 

Вот кусок if-up.local, отвечающий за установку шейпера:

UBURST="burst 512k"
..............
     /sbin/tc qdisc add dev $1 root handle 1: htb default 20 r2q 100
     /sbin/tc class add dev $1 parent 1: classid 1:1 htb rate ${UPSPEED}kbit $UBURST quantum 1514
     /sbin/tc class add dev $1 parent 1:1 classid 1:10 htb rate ${UPSPEED}kbit $UBURST prio 1 quantum 1514
     /sbin/tc class add dev $1 parent 1:1 classid 1:20 htb rate ${UPSPEED}kbit $UBURST prio 2 quantum 1514
     /sbin/tc qdisc add dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 1514
     /sbin/tc qdisc add dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 1514
     /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
     /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10

Наблюдается на CentOS 5.1 и Fedora 8 (2.6.18 и 2.6.23 ядра соответственно). Ядра - из репозитория, источник клока для шейперов - gettimeofday.

Кто-то сталкивался с таким?

Posted

да постоянно на чистом линуксе подручными средставми когда делался шейпинг - были проблемы.

решили установкой микротика.

Posted

Неохота плодить разнотипные оси по серверам, хотелось бы максимальной совместимости... Да и к "особенностям работы" конкретной оси привыкать прийдется...

Posted

А что по вашему должен резать корневой класс?

Сумма rate дочерних классов не должна превышать rate корневого. Если вы хотите чтоб общая скорость дочерних была не выше rate корневого.

Posted

Очевидно в LARTC по этому поводу ошиблись...

Попробую уполовинить rate и добавить ceil=лимиту скорости, посмотрю на поведение...

 

Posted

а может знает кто как сделать в tc filter такую вот вещь:

 

filter parent 1: protocol ip pref 5 u32

filter parent 1: protocol ip pref 5 u32 fh 801: ht divisor 1

 

чтобы жестко задать руками вот это вот pref и fh, скажем pref 1 fh 800:, pref 2 fh 801: и т.д. ибо при удалении правила из фильтра нужно задавать полностью все правило, включая fh, если просто добавлять tc filter правила, то fh будет каждый раз разный, в зависимости от того с каким pref первое правило пришло

Posted

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

 

tc filter add parent 1: protocol ip pref 1 dev $DEV u32

....

tc filter add parent 1: protocol ip pref 5 dev $DEV u32

 

тогда tc само проставляет fh по порядку, но что то как то это неаккуратненько, контроля нет

Posted

ну короче понятно, все хэндлы всё равно будут >800, пример:

 

tc filter add parent 1: protocol ip prio 1 dev $DEV u32 ht 1: divisor 1

 

добавит нечто типа

 

filter parent 1: protocol ip pref 1 u32

filter parent 1: protocol ip pref 1 u32 fh 801: ht divisor 1

filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1

 

то есть корневой хэндл 800:: будет всегда, его tc добавляет автоматом, а указанный ht 1: будет 801: так что наверно просто оставлю то что сделал раньше

Posted

Неправда

Посмотрите пример у меня в wiki

http://www.nuclearcat.com/mediawiki/index....U32_tips_tricks

 

Вывод от него выглядит где-то так (кусок)

ilter parent 1: protocol ip pref 9 u32 fh 801: ht divisor 1

filter parent 1: protocol ip pref 10 u32

filter parent 1: protocol ip pref 10 u32 fh 1: ht divisor 1

filter parent 1: protocol ip pref 10 u32 fh 1::800 order 2048 key ht 1 bkt 0 flowid 1:20 (rule hit 0 success 0)

match d997e01d/ffffffff at 12 (success 0 )

filter parent 1: protocol ip pref 10 u32 fh 1::801 order 2049 key ht 1 bkt 0 flowid 1:20 (rule hit 0 success 0)

match 00010000/00ff0000 at 8 (success 0 )

filter parent 1: protocol ip pref 10 u32 fh 1::802 order 2050 key ht 1 bkt 0 flowid 1:20 (rule hit 0 success 0)

match 00160000/00ff0000 at 20 (success 0 )

filter parent 1: protocol ip pref 10 u32 fh 1::803 order 2051 key ht 1 bkt 0 flowid 1:20 (rule hit 0 success 0)

match 00000016/000000ff at 20 (success 0 )

filter parent 1: protocol ip pref 10 u32 fh 1::804 order 2052 key ht 1 bkt 0 flowid 1:20 (rule hit 0 success 0)

 

бла бла бла

 

ilter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1

filter parent 1: protocol ip pref 100 u32

filter parent 1: protocol ip pref 100 u32 fh 802: ht divisor 1

filter parent 1: protocol ip pref 999 u32

filter parent 1: protocol ip pref 999 u32 fh 803: ht divisor 1

filter parent 1: protocol ip pref 999 u32 fh 803::800 order 2048 key ht 803 bkt 0 flowid 1:3 (rule hit 2030354013 success 2030354013)

match 00000000/00000000 at 16 (success 2030354013 )

filter parent 1: protocol arp pref 1000 u32

filter parent 1: protocol arp pref 1000 u32 fh 804: ht divisor 1

filter parent 1: protocol arp pref 1000 u32 fh 804::800 order 2048 key ht 804 bkt 0 flowid 1:3 (rule hit 44321 success 44321)

match 00000000/00000000 at 0 (success 44321 )

 

Posted

хм... странно... у меня не давал такие хэндлы делать... попробую еще поэксперементировать

 

вот кстате вопросец по вашему примеру - имеет ли смысл для дефолта делать tc filter, если при этом в tc class ... default указано?

Posted

Смысл есть

У меня были непонятные глюки(пропадание траффика), если не делать "закрывающий" фильтр.

А HFSC так вообще кажется остановит весь траффик который не классифицирован (там еще по хитрому надо ARP добавить)

Posted

хм... у меня сейчас всё на hfsс, хоть и arp нет, но по match ip всё уже год четко работает, кстати hfsc довольно точно канал режет

 

короче распилил фильтры по пятку хэш-таблиц в соответствии с классами, думаю оставить так, ибо трава в u32 все таки забористая :)

Posted

короче провел эксперимент, скрипт:

# Расшариваемый поток
tc class add dev ${DEV} parent 1: classid 1:1 hfsc rt rate ${ROOTRATE}kbit ls rate ${ROOTRATE}kbit ul rate ${ROOTRATE}kbit
tc filter add dev $DEV protocol ip prio 1 parent 1: handle 1: u32 divisor 1

# Direct Traffic
tc class add dev ${DEV} parent 1:1 classid 1:2 hfsc sc m1 0 d 1s m2 $[65*$ROOTRATE/100]kbit ul rate ${ROOTRATE}kbit
tc qdisc add dev ${DEV} parent 1:2 handle 2: sfq perturb 10
tc filter add dev $DEV protocol ip prio 2 parent 1: handle 2: u32 divisor 1

# Unlimits root class
tc class add dev ${DEV} parent 1:1 classid 1:3 hfsc sc m1 0 d 1s m2 $[35*$ROOTRATE/100]kbit ul rate ${ROOTRATE}kbit
tc filter add dev $DEV protocol ip prio 3 parent 1: handle 3: u32 divisor 1

# Unlimits normal class
tc class add dev ${DEV} parent 1:3 classid 1:4 hfsc sc m1 0 d 1s m2 $[25*$ROOTRATE/100]kbit ul rate ${ROOTRATE}kbit
tc filter add dev $DEV protocol ip prio 4 parent 1: handle 4: u32 divisor 1

# Unlimits restrict class
tc class add dev ${DEV} parent 1:3 classid 1:5 hfsc sc m1 0 d 1s m2 $[10*$ROOTRATE/100]kbit ul rate ${ROOTRATE}kbit
tc filter add dev $DEV protocol ip prio 5 parent 1: handle 5: u32 divisor 1

в итоге на выходе получается следующая петрушка:

root@office2:~# tc -s filter show dev eth0
filter parent 1: protocol ip pref 1 u32 
filter parent 1: protocol ip pref 1 u32 fh 1: ht divisor 1 
filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 2 u32 
filter parent 1: protocol ip pref 2 u32 fh 2: ht divisor 1 
filter parent 1: protocol ip pref 2 u32 fh 801: ht divisor 1 
filter parent 1: protocol ip pref 3 u32 
filter parent 1: protocol ip pref 3 u32 fh 3: ht divisor 1 
filter parent 1: protocol ip pref 3 u32 fh 802: ht divisor 1 
filter parent 1: protocol ip pref 4 u32 
filter parent 1: protocol ip pref 4 u32 fh 4: ht divisor 1 
filter parent 1: protocol ip pref 4 u32 fh 803: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 5: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 804: ht divisor 1

вот и фиг знает как это понимать :)

Posted
короче провел эксперимент, скрипт:

...

вот и фиг знает как это понимать :)

В моем скрипте стояла задача сделать цепочку, чтоб фильтровать сначала по маку, а потом несколько "ветвей" где фильтруем контент идущий на этот мак

 

Я просто привел это как пример, что можно контролировать различные параметры.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.